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!"); } }
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); }
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; }
protected bool IsOfCorrectType(NavEnemy2D enemy) => enemyTypes.Contains(enemy.settings.enemyType);
private bool IsInRange(NavEnemy2D enemy) => Vector3.Distance(enemy.transform.position, this.transform.position) <= towerDamageData[buildingLevel].range;
private bool HasValidType(NavEnemy2D enemy) => targets.Contains(enemy.settings.enemyType);
private bool IsInRange(NavEnemy2D enemy) => Vector3.Distance(enemy.transform.position, transform.position) < explosionRange;