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:
@@ -1,8 +1,5 @@
|
||||
using System;
|
||||
using Content.Shared.GameObjects.Components.Weapons.Ranged;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Interfaces.Timing;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Map;
|
||||
|
||||
namespace Content.Client.GameObjects.Components.Weapons.Ranged
|
||||
@@ -10,20 +7,9 @@ namespace Content.Client.GameObjects.Components.Weapons.Ranged
|
||||
[RegisterComponent]
|
||||
public sealed class ClientRangedWeaponComponent : SharedRangedWeaponComponent
|
||||
{
|
||||
private TimeSpan _lastFireTime;
|
||||
private int _tick;
|
||||
|
||||
public void TryFire(GridCoordinates worldPos)
|
||||
public void SyncFirePos(GridCoordinates worldPos)
|
||||
{
|
||||
var curTime = IoCManager.Resolve<IGameTiming>().CurTime;
|
||||
var span = curTime - _lastFireTime;
|
||||
if (span.TotalSeconds < 1 / FireRate)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_lastFireTime = curTime;
|
||||
SendNetworkMessage(new FireMessage(worldPos, _tick++));
|
||||
SendNetworkMessage(new SyncFirePosMessage(worldPos));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace Content.Client.GameObjects.EntitySystems
|
||||
|
||||
if (weapon.Automatic || canFireSemi)
|
||||
{
|
||||
weapon.TryFire(worldPos);
|
||||
weapon.SyncFirePos(worldPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case FireMessage msg:
|
||||
case SyncFirePosMessage msg:
|
||||
var playerMgr = IoCManager.Resolve<IPlayerManager>();
|
||||
var session = playerMgr.GetSessionByChannel(netChannel);
|
||||
var user = session.AttachedEntity;
|
||||
|
||||
@@ -31,15 +31,13 @@ namespace Content.Shared.GameObjects.Components.Weapons.Ranged
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
protected class FireMessage : ComponentMessage
|
||||
protected class SyncFirePosMessage : ComponentMessage
|
||||
{
|
||||
public readonly GridCoordinates Target;
|
||||
public readonly int Tick;
|
||||
|
||||
public FireMessage(GridCoordinates target, int tick)
|
||||
public SyncFirePosMessage(GridCoordinates target)
|
||||
{
|
||||
Target = target;
|
||||
Tick = tick;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user