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; } }