Skip to content

Commit

Permalink
Rework vent api
Browse files Browse the repository at this point in the history
  • Loading branch information
js6pak committed Apr 6, 2021
1 parent 970f826 commit 304b4bb
Show file tree
Hide file tree
Showing 19 changed files with 378 additions and 67 deletions.
2 changes: 1 addition & 1 deletion src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public interface IPlayerVentEvent : IPlayerEvent
/// <summary>
/// Gets get the id of the used vent.
/// </summary>
public VentLocation VentId { get; }
public Vent Vent { get; }

/// <summary>
/// Gets a value indicating whether the vent was entered or exited.
Expand Down
49 changes: 49 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/AirshipData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Impostor.Api.Innersloth.Maps.Vents;

namespace Impostor.Api.Innersloth.Maps
{
public class AirshipData : MapData
{
public AirshipData()
{
Vents = new[]
{
new AirshipVent(AirshipVent.Ids.Vault, new Vector2(-12.6322f, 8.4735f)),
new AirshipVent(AirshipVent.Ids.Cockpit, new Vector2(-22.099f, -1.512f)),
new AirshipVent(AirshipVent.Ids.ViewingDeck, new Vector2(-15.659f, -11.6991f)),
new AirshipVent(AirshipVent.Ids.EngineRoom, new Vector2(0.203f, -2.5361f)),
new AirshipVent(AirshipVent.Ids.Kitchen, new Vector2(-2.6019f, -9.338f)),
new AirshipVent(AirshipVent.Ids.MainHallBottom, new Vector2(7.021f, -3.730999f)),
new AirshipVent(AirshipVent.Ids.GapRight, new Vector2(9.814f, 3.206f)),
new AirshipVent(AirshipVent.Ids.GapLeft, new Vector2(12.663f, 5.922f)),
new AirshipVent(AirshipVent.Ids.MainHallTop, new Vector2(3.605f, 6.923f)),
new AirshipVent(AirshipVent.Ids.Showers, new Vector2(23.9869f, -1.386f)),
new AirshipVent(AirshipVent.Ids.Records, new Vector2(23.2799f, 8.259998f)),
new AirshipVent(AirshipVent.Ids.CargoBay, new Vector2(30.4409f, -3.577f)),
}.ToDictionary(x => x.Id, x => (Vent)x);

ConnectVents(AirshipVent.Ids.Vault, left: AirshipVent.Ids.Cockpit);
ConnectVents(AirshipVent.Ids.Cockpit, left: AirshipVent.Ids.Vault, right: AirshipVent.Ids.ViewingDeck);
ConnectVents(AirshipVent.Ids.ViewingDeck, left: AirshipVent.Ids.Cockpit);
ConnectVents(AirshipVent.Ids.EngineRoom, left: AirshipVent.Ids.Kitchen, right: AirshipVent.Ids.MainHallBottom);
ConnectVents(AirshipVent.Ids.Kitchen, left: AirshipVent.Ids.EngineRoom, right: AirshipVent.Ids.MainHallBottom);
ConnectVents(AirshipVent.Ids.MainHallBottom, left: AirshipVent.Ids.EngineRoom, right: AirshipVent.Ids.Kitchen);
ConnectVents(AirshipVent.Ids.GapRight, left: AirshipVent.Ids.MainHallTop, right: AirshipVent.Ids.GapLeft);
ConnectVents(AirshipVent.Ids.GapLeft, left: AirshipVent.Ids.MainHallTop, right: AirshipVent.Ids.GapRight);
ConnectVents(AirshipVent.Ids.MainHallTop, left: AirshipVent.Ids.GapLeft, right: AirshipVent.Ids.GapRight);
ConnectVents(AirshipVent.Ids.Showers, left: AirshipVent.Ids.Records, right: AirshipVent.Ids.CargoBay);
ConnectVents(AirshipVent.Ids.Records, left: AirshipVent.Ids.Showers, right: AirshipVent.Ids.CargoBay);
ConnectVents(AirshipVent.Ids.CargoBay, left: AirshipVent.Ids.Showers, right: AirshipVent.Ids.Records);
}

public override IReadOnlyDictionary<int, Vent> Vents { get; }

private void ConnectVents(AirshipVent.Ids vent, AirshipVent.Ids? left = null, AirshipVent.Ids? center = null, AirshipVent.Ids? right = null)
{
ConnectVents((int)vent, (int?)left, (int?)center, (int?)right);
}
}
}
24 changes: 24 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/MapData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Collections.Generic;

