DamageOnHighSpeedImpactComponent.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Content.Shared.Damage.Systems;
  2. using Robust.Shared.Audio;
  3. using Robust.Shared.GameStates;
  4. using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
  5. namespace Content.Shared.Damage.Components;
  6. /// <summary>
  7. /// Should the entity take damage / be stunned if colliding at a speed above MinimumSpeed?
  8. /// </summary>
  9. [RegisterComponent, NetworkedComponent, Access(typeof(DamageOnHighSpeedImpactSystem))]
  10. public sealed partial class DamageOnHighSpeedImpactComponent : Component
  11. {
  12. [DataField("minimumSpeed"), ViewVariables(VVAccess.ReadWrite)]
  13. public float MinimumSpeed = 20f;
  14. [DataField("speedDamageFactor"), ViewVariables(VVAccess.ReadWrite)]
  15. public float SpeedDamageFactor = 0.5f;
  16. [DataField("soundHit", required: true), ViewVariables(VVAccess.ReadWrite)]
  17. public SoundSpecifier SoundHit = default!;
  18. [DataField("stunChance"), ViewVariables(VVAccess.ReadWrite)]
  19. public float StunChance = 0.25f;
  20. [DataField("stunMinimumDamage"), ViewVariables(VVAccess.ReadWrite)]
  21. public int StunMinimumDamage = 10;
  22. [DataField("stunSeconds"), ViewVariables(VVAccess.ReadWrite)]
  23. public float StunSeconds = 1f;
  24. [DataField("damageCooldown"), ViewVariables(VVAccess.ReadWrite)]
  25. public float DamageCooldown = 2f;
  26. [DataField("lastHit", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)]
  27. public TimeSpan? LastHit;
  28. [DataField("damage", required: true), ViewVariables(VVAccess.ReadWrite)]
  29. public DamageSpecifier Damage = default!;
  30. }