Beispiel #1
0
        protected virtual void Shoot()
        {
            // TODO: можно добавить алгоритм выбора противника, который ближе всех к финальной точке
            EnemyActor enemyTarget = GetEnemyTarget();

            if (enemyTarget == null)
            {
                return;
            }

            _skillModelTower.Shoot(_parametrsTower.damageOnShoot, transform.position, enemyTarget.transform);
            LastTimeShoot = Time.time;
        }
Beispiel #2
0
        private void OnTriggerEnter2D(Collider2D collision)
        {
            if (collision.gameObject.CompareTag(GlobalSettingsGame.TAG_ENEMY))
            {
                EnemyActor enemy = collision.gameObject.GetComponentInChildren <EnemyActor>();
                if (enemy != null)
                {
                    enemy.ReciveDamage(_damage);
                }
                _poolObject.ReturnToPool();

                //TODO: можно сделать воспроизведение звука нанесения урона
            }
        }
Beispiel #3
0
 private void OnTriggerExit2D(Collider2D collision)
 {
     if (collision.CompareTag(GlobalSettingsGame.TAG_ENEMY))
     {
         EnemyActor enemy = collision.GetComponent <EnemyActor>();
         if (enemy != null)
         {
             _listEnemyInRange.Remove(enemy);
         }
         else
         {
             Debug.LogError($"TaskGame_TowerDefence ({collision}): установлен тег {GlobalSettingsGame.TAG_ENEMY} для объекта у которого отсутсвует EnemyActor");
         }
     }
 }
Beispiel #4
0
        /// <summary>
        /// Получить цель атаки
        /// </summary>
        /// <returns></returns>
        protected virtual EnemyActor GetEnemyTarget()
        {
            if (_listEnemyInRange.Count == 0)
            {
                return(null);
            }

            int        indexEnemy = Random.Range(0, _listEnemyInRange.Count);
            EnemyActor enemyActor = _listEnemyInRange[indexEnemy];

            if (enemyActor == null)
            {
                // enemyActor может быть null в случае, если противника убила другая башня
                _listEnemyInRange.RemoveAt(indexEnemy);
                return(GetEnemyTarget());
            }

            return(enemyActor);
        }
        /// <summary>
        /// Появления противников стадии
        /// </summary>
        /// <param name="waveStage"></param>
        /// <returns></returns>
        private IEnumerator StartShowEnemy(WaveStage waveStage)
        {
            int countEnemy = Random.Range(waveStage.minCountEnemyInStage, waveStage.maxCountEnemyInStage);

            for (int i = 0; i < countEnemy; i++)
            {
                GameObject enemyPref  = PoolManager.GetObject(waveStage.indexEnemyPrefabInPoll, transform.position, Quaternion.identity);
                EnemyActor enemyActor = enemyPref.GetComponent <EnemyActor>();

                bool statusAddEnemy = enemyActor.SetUpgradeLVL(waveStage.indexLavelPowerEnemy, _pathMovingCollider.ListPositionPathMoving.Head);
                if (statusAddEnemy)
                {
                    countCreateEnemy++;
                }

                yield return(new WaitForSeconds(waveStage.delayShowOneEnemy));

                if (isLastWave && (i == countEnemy - 1))
                {
                    isFinishSpawn = true;
                }
            }
        }