public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED; Blackboard bb = sAI.GetBlackboard(); if (bb.enemyTarget != null) { if (bb.enemyTarget.getEnemyType() == EnemyType.HELLEPHANT || bb.enemyTarget.getEnemyType() == EnemyType.ZOMBEAR) { Vector3 dir = bb.enemyTarget.transform.position - sAI.transform.position; float distFromCrystal = (Vector3.zero - sAI.transform.position).magnitude; float dist = dir.magnitude; if (dist > 5.0f && distFromCrystal < 50.0f) { UnityEngine.AI.NavMeshAgent agent = sAI.GetComponent <UnityEngine.AI.NavMeshAgent>(); agent.destination = bb.enemyTarget.transform.position; output = TASK_RETURN_STATUS.SUCCEED; } } } return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { Blackboard bb = sAI.GetBlackboard(); if (GameManager.GetCurrentWaveNumber() > 4 && GameManager.GetCurrentGold() > 150) { if (bb.ne == null) { bb.ne = new Tower(); GameManager.PurchaseTower(TOWER_TYPE.BULLET_TOWER, TOWER_POSITION.NORTHEAST); } else if (bb.nw == null) { bb.nw = new Tower(); GameManager.PurchaseTower(TOWER_TYPE.BULLET_TOWER, TOWER_POSITION.NORTHWEST); } else if (bb.se == null) { bb.se = new Tower(); GameManager.PurchaseTower(TOWER_TYPE.BULLET_TOWER, TOWER_POSITION.NORTHEAST); } else { GameManager.PurchaseTower(TOWER_TYPE.BULLET_TOWER, TOWER_POSITION.NORTHEAST); bb.sw = new Tower(); } } return(TASK_RETURN_STATUS.SUCCEED); }
bool isTargetVisible(Survivor_AI sAI, Enemy e) { bool output = false; if (e != null) { Survivor survivor = sAI.GetSurvivor(); RaycastHit hit; Vector3 offset = (Vector3.up * 0.5f); Vector3 dir = e.transform.position - survivor.transform.position; dir += offset; dir.Normalize(); int layerMask = 1 << LayerMask.NameToLayer("Player"); layerMask = ~layerMask; if (Physics.Raycast(survivor.transform.position + offset, dir, out hit, 1000.0f, layerMask)) { if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Enemy")) { //if (hit.collider.gameObject.GetInstanceID () == e.gameObject.GetInstanceID ()) //{ output = true; //} } } } return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED; Blackboard bb = sAI.GetBlackboard(); float dist = (sAI.transform.position - bb.moveToPosition).magnitude; if (dist > 1.0f) { UnityEngine.AI.NavMeshAgent agent = sAI.GetComponent <UnityEngine.AI.NavMeshAgent>(); agent.destination = bb.moveToPosition; output = TASK_RETURN_STATUS.FAILED; } else { bb.nodesForAStar.Remove(bb.currNodeToGetTo); if (bb.nodesForAStar.Count > 0) { bb.currNodeToGetTo = bb.nodesForAStar[0]; bb.moveToPosition = bb.currNodeToGetTo.transform.position; } output = TASK_RETURN_STATUS.SUCCEED; } return(output); }
Enemy FindClosestHellephantTarget(Survivor_AI sAI) { Enemy target = null; float closestSoFar = Mathf.Infinity; //int worst = 0; List <Enemy> allEnemies = GameManager.getHellephantList(); foreach (Enemy e in allEnemies) { if (e.getState() != EnemyState.DEAD) { float dist = (e.transform.position - sAI.transform.position).magnitude; if (dist < closestSoFar) { target = e; closestSoFar = dist; sAI.GetBlackboard().distFromTarget = closestSoFar; } } } return(target); }
void SearchForFireballs() { if (fireballs.Length > 0) { foreach (Fireball f in fireballs) { float range = 1.0f; Survivor_AI sAI = FindClosestSurvivorToFireBall(f); float distance = Vector3.Distance(sAI.GetSurvivor().transform.position, f.transform.position); if (distance < range) { ResetSurvivorsBT(); sAI.GetBlackBoard().incomingFireball = f; sAI.GetBlackBoard().currentSurvivorPosition = sAI.GetSurvivor().transform.position; Task BT_Evade_Fireball = new Sequence_EvadeFireballs(); sAI.SetBehaviorTree(BT_Evade_Fireball); } } } }
Enemy FindPriorityTarget(Survivor_AI sAI) { Enemy result = null; List <Enemy> bunniesList = GameManager.getZomBunnyList(); List <Enemy> hellephantsList = GameManager.getHellephantList(); List <Enemy> clownsList = GameManager.getClownList(); if (bunniesList.Count > 0) { result = FindClosestBunny(sAI, bunniesList); } if (clownsList.Count > 0 && bunniesList.Count == 0) { result = FindClosestClown(sAI, clownsList); } if (hellephantsList.Count > 0 && bunniesList.Count == 0) { result = FindClosestHellephant(sAI, hellephantsList); } return(result); }
void SurvivorFlee() { List <Enemy> enemies = GameManager.getAllEnemies(); if (enemies.Count > 0) { foreach (Enemy e in enemies) { float range = 5.0f; Survivor_AI sAI = FindClosestSurvivorToTarget(e); float distance = Vector3.Distance(sAI.GetSurvivor().transform.position, e.transform.position); if (distance < range) { ResetSurvivorsBT(); Task BT_Flee_Zombie = new Sequence_FleeZombie(); sAI.GetBlackBoard().target = e; sAI.GetBlackBoard().currentSurvivorPosition = sAI.GetSurvivor().transform.position; sAI.SetBehaviorTree(BT_Flee_Zombie); } } } }
Enemy FindClosestBunny(Survivor_AI sAI, List <Enemy> bunnies) { Enemy output = null; float closestSoFar = Mathf.Infinity; for (int i = 0; i < bunnies.Count; i++) { Enemy e = bunnies[i]; if (e.getState() != EnemyState.DEAD) { float dist = (e.transform.position - sAI.GetSurvivor().transform.position).magnitude; if (dist < closestSoFar && dist < sAI.GetSurvivor().currentWeapon.getRange()) { output = e; closestSoFar = dist; } } } if (output != null) //Debug.Log("Survivor " + sAI.GetSurvivor().name + //" is Targeting enemy position " + output.transform.position { } return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED; Blackboard bb = sAI.GetBlackboard(); if (bb.enemyTarget != null) { Vector3 dir = sAI.transform.position - bb.enemyTarget.gameObject.transform.position; float dist = dir.magnitude; if (dist < 5.0f) { //dir.Normalize(); dir += sAI.transform.position; UnityEngine.AI.NavMeshAgent agent = sAI.GetComponent <UnityEngine.AI.NavMeshAgent>(); agent.destination = dir; //sAI.transform.position += dir; output = TASK_RETURN_STATUS.SUCCEED; } } return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { //run A* TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED; Blackboard bb = sAI.GetBlackboard(); if (bb.nodesForAStar.Count <= 0) { GameObject go = GameObject.FindGameObjectWithTag("AStar"); AStarObj aStarObj = go.GetComponent <AStarObj>(); //AStarObj aStarObj = GameObject.FindGameObjectWithTag("AStar").GetComponent<AStarObj>(); //new AStarObj(); aStarObj.RunThroughPath(sAI, bb.startNode, bb.goalNode); if (bb.nodesForAStar.Count > 0) { output = TASK_RETURN_STATUS.SUCCEED; bb.currNodeToGetTo = bb.nodesForAStar[0]; bb.moveToPosition = bb.currNodeToGetTo.transform.position; } } else { output = TASK_RETURN_STATUS.SUCCEED; } return(output); }
Enemy FindClosestBunnyTarget(Survivor_AI sAI) { Enemy target = null; float closestSoFar = Mathf.Infinity; int worst = 0; List <Enemy> allEnemies = GameManager.getZomBunnyList(); foreach (Enemy e in allEnemies) { if (e.getState() != EnemyState.DEAD) { float dist = (e.transform.position - sAI.transform.position).magnitude; if (dist < closestSoFar && dist < sAI.GetCurrWeapon().getRange()) { target = e; closestSoFar = dist; } } } return(target); }
public void MoveSurvivorBack(Survivor_AI sAI) { sAI.GetSurvivor().MoveTo(sAI.GetCurrDefensePoint().transform.position); sAI.mvmtTracker = Moving.NOT_MOVING_ON_ASTAR; SearchingForLoot = false; Invoke("SearchForLoot", 20.0f); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { Gate north = GameManager.GetGate(GATE_POSITION.NORTH); Gate east = GameManager.GetGate(GATE_POSITION.EAST); Gate south = GameManager.GetGate(GATE_POSITION.SOUTH); Gate west = GameManager.GetGate(GATE_POSITION.WEST); if (north.GetHealth() <= 0) { GameManager.RepairGate(GATE_POSITION.NORTH); } if (east.GetHealth() <= 0) { GameManager.RepairGate(GATE_POSITION.EAST); } if (south.GetHealth() <= 0) { GameManager.RepairGate(GATE_POSITION.SOUTH); } if (west.GetHealth() <= 0) { GameManager.RepairGate(GATE_POSITION.WEST); } return(TASK_RETURN_STATUS.SUCCEED); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.SUCCESS; Debug.Log("Testing"); return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { hivemind.UpdateDefensePoints(); base.Run(sAI); return(TASK_RETURN_STATUS.SUCCEED); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { sAI.SetMvmtTree(MOVEMENT_TREE.DEFAULT); sAI.GetHiveRef().MoveSurvivorBack(sAI); //sAI.GetSurvivor().MoveTo(sAI.GetCurrDefensePoint().transform.position); return(TASK_RETURN_STATUS.SUCCEED); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.SUCCESS; sAI.GetSurvivor().SwitchWeapons(WEAPON_TYPE.PISTOL); return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.SUCCESS; FindPath(sAI, sAI.GetSurvivor().transform.position, targetPoint); return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { while (GameManager.GetCurrentGold() >= 10) //40) { GameManager.PurchaseAmmo(WEAPON_TYPE.ASSAULT); } return(TASK_RETURN_STATUS.SUCCEED); }
Collider[] FindEnemiesInRange(Survivor_AI sAI) { int mask = 1 << LayerMask.NameToLayer("Enemy"); Collider[] cols = Physics.OverlapSphere(sAI.transform.position, sAI.enemySearchRadius, mask); return(cols); }
float GetDistFromTarget(Enemy e, Survivor_AI sAI) { float dist; Vector3 dtt = e.gameObject.transform.position - sAI.gameObject.transform.position; dist = dtt.magnitude; return(dist); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED; Blackboard bb = sAI.GetBlackboard(); bb.distFromTarget = GetDistFromTarget(bb.enemyTarget, sAI); output = TASK_RETURN_STATUS.SUCCEED; return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED; if (GameManager.getAllEnemies().Count > 4) { output = TASK_RETURN_STATUS.SUCCEED; } return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { for (int i = 0; i < children.Count; i++) { Task child = children[i]; child.Run(sAI); } return(TASK_RETURN_STATUS.SUCCESS); }
void SpendGold() { if (GameManager.GetBreakTimeRemaining() > 0) { // let the first survivor on list make the purchasing decesions Survivor_AI sAI = survivorAIs[0]; ResetSurvivorsBT(); // reset before making purchases sAI.SetBehaviorTree(new Sequence_SpendGold()); } }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED; if (sAI.GetBlackboard().nodesForAStar.Count <= 0) { output = TASK_RETURN_STATUS.SUCCEED; } return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILURE; if (enemyTarget.getState() == EnemyState.NORMAL) { sAI.GetBlackBoard().target = enemyTarget; output = TASK_RETURN_STATUS.SUCCESS; } return(output); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { if (sAI.GetSurvivor().GetWeapon(WEAPON_TYPE.SHOTGUN).getAmmo() < 10) { //while (GameManager.GetCurrentGold() >= 25) //{ GameManager.PurchaseAmmo(WEAPON_TYPE.SHOTGUN); GameManager.PurchaseAmmo(WEAPON_TYPE.SHOTGUN); //} } return(TASK_RETURN_STATUS.SUCCEED); }
public override TASK_RETURN_STATUS Run(Survivor_AI sAI) { TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILURE; if(GameManager.GetBreakTimeRemaining() > 0) { SpendGoldOnAmmo(); output = TASK_RETURN_STATUS.SUCCESS; } return output; }