/// <summary> /// Pops the <seealso cref="ActiveGameState"/>. /// </summary> public static void PopGameState() { Engine.gameStateTransitions += delegate { // Store currently active state GameState lastActiveState = Engine.ActiveGameState; // If null, do nothing if (lastActiveState == null) { return; } // Pause the state lastActiveState.OnPause(); // Change the active game state and initialize Engine.ActiveGameState = lastActiveState.LastState; if (Engine.ActiveGameState != null) { Engine.ActiveGameState.NextState = null; Engine.ActiveGameState.OnResume(); } // Destroy the last state lastActiveState.TrulyDestroy(); }; }
/// <summary> /// Pushes a <seealso cref="GameState"/> to the execution stack. /// </summary> /// <typeparam name="T">The type of the game state</typeparam> /// <param name="gameState">The game state to push</param> /// <returns>The added game state</returns> /// <exception cref="ArgumentNullException"><paramref name="gameState"/> is null</exception> /// <exception cref="InvalidOperationException"><paramref name="gameState"/> was used/pushed before already</exception> public static T PushGameState <T>(T gameState) where T : GameState { if (gameState == null) { throw new ArgumentNullException(nameof(gameState)); } if (gameState.IsInUse) { throw new InvalidOperationException("The given GameState was pushed/used already."); } gameState.IsInUse = true; Engine.gameStateTransitions += delegate { // Pause last state if (Engine.ActiveGameState != null) { Engine.ActiveGameState.NextState = gameState; Engine.ActiveGameState.OnPause(); gameState.LastState = Engine.ActiveGameState; } // Set and initialize next state Engine.ActiveGameState = gameState; gameState.OnResume(); gameState.Initialize(); }; return(gameState); }
private async void GameChanged(object sender, PropertyChangedEventArgs e) { GameStateChange gs = sender as GameStateChange; foreach (MMplayerNG pl in Games.Where(x => x.ID == gs.GameID).FirstOrDefault().GetPlayers()) { await NotifyPlayer(pl, "gamechanged"); } }
/// <summary> /// Executes all queued game state transitions. /// </summary> private static void DoGameStateTransitions() { Engine.Status = EngineStatus.HandlingGameStates; Engine.gameStateTransitions?.Invoke(); Engine.gameStateTransitions = null; Engine.Status = EngineStatus.Idle; }
public async Task <int> GameStateChange(GameStateChange gsc) { // submit data switch (gsc.EventType.ToLower()) { case "st_gamestart": return(await _SSQCStatsRepository.GameStart(gsc)); default: return(await _SSQCStatsRepository.GameStateChange(gsc.GameID, gsc.GameTime, gsc.EventType, gsc.Initiator)); } }
public async Task <int> GameStart(GameStateChange gsc) { SSQCGameInfo gi = new SSQCGameInfo { ServerName = gsc.ServerName , Map = gsc.Map }; // insert entry, return gameid SSQCGameState gs = new SSQCGameState { GameTime = gsc.GameTime, EventType = gsc.EventType, Initiator = gsc.Initiator }; foreach (GamePlayer gp in gsc.Players) { gi.Players.Add(new SSQCGamePlayer { Name = gp.Name, Team = gp.Team, Class = gp.Class, TF_ID = gp.TF_ID, Player = true }); } foreach (GamePlayer gp in gsc.Spectators) { gi.Players.Add(new SSQCGamePlayer { Name = gp.Name, Team = gp.Team, Class = gp.Class, TF_ID = gp.TF_ID, Player = false }); } gi.GameStates.Add(gs); await _context.AddAsync(gi); _context.SaveChanges(); return(gi.GameID); }
void Start() //initialize the settings { animation_flag = false; animation_countdown = 3.0f; miniGame = GetComponent <GameStateChange>(); Directory.CreateDirectory("./Data"); string filename = "Data" + String.Format("{0:s}", DateTime.Now); filename = filename.Replace(":", string.Empty); sw = File.AppendText("./Data/" + filename + ".txt"); selectedColor = Color.HSVToRGB(0.0f, 1.0f, 1.0f); pressedToggle = null; selectedArea = null; delta_time = 0.0f; total_time = 0.0f; }
void Start() { //Fix m_MiniGameController = m_Controller.GetComponent <GameStateChange>(); }
public async Task <int> GameStateChange([FromBody] GameStateChange gsc) { var resp = await _statsService.GameStateChange(gsc); return(resp); }
protected virtual void OnGameStateChange(EventArgs <RoboGameState> args) { GameState = args.Value; GameStateChange?.Invoke(this, args); }
private void HandlePowerTaskList(Line line) { var match = _gameEntityRegex.Match(line.Text); if (match.Success) { var id = int.Parse(match.Groups["id"].Value); _currentEntity = id; GameStateChange?.Invoke(new FullEntity(new GameEntityData(id), null)); return; } match = _playerEntityRegex.Match(line.Text); if (match.Success) { var entityId = int.Parse(match.Groups["id"].Value); var playerId = int.Parse(match.Groups["playerId"].Value); _currentEntity = entityId; GameStateChange?.Invoke(new FullEntity(new PlayerEntityData(entityId, playerId), null)); return; } match = _fullEntityRegex.Match(line.Text); if (match.Success) { var id = int.Parse(match.Groups["id"].Value); _currentEntity = id; var cardId = match.Groups["cardId"].Value; var zone = GameTagParser.ParseEnum <Zone>(match.Groups["zone"].Value); if (string.IsNullOrEmpty(cardId) && zone != Zone.SETASIDE) { cardId = _currentBlock?.Data.NextPredictedCard() ?? cardId; } GameStateChange?.Invoke(new FullEntity(new EntityData(id, null, cardId, zone), _currentBlock?.Data)); return; } match = _tagChangeRegex.Match(line.Text); if (match.Success) { var entity = ParseEntity(match.Groups["entity"].Value); Enum.TryParse(match.Groups["tag"].Value, out GameTag tag); var value = GameTagParser.ParseTag(tag, match.Groups["value"].Value); var entityId = entity.Id == -1 ? null : (int?)entity.Id; GameStateChange?.Invoke(new TagChange(new TagChangeData(tag, value, false, entityId, entity.Name))); return; } match = _updatingEntityRegex.Match(line.Text); if (match.Success) { var cardId = match.Groups["cardId"].Value; var entity = ParseEntity(match.Groups["entity"].Value); _currentEntity = entity.Id; var type = match.Groups["type"].Value; if (type == "CHANGE_ENTITY") { GameStateChange?.Invoke(new ChangeEntity(new EntityData(entity.Id, entity.Name, cardId, null))); } else { GameStateChange?.Invoke(new ShowEntity(new EntityData(entity.Id, entity.Name, cardId, null), _currentBlock?.Data)); } return; } match = _creationTagRegex.Match(line.Text); if (match.Success && !line.Text.Contains("HIDE_ENTITY")) { var tag = GameTagParser.ParseEnum <GameTag>(match.Groups["tag"].Value); var value = GameTagParser.ParseTag(tag, match.Groups["value"].Value); GameStateChange?.Invoke(new TagChange(new TagChangeData(tag, value, true, _currentEntity, null))); return; } match = _hideEntityRegex.Match(line.Text); if (match.Success) { var id = int.Parse(match.Groups["id"].Value); _currentEntity = id; GameStateChange?.Invoke(new HideEntity(new EntityData(id, "", null, null))); } match = _blockStartRegex.Match(line.Text); if (match.Success) { var type = match.Groups["type"].Value; var entity = ParseEntity(match.Groups["entity"].Value.Trim()); var target = ParseEntity(match.Groups["target"].Value.Trim()); var effectCardId = match.Groups["effectCardId"].Value; var effectIndex = int.Parse(match.Groups["effectIndex"].Value); var rawTriggerKeyword = match.Groups["triggerKeyword"].Value; var triggerKeyword = string.IsNullOrEmpty(rawTriggerKeyword) || rawTriggerKeyword == "0" ? null : (GameTag?)GameTagParser.ParseEnum <GameTag>(rawTriggerKeyword); var blockData = new BlockData(type, entity.Id, entity.CardId, effectCardId, effectIndex, triggerKeyword, target); _currentBlock = _currentBlock?.CreateChild(blockData) ?? new Block(null, blockData); foreach (var card in _blockHelper.GetCreatedCards(blockData)) { blockData.PredictedCards.Add(card); } BlockStart?.Invoke(blockData); return; } match = _debugDumpRegex.Match(line.Text); if (match.Success) { if (int.Parse(match.Groups["id"].Value) == 2) { SetupComplete?.Invoke(); } } if (line.Text.Contains("BLOCK_END")) { BlockEnd?.Invoke(_currentBlock?.Data); _currentBlock = _currentBlock?.Parent; } }