namespace Impostor.Api.Innersloth.Maps
{
public abstract class MapData
{
public static IReadOnlyDictionary<MapTypes, MapData> Maps { get; } = new Dictionary<MapTypes, MapData>
{
[MapTypes.Skeld] = new SkeldData(),
[MapTypes.MiraHQ] = new MiraData(),
[MapTypes.Polus] = new PolusData(),
[MapTypes.Airship] = new AirshipData(),
};

public abstract IReadOnlyDictionary<int, Vent> Vents { get; }

protected void ConnectVents(int vent, int? left = null, int? center = null, int? right = null)
{
Vents[vent].Left = left != null ? Vents[left.Value] : null;
Vents[vent].Center = center != null ? Vents[center.Value] : null;
Vents[vent].Right = right != null ? Vents[right.Value] : null;
}
}
}
47 changes: 47 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/MiraData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Impostor.Api.Innersloth.Maps.Vents;

namespace Impostor.Api.Innersloth.Maps
{
public class MiraData : MapData
{
public MiraData()
{
Vents = new[]
{
new MiraVent(MiraVent.Ids.Balcony, new Vector2(23.77f, -1.94f)),
new MiraVent(MiraVent.Ids.Cafeteria, new Vector2(23.9f, 7.18f)),
new MiraVent(MiraVent.Ids.Reactor, new Vector2(0.4800001f, 10.697f)),
new MiraVent(MiraVent.Ids.Laboratory, new Vector2(11.606f, 13.816f)),
new MiraVent(MiraVent.Ids.Office, new Vector2(13.28f, 20.13f)),
new MiraVent(MiraVent.Ids.Admin, new Vector2(22.39f, 17.23f)),
new MiraVent(MiraVent.Ids.Greenhouse, new Vector2(17.85f, 25.23f)),
new MiraVent(MiraVent.Ids.Medbay, new Vector2(15.41f, -1.82f)),
new MiraVent(MiraVent.Ids.Decontamination, new Vector2(6.83f, 3.145f)),
new MiraVent(MiraVent.Ids.LockerRoom, new Vector2(4.29f, 0.5299997f)),
new MiraVent(MiraVent.Ids.Launchpad, new Vector2(-6.18f, 3.56f)),
}.ToDictionary(x => x.Id, x => (Vent)x);

ConnectVents(MiraVent.Ids.Balcony, left: MiraVent.Ids.Medbay, right: MiraVent.Ids.Cafeteria);
ConnectVents(MiraVent.Ids.Cafeteria, left: MiraVent.Ids.Admin, right: MiraVent.Ids.Balcony);
ConnectVents(MiraVent.Ids.Reactor, left: MiraVent.Ids.Laboratory, center: MiraVent.Ids.Decontamination, right: MiraVent.Ids.Launchpad);
ConnectVents(MiraVent.Ids.Laboratory, left: MiraVent.Ids.Reactor, center: MiraVent.Ids.Decontamination, right: MiraVent.Ids.Office);
ConnectVents(MiraVent.Ids.Office, left: MiraVent.Ids.Laboratory, center: MiraVent.Ids.Admin, right: MiraVent.Ids.Greenhouse);
ConnectVents(MiraVent.Ids.Admin, left: MiraVent.Ids.Greenhouse, center: MiraVent.Ids.Cafeteria, right: MiraVent.Ids.Office);
ConnectVents(MiraVent.Ids.Greenhouse, left: MiraVent.Ids.Admin, right: MiraVent.Ids.Office);
ConnectVents(MiraVent.Ids.Medbay, left: MiraVent.Ids.Balcony, right: MiraVent.Ids.LockerRoom);
ConnectVents(MiraVent.Ids.Decontamination, left: MiraVent.Ids.Reactor, center: MiraVent.Ids.LockerRoom, right: MiraVent.Ids.Laboratory);
ConnectVents(MiraVent.Ids.LockerRoom, left: MiraVent.Ids.Medbay, center: MiraVent.Ids.Launchpad, right: MiraVent.Ids.Decontamination);
ConnectVents(MiraVent.Ids.Launchpad, left: MiraVent.Ids.Reactor, right: MiraVent.Ids.LockerRoom);
}

public override IReadOnlyDictionary<int, Vent> Vents { get; }

private void ConnectVents(MiraVent.Ids vent, MiraVent.Ids? left = null, MiraVent.Ids? center = null, MiraVent.Ids? right = null)
{
ConnectVents((int)vent, (int?)left, (int?)center, (int?)right);
}
}
}
49 changes: 49 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/PolusData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Impostor.Api.Innersloth.Maps.Vents;

