Пример #1
0
    public void Attack(AttackTypes attackType)
    {
        if (attackType == AttackTypes.Sweep)
        {
            List <GameObject> enemiesHit  = new List <GameObject>();
            List <Vector3>    coneVectors = getConeVectors(this.transform.position, this.transform.forward, 45);
            foreach (Vector3 v in coneVectors)
            {
                RaycastHit[] enemiesInRange = Physics.RaycastAll(transform.position, (v - transform.position).normalized, 2);
                for (int i = 0; i < enemiesInRange.Length; i++)
                {
                    if (enemiesInRange[i].transform.gameObject.name == "Monster" || enemiesInRange[i].transform.gameObject.name == "Boss")
                    {
                        if (!enemiesHit.Contains(enemiesInRange[i].transform.gameObject))
                        {
                            enemiesHit.Add(enemiesInRange[i].transform.gameObject);
                        }
                    }
                }
            }
            foreach (GameObject m in enemiesHit)
            {
                if (m.name == "Monster")
                {
                    MonsterController monster = m.GetComponent <MonsterController>();
                    monster.DamageTaken(sweepAttackDamage);
                }
                else if (m.name == "Boss")
                {
                    GameController.gameController.BossHP.value -= sweepAttackDamage;
                }
            }
        }

        if (attackType == AttackTypes.Normal)
        {
            RaycastHit hit;
            if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
            {
                if (hit.transform.gameObject.name == "Monster")
                {
                    hit.transform.GetComponent <MonsterController>().DamageTaken(singleTargetDamage);
                }
                else if (hit.transform.gameObject.name == "Boss")
                {
                    GameController.gameController.BossHP.value -= singleTargetDamage;
                }
            }
        }

        if (attackType == AttackTypes.Fireball)
        {
            playerMana.value -= 80;
            Vector3 FireballSpawnPosition = this.transform.position;
            FireballSpawnPosition.y = 4;
            Instantiate(FireballPrefab, FireballSpawnPosition, this.transform.rotation);
        }
    }