private void attensionSpan() { if (target != null && Physics.Raycast(transform.position, (target.transform.position - transform.position).normalized, out hit, Mathf.Infinity, mask)) { curState = logicState.idel; target = null; } }
/* * public logicState GetState() * { * return logic; * } */ public void loseTarget() { if (agro == false) { player = null; fov.setTargetNull(); logic = logicState.roam; } }
private void FixedUpdate() { if (!fov.FindTarget()) { if (agro == true) { Invoke("loseTarget", attentionSpan); } agro = false; } else { if (agro == false) { logic = logicState.followTarget; player = fov.visibleTarget; } agro = true; } switch (logic) { case logicState.roam: break; case logicState.followTarget: if (player != null && Vector3.Distance(transform.position, player.transform.position) < attackDistance) { logic = logicState.attack; } break; case logicState.hostile: break; case logicState.attack: if (player != null && Vector3.Distance(transform.position, player.transform.position) > attackDistance) { logic = logicState.followTarget; } break; default: break; } }
public void SetState(int _num) { if (_num == 1) { logic = logicState.roam; } else if (_num == 2) { logic = logicState.followTarget; } else if (_num == 3) { logic = logicState.hostile; } else if (_num == 4) { logic = logicState.attack; } else { Debug.Log("stateSet_Incorrect"); } }
public static void eventGameLoad() { if (!bInit) { // Init the Menu generalUI.genInit(rootMenu,"Ahri", "Ahri"); // Set up Spells spellSetup(); // Check Summoners - DO LATER //PLACEHOLDER // Register OnDraw and OnUpdate lState = new logicState(); Game.PrintChat("TEST"); Drawing.OnDraw += eventGameDraw; Game.OnUpdate += eventGameTick; } }
// Update is called once per frame void Update() { //Animation if (navAgent.destination != transform.position) { anim.SetBool("walk", true); } else { anim.SetBool("walk", false); } GetClosestPlayer(); if (navAgent != null && !dead) { switch (curState) { case logicState.idel: switch (type) { case EnemyType.meele: if (target != null) { curState = logicState.agro; } else { findNearestAlly(); if (ally != null && (ally.transform.position - transform.position).magnitude > 5) { newPos = ally.transform.position + new Vector3(Random.Range(-2, 2), 0, Random.Range(-2, 2)); curState = logicState.followPack; } else { if ((newPos - transform.position).magnitude < 10) { newPos = transform.position + new Vector3(Random.Range(-10, 10), 0, Random.Range(-10, 10)); } else { navAgent.SetDestination(newPos); } } } break; case EnemyType.ranged: once = false; if ((newPos - transform.position).magnitude < 10) { newPos = transform.position + new Vector3(Random.Range(-10, 10), 0, Random.Range(-10, 10)); } else { navAgent.SetDestination(newPos); } if (target != null) { curState = logicState.agro; } break; default: break; } break; case logicState.followPack: switch (type) { case EnemyType.meele: if (ally != null) { navAgent.SetDestination(newPos); if ((newPos - transform.position).magnitude < 5) { curState = logicState.idel; } } break; case EnemyType.ranged: findNearestAlly(); if (!once) { once = true; navAgent.SetDestination(allies[Random.Range(0, allies.Length)].transform.position); } if ((target.transform.position - transform.position).magnitude > 10) { curState = logicState.idel; } break; default: break; } break; case logicState.agro: switch (type) { case EnemyType.meele: if (target != null) { navAgent.SetDestination(target.transform.position); if (Physics.Raycast(transform.position, (target.transform.position - transform.position).normalized, out hit, Mathf.Infinity, mask)) { Debug.DrawLine(transform.position, hit.collider.transform.position, Color.white); Debug.Log(hit.collider.tag); if (hit.collider.tag != "Player") { Invoke("attensionSpan", 2.5f); } } if ((target.transform.position - transform.position).magnitude < 2) { curState = logicState.attack; } } break; case EnemyType.ranged: if (target != null) { navAgent.SetDestination(target.transform.position); if (Physics.Raycast(transform.position, (target.transform.position - transform.position).normalized, out hit, Mathf.Infinity, mask)) { Debug.DrawLine(transform.position, hit.collider.transform.position, Color.white); Debug.Log(hit.collider.tag); if (hit.collider.tag != "Player") { Invoke("attensionSpan", 5f); } } if ((target.transform.position - transform.position).magnitude < 15) { curState = logicState.attack; } } break; default: break; } break; case logicState.attack: switch (type) { case EnemyType.meele: if (target != null) { anim.SetTrigger("attack"); if (target != null) { navAgent.SetDestination(target.transform.position); if ((target.transform.position - transform.position).magnitude > 1) { curState = logicState.agro; } } else { curState = logicState.idel; } } break; case EnemyType.ranged: anim.SetBool("walk", false); navAgent.SetDestination(transform.position); if (target != null) { transform.LookAt(target.transform.position); if (!rate) { rate = true; Invoke("shoot", rateOfFire); } if ((target.transform.position - transform.position).magnitude > 20) { curState = logicState.agro; } if ((target.transform.position - transform.position).magnitude < 10) { curState = logicState.followPack; } } else { curState = logicState.idel; } break; default: break; } break; default: break; } } else { navAgent.SetDestination(transform.position); } }