namespace Impostor.Api.Innersloth.Maps
{
public class PolusData : MapData
{
public PolusData()
{
Vents = new[]
{
new PolusVent(PolusVent.Ids.Security, new Vector2(1.929f, -9.558001f)),
new PolusVent(PolusVent.Ids.Electrical, new Vector2(6.9f, -14.41f)),
new PolusVent(PolusVent.Ids.O2, new Vector2(3.51f, -16.58f)),
new PolusVent(PolusVent.Ids.Communications, new Vector2(12.304f, -18.898f)),
new PolusVent(PolusVent.Ids.Office, new Vector2(16.379f, -19.599f)),
new PolusVent(PolusVent.Ids.Admin, new Vector2(20.089f, -25.517f)),
new PolusVent(PolusVent.Ids.Laboratory, new Vector2(32.963f, -9.526f)),
new PolusVent(PolusVent.Ids.Lava, new Vector2(30.907f, -11.86f)),
new PolusVent(PolusVent.Ids.Storage, new Vector2(22f, -12.19f)),
new PolusVent(PolusVent.Ids.RightStabilizer, new Vector2(24.02f, -8.39f)),
new PolusVent(PolusVent.Ids.LeftStabilizer, new Vector2(9.64f, -7.72f)),
new PolusVent(PolusVent.Ids.OutsideAdmin, new Vector2(18.93f, -24.85f)),
}.ToDictionary(x => x.Id, x => (Vent)x);

ConnectVents(PolusVent.Ids.Security, left: PolusVent.Ids.O2, right: PolusVent.Ids.Electrical);
ConnectVents(PolusVent.Ids.Electrical, left: PolusVent.Ids.O2, right: PolusVent.Ids.Security);
ConnectVents(PolusVent.Ids.O2, left: PolusVent.Ids.Electrical, right: PolusVent.Ids.Security);
ConnectVents(PolusVent.Ids.Communications, left: PolusVent.Ids.Storage, right: PolusVent.Ids.Office);
ConnectVents(PolusVent.Ids.Office, left: PolusVent.Ids.Communications, right: PolusVent.Ids.Storage);
ConnectVents(PolusVent.Ids.Admin, left: PolusVent.Ids.OutsideAdmin, right: PolusVent.Ids.Lava);
ConnectVents(PolusVent.Ids.Laboratory, right: PolusVent.Ids.Lava);
ConnectVents(PolusVent.Ids.Lava, left: PolusVent.Ids.Laboratory, right: PolusVent.Ids.Admin);
ConnectVents(PolusVent.Ids.Storage, left: PolusVent.Ids.Communications, right: PolusVent.Ids.Office);
ConnectVents(PolusVent.Ids.RightStabilizer, left: PolusVent.Ids.LeftStabilizer);
ConnectVents(PolusVent.Ids.LeftStabilizer, left: PolusVent.Ids.RightStabilizer);
ConnectVents(PolusVent.Ids.OutsideAdmin, right: PolusVent.Ids.Admin);
}

public override IReadOnlyDictionary<int, Vent> Vents { get; }

private void ConnectVents(PolusVent.Ids vent, PolusVent.Ids? left = null, PolusVent.Ids? center = null, PolusVent.Ids? right = null)
{
ConnectVents((int)vent, (int?)left, (int?)center, (int?)right);
}
}
}
53 changes: 53 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/SkeldData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Impostor.Api.Innersloth.Maps.Vents;

