Click attack arcs no longer follow the player. Fixes #2079.

This commit is contained in:
Víctor Aguilera Puerto
2020-10-12 13:17:38 +02:00
parent 77fa796a3b
commit b38b152534
5 changed files with 10 additions and 7 deletions

View File

@@ -25,12 +25,13 @@ namespace Content.Client.GameObjects.Components.Weapons.Melee
_sprite = Owner.GetComponent<SpriteComponent>(); _sprite = Owner.GetComponent<SpriteComponent>();
} }
public void SetData(MeleeWeaponAnimationPrototype prototype, Angle baseAngle, IEntity attacker) public void SetData(MeleeWeaponAnimationPrototype prototype, Angle baseAngle, IEntity attacker, bool followAttacker = true)
{ {
_meleeWeaponAnimation = prototype; _meleeWeaponAnimation = prototype;
_sprite.AddLayer(new RSI.StateId(prototype.State)); _sprite.AddLayer(new RSI.StateId(prototype.State));
_baseAngle = baseAngle; _baseAngle = baseAngle;
Owner.Transform.AttachParent(attacker); if(followAttacker)
Owner.Transform.AttachParent(attacker);
} }
internal void Update(float frameTime) internal void Update(float frameTime)

View File

@@ -56,7 +56,7 @@ namespace Content.Client.GameObjects.EntitySystems
entity.Transform.LocalRotation = msg.Angle; entity.Transform.LocalRotation = msg.Angle;
var weaponArcAnimation = entity.GetComponent<MeleeWeaponArcAnimationComponent>(); var weaponArcAnimation = entity.GetComponent<MeleeWeaponArcAnimationComponent>();
weaponArcAnimation.SetData(weaponArc, msg.Angle, attacker); weaponArcAnimation.SetData(weaponArc, msg.Angle, attacker, msg.ArcFollowAttacker);
// Due to ISpriteComponent limitations, weapons that don't use an RSI won't have this effect. // Due to ISpriteComponent limitations, weapons that don't use an RSI won't have this effect.
if (EntityManager.TryGetEntity(msg.Source, out var source) && msg.TextureEffect && source.TryGetComponent(out ISpriteComponent sourceSprite) if (EntityManager.TryGetEntity(msg.Source, out var source) && msg.TextureEffect && source.TryGetComponent(out ISpriteComponent sourceSprite)

View File

@@ -173,7 +173,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee
if (ClickArc != null) if (ClickArc != null)
{ {
var sys = EntitySystem.Get<MeleeWeaponSystem>(); var sys = EntitySystem.Get<MeleeWeaponSystem>();
sys.SendAnimation(ClickArc, angle, eventArgs.User, Owner, targets, ClickAttackEffect); sys.SendAnimation(ClickArc, angle, eventArgs.User, Owner, targets, ClickAttackEffect, false);
} }
_lastAttackTime = curTime; _lastAttackTime = curTime;

View File

@@ -9,10 +9,10 @@ namespace Content.Server.GameObjects.EntitySystems
{ {
public sealed class MeleeWeaponSystem : EntitySystem public sealed class MeleeWeaponSystem : EntitySystem
{ {
public void SendAnimation(string arc, Angle angle, IEntity attacker, IEntity source, IEnumerable<IEntity> hits, bool textureEffect = false) public void SendAnimation(string arc, Angle angle, IEntity attacker, IEntity source, IEnumerable<IEntity> hits, bool textureEffect = false, bool arcFollowAttacker = true)
{ {
RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(arc, angle, attacker.Uid, source.Uid, RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(arc, angle, attacker.Uid, source.Uid,
hits.Select(e => e.Uid).ToList(), textureEffect)); hits.Select(e => e.Uid).ToList(), textureEffect, arcFollowAttacker));
} }
} }
} }

View File

@@ -11,7 +11,7 @@ namespace Content.Shared.GameObjects.EntitySystemMessages
[Serializable, NetSerializable] [Serializable, NetSerializable]
public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage
{ {
public PlayMeleeWeaponAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, EntityUid source, List<EntityUid> hits, bool textureEffect = false) public PlayMeleeWeaponAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, EntityUid source, List<EntityUid> hits, bool textureEffect = false, bool arcFollowAttacker = true)
{ {
ArcPrototype = arcPrototype; ArcPrototype = arcPrototype;
Angle = angle; Angle = angle;
@@ -19,6 +19,7 @@ namespace Content.Shared.GameObjects.EntitySystemMessages
Source = source; Source = source;
Hits = hits; Hits = hits;
TextureEffect = textureEffect; TextureEffect = textureEffect;
ArcFollowAttacker = arcFollowAttacker;
} }
public string ArcPrototype { get; } public string ArcPrototype { get; }
@@ -27,6 +28,7 @@ namespace Content.Shared.GameObjects.EntitySystemMessages
public EntityUid Source { get; } public EntityUid Source { get; }
public List<EntityUid> Hits { get; } public List<EntityUid> Hits { get; }
public bool TextureEffect { get; } public bool TextureEffect { get; }
public bool ArcFollowAttacker { get; }
} }
} }
} }