private void OnCollisionStay(Collision collision) { if (collision.collider.CompareTag("treetochop") && behaviourState != 2 && behaviourState != 3 && behaviourState != 4) { behaviourState = 1; //collision.collider.gameObject.tag = "Untagged"; // Remove the tag so that FindTarget won't return it currentTree = collision.collider.gameObject; ts = currentTree.GetComponent <treeScript>(); //Destroy(collision.collider.gameObject); //target = FindTarget(); } else if (collision.collider.CompareTag("generator")) { gs = generator.GetComponent <generatorScript>(); behaviourState = 3; } rb.angularVelocity = Vector3.zero; rb.velocity = Vector3.zero; }
private void FixedUpdate() { if (behaviourState == 0) { if (target != null) { //Vector3 direction = (target.position - transform.position).normalized; //rb.MovePosition(transform.position + direction * speed * Time.deltaTime); //// Vector3 targetDir = target.position - transform.position; //// The step size is equal to speed times frame time. //Quaternion rot = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), rotationSpeed * Time.deltaTime); ////Apply the rotation //transform.rotation = rot; //// put 0 on the axys you do not want for the rotation object to rotate //transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0); agent.SetDestination(target.position); } float distance = (target.transform.position - transform.position).sqrMagnitude; if (distance <= 1.5f) { behaviourState = 1; } } if (behaviourState == 1) { ts.health -= loggingSpeed * Time.deltaTime; Vector3 lookAtPoint = new Vector3(currentTree.transform.position.x, transform.position.y, currentTree.transform.position.z); Vector3 turningPoint = Vector3.Slerp(transform.position, lookAtPoint, Time.deltaTime * 0.1f); transform.LookAt(turningPoint); if (ts.isAlive == false) { currentTree.tag = "Untagged"; nearestTree = null; Destroy(currentTree); gameController.forestPower -= pointsLostPerTree; target = FindTarget(); behaviourState = 0; navMeshBaker.bakeNumber++; } } if (behaviourState == 2) { if (generator != null) { //Vector3 direction = (generator.transform.position - transform.position).normalized; //rb.MovePosition(transform.position + direction * speed * Time.deltaTime); agent.SetDestination(generator.transform.position); } float distance = (generator.transform.position - transform.position).sqrMagnitude; if (distance <= 1.5f) { gs = generator.GetComponent <generatorScript>(); behaviourState = 3; } } if (behaviourState == 3) { gs.Repair(); if (gs.brokenDown == false) { behaviourState = 0; } } if (behaviourState == 4) { scaredyTime -= Time.deltaTime; if (scaredyTime <= 0) { behaviourState = previousBehaviourInt; agent.SetDestination(previousPos); scaredyTime = scareTimeInitial; scared = false; } //Vector3 direction = (fleeTarget.position - transform.position).normalized; //rb.MovePosition(transform.position + direction * speed * Time.deltaTime); //// Vector3 targetDir = target.position - transform.position; //// The step size is equal to speed times frame time. //Quaternion rot = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), rotationSpeed * Time.deltaTime); ////Apply the rotation //transform.rotation = rot; //// put 0 on the axys you do not want for the rotation object to rotate //transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0); agent.SetDestination(fleeTarget.position); } }