Better click attack effect
This commit is contained in:
@@ -21,8 +21,7 @@ namespace Content.Client.GameObjects.EntitySystems
|
|||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
SubscribeNetworkEvent<PlayMeleeWeaponArcAnimationMessage>(PlayWeaponArc);
|
SubscribeNetworkEvent<PlayMeleeWeaponAnimationMessage>(PlayWeaponArc);
|
||||||
SubscribeNetworkEvent<PlayMeleeWeaponAnimationMessage>(PlayWeapon);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void FrameUpdate(float frameTime)
|
public override void FrameUpdate(float frameTime)
|
||||||
@@ -35,7 +34,7 @@ namespace Content.Client.GameObjects.EntitySystems
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PlayWeaponArc(PlayMeleeWeaponArcAnimationMessage msg)
|
private void PlayWeaponArc(PlayMeleeWeaponAnimationMessage msg)
|
||||||
{
|
{
|
||||||
if (!_prototypeManager.TryIndex(msg.ArcPrototype, out MeleeWeaponAnimationPrototype weaponArc))
|
if (!_prototypeManager.TryIndex(msg.ArcPrototype, out MeleeWeaponAnimationPrototype weaponArc))
|
||||||
{
|
{
|
||||||
@@ -81,32 +80,5 @@ namespace Content.Client.GameObjects.EntitySystems
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PlayWeapon(PlayMeleeWeaponAnimationMessage msg)
|
|
||||||
{
|
|
||||||
var attacker = EntityManager.GetEntity(msg.Attacker);
|
|
||||||
|
|
||||||
var lunge = attacker.EnsureComponent<MeleeLungeComponent>();
|
|
||||||
lunge.SetData(msg.Angle);
|
|
||||||
|
|
||||||
if (!EntityManager.TryGetEntity(msg.Hit, out var hitEntity)
|
|
||||||
|| !hitEntity.TryGetComponent(out ISpriteComponent sprite))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var originalColor = sprite.Color;
|
|
||||||
var newColor = Color.Red * originalColor;
|
|
||||||
sprite.Color = newColor;
|
|
||||||
|
|
||||||
Timer.Spawn(100, () =>
|
|
||||||
{
|
|
||||||
// Only reset back to the original color if something else didn't change the color in the mean time.
|
|
||||||
if (sprite.Color == newColor)
|
|
||||||
{
|
|
||||||
sprite.Color = originalColor;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee
|
|||||||
public float ArcCooldownTime { get; private set; } = 1f;
|
public float ArcCooldownTime { get; private set; } = 1f;
|
||||||
public float CooldownTime { get; private set; } = 0.5f;
|
public float CooldownTime { get; private set; } = 0.5f;
|
||||||
|
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public string ClickArc { get; set; }
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
public string Arc { get; set; }
|
public string Arc { get; set; }
|
||||||
|
|
||||||
@@ -59,6 +62,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee
|
|||||||
serializer.DataField(this, x => x.Range, "range", 1);
|
serializer.DataField(this, x => x.Range, "range", 1);
|
||||||
serializer.DataField(this, x => x.ArcWidth, "arcwidth", 90);
|
serializer.DataField(this, x => x.ArcWidth, "arcwidth", 90);
|
||||||
serializer.DataField(this, x => x.Arc, "arc", "default");
|
serializer.DataField(this, x => x.Arc, "arc", "default");
|
||||||
|
serializer.DataField(this, x => x.ClickArc, "clickArc", "punch");
|
||||||
serializer.DataField(this, x => x._hitSound, "hitSound", "/Audio/Weapons/genhit1.ogg");
|
serializer.DataField(this, x => x._hitSound, "hitSound", "/Audio/Weapons/genhit1.ogg");
|
||||||
serializer.DataField(this, x => x._missSound, "hitSound", "/Audio/Weapons/punchmiss.ogg");
|
serializer.DataField(this, x => x._missSound, "hitSound", "/Audio/Weapons/punchmiss.ogg");
|
||||||
serializer.DataField(this, x => x.ArcCooldownTime, "arcCooldownTime", 1f);
|
serializer.DataField(this, x => x.ArcCooldownTime, "arcCooldownTime", 1f);
|
||||||
@@ -159,11 +163,16 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee
|
|||||||
damageComponent.ChangeDamage(DamageType, Damage, false, Owner);
|
damageComponent.ChangeDamage(DamageType, Damage, false, Owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!OnHitEntities(new[] {target}, eventArgs))
|
var targets = new[] {target};
|
||||||
|
|
||||||
|
if (!OnHitEntities(targets, eventArgs))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (ClickArc != null)
|
||||||
|
{
|
||||||
var sys = _entitySystemManager.GetEntitySystem<MeleeWeaponSystem>();
|
var sys = _entitySystemManager.GetEntitySystem<MeleeWeaponSystem>();
|
||||||
sys.SendAnimation(angle, eventArgs.User, target);
|
sys.SendAnimation(ClickArc, angle, eventArgs.User, targets);
|
||||||
|
}
|
||||||
|
|
||||||
_lastAttackTime = curTime;
|
_lastAttackTime = curTime;
|
||||||
_cooldownEnd = _lastAttackTime + TimeSpan.FromSeconds(CooldownTime);
|
_cooldownEnd = _lastAttackTime + TimeSpan.FromSeconds(CooldownTime);
|
||||||
|
|||||||
@@ -11,13 +11,8 @@ namespace Content.Server.GameObjects.EntitySystems
|
|||||||
{
|
{
|
||||||
public void SendAnimation(string arc, Angle angle, IEntity attacker, IEnumerable<IEntity> hits)
|
public void SendAnimation(string arc, Angle angle, IEntity attacker, IEnumerable<IEntity> hits)
|
||||||
{
|
{
|
||||||
RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponArcAnimationMessage(arc, angle, attacker.Uid,
|
RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(arc, angle, attacker.Uid,
|
||||||
hits.Select(e => e.Uid).ToList()));
|
hits.Select(e => e.Uid).ToList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendAnimation(Angle angle, IEntity attacker, IEntity hit)
|
|
||||||
{
|
|
||||||
RaiseNetworkEvent(new MeleeWeaponSystemMessages.PlayMeleeWeaponAnimationMessage(angle, attacker.Uid, hit.Uid));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ namespace Content.Shared.GameObjects.EntitySystemMessages
|
|||||||
public static class MeleeWeaponSystemMessages
|
public static class MeleeWeaponSystemMessages
|
||||||
{
|
{
|
||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
public sealed class PlayMeleeWeaponArcAnimationMessage : EntitySystemMessage
|
public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage
|
||||||
{
|
{
|
||||||
public PlayMeleeWeaponArcAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, List<EntityUid> hits)
|
public PlayMeleeWeaponAnimationMessage(string arcPrototype, Angle angle, EntityUid attacker, List<EntityUid> hits)
|
||||||
{
|
{
|
||||||
ArcPrototype = arcPrototype;
|
ArcPrototype = arcPrototype;
|
||||||
Angle = angle;
|
Angle = angle;
|
||||||
@@ -24,19 +24,5 @@ namespace Content.Shared.GameObjects.EntitySystemMessages
|
|||||||
public EntityUid Attacker { get; }
|
public EntityUid Attacker { get; }
|
||||||
public List<EntityUid> Hits { get; }
|
public List<EntityUid> Hits { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable, NetSerializable]
|
|
||||||
public sealed class PlayMeleeWeaponAnimationMessage : EntitySystemMessage
|
|
||||||
{
|
|
||||||
public PlayMeleeWeaponAnimationMessage(Angle angle, EntityUid attacker, EntityUid hit)
|
|
||||||
{
|
|
||||||
Attacker = attacker;
|
|
||||||
Hit = hit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Angle Angle { get; }
|
|
||||||
public EntityUid Attacker { get; }
|
|
||||||
public EntityUid Hit { get; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user