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