namespace Impostor.Api.Innersloth.Maps
{
public class SkeldData : MapData
{
public SkeldData()
{
Vents = new[]
{
new SkeldVent(SkeldVent.Ids.Admin, new Vector2(2.544f, -9.955201f)),
new SkeldVent(SkeldVent.Ids.RightHallway, new Vector2(9.384f, -6.438f)),
new SkeldVent(SkeldVent.Ids.Cafeteria, new Vector2(4.2588f, -0.276f)),
new SkeldVent(SkeldVent.Ids.Electrical, new Vector2(-9.7764f, -8.034f)),
new SkeldVent(SkeldVent.Ids.UpperEngine, new Vector2(-15.288f, 2.52f)),
new SkeldVent(SkeldVent.Ids.Security, new Vector2(-12.534f, -6.9492f)),
new SkeldVent(SkeldVent.Ids.Medbay, new Vector2(-10.608f, -4.176f)),
new SkeldVent(SkeldVent.Ids.Weapons, new Vector2(8.820001f, 3.324f)),
new SkeldVent(SkeldVent.Ids.LowerReactor, new Vector2(-20.796f, -6.9528f)),
new SkeldVent(SkeldVent.Ids.LowerEngine, new Vector2(-15.2508f, -13.656f)),
new SkeldVent(SkeldVent.Ids.Shields, new Vector2(9.5232f, -14.3376f)),
new SkeldVent(SkeldVent.Ids.UpperReactor, new Vector2(-21.876f, -3.0516f)),
new SkeldVent(SkeldVent.Ids.UpperNavigation, new Vector2(16.008f, -3.168f)),
new SkeldVent(SkeldVent.Ids.LowerNavigation, new Vector2(16.008f, -6.384f)),
}.ToDictionary(x => x.Id, x => (Vent)x);

ConnectVents(SkeldVent.Ids.Admin, left: SkeldVent.Ids.Cafeteria, right: SkeldVent.Ids.RightHallway);
ConnectVents(SkeldVent.Ids.RightHallway, left: SkeldVent.Ids.Admin, right: SkeldVent.Ids.Cafeteria);
ConnectVents(SkeldVent.Ids.Cafeteria, left: SkeldVent.Ids.Admin, right: SkeldVent.Ids.RightHallway);
ConnectVents(SkeldVent.Ids.Electrical, left: SkeldVent.Ids.Security, right: SkeldVent.Ids.Medbay);
ConnectVents(SkeldVent.Ids.UpperEngine, left: SkeldVent.Ids.UpperReactor);
ConnectVents(SkeldVent.Ids.Security, left: SkeldVent.Ids.Medbay, right: SkeldVent.Ids.Electrical);
ConnectVents(SkeldVent.Ids.Medbay, left: SkeldVent.Ids.Security, right: SkeldVent.Ids.Electrical);
ConnectVents(SkeldVent.Ids.Weapons, right: SkeldVent.Ids.UpperNavigation);
ConnectVents(SkeldVent.Ids.LowerReactor, left: SkeldVent.Ids.LowerEngine);
ConnectVents(SkeldVent.Ids.LowerEngine, left: SkeldVent.Ids.LowerReactor);
ConnectVents(SkeldVent.Ids.Shields, left: SkeldVent.Ids.LowerNavigation);
ConnectVents(SkeldVent.Ids.UpperReactor, left: SkeldVent.Ids.UpperEngine);
ConnectVents(SkeldVent.Ids.UpperNavigation, right: SkeldVent.Ids.Weapons);
ConnectVents(SkeldVent.Ids.LowerNavigation, right: SkeldVent.Ids.Shields);
}

public override IReadOnlyDictionary<int, Vent> Vents { get; }

private void ConnectVents(SkeldVent.Ids vent, SkeldVent.Ids? left = null, SkeldVent.Ids? center = null, SkeldVent.Ids? right = null)
{
ConnectVents((int)vent, (int?)left, (int?)center, (int?)right);
}
}
}
27 changes: 27 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/Vents/AirshipVent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System.Numerics;

