private Request <GameUpdateInfo> GetGameStateRequest() { var result = new GameUpdateInfo(); var request = new Request <GameUpdateInfo>(); request.Type = "update"; request.Data = result; result.Joinable = playerHandler.GetAvailablePlayerSlots().Count > 0; result.Players = playerHandler .GetPlayers() .Select(MapPlayerInfo) .ToList(); result.DaysPassed = gameState.daysPassed; result.Started = result.DaysPassed > -1; var phase = gameState.GetCurrentPhase(); if (phase == null) { return(request); } result.PhaseName = phase.Name; var subPhase = phase.GetCurrentSubPhase(); if (subPhase == null) { return(request); } result.SubPhase.Name = subPhase.Name; result.SubPhase.EnterTime = subPhase.EnterTime; result.SubPhase.ExitTime = subPhase.ExitTime; result.SubPhase.HasEnded = subPhase.HasEnded; result.SubPhase.IsActive = subPhase.IsActive; if (subPhase is TimeBasedSubPhase time) { result.SubPhase.Timer = time.Timer; result.SubPhase.Duration = time.Duration; } else if (subPhase is ConditionTimeBasedSubPhase conditionTime) { result.SubPhase.Timer = conditionTime.Timer; result.SubPhase.Duration = conditionTime.Duration; } return(request); }
public GameContext(GameUpdateInfo gameState, int revision) { this.gameState = gameState; this.revision = revision; }