using Content.Shared.Alert; using Content.Shared.Whitelist; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Silicons.Borgs.Components; /// /// This is used for the core body of a borg. This manages a borg's /// "brain", legs, modules, and battery. Essentially the master component /// for borg logic. /// [RegisterComponent, NetworkedComponent, Access(typeof(SharedBorgSystem)), AutoGenerateComponentState] public sealed partial class BorgChassisComponent : Component { #region Brain /// /// A whitelist for which entities count as valid brains /// [DataField("brainWhitelist")] public EntityWhitelist? BrainWhitelist; /// /// The container ID for the brain /// [DataField("brainContainerId")] public string BrainContainerId = "borg_brain"; [ViewVariables(VVAccess.ReadWrite)] public ContainerSlot BrainContainer = default!; public EntityUid? BrainEntity => BrainContainer.ContainedEntity; #endregion #region Modules /// /// A whitelist for what types of modules can be installed into this borg /// [DataField("moduleWhitelist")] public EntityWhitelist? ModuleWhitelist; /// /// How many modules can be installed in this borg /// [DataField("maxModules"), ViewVariables(VVAccess.ReadWrite)] public int MaxModules = 3; /// /// The ID for the module container /// [DataField("moduleContainerId")] public string ModuleContainerId = "borg_module"; [ViewVariables(VVAccess.ReadWrite)] public Container ModuleContainer = default!; public int ModuleCount => ModuleContainer.ContainedEntities.Count; #endregion /// /// The currently selected module /// [DataField("selectedModule"), AutoNetworkedField] public EntityUid? SelectedModule; #region Visuals [DataField("hasMindState")] public string HasMindState = string.Empty; [DataField("noMindState")] public string NoMindState = string.Empty; #endregion [DataField] public ProtoId BatteryAlert = "BorgBattery"; [DataField] public ProtoId NoBatteryAlert = "BorgBatteryNone"; } [Serializable, NetSerializable] public enum BorgVisuals : byte { HasPlayer } [Serializable, NetSerializable] public enum BorgVisualLayers : byte { /// /// Main borg body layer. /// Body, /// /// Layer for the borg's mind state. /// Light, /// /// Layer for the borg flashlight status. /// LightStatus, }