using Content.Shared.Physics; using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Flash { [RegisterComponent, NetworkedComponent] public sealed partial class FlashableComponent : Component { public float Duration; public TimeSpan LastFlash; // // Chance to get EyeDamage on flash // [DataField] public float EyeDamageChance; // // How many EyeDamage when flashed? (If EyeDamageChance check passed) // [DataField] public int EyeDamage; // How much to modify the duration of flashes against this entity. // [DataField] public float DurationMultiplier = 1f; [DataField] public CollisionGroup CollisionGroup = CollisionGroup.Opaque; public override bool SendOnlyToOwner => true; } [Serializable, NetSerializable] public sealed class FlashableComponentState : ComponentState { public float Duration { get; } public TimeSpan Time { get; } public float EyeDamageChance { get; } public int EyeDamage { get; } public float DurationMultiplier { get; } public FlashableComponentState(float duration, TimeSpan time, float eyeDamageChance, int eyeDamage, float durationMultiplier) { Duration = duration; Time = time; EyeDamageChance = eyeDamageChance; EyeDamage = eyeDamage; DurationMultiplier = durationMultiplier; } } [Serializable, NetSerializable] public enum FlashVisuals : byte { BaseLayer, LightLayer, Burnt, Flashing, } }