コード例 #1
0
ファイル: WorldState.cs プロジェクト: teamstor/aod
        private IEnumerator <ICoroutineOperation> RunCombatCoroutine(object enemy)
        {
            DrawToScreenOrRenderTarget(Game.Batch, new Vector2(480, 270), _transitionRenderTarget);
            _transitionType = TransitionType.CombatIn;
            _transition.TweenTo(1, TweenEaseType.EaseInCubic, 0.5);

            yield return(Wait.Seconds(Game, 0.8));

            CombatState state = new CombatState(Player, enemy as LivingEntity);

            state.Game = Game;

            // do it manually so we don't call OnLeave in the other state
            typeof(Game).GetField("_state", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(Game, state);
            state.OnEnter(this);

            while (Game.CurrentState != this)
            {
                yield return(null);
            }

            DrawToScreenOrRenderTarget(Game.Batch, new Vector2(480, 270), _transitionRenderTarget);
            _transitionType = TransitionType.CombatOut;
            _transition.TweenTo(0, TweenEaseType.EaseOutCubic, 0.5);

            yield return(Wait.Seconds(Game, 0.6));

            // combat complete at this point
            Paused          = false;
            _transitionType = TransitionType.Normal;

            if ((enemy as LivingEntity).Health <= 0)
            {
                Player.XP += (enemy as LivingEntity).XP;
            }
        }