private void FixedUpdate() { if (!behaviorScript.alive) { return; } if (behaviorScript.curObj == Behavior.Objective.Wander) { if (!behaviorScript.objective) { behaviorScript.objective = GameManager.Instance.waypoints[Random.Range(0, GameManager.Instance.waypoints.Count)]; } //transform.Translate((wanderDirection * Time.deltaTime * movementSpeed * totalMoveSpeed * wanderMultiplier)); //wanderTime -= Time.deltaTime; //if(wanderTime <= 0) { isWandering = false; } if (Vector2.Distance(this.gameObject.transform.position, behaviorScript.objective.transform.position) > .5f) { transform.position = Vector2.MoveTowards(transform.position, behaviorScript.objective.transform.position, totalMoveSpeed * wanderMultiplier * Time.deltaTime); } else { behaviorScript.CancelObjective(); } } if (behaviorScript.curObj == Behavior.Objective.Eating && behaviorScript.objective) { if (Vector2.Distance(this.gameObject.transform.position, behaviorScript.objective.transform.position) > eatRange) { transform.position = Vector2.MoveTowards(transform.position, behaviorScript.objective.transform.position, totalMoveSpeed * Time.deltaTime); } else { behaviorScript.Nibble(behaviorScript.objective); } } if (behaviorScript.curObj == Behavior.Objective.Flocking && behaviorScript.objective) { if (Vector2.Distance(this.gameObject.transform.position, behaviorScript.objective.transform.position) > .5f) { transform.position = Vector2.MoveTowards(transform.position, behaviorScript.objective.transform.position, totalMoveSpeed * Time.deltaTime); } else { //not sure what to do while close } } if (behaviorScript.curObj == Behavior.Objective.Tracking && behaviorScript.objective) { if (Vector2.Distance(this.gameObject.transform.position, behaviorScript.objective.transform.position) > .1f) { transform.position = Vector2.MoveTowards(transform.position, behaviorScript.objective.transform.position, totalMoveSpeed * Time.deltaTime); } else { GameObject nextScent = behaviorScript.objective.GetComponent <Scent>().StrongestNeighbor(); if (nextScent) { behaviorScript.UpdateObjective(Behavior.Objective.Tracking, nextScent); } else { behaviorScript.objective.GetComponent <Scent>().scentStrength = 0.9f; behaviorScript.busyThinking = false; } } } if (behaviorScript.curObj == Behavior.Objective.SearchingFar && behaviorScript.objective) { if (Vector2.Distance(this.gameObject.transform.position, behaviorScript.objective.transform.position) > 1) { transform.position = Vector2.MoveTowards(transform.position, behaviorScript.objective.transform.position, totalMoveSpeed * Time.deltaTime); } else { behaviorScript.farBoundary = null; } } if (behaviorScript.curObj == Behavior.Objective.DryingOff) { if (inWater > 0) { //go to dry land behaviorScript.bonusTimeUntilNextThought += Time.deltaTime; if (!behaviorScript.objective) { behaviorScript.objective = waterEntered; } Vector2 fleeDirection = transform.position - behaviorScript.objective.transform.position; transform.Translate(fleeDirection * Time.deltaTime * totalMoveSpeed); } else { behaviorScript.DryOff(); } } if (behaviorScript.curObj == Behavior.Objective.Drinking) { if (Vector2.Distance(this.gameObject.transform.position, behaviorScript.objective.transform.position) > drinkRange) { transform.position = Vector2.MoveTowards(transform.position, behaviorScript.objective.transform.position, totalMoveSpeed * Time.deltaTime); } else { behaviorScript.Drink(); } } if (behaviorScript.curObj == Behavior.Objective.Stalking) { if (Vector2.Distance(this.gameObject.transform.position, behaviorScript.objective.transform.position) > .6f) { transform.position = Vector2.MoveTowards(transform.position, behaviorScript.objective.transform.position, totalMoveSpeed * Time.deltaTime); } else { behaviorScript.objective.GetComponent <Behavior>().Die(false); behaviorScript.UpdateObjective(Behavior.Objective.Eating, behaviorScript.objective); } } if (behaviorScript.curObj == Behavior.Objective.Escaping) { if (Vector2.Distance(this.gameObject.transform.position, behaviorScript.objective.transform.position) < 4f) { Vector2 fleeDirection = transform.position - behaviorScript.objective.transform.position; transform.Translate(fleeDirection * Time.deltaTime * totalMoveSpeed / 2); } else { behaviorScript.CancelObjective(); } } if (rb.velocity.magnitude > totalMoveSpeed) { rb.velocity = rb.velocity.normalized * totalMoveSpeed; } }