diff --git a/Content.Shared/_Mono/SectorCapture/Components/CapturableGridComponent.cs b/Content.Shared/_Mono/SectorCapture/Components/CapturableGridComponent.cs new file mode 100644 index 00000000000..974fbd4cb2a --- /dev/null +++ b/Content.Shared/_Mono/SectorCapture/Components/CapturableGridComponent.cs @@ -0,0 +1,45 @@ +using System.ComponentModel; +using Robus.Shared.Gamestates; +/// +/// Marks an entity as a capturable point. +/// Stores the permanent ownership state of the grid. +/// +namespace Content.Shared._Mono.SectorCapture.Components; +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class CapturableGridComponent : Component +{ + /// + /// This is the current owner of the capturable grid; ie. TSF, USSP, PDV, VG, all other factions that should be able to capture a POI + /// + [Datafield] + [AutoNetworkedField] + public string? Owner; + /// + /// Set to True if the grid is currently in the process of being captured + /// + [Datafield] + [AutoNetworkedField] + public bool IsBeingCaptured; + /// + /// this is the state that updates after a capture attempt is successful, it should take only three values: + /// Neutral (no one touched it, the POI functions associated are turned off); + /// Captured (with precision of who captured it); + /// Hijacked (third mode of operation, a merc or spacer hijacked it with a regular id and as such it does not benefit to factions but prints cash/research disks) + /// + [Datafield] + [AutoNetworkedField] + public string? CaptureState; + /// + /// Tracks the progress of the POI capture up to 100 + /// + [DataField] + [AutoNetworkedField] + public float CaptureProgress; + /// + /// This dictates the class of the capturable grid, either an economic capture point, which sets off its own shenanigans when captured, or research capture point, which sets off its own shenanigans when captured + /// (maybe add a third type that'd throw unique rewards aside from global tax revenue) + /// + [DataField] + public string? CaptureClass ; + +} diff --git a/Content.Shared/_Mono/SectorCapture/Components/CaptureTerminalComponent.cs b/Content.Shared/_Mono/SectorCapture/Components/CaptureTerminalComponent.cs new file mode 100644 index 00000000000..d7250dd2a53 --- /dev/null +++ b/Content.Shared/_Mono/SectorCapture/Components/CaptureTerminalComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared._Mono.Company; +using Content.Shared.Containers.ItemSlots; + +namespace Content.Shared._Mono.SectorCapture.Components; +[RegisterComponent, NetworkedComponent] +public sealed partial class CaptureTerminalComponent : Component +{ + /// + /// sets the current owner of the terminal + /// + [DataField] + public string? Owner ; + /// + /// sets the class of capture terminal, which should correspond with the class of the POI that the terminal is on + /// used to trigger specific radio calls/ popups (eventually a specific ui depending on POI class?) + /// + [DataField] + public string? CaptureClass ; +} diff --git a/Content.Shared/_Mono/SectorCapture/Components/ControlKeyComponent.cs b/Content.Shared/_Mono/SectorCapture/Components/ControlKeyComponent.cs new file mode 100644 index 00000000000..e8c707f2f6c --- /dev/null +++ b/Content.Shared/_Mono/SectorCapture/Components/ControlKeyComponent.cs @@ -0,0 +1,13 @@ +using Content.Shared._Mono.Company; + +namespace Content.Shared._Mono.SectorCapture.Components; +[RegisterComponent, NetworkedComponent] +public sealed partial class ControlKeyComponent : Component +{ + /// + /// This component sets the company of the encrypted capture key, and is used to switch state from Neutral/Hacked to Captured, with the owner built in + /// + [Datafield] + [AutoNetworkedField] + public string? Owner; +} diff --git a/Content.Shared/_Mono/SectorCapture/Components/ControlTerminalComponent.cs b/Content.Shared/_Mono/SectorCapture/Components/ControlTerminalComponent.cs new file mode 100644 index 00000000000..98f5c7d3531 --- /dev/null +++ b/Content.Shared/_Mono/SectorCapture/Components/ControlTerminalComponent.cs @@ -0,0 +1,13 @@ +using Content.Shared._Mono.Company; +using Content.Shared.Containers.ItemSlots; + +namespace Content.Shared._Mono.SectorCapture.Components; +[RegisterComponent, NetworkedComponent] +public sealed partial class ControlTerminalComponent : Component +{ + /// + /// sets the owner of the Control terminal, so that it can display which POIs the owner (ergo faction) has captured + /// + [DataField] + public string? Owner; +} diff --git a/Content.Shared/_Mono/SectorCapture/Components/HijackKeyComponent.cs b/Content.Shared/_Mono/SectorCapture/Components/HijackKeyComponent.cs new file mode 100644 index 00000000000..bdca0b94236 --- /dev/null +++ b/Content.Shared/_Mono/SectorCapture/Components/HijackKeyComponent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared._Mono.SectorCapture.Components; +[RegisterComponent, NetworkedComponent] +public sealed partial class HijackKeyComponent : Component +{} diff --git a/Content.Shared/_Mono/SectorCapture/Components/TransmissionAntennaComponent.cs b/Content.Shared/_Mono/SectorCapture/Components/TransmissionAntennaComponent.cs new file mode 100644 index 00000000000..ae6f93eaec5 --- /dev/null +++ b/Content.Shared/_Mono/SectorCapture/Components/TransmissionAntennaComponent.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Components; +using Content.Shared.Research; + +namespace Content.Shared._Mono.SectorCapture.Components; +[RegisterComponent, NetworkedComponent] +public sealed partial class TransmissionAntennaComponent : Component +{ + /// + ///sets the default transmission rate of the antenna (by how much the normal, aligned antenna would transmit) + /// + [DataField] + public float TransmissionRate = 0f; + /// + /// defines the degree of alignment the antenna has, from 0 to 360, value chosen for alignment will vary depending on position of the receiver in space (yes this will be hell) + /// + [DataField] + public float AlignmentParameter = 1f; +} diff --git a/Content.Shared/_Mono/SectorCapture/SectorCaptureSystem.cs b/Content.Shared/_Mono/SectorCapture/SectorCaptureSystem.cs new file mode 100644 index 00000000000..9c9398b672d --- /dev/null +++ b/Content.Shared/_Mono/SectorCapture/SectorCaptureSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared._Mono.SectorCapture.Components; +using Content.Shared._Mono.SectorCapture.Prototypes; +using Content.Shared._Mono.Company; +using Content.Shared.Containers.ItemSlots; +using Content.Server.Radio.EntitySystems; +using Content.Shared.Popups; + +namespace Content.Shared._Mono.SectorCapture; +public abstract partial class SectorCaptureSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager PrototypeManager = default!; + + [Dependency] private ItemSlotsSystem _itemSlotsSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + } + + + +} diff --git a/Content.Shared/_Mono/SectorCapture/SectorControlSystem.cs b/Content.Shared/_Mono/SectorCapture/SectorControlSystem.cs new file mode 100644 index 00000000000..40e2e47493b --- /dev/null +++ b/Content.Shared/_Mono/SectorCapture/SectorControlSystem.cs @@ -0,0 +1,8 @@ +using Content.Shared.Research; +using Content.Shared._NF.Bank; +using Content.Server.Radio.EntitySystems; +using Content.Shared._Mono.SectorCapture.Components; +using Content.Shared._Mono.SectorCapture.Prototypes; +using Content.Shared._Mono.Company; + +namespace Content.Shared._Mono.SectorControl; diff --git a/Resources/Prototypes/_Mono/DeviceLinking/sink_ports.yml b/Resources/Prototypes/_Mono/DeviceLinking/sink_ports.yml index 55b7f74c48b..07fe26d41bc 100644 --- a/Resources/Prototypes/_Mono/DeviceLinking/sink_ports.yml +++ b/Resources/Prototypes/_Mono/DeviceLinking/sink_ports.yml @@ -11,4 +11,7 @@ - type: sinkPort id: SpaceArtilleryLoad name: signal-port-name-space-artillery-load - description: signal-port-description-space-artillery-load \ No newline at end of file + description: signal-port-description-space-artillery-load + +- type: sinkPort #it's here so i remind later i want a multitool adjacent thing to link capture computers to sector control computers of the controlling faction + id: ResearchPOITransmitterReceive diff --git a/Resources/Prototypes/_Mono/DeviceLinking/source_ports.yml b/Resources/Prototypes/_Mono/DeviceLinking/source_ports.yml index 24f3ac3cce3..063299d4e37 100644 --- a/Resources/Prototypes/_Mono/DeviceLinking/source_ports.yml +++ b/Resources/Prototypes/_Mono/DeviceLinking/source_ports.yml @@ -6,4 +6,7 @@ - type: sourcePort id: AmmoLoaderLoad name: signal-port-name-ammo-loader-load - description: signal-port-description-ammo-loader-load \ No newline at end of file + description: signal-port-description-ammo-loader-load + +- type: sourcePort #it's here so i remind later i want a multitool adjacent thing to link capture computers to sector control computers of the controlling faction + id: ResearchPOITransmitterEmit diff --git a/Resources/Prototypes/_Mono/Entities/Objects/Devices/sector_control_capture_keys.yml b/Resources/Prototypes/_Mono/Entities/Objects/Devices/sector_control_capture_keys.yml new file mode 100644 index 00000000000..372d1ddfa15 --- /dev/null +++ b/Resources/Prototypes/_Mono/Entities/Objects/Devices/sector_control_capture_keys.yml @@ -0,0 +1,46 @@ +#TODO +- type: entity + parent: BaseItem + id: SectorControlCaptureKey + suffix: DEBUG + name: Capture Key + description: Debug item + +- type: entity + parent: SectorControlCaptureKey + suffix: Empty + id: SectorControlCaptureKeyNone + name: Unafilliated capture key + description: A small electronic key containing a data package specifically designed to target a station's systems and take control of them. This one has no data on it. + components: + - type: Sprite + sprite: + state: + - type: ControlKey + owner: None + +- type: entity + parent: SectorControlCaptureKey + suffix: TSF + id: SectorControlCaptureKeyTSF + name: Tsf encrypted capture key + description: A small electronic key containing a data package specifically designed to target a station's systems and take control of them. This one has a Trans solarian data package on it. + components: + - type: Sprite + sprite: + state: + - type: ControlKey + owner: TSF + +- type: entity + parent: SectorControlCaptureKey + suffix: PDV + id: SectorControlCaptureKeyPDV + name: Pdv encrypted capture key + description: A small electronic key containing a data package specifically designed to target a station's systems and take control of them. This one has an Imperial data package on it. + components: + - type: Sprite + sprite: + state: + - type: ControlKey + owner: PDV diff --git a/Resources/Prototypes/_Mono/Entities/Structures/Machines/Computers/sector_control_terminals.yml b/Resources/Prototypes/_Mono/Entities/Structures/Machines/Computers/sector_control_terminals.yml new file mode 100644 index 00000000000..8e2925ecc81 --- /dev/null +++ b/Resources/Prototypes/_Mono/Entities/Structures/Machines/Computers/sector_control_terminals.yml @@ -0,0 +1,37 @@ +- type: entity + parent: BaseComputer + id: SectorControlComputer + suffix: Sector Control, Neutral + name: Unafilliated sector control terminal + description: A console designed to overwatch all data feeds coming from successfully infiltrated stations. + components: + - type: Sprite + sprite: + state: + - type: Computer + board: SectorControlComputerCircuitBoard + - type: ControlTerminal + owner: None + +- type: entity #will be used for testing before factionizing the thing + parent: BaseComputerCircuitboard + id: SectorControlComputerCircuitBoard + suffix: DEBUG, unaffiliated + name: unaffiliated sector control computer circuit board #what a mouthful + desciption: A circuit board used to make an unaffiliated sector control terminal + components: + - type: Sprite + state: cpu_command + - type: ComputerBoard + prototype: SectorControlComputer + + + +- type: entity + parent: BaseComputer + id: SectorCaptureComputerBase + suffix: POI Capture, Neutral + name: base capture point terminal + desciption: the place where you insert ur key and capture the thingiemabob + components: + diff --git a/Resources/Prototypes/_Mono/Entities/Structures/Machines/research_transmission_antennae.yml b/Resources/Prototypes/_Mono/Entities/Structures/Machines/research_transmission_antennae.yml new file mode 100644 index 00000000000..f9bf1abc130 --- /dev/null +++ b/Resources/Prototypes/_Mono/Entities/Structures/Machines/research_transmission_antennae.yml @@ -0,0 +1 @@ +#TODO