using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.Stack; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Power { /// /// Allows the attached entity to be destroyed by a cutting tool, dropping a piece of wire. /// [RegisterComponent] public class WireComponent : Component, IInteractUsing { public override string Name => "Wire"; [ViewVariables] private string _wireDroppedOnCutPrototype; /// /// Checked by to determine if there is /// already a wire of a type on a tile. /// [ViewVariables] public WireType WireType => _wireType; private WireType _wireType; public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); serializer.DataField(ref _wireDroppedOnCutPrototype, "wireDroppedOnCutPrototype", "HVWireStack1"); serializer.DataField(ref _wireType, "wireType", WireType.HighVoltage); } public bool InteractUsing(InteractUsingEventArgs eventArgs) { if (!eventArgs.Using.TryGetComponent(out ToolComponent tool)) return false; if (!tool.UseTool(eventArgs.User, Owner, ToolQuality.Cutting)) return false; Owner.Delete(); var droppedEnt = Owner.EntityManager.SpawnEntity(_wireDroppedOnCutPrototype, eventArgs.ClickLocation); if (droppedEnt.TryGetComponent(out var stackComp)) stackComp.Count = 1; return true; } } public enum WireType { HighVoltage, MediumVoltage, Apc, } }