using System.Collections.Generic; using Content.Shared.Damage; using Content.Shared.Projectiles; using Content.Shared.Sound; using Robust.Shared.GameObjects; using Robust.Shared.Players; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; namespace Content.Server.Projectiles.Components { [RegisterComponent] [ComponentReference(typeof(SharedProjectileComponent))] public class ProjectileComponent : SharedProjectileComponent { [DataField("damages")] private Dictionary _damages = new(); [ViewVariables] public Dictionary Damages { get => _damages; set => _damages = value; } [DataField("deleteOnCollide")] public bool DeleteOnCollide { get; } = true; // Get that juicy FPS hit sound [DataField("soundHit", required: true)] public SoundSpecifier? SoundHit = default!; [DataField("soundHitSpecies")] public SoundSpecifier? SoundHitSpecies = null; public bool DamagedEntity; public float TimeLeft { get; set; } = 10; /// /// Function that makes the collision of this object ignore a specific entity so we don't collide with ourselves /// /// public void IgnoreEntity(IEntity shooter) { Shooter = shooter.Uid; Dirty(); } public override ComponentState GetComponentState(ICommonSession player) { return new ProjectileComponentState(Shooter, IgnoreShooter); } } }