using System; using Content.Shared.Construction; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.Utility; namespace Content.Shared.GameObjects.EntitySystems { public class SharedConstructionSystem : EntitySystem { /// /// Sent client -> server to to tell the server that we started building /// a structure-construction. /// [Serializable, NetSerializable] public class TryStartStructureConstructionMessage : EntitySystemMessage { /// /// Position to start building. /// public readonly EntityCoordinates Location; /// /// The construction prototype to start building. /// public readonly string PrototypeName; public readonly Angle Angle; /// /// Identifier to be sent back in the acknowledgement so that the client can clean up its ghost. /// public readonly int Ack; public TryStartStructureConstructionMessage(EntityCoordinates loc, string prototypeName, Angle angle, int ack) { Location = loc; PrototypeName = prototypeName; Angle = angle; Ack = ack; } } /// /// Sent client -> server to to tell the server that we started building /// an item-construction. /// [Serializable, NetSerializable] public class TryStartItemConstructionMessage : EntitySystemMessage { /// /// The construction prototype to start building. /// public readonly string PrototypeName; public TryStartItemConstructionMessage(string prototypeName) { PrototypeName = prototypeName; } } /// /// Send server -> client to tell the client that a ghost has started to be constructed. /// [Serializable, NetSerializable] public class AckStructureConstructionMessage : EntitySystemMessage { public readonly int GhostId; public AckStructureConstructionMessage(int ghostId) { GhostId = ghostId; } } public void DoExamine(FormattedMessage message, ConstructionPrototype prototype, int stage, bool inDetailRange) { var stages = prototype.Stages; if (stage >= 0 && stage < stages.Count) { var curStage = stages[stage]; if (curStage.Backward != null && curStage.Backward is ConstructionStepTool) { var backward = (ConstructionStepTool) curStage.Backward; message.AddText(Loc.GetString("To deconstruct: {0}x {1} Tool", backward.Amount, backward.ToolQuality)); } if (curStage.Forward != null && curStage.Forward is ConstructionStepMaterial) { if (curStage.Backward != null) { message.AddText("\n"); } var forward = (ConstructionStepMaterial) curStage.Forward; message.AddText(Loc.GetString("To construct: {0}x {1}", forward.Amount, forward.Material)); } } } } }