private void Update() { if (zombieStateMachine.IsSeekPath()) { // Should not happen } else if (zombieStateMachine.IsWalking()) { // TODO: resolve this, this is just quick fix if (attack_target.target_gameObject == null || !attack_target.target_gameObject.activeSelf) { zombieStateMachine.State = ZombieStateMachine.ZombieStateEnum.SeekPath; return; } // Do the attacking Ray front = new Ray(transform.position, transform.forward); Ray left = new Ray(transform.position, transform.forward - transform.right); Ray right = new Ray(transform.position, transform.forward + transform.right); AttackRay(front); AttackRay(left); AttackRay(right); } else if (zombieStateMachine.IsDrinking() || zombieStateMachine.IsAttacking()) { Vector3 lookTarget = Vector3.zero; // If dead if (attack_target.target_gameObject == null || attack_target.damageable.Dead()) { zombieStateMachine.State = ZombieStateMachine.ZombieStateEnum.SeekPath; return; } // Rotate towards target lookTarget = attack_target.hitpoint; lookTarget.y = transform.position.y; var targetRotation = Quaternion.LookRotation(lookTarget - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 5f * Time.deltaTime); // Attack once upon time if (Time.time > nextAttackTime) { nextAttackTime = Time.time + nextAttackIn; attack_target.damageable.Damage(damage); if (attack_target.target_gameObject == null && attack_target.damageable.Dead()) { attack_target.Erase(); zombieStateMachine.State = ZombieStateMachine.ZombieStateEnum.SeekPath; ResumeNavigation(); return; } } } else if (zombieStateMachine.IsDying()) { // don't do shit man } }