namespace Impostor.Api.Innersloth.Maps.Vents
{
public class AirshipVent : Vent
{
internal AirshipVent(Ids id, Vector2 position) : base((int)id, id.ToString(), position)
{
}

public enum Ids
{
Vault = 0,
Cockpit = 1,
ViewingDeck = 2,
EngineRoom = 3,
Kitchen = 4,
MainHallBottom = 5,
GapRight = 6,
GapLeft = 7,
MainHallTop = 8,
Showers = 9,
Records = 10,
CargoBay = 11,
}
}
}
26 changes: 26 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/Vents/MiraVent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System.Numerics;

namespace Impostor.Api.Innersloth.Maps.Vents
{
public class MiraVent : Vent
{
internal MiraVent(Ids id, Vector2 position) : base((int)id, id.ToString(), position)
{
}

public enum Ids
{
Balcony = 1,
Cafeteria = 2,
Reactor = 3,
Laboratory = 4,
Office = 5,
Admin = 6,
Greenhouse = 7,
Medbay = 8,
Decontamination = 9,
LockerRoom = 10,
Launchpad = 11,
}
}
}
27 changes: 27 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/Vents/PolusVent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System.Numerics;

namespace Impostor.Api.Innersloth.Maps.Vents
{
public class PolusVent : Vent
{
internal PolusVent(Ids id, Vector2 position) : base((int)id, id.ToString(), position)
{
}

public enum Ids
{
Security = 0,
Electrical = 1,
O2 = 2,
Communications = 3,
Office = 4,
Admin = 5,
Laboratory = 6,
Lava = 7,
Storage = 8,
RightStabilizer = 9,
LeftStabilizer = 10,
OutsideAdmin = 11,
}
}
}
29 changes: 29 additions & 0 deletions src/Impostor.Api/Innersloth/Maps/Vents/SkeldVent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System.Numerics;

namespace Impostor.Api.Innersloth.Maps.Vents
{
public class SkeldVent : Vent
{
internal SkeldVent(Ids id, Vector2 position) : base((int)id, id.ToString(), position)
{
}

public enum Ids
{
Admin = 0,
RightHallway = 1,
Cafeteria = 2,
Electrical = 3,
UpperEngine = 4,
Security = 5,
Medbay = 6,
Weapons = 7,
LowerReactor = 8,
LowerEngine = 9,
Shields = 10,
UpperReactor = 11,
UpperNavigation = 12,
LowerNavigation = 13,
}
}
}
26 changes: 26 additions & 0 deletions src/Impostor.Api/Innersloth/Vent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System.Numerics;

namespace Impostor.Api.Innersloth
{
public abstract class Vent
{
internal Vent(int id, string name, Vector2 position)
{
Id = id;
Name = name;
Position = position;
}

public int Id { get; }

public string Name { get; }

public Vector2 Position { get; }

public Vent? Left { get; internal set; }

public Vent? Center { get; internal set; }

public Vent? Right { get; internal set; }
}
}
Loading

0 comments on commit 304b4bb

Please sign in to comment.