Fix ranged weapon fire rates being stuttery.

Now we just send a fire message to the server every frame. Absolutely terrible!
This commit is contained in:
Pieter-Jan Briers
2020-01-09 00:27:23 +01:00
parent e31078d8ef
commit 33782ed7f3
4 changed files with 6 additions and 22 deletions

View File

@@ -1,8 +1,5 @@
using System;
using Content.Shared.GameObjects.Components.Weapons.Ranged; using Content.Shared.GameObjects.Components.Weapons.Ranged;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.Timing;
using Robust.Shared.IoC;
using Robust.Shared.Map; using Robust.Shared.Map;
namespace Content.Client.GameObjects.Components.Weapons.Ranged namespace Content.Client.GameObjects.Components.Weapons.Ranged
@@ -10,20 +7,9 @@ namespace Content.Client.GameObjects.Components.Weapons.Ranged
[RegisterComponent] [RegisterComponent]
public sealed class ClientRangedWeaponComponent : SharedRangedWeaponComponent public sealed class ClientRangedWeaponComponent : SharedRangedWeaponComponent
{ {
private TimeSpan _lastFireTime; public void SyncFirePos(GridCoordinates worldPos)
private int _tick;
public void TryFire(GridCoordinates worldPos)
{ {
var curTime = IoCManager.Resolve<IGameTiming>().CurTime; SendNetworkMessage(new SyncFirePosMessage(worldPos));
var span = curTime - _lastFireTime;
if (span.TotalSeconds < 1 / FireRate)
{
return;
}
_lastFireTime = curTime;
SendNetworkMessage(new FireMessage(worldPos, _tick++));
} }
} }
} }

View File

@@ -68,7 +68,7 @@ namespace Content.Client.GameObjects.EntitySystems
if (weapon.Automatic || canFireSemi) if (weapon.Automatic || canFireSemi)
{ {
weapon.TryFire(worldPos); weapon.SyncFirePos(worldPos);
} }
} }
} }

View File

@@ -46,7 +46,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged
switch (message) switch (message)
{ {
case FireMessage msg: case SyncFirePosMessage msg:
var playerMgr = IoCManager.Resolve<IPlayerManager>(); var playerMgr = IoCManager.Resolve<IPlayerManager>();
var session = playerMgr.GetSessionByChannel(netChannel); var session = playerMgr.GetSessionByChannel(netChannel);
var user = session.AttachedEntity; var user = session.AttachedEntity;

View File

@@ -31,15 +31,13 @@ namespace Content.Shared.GameObjects.Components.Weapons.Ranged
} }
[Serializable, NetSerializable] [Serializable, NetSerializable]
protected class FireMessage : ComponentMessage protected class SyncFirePosMessage : ComponentMessage
{ {
public readonly GridCoordinates Target; public readonly GridCoordinates Target;
public readonly int Tick;
public FireMessage(GridCoordinates target, int tick) public SyncFirePosMessage(GridCoordinates target)
{ {
Target = target; Target = target;
Tick = tick;
} }
} }
} }