示例#1
0
 private IEnumerator EnemyTurn()
 {
     foreach (GameObject e in enemy)
     {
         if (e.activeSelf)
         {
             EnemyBattleController ebc = e.GetComponent <EnemyBattleController>();
             ebc.DoSomething();
             while (ebc.result == EnemyBattleController.Action.NotDecided)
             {
                 yield return(null);
             }
             ebc.result = EnemyBattleController.Action.NotDecided;
         }
     }
     partyAC.ResetDefenseStats();
     if (AnyEnemyLeft())
     {
         firstAttack.transform.parent.gameObject.SetActive(true);
         if (partyAC.IsDead(0))
         {
             playerIndex = 1;
         }
         partyStats.SelectMemberDialog(playerIndex);
         turn++;
         btnPos = Position.Center;
     }
     else
     {
         GameWin();
     }
 }
示例#2
0
    void CreateUnits(int num)
    {
        battleCamera = CreateCamera();

        for (int i = 0; i < status.monsterNumbers[num].Length; i++)
        {
            int number = status.monsterNumbers[num][i];

            GameObject enemy = Instantiate(status.monstersData[number].modle) as GameObject;

            if (number == 3)
            {
                BossBattleController auto = enemy.AddComponent <BossBattleController> ();
                enemyList.Add(auto);
                auto.InitBattle(this.gameObject, battleCamera, status.monsterPositions[i], Quaternion.identity, "Enemy", number, status.playersData[number].status);
                auto.SetEffects(status.playersData[number].attackEffect);
                auto.enabled = false;
            }
            else
            {
                EnemyBattleController auto = enemy.AddComponent <EnemyBattleController> ();
                enemyList.Add(auto);
                auto.InitBattle(this.gameObject, battleCamera, status.monsterPositions[i], Quaternion.identity, "Enemy", number, status.monstersData[number].status);
                auto.enabled = false;
            }
        }

        for (int i = 0; i < 4; i++)
        {
            if (status.partyMember[i] >= 0)
            {
                GameObject player = Instantiate(status.playersData[status.partyMember[i]].modle[1]) as GameObject;

                PlayerBattleController mb = player.AddComponent <PlayerBattleController> ();
                playerList.Add(mb);

                if (i == 0)
                {
                    mb.isUser = true;
                }
                else
                {
                    mb.isUser = false;
                }

                mb.InitBattle(this.gameObject, battleCamera, status.playerPositions[i], Quaternion.Euler(0.0f, 180.0f, 0.0f), "Player", status.partyMember[i], status.playersData[status.partyMember[i]].status);
                mb.SetEffects(status.playersData[status.partyMember[i]].attackEffect);
                mb.enabled = false;
            }
        }
    }
示例#3
0
    /*
     * Coroutine that attacks an enemy with a selected skill
     */
    private IEnumerator Skill(int i)
    {
        partyStats.SetSelectedDialog(i);
        Skill skill = thing[i] as Skill;
        EnemyBattleController ebc = target[i].GetComponent <EnemyBattleController>();

        // If the enemy is already dead choose another
        if (ebc.enemy.hp == 0)
        {
            EnemyBattleController[] others = FindObjectsOfType <EnemyBattleController>();
            foreach (EnemyBattleController e in others)
            {
                if (e.gameObject.activeSelf)
                {
                    ebc = e;
                    break;
                }
            }
        }

        // Hit the enemy if lives
        if (ebc.enemy.hp != 0)
        {
            GameController.dialogController.ShowBattleText(GameManager.party[i].fullname + " uses " + skill.skillName);
            while (DialogController.isTextShown)
            {
                yield return(null);
            }
            GameManager.party[i].sp -= skill.cost;
            partyStats.SetPartyStats();

            ebc.HitAnim();
            yield return(new WaitForSeconds(1.5f));

            int damage = GameController.CalculateDamage(GameManager.party[i], ebc.enemy, skill);
            ebc.enemy.TakeDamage(damage);
            StartCoroutine(ebc.ShowNumber(damage, Color.red));
            yield return(new WaitForSeconds(1));

            if (ebc.enemy.hp == 0)
            {
                xpGained   += ebc.enemy.xpDrop;
                goldGained += ebc.enemy.gold;
                DropItem(ebc.enemy);
                ebc.Kill();
            }
        }
        partyStats.SetDefaultDialog(i);
        finish = true;
    }
示例#4
0
    /*
     * Coroutine that attacks an enemy
     */
    private IEnumerator Attack(int i)
    {
        partyStats.SetSelectedDialog(i);
        EnemyBattleController ebc = target[i].GetComponent <EnemyBattleController>();

        // If the enemy is already dead choose another
        if (ebc.enemy.hp == 0)
        {
            EnemyBattleController[] others = FindObjectsOfType <EnemyBattleController>();
            foreach (EnemyBattleController e in others)
            {
                if (e.gameObject.activeSelf)
                {
                    ebc = e;
                    break;
                }
            }
        }

        // Hit the enemy if lives
        if (ebc.enemy.hp != 0)
        {
            ebc.HitAnim();
            yield return(new WaitForSeconds(1.5f));

            int damage = GameController.CalculateDamage(GameManager.party[i], ebc.enemy);
            ebc.enemy.TakeDamage(damage);
            StartCoroutine(ebc.ShowNumber(damage, Color.red));
            yield return(new WaitForSeconds(1));

            if (ebc.enemy.hp == 0)
            {
                xpGained   += ebc.enemy.xpDrop;
                goldGained += ebc.enemy.gold;
                DropItem(ebc.enemy);
                ebc.Kill();
            }
        }
        partyStats.SetDefaultDialog(i);
        finish = true;
    }
示例#5
0
    private void InitAttackEvent()
    {
        GameObject battleCamera = Instantiate(Resources.Load("Prefabs/Cameras/BattleCamera", typeof(GameObject)) as GameObject, Vector3.zero, Quaternion.identity) as GameObject;

        battleCamera.GetComponent <Camera>().enabled = false;
        battleCamera.AddComponent <ShinBattleCamera> ();

        for (int i = 0; i < 2; i++)
        {
            GameObject player = Instantiate(status.playersData[i].modle[1]) as GameObject;

            PlayerBattleController mb = player.AddComponent <PlayerBattleController> ();
            mb.InitBattle(this.gameObject, battleCamera, status.playerPositions[i], Quaternion.Euler(0.0f, 180.0f, 0.0f), "Player", i, status.playersData[status.partyMember[i]].status);
            mb.AddAttackEvent();
            Destroy(player);
        }

        for (int i = 0; i < 4; i++)
        {
            GameObject enemy = Instantiate(status.monstersData[i].modle) as GameObject;

            if (i == 3)
            {
                BossBattleController auto = enemy.AddComponent <BossBattleController> ();
                auto.InitBattle(this.gameObject, battleCamera, status.monsterPositions[i], Quaternion.identity, "Enemy", 0, status.playersData[i].status);
                auto.AddAttackEvent();
            }
            else
            {
                EnemyBattleController auto = enemy.AddComponent <EnemyBattleController> ();
                auto.InitBattle(this.gameObject, battleCamera, status.monsterPositions[i], Quaternion.identity, "Enemy", 0, status.monstersData[i].status);
                auto.AddAttackEvent();
            }
            Destroy(enemy);
        }

        Destroy(battleCamera);
    }