From 66c2434320077130b47ec6512d372e25e2178caa Mon Sep 17 00:00:00 2001 From: miniduikboot <5243971+miniduikboot@users.noreply.github.com> Date: Fri, 2 Apr 2021 22:42:15 +0200 Subject: [PATCH] Implement HeliSabotageSystemType It works, although I'm not completely sure why. --- .../Net/Inner/Objects/InnerShipStatus.cs | 2 +- .../ShipStatus/HeliSabotageSystemType.cs | 57 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/HeliSabotageSystemType.cs diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs b/src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs index d51c0b8..575a64a 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs @@ -29,7 +29,7 @@ namespace Impostor.Server.Net.Inner.Objects { [SystemTypes.Electrical] = new SwitchSystem(), [SystemTypes.MedBay] = new MedScanSystem(), - [SystemTypes.Reactor] = new ReactorSystemType(), + [SystemTypes.Reactor] = game.Options.Map == MapTypes.Airship ? new HeliSabotageSystemType() : new ReactorSystemType(), [SystemTypes.LifeSupp] = new LifeSuppSystemType(), [SystemTypes.Security] = new SecurityCameraSystemType(), [SystemTypes.Comms] = new HudOverrideSystemType(), diff --git a/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/HeliSabotageSystemType.cs b/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/HeliSabotageSystemType.cs new file mode 100644 index 0000000..f29c4b8 --- /dev/null +++ b/src/Impostor.Server/Net/Inner/Objects/Systems/ShipStatus/HeliSabotageSystemType.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using Impostor.Api.Net.Messages; +using Microsoft.Extensions.Logging; + +namespace Impostor.Server.Net.Inner.Objects.Systems.ShipStatus +{ + public class HeliSabotageSystemType : ISystemType, IActivatable + { + public HeliSabotageSystemType() + { + Countdown = 10000f; + ActiveConsoles = new HashSet>(); + CompletedConsoles = new HashSet(); + } + + public float Countdown { get; private set; } + + public float Timer { get; private set; } + + public HashSet> ActiveConsoles { get; } + + public HashSet CompletedConsoles { get; } + + public bool IsActive => Countdown < 10000.0; + + public void Serialize(IMessageWriter writer, bool initialState) + { + throw new NotImplementedException(); + } + + public void Deserialize(IMessageReader reader, bool initialState) + { + // TODO: Find out what these 2 bytes are used for + _ = reader.ReadByte(); + _ = reader.ReadByte(); + Countdown = reader.ReadSingle(); + Timer = reader.ReadSingle(); + ActiveConsoles.Clear(); // TODO: Thread safety + CompletedConsoles.Clear(); // TODO: Thread safety + + var count = reader.ReadPackedUInt32(); + + for (var i = 0; i < count; i++) + { + ActiveConsoles.Add(new Tuple(reader.ReadByte(), reader.ReadByte())); + } + + var count2 = reader.ReadPackedUInt32(); + + for (var i = 0; i < count2; i++) + { + CompletedConsoles.Add(reader.ReadByte()); + } + } + } +} -- 2.39.5