예제 #1
0
        public static void AssertValidAction(GameInstance game, UctAction action)
        {
            switch (action.Type)
            {
            case UctActionType.Null:
                break;

            case UctActionType.EndTurn:
                break;

            case UctActionType.Move:
            case UctActionType.DefensiveMove:
                AssertValidMoveAction(game, action);
                break;

            case UctActionType.AbilityUse:
                AssertValidAbilityUseAction(game, action);
                break;

            case UctActionType.AttackMove:
                AssertValidMoveAction(game, action);
                var afterMove = ActionEvaluator.F(game, action.ToPureMove());
                AssertValidAbilityUseAction(afterMove, action.ToPureAbilityUse());
                break;
            }
        }
예제 #2
0
        public async Task <int> PlayReplay(List <UctAction> actions, Func <bool> endTurnFunc)
        {
            // Wait for GUI initialization
            await Task.Delay(TimeSpan.FromSeconds(1));

            using (new TemporarilySuspendReplayRecording()) {
                foreach (var action in actions)
                {
                    while (IsPaused)
                    {
                        await Task.Delay(TimeSpan.FromMilliseconds(100));
                    }

                    if (action.Type == UctActionType.EndTurn)
                    {
                        ActionEvaluator.FNoCopy(_gameInstance, action);
                        endTurnFunc();
                        await Task.Delay(200);
                    }
                    else
                    {
                        await SlowPlayAction(_gameInstance, action);
                    }
                    Console.WriteLine($"Replaying {action}");
                }
            }

            return(actions.Count);
        }
예제 #3
0
        public async Task <int> SlowMainLoop(Func <bool> turnEndFunc, Action gameFinishedFunc)
        {
            // Wait for GUI initialization
            await Task.Delay(TimeSpan.FromSeconds(1));

            State = GameEventState.SettingUpTurn;

            var state = _gameInstance.State;

            _gameInstance.Reset();

            int totalTurns = 0;

            state.SlowUpdateIsFinished(_gameInstance.MobManager);

            while (!_gameInstance.IsFinished)
            {
                while (IsPaused)
                {
                    await Task.Delay(TimeSpan.FromMilliseconds(100));
                }

                totalTurns++;

                await _gameInstance.CurrentController.SlowPlayTurn(this);

                ActionEvaluator.FNoCopy(_gameInstance, UctAction.EndTurnAction());

                turnEndFunc();
                await Task.Delay(200);
            }

            ReplayRecorder.Instance.SaveAndClear(_gameInstance);
            Console.WriteLine(Constants.GetLogBuffer());

            gameFinishedFunc();

            return(totalTurns);
        }
예제 #4
0
        private async Task SlowBroadcastAction(UctAction action)
        {
            await Task.WhenAll(_subscribers.Select(x => x.SlowActionApplied(action)));

            ActionEvaluator.FNoCopy(_gameInstance, action);
        }
예제 #5
0
 public void FastPlayAction(UctAction action)
 {
     ActionEvaluator.FNoCopy(_gameInstance, action);
 }