using GeoSus.Client; using System.Collections.Generic; /// /// Single source of truth for all in-game state on the client. /// Updated exclusively by GameManager_Network; read by GameManager_UI. /// public class GameState { // ── Phase / Role ────────────────────────────────────────────────────────── public GamePhase Phase { get; set; } = GamePhase.Lobby; public PlayerRole? MyRole { get; set; } public bool IsDead { get; set; } // ── Tasks ───────────────────────────────────────────────────────────────── public List MyTasks { get; set; } = new List(); public HashSet MyCompletedTaskIds { get; set; } = new HashSet(); public int TotalCompleted { get; set; } public int TotalRequired { get; set; } // ── Players ─────────────────────────────────────────────────────────────── public List Players { get; set; } = new List(); // ── Meeting ─────────────────────────────────────────────────────────────── public MeetingStartedPayload ActiveMeeting { get; set; } public VotingClosedPayload LastVoteResult { get; set; } public HashSet VotedPlayerIds { get; set; } = new HashSet(); // ── Sabotage ────────────────────────────────────────────────────────────── public SabotageStartedPayload ActiveSabotage { get; set; } // ── End game ────────────────────────────────────────────────────────────── public GameEndedPayload GameEndData { get; set; } // ── Kill cooldown (tracked by GameManager, reflected here for UI) ───────── public float KillCooldownRemaining { get; set; } // ── Notification (toast) ───────────────────────────────────────────────── public string ToastMessage { get; set; } public float ToastExpiry { get; set; } // UnityEngine.Time.time }