void Update() //Update is called once per frame { if (FinalPath.Count > 0) { foreach (var item in FinalPath) { Debug.DrawLine(item.transform.position + GetExtents(item), transform.position, Color.red, 2); } } switch (CurrentEnemyID) //unique functions per enemy type { case EnemyID.Bonus: transform.Rotate(Vector3.right * UnityEngine.Random.value * 5); gameObject.GetComponent <Renderer>().material.color = Color.Lerp(Color.yellow, Color.black, Mathf.PingPong(Time.time, 1)); //Color pulsing StandardMovement(); break; case EnemyID.Charger: StandardMovement(); break; case EnemyID.Regenerator: gameObject.GetComponent <Renderer>().material.color = Color.Lerp(new Color32(250, 128, 114, 255), new Color32(0, 128, 0, 255), Mathf.PingPong(Time.time, 1.5f)); StandardMovement(); break; case EnemyID.Phasing: Color col = GetComponent <Renderer>().material.color; GetComponent <Renderer>().material.color = new Color(col.r, col.g, col.b, Mathf.PingPong(Time.time / 4, 1)); StandardMovement(); break; case EnemyID.Support: if (GameObject.Find("EnemyController").transform.childCount > 2) { float tempDist = 999999; foreach (Transform enemy in GameObject.Find("EnemyController").transform) { if (enemy.name != "FragmentEncapsulation" && enemy.name != "Support" && Vector3.Distance(gameObject.transform.position, enemy.position) <= tempDist && enemy.GetComponent <EnemyFunction>().CurrentHP + 2 <= enemy.GetComponent <EnemyFunction>().MaxHP) { tempDist = Vector3.Distance(gameObject.transform.position, enemy.position); Ally = enemy.gameObject; } } } else { Ally = gameObject; } if (Ally = gameObject) { StandardMovement(); } else { GetComponent <Rigidbody>().velocity = ((Ally.transform.position - Vector3.back) - transform.position).normalized * MoveSpeed; } break; case EnemyID.Resurrecting: Collider GOCollider = GetComponent <Collider>(); GOCollider.enabled = false; gameObject.transform.position = new Vector3(ResPos.x, Mathf.Lerp((ResPos + (Vector3.down * 30)).y, ResPos.y, Time.time / 20), ResPos.z); if (gameObject.transform.position.y >= ResPos.y) { CurrentEnemyID = EnemyID.Default; GOCollider.enabled = true; gameObject.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ | RigidbodyConstraints.FreezeRotationY; } break; default: StandardMovement(); break; } if (Input.GetMouseButtonDown(0)) { RaycastHit hit; //Ray stuff for damage text popups if ((Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))) { if (hit.transform == transform) //Is the ray hitting this transform? { if (UnityEngine.Random.Range(0, 20) <= 1) { AudioSource.PlayClipAtPoint(DamageSound, maincamera.transform.position, 0.03f); } DamageDealt = GameManagerStuff.Damage; CurrentHP += (DamageDealt / ArmourVal) * GameManagerStuff.ArmourPiercingPC; GameManager.DisplayValue((DamageDealt / ArmourVal) * GameManagerStuff.ArmourPiercingPC, gameObject.transform.position); GameManager.FragmentEnemy(gameObject, 1, 1); GameManagerStuff.Currency += GameManagerStuff.Bonus; if (CurrentEnemyID == EnemyID.Teleport) { Teleport(gameObject); } } } } if (CurrentHP <= 0) { AudioSource.PlayClipAtPoint(DeathSound, maincamera.transform.position, 0.03f); if (CurrentEnemyID == EnemyID.Mother) { ESp.SpawnBaddie(EnemyID.Child, transform.position + Vector3.right * 5); ESp.SpawnBaddie(EnemyID.Child, transform.position + Vector3.left * 5); Destroy(killzonepathing); Destroy(gameObject); } else if (CurrentEnemyID == EnemyID.Undead) { ResPos = gameObject.transform.position; CurrentHP = MaxHP; CurrentEnemyID = EnemyID.Resurrecting; gameObject.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ; GetComponent <Renderer>().material.color = new Color32(152, 251, 152, 255); GameManager.FragmentEnemy(gameObject, 10, 15); } else { GameManager.FragmentEnemy(gameObject, 10, 15); GameManagerStuff.EnemiesKilled++; Destroy(killzonepathing); Destroy(gameObject); } GameManagerStuff.Currency += EnemyValue; } }