using Content.Server.Projectiles.Components; using Robust.Shared.GameObjects; using Robust.Shared.Physics.Collision; using Robust.Shared.Physics.Dynamics; using Robust.Shared.Serialization.Manager.Attributes; namespace Content.Server.Flash.Components { /// /// Upon colliding with an object this will flash in an area around it /// [RegisterComponent] public class FlashProjectileComponent : Component, IStartCollide { public override string Name => "FlashProjectile"; [DataField("range")] private float _range = 1.0f; [DataField("duration")] private float _duration = 8.0f; private bool _flashed; protected override void Initialize() { base.Initialize(); // Shouldn't be using this without a ProjectileComponent because it will just immediately collide with thrower Owner.EnsureComponent(); } void IStartCollide.CollideWith(Fixture ourFixture, Fixture otherFixture, in Manifold manifold) { if (_flashed) return; FlashableComponent.FlashAreaHelper(Owner, _range, _duration); _flashed = true; } } }