From 84be9c4fcdb36ff7275495bfd56d8f58c7e50889 Mon Sep 17 00:00:00 2001 From: D1GQ Date: Sat, 21 Mar 2026 02:58:35 -0500 Subject: [PATCH] clean up --- src/Data/Replay/Events/AppearReplayEvent.cs | 3 +- src/Data/Replay/Events/MurderReplayEvent.cs | 3 +- src/Data/Replay/Events/ProtectReplayEvent.cs | 3 +- .../Replay/Events/ProtectedReplayEvent.cs | 3 +- src/Data/Replay/Events/SetRoleEvent.cs | 31 ++++++++++++ .../Replay/Events/ShapeshiftReplayEvent.cs | 3 +- .../Replay/Events/StartMeetingReplayEvent.cs | 5 ++ .../Replay/Events/UpdateSystemReplayEvent.cs | 3 +- src/Data/Replay/Events/VanishReplayEvent.cs | 3 +- src/Data/Replay/Events/VentReplayEvent.cs | 3 +- src/Data/Replay/PlayerReplayData.cs | 39 +++++++-------- src/Data/Replay/Replay.cs | 48 +++---------------- 12 files changed, 76 insertions(+), 71 deletions(-) create mode 100644 src/Data/Replay/Events/SetRoleEvent.cs diff --git a/src/Data/Replay/Events/AppearReplayEvent.cs b/src/Data/Replay/Events/AppearReplayEvent.cs index 841666c..e3f96b8 100644 --- a/src/Data/Replay/Events/AppearReplayEvent.cs +++ b/src/Data/Replay/Events/AppearReplayEvent.cs @@ -8,9 +8,10 @@ namespace BetterAmongUs.Data.Replay.Events; [Serializable] internal sealed class AppearReplayEvent : IReplayEvent<(int playerId, bool animate)> { + [JsonPropertyName("id")] public string Id => "player_appear"; - [JsonInclude] + [JsonPropertyName("eventData")] public (int playerId, bool animate) EventData { get; set; } public void Play() diff --git a/src/Data/Replay/Events/MurderReplayEvent.cs b/src/Data/Replay/Events/MurderReplayEvent.cs index efcaea1..4564b59 100644 --- a/src/Data/Replay/Events/MurderReplayEvent.cs +++ b/src/Data/Replay/Events/MurderReplayEvent.cs @@ -7,9 +7,10 @@ namespace BetterAmongUs.Data.Replay.Events; [Serializable] internal sealed class MurderReplayEvent : IReplayEvent<(int killerId, int targetId)> { + [JsonPropertyName("id")] public string Id => "player_murder"; - [JsonInclude] + [JsonPropertyName("eventData")] public (int killerId, int targetId) EventData { get; set; } public void Play() diff --git a/src/Data/Replay/Events/ProtectReplayEvent.cs b/src/Data/Replay/Events/ProtectReplayEvent.cs index 9db1707..b6a6f09 100644 --- a/src/Data/Replay/Events/ProtectReplayEvent.cs +++ b/src/Data/Replay/Events/ProtectReplayEvent.cs @@ -8,9 +8,10 @@ namespace BetterAmongUs.Data.Replay.Events; [Serializable] internal sealed class ProtectReplayEvent : IReplayEvent<(int playerId, int targetId)> { + [JsonPropertyName("id")] public string Id => "protect_player"; - [JsonInclude] + [JsonPropertyName("eventData")] public (int playerId, int targetId) EventData { get; set; } public void Play() diff --git a/src/Data/Replay/Events/ProtectedReplayEvent.cs b/src/Data/Replay/Events/ProtectedReplayEvent.cs index 15beb16..1896ddc 100644 --- a/src/Data/Replay/Events/ProtectedReplayEvent.cs +++ b/src/Data/Replay/Events/ProtectedReplayEvent.cs @@ -7,9 +7,10 @@ namespace BetterAmongUs.Data.Replay.Events; [Serializable] internal sealed class ProtectedReplayEvent : IReplayEvent<(int killerId, int targetId)> { + [JsonPropertyName("id")] public string Id => "player_protected"; - [JsonInclude] + [JsonPropertyName("eventData")] public (int killerId, int targetId) EventData { get; set; } public void Play() diff --git a/src/Data/Replay/Events/SetRoleEvent.cs b/src/Data/Replay/Events/SetRoleEvent.cs new file mode 100644 index 0000000..91e7fbd --- /dev/null +++ b/src/Data/Replay/Events/SetRoleEvent.cs @@ -0,0 +1,31 @@ +using AmongUs.GameOptions; +using BetterAmongUs.Helpers; +using BetterAmongUs.Interfaces; +using System.Text.Json.Serialization; + +namespace BetterAmongUs.Data.Replay.Events; + +[Serializable] +internal sealed class SetRoleEvent : IReplayEvent<(int playerId, int roleType)> +{ + [JsonPropertyName("id")] + public string Id => "set_role"; + + [JsonPropertyName("eventData")] + public (int playerId, int roleType) EventData { get; set; } + + public void Play() + { + var player = Utils.PlayerFromPlayerId(EventData.playerId); + if (player != null) + { + var roleType = (RoleTypes)EventData.roleType; + player.RpcSetRole(roleType, true); + } + } + + public void Record(PlayerControl player, RoleTypes roleType) + { + EventData = (player.Data.PlayerId, (int)roleType); + } +} diff --git a/src/Data/Replay/Events/ShapeshiftReplayEvent.cs b/src/Data/Replay/Events/ShapeshiftReplayEvent.cs index 59ed920..4bffdc3 100644 --- a/src/Data/Replay/Events/ShapeshiftReplayEvent.cs +++ b/src/Data/Replay/Events/ShapeshiftReplayEvent.cs @@ -8,9 +8,10 @@ namespace BetterAmongUs.Data.Replay.Events; [Serializable] internal sealed class ShapeshiftReplayEvent : IReplayEvent<(int playerId, int targetId, bool animate)> { + [JsonPropertyName("id")] public string Id => "player_shapeshift"; - [JsonInclude] + [JsonPropertyName("eventData")] public (int playerId, int targetId, bool animate) EventData { get; set; } public void Play() diff --git a/src/Data/Replay/Events/StartMeetingReplayEvent.cs b/src/Data/Replay/Events/StartMeetingReplayEvent.cs index 01ecbd7..fbd81e7 100644 --- a/src/Data/Replay/Events/StartMeetingReplayEvent.cs +++ b/src/Data/Replay/Events/StartMeetingReplayEvent.cs @@ -1,10 +1,15 @@ using BetterAmongUs.Interfaces; +using System.Text.Json.Serialization; namespace BetterAmongUs.Data.Replay.Events; +[Serializable] internal sealed class StartMeetingReplayEvent : IReplayEvent<(int playerId, int targetId)> { + [JsonPropertyName("id")] public string Id => "start_meeting"; + + [JsonPropertyName("eventData")] public (int playerId, int targetId) EventData { get; set; } public void Play() diff --git a/src/Data/Replay/Events/UpdateSystemReplayEvent.cs b/src/Data/Replay/Events/UpdateSystemReplayEvent.cs index d877ff5..076dd24 100644 --- a/src/Data/Replay/Events/UpdateSystemReplayEvent.cs +++ b/src/Data/Replay/Events/UpdateSystemReplayEvent.cs @@ -7,9 +7,10 @@ namespace BetterAmongUs.Data.Replay.Events; [Serializable] internal sealed class UpdateSystemReplayEvent : IReplayEvent<(byte systemType, int playerId, byte amount)> { + [JsonPropertyName("id")] public string Id => "update_system"; - [JsonInclude] + [JsonPropertyName("eventData")] public (byte systemType, int playerId, byte amount) EventData { get; set; } public void Play() diff --git a/src/Data/Replay/Events/VanishReplayEvent.cs b/src/Data/Replay/Events/VanishReplayEvent.cs index 862fc8a..127e485 100644 --- a/src/Data/Replay/Events/VanishReplayEvent.cs +++ b/src/Data/Replay/Events/VanishReplayEvent.cs @@ -8,9 +8,10 @@ namespace BetterAmongUs.Data.Replay.Events; [Serializable] internal sealed class VanishReplayEvent : IReplayEvent { + [JsonPropertyName("id")] public string Id => "player_vanish"; - [JsonInclude] + [JsonPropertyName("eventData")] public int EventData { get; set; } public void Play() diff --git a/src/Data/Replay/Events/VentReplayEvent.cs b/src/Data/Replay/Events/VentReplayEvent.cs index 594cd48..a9cbd2f 100644 --- a/src/Data/Replay/Events/VentReplayEvent.cs +++ b/src/Data/Replay/Events/VentReplayEvent.cs @@ -7,9 +7,10 @@ namespace BetterAmongUs.Data.Replay.Events; [Serializable] internal sealed class VentReplayEvent : IReplayEvent<(int playerId, bool exit, int ventId)> { + [JsonPropertyName("id")] public string Id => "player_vent"; - [JsonInclude] + [JsonPropertyName("eventData")] public (int playerId, bool exit, int ventId) EventData { get; set; } public void Play() diff --git a/src/Data/Replay/PlayerReplayData.cs b/src/Data/Replay/PlayerReplayData.cs index 1f4d88e..35dfd33 100644 --- a/src/Data/Replay/PlayerReplayData.cs +++ b/src/Data/Replay/PlayerReplayData.cs @@ -1,36 +1,31 @@ -using AmongUs.GameOptions; +using System.Text.Json.Serialization; using UnityEngine; namespace BetterAmongUs.Data.Replay; -/// -/// Represents player data for replay functionality. -/// [Serializable] internal class PlayerReplayData { - /// - /// Gets or sets the player's ID. - /// + [JsonPropertyName("playerId")] public int PlayerId; - /// - /// Gets or sets the player's name. - /// + [JsonPropertyName("playerName")] public string PlayerName = ""; - /// - /// Gets or sets the player's role type. - /// - public RoleTypes Role; + [JsonPropertyName("movementData")] + public List<(float timeStamp, Vector2 pos)> MovementDataBuffer = []; - /// - /// Gets or sets the buffer of movement data containing timestamps and positions. - /// - public (float timeStamp, Vector2 pos)[] MovementDataBuffer = []; - - /// - /// Gets or sets the player's cosmetic data. - /// + [JsonPropertyName("cosmeticData")] public (int colorId, string skinId, string visorId, string petId, string namePlateId) CosmeticData = new(); + + internal void Set(PlayerControl player) + { + PlayerId = player.Data.PlayerId; + PlayerName = player.Data.PlayerName; + } + + internal void RecordMovement(Vector2 pos) + { + MovementDataBuffer.Add((0, pos)); + } } \ No newline at end of file diff --git a/src/Data/Replay/Replay.cs b/src/Data/Replay/Replay.cs index 7422dc5..231ccee 100644 --- a/src/Data/Replay/Replay.cs +++ b/src/Data/Replay/Replay.cs @@ -1,72 +1,38 @@ using BetterAmongUs.Interfaces; +using System.Text.Json.Serialization; namespace BetterAmongUs.Data.Replay; -/// -/// Represents a replay of a game session. -/// [Serializable] internal class Replay { - /// - /// Gets or sets the map ID for the replay. - /// + [JsonPropertyName("mapId")] public int MapId; - /// - /// Gets or sets the list of player data for the replay. - /// + [JsonPropertyName("playerData")] public List PlayerData = []; - /// - /// Gets or sets the dictionary of replay events keyed by timestamp. - /// + [JsonPropertyName("events")] public Dictionary> Events = []; - /// - /// Loads the replay and initializes the game session. - /// - /// - /// Sets up the map and host game, then creates player instances. - /// - public void Load() + internal void Load() { AmongUsClient.Instance.TutorialMapId = MapId; UnityEngine.Object.FindFirstObjectByType().hostGameButton.OnClick(); CreatePlayers(); } - /// - /// Creates player instances for the replay. - /// - /// - /// This method is currently a placeholder and needs implementation. - /// private void CreatePlayers() { // TODO: Implement player creation logic } - /// - /// Updates player movement data at the specified timestamp. - /// - /// The timestamp to update movement for. - /// - /// This method is currently a placeholder and needs implementation. - /// - public void UpdateMovement(float timeStamp) + internal void UpdateMovement(float timeStamp) { // TODO: Implement movement update logic } - /// - /// Updates replay events at the specified timestamp. - /// - /// The timestamp to update events for. - /// - /// This method is currently a placeholder and needs implementation. - /// - public void UpdateEvents(float timeStamp) + internal void UpdateEvents(float timeStamp) { // TODO: Implement event update logic }