using Content.Shared.Construction.Prototypes; using Content.Shared.DeviceLinking; using Content.Shared.Item; using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Kitchen.Components { [RegisterComponent] public sealed partial class MicrowaveComponent : Component { [DataField("cookTimeMultiplier"), ViewVariables(VVAccess.ReadWrite)] public float CookTimeMultiplier = 1; [DataField("baseHeatMultiplier"), ViewVariables(VVAccess.ReadWrite)] public float BaseHeatMultiplier = 100; [DataField("objectHeatMultiplier"), ViewVariables(VVAccess.ReadWrite)] public float ObjectHeatMultiplier = 100; [DataField("failureResult", customTypeSerializer: typeof(PrototypeIdSerializer))] public string BadRecipeEntityId = "FoodBadRecipe"; #region audio [DataField("beginCookingSound")] public SoundSpecifier StartCookingSound = new SoundPathSpecifier("/Audio/Machines/microwave_start_beep.ogg"); [DataField("foodDoneSound")] public SoundSpecifier FoodDoneSound = new SoundPathSpecifier("/Audio/Machines/microwave_done_beep.ogg"); [DataField("clickSound")] public SoundSpecifier ClickSound = new SoundPathSpecifier("/Audio/Machines/machine_switch.ogg"); [DataField("ItemBreakSound")] public SoundSpecifier ItemBreakSound = new SoundPathSpecifier("/Audio/Effects/clang.ogg"); public EntityUid? PlayingStream; [DataField("loopingSound")] public SoundSpecifier LoopingSound = new SoundPathSpecifier("/Audio/Machines/microwave_loop.ogg"); #endregion [ViewVariables] public bool Broken; [DataField, ViewVariables(VVAccess.ReadWrite)] public ProtoId OnPort = "On"; /// /// This is a fixed offset of 5. /// The cook times for all recipes should be divisible by 5,with a minimum of 1 second. /// For right now, I don't think any recipe cook time should be greater than 60 seconds. /// [DataField("currentCookTimerTime"), ViewVariables(VVAccess.ReadWrite)] public uint CurrentCookTimerTime = 0; /// /// Tracks the elapsed time of the current cook timer. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public TimeSpan CurrentCookTimeEnd = TimeSpan.Zero; /// /// The maximum number of seconds a microwave can be set to. /// This is currently only used for validation and the client does not check this. /// [DataField("maxCookTime"), ViewVariables(VVAccess.ReadWrite)] public uint MaxCookTime = 30; /// /// The max temperature that this microwave can heat objects to. /// [DataField("temperatureUpperThreshold")] public float TemperatureUpperThreshold = 373.15f; public int CurrentCookTimeButtonIndex; public Container Storage = default!; [DataField, ViewVariables(VVAccess.ReadWrite)] public int Capacity = 10; [DataField, ViewVariables(VVAccess.ReadWrite)] public ProtoId MaxItemSize = "Normal"; /// /// How frequently the microwave can malfunction. /// [DataField] public float MalfunctionInterval = 1.0f; /// /// Chance of an explosion occurring when we microwave a metallic object /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float ExplosionChance = .1f; /// /// Chance of lightning occurring when we microwave a metallic object [DataField, ViewVariables(VVAccess.ReadWrite)] public float LightningChance = .75f; /// /// If this microwave can give ids accesses without exploding /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool CanMicrowaveIdsSafely = true; } public sealed class BeingMicrowavedEvent : HandledEntityEventArgs { public EntityUid Microwave; public EntityUid? User; public BeingMicrowavedEvent(EntityUid microwave, EntityUid? user) { Microwave = microwave; User = user; } } }