コード例 #1
0
    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;
        }
    }