Example #1
0
        /// <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();
            };
        }
Example #2
0
        /// <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);
        }
Example #3
0
        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");
            }
        }
Example #4
0
        /// <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;
        }
Example #5
0
        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);
        }
Example #7
0
    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;
    }
Example #8
0
    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);
        }
Example #10
0
 protected virtual void OnGameStateChange(EventArgs <RoboGameState> args)
 {
     GameState = args.Value;
     GameStateChange?.Invoke(this, args);
 }
Example #11
0
        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;
            }
        }