public IEnumerator Enemy2Turn()
        {
            Debug.Log(unitData.currentHp);
            if (unitData.currentHp <= 0)
            {
                BattleSystemClass.gameState = GameState.PLAYERTURN;
                BattleSystemClass.unitState = UnitState.KNIGHT;
                UIManager.EnableKnightSkillBar();
            }

            _enemyStartingPosition = enemyGO.transform.position;
            int        randomPlayerUnitIndex = Random.Range(0, UIManager.playerUnitGOs.Count);
            GameObject attackedPlayerGO      = UIManager.playerUnitGOs[randomPlayerUnitIndex];
            Unit       attackedPlayerUnit    = attackedPlayerGO.GetComponent <Unit> ();
            Vector3    playerPos             = attackedPlayerGO.transform.position;

            AnimationManager.PlayAnim("Dash", 5);
            enemyGO.transform.Translate(-Time.deltaTime * 1000, 0, 0, CameraTransform);
            if (Vector3.Distance(enemyGO.transform.position, playerPos) < unitData.errorDistance)
            {
                enemyGO.transform.position = new Vector3(playerPos.x + 2f, playerPos.y, playerPos.z);
            }

            yield return(new WaitForSeconds(0.5f));

            //StartCoroutine(CameraManager.MoveTowardsTarget(attackedPlayerGO));
            AnimationManager.PlayAnim("Attack", 5);
            AudioManager.PlaySound("basicAttack");
            AnimationManager.PlayAnim("Hit", randomPlayerUnitIndex);

            //calculate damage
            float damageDone = CalculationManager.CalculateDamage(unitData);
            bool  isDead     = CalculationManager.DealDamage(damageDone, attackedPlayerUnit);

            //damagePopup
            GameObject cloneTextGO = Instantiate(unitData.floatingDamagePrefab,
                                                 attackedPlayerGO.transform.position + unitData.damageOffset, Quaternion.identity);

            UIManager.DamagePopup(damageDone, unitData, cloneTextGO);

            UIManager.SetPlayerUnitHp(attackedPlayerUnit.unitData.currentHp, randomPlayerUnitIndex);
            AudioManager.PlaySound("hurtSound");

            yield return(new WaitForSeconds(0.5f));

            AnimationManager.PlayAnim("Idle", randomPlayerUnitIndex);

            enemyGO.transform.position = _enemyStartingPosition;
            AnimationManager.PlayAnim("Idle", 5);

            if (isDead)
            {
                AudioManager.PlaySound("KnightDeath");
                AnimationManager.PlayAnim("Dead", randomPlayerUnitIndex);
            }
            BattleSystemClass.gameState = GameState.PLAYERTURN;
            BattleSystemClass.unitState = UnitState.KNIGHT;
            UIManager.EnableKnightSkillBar();
        }
        public IEnumerator KnightBasicAttack(int enemyID, GameObject enemyToAttackGO)
        {
            Unit    attackedEnemyUnit = enemyToAttackGO.GetComponent <Unit> ();
            Vector3 enemyPos          = enemyToAttackGO.transform.position;

            BattleSystemClass.gameState = GameState.WAITING;
            AudioManager.PlaySound("KnightOpeners");

            Vector2 startingPos = knightGO.transform.position;

            AnimationManager.PlayAnim("Dash", 0);

            knightGO.transform.Translate(Time.deltaTime * 1000, 0, 0, CameraTransform);
            if (Vector3.Distance(knightGO.transform.position, enemyPos) < unitData.errorDistance)
            {
                knightGO.transform.position = new Vector3(enemyPos.x - 2f, enemyPos.y, enemyPos.z);
            }
            //StartCoroutine(CameraManager.MoveTowardsTarget(enemyToAttackGO));
            yield return(new WaitForSeconds(0.5f));

            AnimationManager.PlayAnim("Attack", 0);
            AudioManager.PlaySound("basicAttack");

            //calculate damage
            float damageDone = CalculationManager.CalculateDamage(unitData);
            bool  isDead     = CalculationManager.DealDamage(damageDone, attackedEnemyUnit);

            //damagePopup
            GameObject cloneTextGO = Instantiate(unitData.floatingDamagePrefab, enemyPos + unitData.damageOffset,
                                                 Quaternion.identity);

            UIManager.DamagePopup(damageDone, unitData, cloneTextGO);
            UIManager.SetEnemyHp(attackedEnemyUnit.unitData.currentHp, enemyID);

            AnimationManager.PlayAnim("Hit", enemyID);
            AudioManager.PlaySound("hurtSound");
            yield return(new WaitForSeconds(0.5f));

            AnimationManager.PlayAnim("Idle", enemyID);
            knightGO.transform.position = startingPos;
            AnimationManager.PlayAnim("Idle", 0);

            if (isDead)
            {
                //play animation on attacked enemy
                AnimationManager.PlayAnim("Dead", enemyID);
                //observer.NotifyUnitDeath (enemyID);
                UnitDied(enemyID);
                //check if there is an alive enemy
            }
            //Warrior's turn starts
            BattleSystemClass.gameState = GameState.PLAYERTURN;
            BattleSystemClass.unitState = UnitState.WARRIOR;
            UIManager.DisableKnightSkillBar();
            UIManager.EnableWarriorSkillBar();
        }
