Only show melee windup for yourself (#11626)
This commit is contained in:
@@ -40,7 +40,7 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem
|
||||
{
|
||||
base.Initialize();
|
||||
InitializeEffect();
|
||||
_overlayManager.AddOverlay(new MeleeWindupOverlay(EntityManager, _timing, _protoManager, _cache));
|
||||
_overlayManager.AddOverlay(new MeleeWindupOverlay(EntityManager, _timing, _player, _protoManager, _cache));
|
||||
SubscribeNetworkEvent<DamageEffectEvent>(OnDamageEffect);
|
||||
SubscribeNetworkEvent<MeleeLungeEvent>(OnMeleeLunge);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using Content.Client.Resources;
|
||||
using Content.Shared.Weapons.Melee;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Client.ResourceManagement;
|
||||
using Robust.Shared.Enums;
|
||||
using Robust.Shared.Prototypes;
|
||||
@@ -14,6 +15,8 @@ public sealed class MeleeWindupOverlay : Overlay
|
||||
{
|
||||
private readonly IEntityManager _entManager;
|
||||
private readonly IGameTiming _timing;
|
||||
private readonly IPlayerManager _player;
|
||||
private readonly SharedMeleeWeaponSystem _melee;
|
||||
private readonly SharedTransformSystem _transform;
|
||||
|
||||
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
|
||||
@@ -21,10 +24,12 @@ public sealed class MeleeWindupOverlay : Overlay
|
||||
private readonly Texture _texture;
|
||||
private readonly ShaderInstance _shader;
|
||||
|
||||
public MeleeWindupOverlay(IEntityManager entManager, IGameTiming timing, IPrototypeManager protoManager, IResourceCache cache)
|
||||
public MeleeWindupOverlay(IEntityManager entManager, IGameTiming timing, IPlayerManager playerManager, IPrototypeManager protoManager, IResourceCache cache)
|
||||
{
|
||||
_entManager = entManager;
|
||||
_timing = timing;
|
||||
_player = playerManager;
|
||||
_melee = _entManager.EntitySysManager.GetEntitySystem<SharedMeleeWeaponSystem>();
|
||||
_transform = _entManager.EntitySysManager.GetEntitySystem<SharedTransformSystem>();
|
||||
_texture = cache.GetTexture("/Textures/Interface/Misc/progress_bar.rsi/icon.png");
|
||||
_shader = protoManager.Index<ShaderPrototype>("unshaded").Instance();
|
||||
@@ -32,12 +37,23 @@ public sealed class MeleeWindupOverlay : Overlay
|
||||
|
||||
protected override void Draw(in OverlayDrawArgs args)
|
||||
{
|
||||
var owner = _player.LocalPlayer?.ControlledEntity;
|
||||
|
||||
if (!_entManager.TryGetComponent<TransformComponent>(owner, out var ownerXform) ||
|
||||
ownerXform.MapID != args.MapId)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var comp = _melee.GetWeapon(owner.Value);
|
||||
|
||||
if (comp == null)
|
||||
return;
|
||||
|
||||
var handle = args.WorldHandle;
|
||||
var rotation = args.Viewport.Eye?.Rotation ?? Angle.Zero;
|
||||
var spriteQuery = _entManager.GetEntityQuery<SpriteComponent>();
|
||||
var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
|
||||
var tickTime = (float) _timing.TickPeriod.TotalSeconds;
|
||||
var tickFraction = _timing.TickFraction / (float) ushort.MaxValue * tickTime;
|
||||
|
||||
// If you use the display UI scale then need to set max(1f, displayscale) because 0 is valid.
|
||||
const float scale = 1f;
|
||||
@@ -46,18 +62,16 @@ public sealed class MeleeWindupOverlay : Overlay
|
||||
handle.UseShader(_shader);
|
||||
var currentTime = _timing.CurTime;
|
||||
|
||||
foreach (var comp in _entManager.EntityQuery<MeleeWeaponComponent>(true))
|
||||
{
|
||||
if (comp.WindUpStart == null ||
|
||||
comp.Attacking)
|
||||
{
|
||||
continue;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!xformQuery.TryGetComponent(comp.Owner, out var xform) ||
|
||||
xform.MapID != args.MapId)
|
||||
{
|
||||
continue;
|
||||
return;
|
||||
}
|
||||
|
||||
var worldPosition = _transform.GetWorldPosition(xform);
|
||||
@@ -127,7 +141,6 @@ public sealed class MeleeWindupOverlay : Overlay
|
||||
|
||||
box = box.Translated(position);
|
||||
handle.DrawRect(box, Color.White);
|
||||
}
|
||||
|
||||
handle.UseShader(null);
|
||||
handle.SetTransform(Matrix3.Identity);
|
||||
|
||||
Reference in New Issue
Block a user