mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-09 18:31:17 +03:00
* Refactor DeviceNetwork * Singleton * NetworkPayloads refactor * Reorganize DeviceNetworkSystem * Surveillance cameras * Fix code * Fix build * Fix test fail by rewriting entire singleton logic * Properly predict examine * Update DeviceNetworkSystem.API.cs * Update EntityTest.cs * Update DeviceNetworkSystem.cs * Alright I'll do this expensive check fine * Fix disposals debug assert * Implement device network static events support * Use frozen dictionaries for performance * Update SharedDeviceNetworkSystem.Payloads.cs * Parallel payload handling support * Fix some spagetti-code * Optimize NetworkPayload cancellation * Parallel payloads are now cancellable * Fix screens * Fix robotics console * Allow new methods for shared * Mail fix * Turret fix * Fix network system method usage + signal and borg fix * finally fix atmos devices OH MY GOOOD * Remove stupid parallelism from fax * Fix surveiollance cameras * Working on a single thing for 2 days straight award * Fix the test? * Update units.yml * Add IDevice interface because why not * Add more device network suffixes * Fix camera router failing test * yaml linter peak * Improve docs for DeviceNetworkHandlers * fix build * Update CartridgeLoaderSystem.Relay.cs * Remove parallel system and EntitySystem post init * Add more docs and also events * Remove unnecessary caching * Update DevicePayloadComponentSystem.cs * Back to entity events * Implement DeviceData * Remove serializable from payloads * Update DeviceData.cs * Add a prototype for a singleton * Fix tests * Fix air alarms * Update DeviceNetworkSystem.cs * Fix cameras * Make camera router event-less * Fix atmos sync payloads, add more docs * Remove singleton + instant packets * oops remove public access * Fix tests? * Why the hell overload effect makes puddle sparks * Apparently it was redundant * Update gates.yml * Finish documentation * Review * Mark relay properties as obsolete * Struct payloads support (#blazinglyfastmemorysafe) * Update DeviceNetworkTest.cs * Make device structs stuff better * Move address prefix to DeviceNetworkComponent * Locale fixes * Fix tests * Doesn't know boolean logic award * Update AtmosAlarmableSystem.cs * Fix address predicted examine * Partial fix to air alarmables * Fix deployable turrets UI * Fix firelocks, maybe * Apparently Activatable UI was enough lol * Fix surveillance cameras * Rename `QueuePacket` into `SendPacket` * Simplify DeviceData as much as possible * Update DeviceData.cs * Update FaxMachineComponent.cs * Remove DeviceData because its stupid * Update ScreenSystem.cs * Fix build (camera map broken still) * Fix map * fix usings * Review changes * Build fix
156 lines
4.2 KiB
C#
156 lines
4.2 KiB
C#
using Content.Shared.DeviceNetwork;
|
|
using Robust.Shared.Serialization;
|
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Content.Shared.Robotics;
|
|
|
|
[Serializable, NetSerializable]
|
|
public enum RoboticsConsoleUiKey : byte
|
|
{
|
|
Key
|
|
}
|
|
|
|
[Serializable, NetSerializable]
|
|
public sealed class RoboticsConsoleState : BoundUserInterfaceState
|
|
{
|
|
/// <summary>
|
|
/// Map of device network addresses to cyborg data.
|
|
/// </summary>
|
|
public Dictionary<string, CyborgControlData> Cyborgs;
|
|
|
|
/// <summary>
|
|
/// If the UI will have the buttons to disable and destroy.
|
|
/// </summary>
|
|
public bool AllowBorgControl;
|
|
|
|
public RoboticsConsoleState(Dictionary<string, CyborgControlData> cyborgs, bool allowBorgControl)
|
|
{
|
|
Cyborgs = cyborgs;
|
|
AllowBorgControl = allowBorgControl;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Message to disable the selected cyborg.
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public sealed class RoboticsConsoleDisableMessage : BoundUserInterfaceMessage
|
|
{
|
|
public readonly string Address;
|
|
|
|
public RoboticsConsoleDisableMessage(string address)
|
|
{
|
|
Address = address;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Message to destroy the selected cyborg.
|
|
/// </summary>
|
|
[Serializable, NetSerializable]
|
|
public sealed class RoboticsConsoleDestroyMessage : BoundUserInterfaceMessage
|
|
{
|
|
public readonly string Address;
|
|
|
|
public RoboticsConsoleDestroyMessage(string address)
|
|
{
|
|
Address = address;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// All data a client needs to render the console UI for a single cyborg.
|
|
/// Created by <c>BorgTransponderComponent</c> and sent to clients by <c>RoboticsConsoleComponent</c>.
|
|
/// </summary>
|
|
[DataRecord, Serializable, NetSerializable]
|
|
public partial record struct CyborgControlData
|
|
{
|
|
/// <summary>
|
|
/// Texture of the borg chassis.
|
|
/// </summary>
|
|
[DataField(required: true)]
|
|
public SpriteSpecifier? ChassisSprite;
|
|
|
|
/// <summary>
|
|
/// Name of the borg chassis.
|
|
/// </summary>
|
|
[DataField(required: true)]
|
|
public string ChassisName = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Name of the borg's entity, including its silicon id.
|
|
/// </summary>
|
|
[DataField(required: true)]
|
|
public string Name = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Battery charge from 0 to 1.
|
|
/// </summary>
|
|
[DataField]
|
|
public float Charge;
|
|
|
|
/// <summary>
|
|
/// HP level from 0 to 1.
|
|
/// </summary>
|
|
[DataField]
|
|
public float HpPercent; // 0.0 to 1.0
|
|
|
|
/// <summary>
|
|
/// How many modules this borg has, just useful information for roboticists.
|
|
/// Lets them keep track of the latejoin borgs that need new modules and stuff.
|
|
/// </summary>
|
|
[DataField]
|
|
public int ModuleCount;
|
|
|
|
/// <summary>
|
|
/// Whether the borg has a brain installed or not.
|
|
/// </summary>
|
|
[DataField]
|
|
public bool HasBrain;
|
|
|
|
/// <summary>
|
|
/// Whether the borg can currently be disabled if the brain is installed,
|
|
/// if on cooldown then can't queue up multiple disables.
|
|
/// </summary>
|
|
[DataField]
|
|
public bool CanDisable;
|
|
|
|
/// <summary>
|
|
/// When this cyborg's data will be deleted.
|
|
/// Set by the console when receiving the packet.
|
|
/// </summary>
|
|
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
|
public TimeSpan Timeout = TimeSpan.Zero;
|
|
|
|
public CyborgControlData(SpriteSpecifier? chassisSprite, string chassisName, string name, float charge, float hpPercent, int moduleCount, bool hasBrain, bool canDisable)
|
|
{
|
|
ChassisSprite = chassisSprite;
|
|
ChassisName = chassisName;
|
|
Name = name;
|
|
Charge = charge;
|
|
HpPercent = hpPercent;
|
|
ModuleCount = moduleCount;
|
|
HasBrain = hasBrain;
|
|
CanDisable = canDisable;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Disables a borg when received.
|
|
/// </summary>
|
|
public partial record struct RoboticsCyborgDisablePayload : INetworkPayload;
|
|
|
|
/// <summary>
|
|
/// Destroys a borg when received.
|
|
/// </summary>
|
|
public partial record struct RoboticsCyborgDestroyPayload : INetworkPayload;
|
|
|
|
/// <summary>
|
|
/// A wrapper for <see cref="CyborgControlData"/>
|
|
/// </summary>
|
|
public partial record struct RoboticsCyborgDataPayload : INetworkPayload
|
|
{
|
|
[DataField]
|
|
public CyborgControlData Data;
|
|
}
|