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 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++));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ namespace Content.Client.GameObjects.EntitySystems
|
|||||||
|
|
||||||
if (weapon.Automatic || canFireSemi)
|
if (weapon.Automatic || canFireSemi)
|
||||||
{
|
{
|
||||||
weapon.TryFire(worldPos);
|
weapon.SyncFirePos(worldPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user