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; using Content.Shared.Kitchen; // Frontier using Robust.Shared.Serialization; // Frontier using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Content.Shared.Kitchen.Components; // Frontier namespace Content.Server.Kitchen.Components { [RegisterComponent] public sealed partial class MicrowaveComponent : Component { [DataField("cookTimeMultiplier"), ViewVariables(VVAccess.ReadWrite)] public float CookTimeMultiplier = 1; [DataField("machinePartCookTimeMultiplier")] // Frontier: machine parts public ProtoId MachinePartCookTimeMultiplier = "Capacitor"; // Frontier: machine parts [ViewVariables(VVAccess.ReadOnly)] public float FinalCookTimeMultiplier = 1.0f; // Frontier: machine parts [DataField("cookTimeScalingConstant")] public float CookTimeScalingConstant = 0.5f; [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] public string ContainerId = "microwave_entity_container"; [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; // Frontier: recipe type /// /// the types of recipes that this "microwave" can handle. /// [DataField(customTypeSerializer: typeof(FlagSerializer)), ViewVariables(VVAccess.ReadWrite)] public int ValidRecipeTypes = (int)MicrowaveRecipeType.Microwave; /// /// If true, events sent off by the microwave will state that the object is being heated. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool CanHeat = true; /// /// If true, events sent off by the microwave will state that the object is being irradiated. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool CanIrradiate = true; /// /// The localization string to be displayed when something that's too large is inserted. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public string TooBigPopup = "microwave-component-interact-item-too-big"; /// /// The sound that is played when a set of ingredients does not match an assembly recipe. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier NoRecipeSound = new SoundPathSpecifier("/Audio/Effects/Cargo/buzz_sigh.ogg"); /// /// The sound that is played when a set of ingredients does not match an assembly recipe. /// [DataField, ViewVariables(VVAccess.ReadOnly)] public MicrowaveUiKey Key = MicrowaveUiKey.Key; // End Frontier } public sealed class BeingMicrowavedEvent : HandledEntityEventArgs { public EntityUid Microwave; public EntityUid? User; // Frontier: fields for whether or not the object is actually being heated or irradiated. public bool BeingHeated; public bool BeingIrradiated; // End Frontier public BeingMicrowavedEvent(EntityUid microwave, EntityUid? user, bool heating, bool irradiating) // Frontier: added heating, irradiating { Microwave = microwave; User = user; BeingHeated = heating; BeingIrradiated = irradiating; } } }