using Content.Shared.Construction.Prototypes; using Content.Shared.Lathe.Prototypes; using Content.Shared.Research.Prototypes; using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Shared.Lathe { [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class LatheComponent : Component { /// /// All of the recipe packs that the lathe has by default /// [DataField] public List> StaticPacks = new(); /// /// All of the recipe packs that the lathe is capable of researching /// [DataField] public List> DynamicPacks = new(); // Note that this shouldn't be modified dynamically. // I.e., this + the static recipies should represent all recipies that the lathe can ever make // Otherwise the material arbitrage test and/or LatheSystem.GetAllBaseRecipes needs to be updated /// /// The lathe's construction queue /// [DataField] public List Queue = new(); // Frontier: LatheRecipePrototype /// The sound that plays when the lathe is producing an item, if any /// [DataField] public SoundSpecifier? ProducingSound; [DataField] public string? ReagentOutputSlotId; /// /// The default amount that's displayed in the UI for selecting the print amount. /// [DataField, AutoNetworkedField] public int DefaultProductionAmount = 1; #region Visualizer info [DataField] public string? IdleState; [DataField] public string? RunningState; [DataField] public string? UnlitIdleState; [DataField] public string? UnlitRunningState; #endregion /// /// The recipe the lathe is currently producing /// [ViewVariables] public LatheRecipePrototype? CurrentRecipe; #region MachineUpgrading /// /// A modifier that changes how long it takes to print a recipe /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float TimeMultiplier = 1; /// /// A modifier that changes how much of a material is needed to print a recipe /// [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public float MaterialUseMultiplier = 1; /// /// A modifier that changes how long it takes to print a recipe /// [DataField, ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] public float FinalTimeMultiplier = 1; /// /// A modifier that changes how much of a material is needed to print a recipe /// [DataField, ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] public float FinalMaterialUseMultiplier = 1; public const float DefaultPartRatingMaterialUseMultiplier = 0.85f; // Frontier: restored for machine parts //Frontier Upgrade Code Restore /// /// The machine part that reduces how long it takes to print a recipe. /// [DataField] public ProtoId MachinePartPrintSpeed = "Manipulator"; /// /// The value that is used to calculate the modified /// [DataField] public float PartRatingPrintTimeMultiplier = 0.5f; /// /// The machine part that reduces how much material it takes to print a recipe. /// [DataField] public ProtoId MachinePartMaterialUse = "MatterBin"; // Frontier: restored for machine part upgrades /// /// The value that is used to calculate the modifier /// [DataField] public float PartRatingMaterialUseMultiplier = DefaultPartRatingMaterialUseMultiplier; // End Frontier // Frontier: restored for machine part upgrades /// /// If not null, finite and non-negative, modifies values on spawned items /// [DataField] public float? ProductValueModifier = 0.9f; // Horizon fix // End Frontier #endregion } public sealed class LatheGetRecipesEvent : EntityEventArgs { public readonly EntityUid Lathe; public readonly LatheComponent Comp; public bool GetUnavailable; public HashSet> Recipes = new(); public LatheGetRecipesEvent(Entity lathe, bool forced) { (Lathe, Comp) = lathe; GetUnavailable = forced; } } // Frontier: batch lathe recipes [Serializable] public sealed partial class LatheRecipeBatch : EntityEventArgs { public LatheRecipePrototype Recipe; public int ItemsPrinted; public int ItemsRequested; public LatheRecipeBatch(LatheRecipePrototype recipe, int itemsPrinted, int itemsRequested) { Recipe = recipe; ItemsPrinted = itemsPrinted; ItemsRequested = itemsRequested; } } // End Frontier /// /// Event raised on a lathe when it starts producing a recipe. /// [ByRefEvent] public readonly record struct LatheStartPrintingEvent(LatheRecipePrototype Recipe); }