Пример #1
0
        public void Reset(string hearthstone_path)
        {
            game_state_ = new State.Game();

            this.stable_decider_ = new StableDecider(100); // 100 ms

            this.log_reader = new LogReader(hearthstone_path, game_state_, logger_);
            this.log_reader.StartWaitingMainActionEvent += StartWaitingMainAction;
            this.log_reader.BlockStart += (sender, e) =>
            {
                game_state_.NotifyBlockStarted(e.entity_id, e.block_type);

                if (this.BlockStart != null)
                {
                    this.BlockStart(this, new BlockStartEventArgs(e, game_state_));
                }
            };
            this.log_reader.BlockEnd += (sender, e) =>
            {
                game_state_.NotifyBlockEnded(e.entity_id, e.block_type, logger_);

                if (e.block_type == "PLAY")
                {
                    AnalyzePlayHandCardAction(e.entity_id);
                }

                if (this.BlockEnd != null)
                {
                    this.BlockEnd(this, new BlockEndEventArgs(e, game_state_));
                }
            };
            this.log_reader.CreateGameEvent += (sender, e) =>
            {
                // if game is auto-restarted, we don't want to reset the game info
                // because this loses the player/opponent's entity id
                game_state_.SoftReset();

                CreateGameEvent(sender, e);
            };
            this.log_reader.log_changed = () =>
            {
                stable_decider_.Changed();
            };
            this.log_reader.EntityTagChanged += (sender, e) =>
            {
                game_state_.NotifyEntityTagChanged(e.current.Id, e.prev, logger_);
            };

            game_state_.EndTurnEvent += (sender, e) =>
            {
                if (this.EndTurnEvent != null)
                {
                    this.EndTurnEvent(this, new EndTurnEventArgs(e, game_state_));
                }
            };
        }