Exemple #3
0
        public IEnumerator WarriorBasicAttack(int enemyID, GameObject enemyToAttackGO)
        {
            Unit    enemyToAttackUnit = enemyToAttackGO.GetComponent <Unit> ();
            Vector3 enemyPos          = enemyToAttackGO.transform.position;

            BattleSystemClass.gameState = GameState.WAITING;
            Vector2 startingPos = warriorGO.transform.position;

            AnimationManager.PlayAnim("Dash", 1);

            warriorGO.transform.Translate(Time.deltaTime * 1000, 0, 0, CameraTransform);
            if (Vector3.Distance(warriorGO.transform.position, enemyPos) < unitData.errorDistance)
            {
                warriorGO.transform.position = new Vector3(enemyPos.x - 2f, enemyPos.y, enemyPos.z);
            }

            yield return(new WaitForSeconds(0.5f));

            AnimationManager.PlayAnim("Attack", 1);
            AudioManager.PlaySound("basicAttack");
            //StartCoroutine(CameraManager.MoveTowardsTarget(enemyToAttackGO));
            //calculate damage
            float damageDone = CalculationManager.CalculateDamage(unitData);
            bool  isDead     = CalculationManager.DealDamage(damageDone, enemyToAttackUnit);

            //damagePopup
            GameObject floatingDamageGO = Instantiate(unitData.floatingDamagePrefab, enemyPos + unitData.damageOffset,
                                                      Quaternion.identity);

            UIManager.DamagePopup(damageDone, unitData, floatingDamageGO);
            UIManager.SetEnemyHp(enemyToAttackUnit.unitData.currentHp, enemyID);

            AnimationManager.PlayAnim("Hit", enemyID);
            AudioManager.PlaySound("hurtSound");
            yield return(new WaitForSeconds(1f));

            AnimationManager.PlayAnim("Idle", enemyID);
            warriorGO.transform.position = startingPos;
            AnimationManager.PlayAnim("Idle", 1);

            if (isDead)
            {
                AnimationManager.PlayAnim("Dead", enemyID);
                UnitDied(enemyID);
            }

            BattleSystemClass.gameState = GameState.PLAYERTURN;
            BattleSystemClass.unitState = UnitState.WIZARD;
            UIManager.DisableWarriorSkillBar();
            UIManager.EnableWizardSkillBar();
        }
        public IEnumerator WizardBasicAttack(int enemyID, GameObject enemyToAttackGO)
        {
            Unit    enemyToAttackUnit = enemyToAttackGO.GetComponent <Unit> ();
            Vector3 enemyPos          = enemyToAttackGO.transform.position;

            BattleSystemClass.gameState = GameState.WAITING;
            AnimationManager.PlayAnim("Attack1", 2);

            GameObject explosionGO = Instantiate(explosionAnim, enemyPos, Quaternion.identity);

            //StartCoroutine(CameraManager.MoveTowardsTarget(enemyToAttackGO));
            Destroy(explosionGO, 1f);

            //calculate damage
            float damageDone = CalculationManager.CalculateDamage(unitData);
            bool  isDead     = CalculationManager.DealDamage(damageDone, enemyToAttackUnit);

            //damagePopup
            GameObject floatingDamageGO = Instantiate(unitData.floatingDamagePrefab, enemyPos + unitData.damageOffset,
                                                      Quaternion.identity);

            UIManager.DamagePopup(damageDone, unitData, floatingDamageGO);

            UIManager.SetEnemyHp(enemyToAttackUnit.unitData.currentHp, enemyID);

            AnimationManager.PlayAnim("Hit", enemyID);
            AudioManager.PlaySound("hurtSound");
            yield return(new WaitForSeconds(0.5f));

            AnimationManager.PlayAnim("Idle", enemyID);
            AnimationManager.PlayAnim("Idle", 2);

            if (isDead)
            {
                AnimationManager.PlayAnim("Dead", enemyID);
                UnitDied(enemyID);
            }

            BattleSystemClass.gameState = GameState.ENEMYTURN;
            BattleSystemClass.unitState = UnitState.ENEMY1;
            UIManager.DisableWizardSkillBar();
            yield return(new WaitForSeconds(1f));

            StartCoroutine(_enemy1Class.EnemyTurn());
        }
        public IEnumerator WizardAreaAttack()
        {
            Vector3[]    enemyPositions  = new Vector3[2];
            GameObject[] attackedEnemies = GameObject.FindGameObjectsWithTag("EnemyUnit");
            for (int i = 0; i < attackedEnemies.Length; i++)
            {
                enemyPositions[i] = attackedEnemies[i].transform.position;
            }

            BattleSystemClass.gameState = GameState.WAITING;
            AnimationManager.PlayAnim("Attack1", 2);
            for (int i = 0; i < attackedEnemies.Length; i++)
            {
                GameObject explosionGO = Instantiate(explosionAnim, enemyPositions[i], Quaternion.identity);
                Destroy(explosionGO, 1f);
            }

            //calculate damage
            float damageDone = CalculationManager.CalculateDamage(unitData);
            bool  isDead1    = CalculationManager.DealDamage(damageDone, attackedEnemies[0].GetComponent <Unit> ());
            bool  isDead2    = CalculationManager.DealDamage(damageDone, attackedEnemies[1].GetComponent <Unit> ());

            //damagePopup
            for (int i = 0; i < attackedEnemies.Length; i++)
            {
                GameObject floatingDamageGO = Instantiate(unitData.floatingDamagePrefab, enemyPositions[i] + unitData.damageOffset,
                                                          Quaternion.identity);

                UIManager.DamagePopup(damageDone, unitData, floatingDamageGO);
            }
            UIManager.SetEnemyHp(attackedEnemies[0].GetComponent <Unit> ().unitData.currentHp, 4);
            UIManager.SetEnemyHp(attackedEnemies[1].GetComponent <Unit> ().unitData.currentHp, 5);

            AnimationManager.PlayAnim("Hit", 4);
            AnimationManager.PlayAnim("Hit", 5);
            AudioManager.PlaySound("hurtSound");
            yield return(new WaitForSeconds(0.5f));

            AnimationManager.PlayAnim("Idle", 4);
            AnimationManager.PlayAnim("Idle", 5);

            AnimationManager.PlayAnim("Idle", 2);

            if (isDead1)
            {
                AnimationManager.PlayAnim("Dead", 4);
                UnitDied(4);
            }
            if (isDead2)
            {
                AnimationManager.PlayAnim("Dead", 5);
                UnitDied(5);
            }
            else
            {
                BattleSystemClass.gameState = GameState.ENEMYTURN;
                BattleSystemClass.unitState = UnitState.ENEMY1;
                UIManager.DisableWizardSkillBar();
                yield return(new WaitForSeconds(1f));

                StartCoroutine(_enemy1Class.EnemyTurn());
            }
        }