From: miniduikboot <5243971+miniduikboot@users.noreply.github.com> Date: Fri, 2 Apr 2021 20:42:15 +0000 (+0200) Subject: Implement HeliSabotageSystemType X-Git-Tag: v1.4.0~14^2~13^2~4 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=66c2434320077130b47ec6512d372e25e2178caa;p=rhonda%2Fimpostor.git Implement HeliSabotageSystemType It works, although I'm not completely sure why. --- 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()); + } + } + } +}