예제 #1
0
    /// <summary>
    /// 자신의 행동을 결정하는 함수입니다. 행동 이름을 우선 결정하고, 대상을 결정하는 Coroutine을 호출합니다.
    /// </summary>
    /// <param name="behaviorName">행동 이름</param>
    public void MakeBehavior(string behaviorName)
    {
        // 자신이 사망했거나 빙결되어 행동할 수 없는 경우
        if (isDead || isFreezed || bm.GetEnd())
        {
            if (playerNum == 1)
            {
                Debug.Log("You cannot make behavior.");
            }
            return;
        }
        BasicBehavior bb = new BasicBehavior(behaviorName);
        // 행동 이름이 존재하지 않는 경우
        int skillType = BehaviorManager.GetSkillType(bb);

        if (skillType == -1)
        {
            Debug.LogWarning("Bad behavior in MakeBehavior.");
            return;
        }
        // 행동이 스킬이고 자신이 침묵되어 스킬을 사용할 수 없는 경우
        else if ((skillType == 1 || skillType == 2) && isSilenced)
        {
            Debug.Log("You cannot invoke skill in this turn.");
            return;
        }
        // 행동에 필요한 마나가 부족한 경우
        if (!BehaviorManager.EnoughMana(bb, mana))
        {
            Debug.Log("Not enough mana.");
            return;
        }
        // 행동에서 지정해야 하는 대상 수가 지정 가능한 대상 수보다 많은 경우
        if (!BehaviorManager.TargetsExist(bb, this))
        {
            Debug.Log("Targets don't exist.");
            return;
        }
        // TODO 다수 대상 행동을 지정할 대상이 없을 때 행동을 제한할 필요가 있다.
        // TODO 이때 인공지능의 경우 다른 행동으로 다시 결정하게 할 필요가 있다. 지금은 여기서 return하면 그 턴에 아무 행동도 결정하지 않는다.
        behavior       = new Behavior(bb, this);
        isTargetDecide = true;
        StartCoroutine("SelectTarget", behavior);
    }