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,
}