public override IEnumerator OnSpiritDown(Action action)
    {
        BattleObject.action[player_id] = new PlayerAction(
            Array.IndexOf(BattleObject.GetTeam(player_id).Spirits.ToArray(),
                          BattleObject.GetTeam(player_id).Spirits.First(s => s.CurrentHP > 0))
            , PlayerAction.ActionType.SwitchSpirit);
        yield return(new WaitForEndOfFrame());

        action.Invoke();
    }
    public void OnEnterBattleStart()
    {
        if (BattleObject == null)
        {
            return;
        }
        stateMachine.SetProperty(props.TrainerFight, BattleObject.trainerFight);


        BattleObject.SetSpirit(0, BattleObject.GetTeam(0).Spirits[0]);
        BattleObject.SetSpirit(1, BattleObject.GetTeam(1).Spirits[0]);

        stateMachine.SetProperty(props.PlayerSpirits, BattleObject.GetTeam(0).Spirits.Count);
        stateMachine.SetProperty(props.EnemySpirits, BattleObject.GetTeam(1).Spirits.Count);
        stateMachine.SetProperty(props.StateFinished, true);
    }
    public void PlayerSelectTeam()
    {
        OverlayView.Instance.ShowOverlay(OverlayView.Overlay.TeamView, (i) => {
            var active_team  = battleObject.GetTeam((int)battleObject.activePlayer).Spirits;
            var active_index = active_team.IndexOf(battleObject.GetSpirit((int)battleObject.activePlayer));

            if (i != active_index)
            {
                if (active_team[i].CurrentHP > 0)
                {
                    action = new PlayerAction(i, PlayerAction.ActionType.SwitchSpirit);
                }
                else
                {
                    Debug.Log("Der Spirit ist Kampfunfähig");
                }
            }
            else
            {
                Debug.Log("Der Spirit ist bereits im Kampf");
            }
        });
    }