void RandomMove() { //Let's go.... THIS WAY currentDirection = Random.Range(0, 360); currentVelocity = speed; AIController = AIStart; }
void AlliesClose() { bool allyNear = false; GameObject[] enemyList = GameObject.FindGameObjectsWithTag("Enemy"); foreach (GameObject g in enemyList) { if (g != gameObject) { float allyDist = Vector3.Distance(g.gameObject.transform.position, gameObject.transform.position); if (allyDist < friendlyRange) { allyNear = true; } } } //Yes, Attack if (allyNear) { AIController = Attack; } //No, is HP low? else { AIController = HPLow; } }
void MoveToSpawn() { //E.T. Goooooo Hooooooome rot = Mathf.Atan2((spawn.y - rb2d.transform.position.y), (spawn.x - transform.position.x)) * Mathf.Rad2Deg - 90; currentDirection = rot; currentVelocity = speed; AIController = AIStart; }
void Retreat() { //RUN AWAAAAAAAAAAAAAAAAAAY if (player != null) { rot = Mathf.Atan2((player.transform.position.y - transform.position.y), (player.transform.position.x - transform.position.x)) * Mathf.Rad2Deg + 90; } currentDirection = rot; currentVelocity = speed; AIController = AIStart; }
void Attack() { //CHAAAAAAAAAAAAAAAARGE if (player != null) { rot = Mathf.Atan2((player.transform.position.y - transform.position.y), (player.transform.position.x - transform.position.x)) * Mathf.Rad2Deg - 90; } currentDirection = rot; currentVelocity = speed; AIController = AIStart; }
void HPLow() { //Yes, Run away if (hp <= HPThreshold) { AIController = Retreat; } //No, Attack else { AIController = Attack; } }
void RandomIdle() { //Move in a random direction if (Random.value >= 0.5f) { AIController = RandomMove; } //Or Sit still else { AIController = Idle; } }
void FarFromSpawn() { //Yes, move to Spawn if (spawnDist > spawnTetherRange) { AIController = MoveToSpawn; } //No? Random Idle else { AIController = RandomIdle; } }
void PlayerInAggroRange() { //Yes, Check if Allies are near if (playerDist < aggroRange) { AIController = AlliesClose; } //No, is HP low? else { AIController = HPLow; } }
void PlayerInThreatZone() { //Yes, check if in Aggro range if (playerDist < threatRange) { AIController = PlayerInAggroRange; } //No, Check if too Far from spawn else { AIController = FarFromSpawn; } }
void Start() { rb2d = gameObject.GetComponent <Rigidbody2D>(); anim = GetComponent <Animator>(); spawn = gameObject.transform.position; AIController = PlayerInThreatZone; InvokeRepeating("Tick", 0, 0.1f); if (GameObject.FindGameObjectWithTag("Player") == null) { player = gameObject.transform; } else { player = GameObject.FindGameObjectWithTag("Player").transform; playerDist = Vector3.Distance(gameObject.transform.position, player.transform.position); } spawnDist = Vector3.Distance(gameObject.transform.position, spawn); }
void Idle() { //Zzzzzz currentVelocity = 0; AIController = AIStart; }
void AIStart() { //Start of our descision Tree AIController = PlayerInThreatZone; }