using Content.Shared.Chemistry.Reagent; using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Devour.Components; [RegisterComponent, NetworkedComponent] [Access(typeof(SharedDevourSystem))] public sealed partial class DevourerComponent : Component { [DataField("devourAction", customTypeSerializer: typeof(PrototypeIdSerializer))] public string? DevourAction = "ActionDevour"; [DataField("devourActionEntity")] public EntityUid? DevourActionEntity; [ViewVariables(VVAccess.ReadWrite), DataField("soundDevour")] public SoundSpecifier? SoundDevour = new SoundPathSpecifier("/Audio/Effects/demon_consume.ogg") { Params = AudioParams.Default.WithVolume(-3f), }; [DataField("devourTime")] public float DevourTime = 3f; /// /// The amount of time it takes to devour something /// /// NOTE: original intended design was to increase this proportionally with damage thresholds, but those proved quite difficult to get consistently. right now it devours the structure at a fixed timer. /// /// [DataField("structureDevourTime")] public float StructureDevourTime = 10f; [ViewVariables(VVAccess.ReadWrite), DataField("soundStructureDevour")] public SoundSpecifier? SoundStructureDevour = new SoundPathSpecifier("/Audio/Machines/airlock_creaking.ogg") { Params = AudioParams.Default.WithVolume(-3f), }; /// /// Where the entities go when it devours them, empties when it is butchered. /// public Container Stomach = default!; [ViewVariables(VVAccess.ReadWrite), DataField("shouldStoreDevoured")] public bool ShouldStoreDevoured = true; [ViewVariables(VVAccess.ReadWrite), DataField("whitelist")] public EntityWhitelist? Whitelist = new() { Components = new[] { "MobState", } }; /// /// The chemical ID injected upon devouring /// [DataField("chemical", customTypeSerializer: typeof(PrototypeIdSerializer))] public string Chemical = "Ichor"; /// /// The amount of ichor injected per devour /// [ViewVariables(VVAccess.ReadWrite), DataField("healRate")] public float HealRate = 15f; /// /// The favorite food not only feeds you, but also heals /// [DataField("foodPreference")] public FoodPreference FoodPreference = FoodPreference.All; }