public override void onTargetReached() { Vector3 explodePosition = m_target.transform.position; if (m_target != null) { DestroyObject(m_target); } GameObject [] aAllEnemies = TDWorld.getWorld().getAllEnemiesUnsafe(); foreach (GameObject thisObject in aAllEnemies) { if (thisObject == null) { continue; } if ((thisObject.transform.position - explodePosition).magnitude > TDWorld.getWorld().m_configuration.towerCanonBallDamageRadius) { continue; } TDEnemy enemy = TDWorld.getWorld().getTDEnemy(thisObject); if (enemy == null) { continue; } if (enemy.canFly()) { continue; } enemy.receiveDamage(m_damage.clone(enemy), null); } }
private void fight() { TDWorld world = TDWorld.getWorld(); TDEnemy tdEnemy = world.getTDEnemy(target()); if (null == tdEnemy) { m_state = State.ePatrol; return; } if ((target().transform.position - transform.position).magnitude > world.m_configuration.heroFightRadius) { if (hasPathTo(target())) { m_state = State.eWalk; } else { m_state = State.ePatrol; } return; } TDDamage damage = new TDDamage(TDDamage.Type.ePhysical, world.m_configuration.heroPhysicalDamagePerSec * Time.deltaTime, 0f); tdEnemy.receiveDamage(damage, this); }
protected override void onTargetReached(GameObject obj) { TDWorld world = TDWorld.getWorld(); GameObject player = world.getPlayer(); if (obj == player) { return; } TDEnemy tdEnemy = world.getTDEnemy(obj); if (null != tdEnemy) { m_state = State.eFight; return; } if (world.isFakeTarget(obj)) { DestroyObject(obj); } m_state = State.ePatrol; }
void destroyCallback(TDEnemy enemy) { enemy.OnEventDestroy -= destroyCallback; if (m_followedEnemies.ContainsKey(enemy)) { m_followedEnemies.Remove(enemy); } }
void Start() { units = GetComponent<TDEnemy>(); nextTarget = new Queue<Transform>(); turretCtrl = GetComponentInChildren<TankTurretControl>(); GameObject gameManager = GameObject.FindGameObjectWithTag("Game Manager"); timer = gameManager.GetComponent<Timer>(); powerUpLocationManager = gameManager.GetComponent<PowerUpLocationManager>(); }
// Update is called once per frame void Update() { float currentTime = Time.time; float respawn = getRestoration(); if (currentTime < (m_restTime + respawn)) { return; } GameObject [] aAllEnemies = TDWorld.getWorld().getAllEnemiesUnsafe(); double recDist = -1; GameObject recObject = null; TDDamage damage = getTowerDamage(); foreach (GameObject thisObject in aAllEnemies) { if (thisObject == null) { continue; } float dist = (transform.position - thisObject.transform.position).magnitude; float efficientRadius = getEfficientRadius(); if (dist < efficientRadius) { TDEnemy enemy = TDWorld.getWorld().getTDEnemy(thisObject); if (enemy.canFly()) { if (!shootsFlying()) { continue; } } if (!TDWorld.getWorld().m_strategy.shouldShootAt(enemy, damage)) { continue; } if ((recDist < 0) || (recDist > dist)) { recDist = dist; recObject = thisObject; } } } if (recObject == null) { return; } TDEnemy recEnemy = TDWorld.getWorld().getTDEnemy(recObject); TDWorld.getWorld().m_strategy.shootingAt(recEnemy, damage); shootTo(recEnemy); m_restTime = Time.time; }
public override bool shouldShootAt(TDEnemy enemy, TDDamage potentialDamage) { if (m_followedEnemies == null) m_followedEnemies = new List<TDEnemy>(); m_counter++; if (m_counter > m_counterLimit) { m_counter = 0; m_followedEnemies.Clear(); } if (!m_followedEnemies.Contains(enemy)) // New enemies always have preference return true; return false; }
void Awake() { units = GetComponent<TDEnemy>(); followers = new List<Transform>(); tanks = GameObject.FindGameObjectsWithTag("Tank"); soldiers = GameObject.FindGameObjectsWithTag("Rocket Brigadier"); foreach(GameObject tank in tanks){ if(tank.name != "CyberTank Leader"){ followers.Add(tank.transform); followers.Reverse(); tankFollower = tank.GetComponent<TankFollower>(); } } }
public GameObject addEnemy(TDEnemy.Type type, Vector3 pos) { GameObject enemy = null; switch (type) { case TDEnemy.Type.eImp: enemy = (GameObject) Instantiate(m_prefabEnemyImp, pos, Quaternion.identity); break; case TDEnemy.Type.eGargoyle: enemy = (GameObject) Instantiate(m_prefabEnemyGargoyle, pos, Quaternion.identity); break; } return enemy; }
public bool shouldShootAt(TDEnemy enemy, TDDamage potentialDamage) { if (m_followedEnemies == null) m_followedEnemies = new Dictionary<TDEnemy, float>(); if (!m_followedEnemies.ContainsKey(enemy)) { m_followedEnemies[enemy] = 0; enemy.OnEventDestroy += destroyCallback; return true; } float followedDamage = m_followedEnemies[enemy]; if (followedDamage > enemy.getStartHP()) return false; return true; }
void Awake() { units = GetComponent<TDEnemy>(); followers = new List<Transform>(); tanks = GameObject.FindGameObjectsWithTag("Tank"); soldiers = GameObject.FindGameObjectsWithTag("Rocket Brigadier"); foreach(GameObject soldier in soldiers){ if(!soldier.name.Contains("leader")){ followers.Add(soldier.transform); } } foreach(GameObject tank in tanks){ if(tank.name.Contains("leader")){ tankLeader = tank.transform; } } }
void Start() { maxRotationSpd = 6f; accelerationLookingSpd = 2.5f; enemyFirePos = new Vector3(); units = GetComponent<TDEnemy>(); animator = GetComponent<Animator>(); audio = GetComponent<AudioSource>(); rigidbody = GetComponent<Rigidbody>(); timer = GameObject.FindGameObjectWithTag("Game Manager").GetComponent<Timer>(); powerUpLocationManager = GameObject.FindGameObjectWithTag("Game Manager").GetComponent<PowerUpLocationManager>(); //Destroy Invisible Objects Debug.Log("Soldiers: "+soldiers.Length); /*for(int i=0; i<soldiers.Length; i++){ Destroy(soldiers[i]); } Debug.Log(soldiers.Length); */ }
public bool shouldShootAt(TDEnemy enemy, TDDamage potentialDamage) { if (m_followedEnemies == null) { m_followedEnemies = new Dictionary <TDEnemy, float>(); } if (!m_followedEnemies.ContainsKey(enemy)) { m_followedEnemies[enemy] = 0; enemy.OnEventDestroy += destroyCallback; return(true); } float followedDamage = m_followedEnemies[enemy]; if (followedDamage > enemy.getStartHP()) { return(false); } return(true); }
private void patrol() { m_path = null; TDWorld world = TDWorld.getWorld(); GameObject [] aEnemies = world.getAllEnemiesUnsafe(); foreach (GameObject enemy in aEnemies) { if ((enemy.transform.position - transform.position).magnitude < world.m_configuration.heroPatrolRadius) { TDEnemy tdEnemy = world.getTDEnemy(enemy); if (tdEnemy.canFly()) { continue; } if (hasPathTo(enemy)) { m_state = State.eWalk; break; } } } }
public void shootingAt(TDEnemy enemy, TDDamage potentialDamage) { m_followedEnemies[enemy] += potentialDamage.estimatedFirstDamage(); }
void Start() { units = GetComponent<TDEnemy>(); }
public abstract void shootingAt(TDEnemy enemy, TDDamage potentialDamage);
public override bool shouldShootAt(TDEnemy enemy, TDDamage potentialDamage) { return true; }
public override void shootingAt(TDEnemy enemy, TDDamage potentialDamage) { if (!m_followedEnemies.Contains(enemy)) m_followedEnemies.Add(enemy); }
public override void destroyCallback(TDEnemy enemy) { }
public abstract bool shouldShootAt(TDEnemy enemy, TDDamage potentialDamage);
public override void shootingAt(TDEnemy enemy, TDDamage potentialDamage) { }
public void destroyCallback(TDEnemy enemy) { enemy.OnEventDestroy -= destroyCallback; m_watchedEnemies--; }
public abstract void destroyCallback(TDEnemy enemy);