Beispiel #1
0
        private void AddEnemyKill(Spawnable spawnable)
        {
            NavEnemy2D e = (NavEnemy2D)spawnable;

            stats.enemiesKilled++;
            switch (e.settings.enemyName)
            {
            case "melee":
                stats.meleeEnemiesKilled++;
                break;

            case "ranged":
                stats.rangedEnemiesKilled++;
                break;

            case "flying":
                stats.flyingEnemiesKilled++;
                break;

            case "suicide":
                stats.suicideEnemiesKilled++;
                break;

            case "tank":
                stats.tankEnemiesKilled++;
                break;

            default:
                throw new NotImplementedException("Enemy name: " + e.settings.enemyName + " not implemented!");
            }
        }
Beispiel #2
0
 private Vector3 GetPositionInFrontOfChildWithName(NavEnemy2D enemy, string name)
 {
     for (int i = 0; i < enemy.transform.childCount; i++)
     {
         if (enemy.transform.GetChild(i).name == name)
         {
             var tran = enemy.transform.GetChild(i);
             return(tran.position + 0.5f * tran.up);
         }
     }
     return(enemy.transform.position);
 }
Beispiel #3
0
        private IEnumerator Attack(NavEnemy2D target)
        {
            currentAttackCooldown = towerDamageData[buildingLevel].attackCooldown;
            var forward = GetPositionInFrontOfChildWithName(target, "Graphics") - this.transform.position;

            var startQuat  = this.turretHead.rotation;
            var targetQuat = Quaternion.FromToRotation(Vector3.down, forward);

            for (int i = 0; i < 10; i++)
            {
                this.turretHead.rotation = Quaternion.Lerp(startQuat, targetQuat, (i + 1) / 9f);
                yield return(new WaitForSeconds(0.001f));
            }

            var lifetime = 1.5f * towerDamageData[buildingLevel].range / projectile.speed;

            var proj = Instantiate(projectile, this.transform.position, Quaternion.identity);

            proj.direction        = forward;
            proj.damage           = towerDamageData[buildingLevel].damage;
            proj.lifeTime         = lifetime;
            proj.enemyTypes       = this.targets;
            proj.gameObject.layer = targets.Contains(EnemyType.GROUNDED) ? GROUNDED : AIRBORNE;
        }
Beispiel #4
0
 protected bool IsOfCorrectType(NavEnemy2D enemy) => enemyTypes.Contains(enemy.settings.enemyType);
Beispiel #5
0
 private bool IsInRange(NavEnemy2D enemy) => Vector3.Distance(enemy.transform.position, this.transform.position) <= towerDamageData[buildingLevel].range;
Beispiel #6
0
 private bool HasValidType(NavEnemy2D enemy) => targets.Contains(enemy.settings.enemyType);
Beispiel #7
0
 private bool IsInRange(NavEnemy2D enemy) => Vector3.Distance(enemy.transform.position, transform.position) < explosionRange;