Beispiel #1
0
    // Update is called once per frame
    void Update()
    {
        if (!isLit)
        {
            Vector3 reflexes = bdi.UpdateBDI();
            //Debug.Log(gameObject.name + " my intention is " + (bdi.myIntention == null ? "None" : bdi.myIntention.GetType().ToString()));
            if (!reflexes.Equals(Vector3.zero) || bdi.myIntention == null)
            {
                Vector3 destination = transform.position + reflexes.normalized;
                //Debug.DrawLine(transform.position, destination, Color.black);
                rb.velocity        = ((destination - transform.position).normalized) * settings.MaxSpeed;
                transform.rotation = Quaternion.LookRotation(rb.velocity);
            }
            else
            {
                Vector3 intentionDirection = bdi.myIntention.DefaultState(this).normalized;

                intentionDirection.y = 0;
                List <Agent> neighbors = bdi.myPerception.AgentsInSight;
                List <Agent> relative  = bdi.myBelief.MesoInSight(bdi.myPerception);

                Vector3 flockingDirection = (relative.Count > 0 ?
                                             (1 - settings.CoeffMesoFlock) * flocking.Flocking(neighbors) + settings.CoeffMesoFlock * flocking.Flocking(relative) :
                                             flocking.Flocking(neighbors));

                Vector3 force       = (intentionDirection.Equals(Vector3.zero) ? flockingDirection : (1 - settings.CoeffI) * flockingDirection + settings.CoeffI * intentionDirection);
                Vector3 destination = transform.position + force.normalized;
                //Debug.DrawLine(transform.position, destination, Color.black);
                rb.velocity        = (force.Equals(Vector3.zero) ? transform.TransformDirection(Vector3.forward) : (destination - transform.position).normalized) * settings.MaxSpeed;
                transform.rotation = Quaternion.LookRotation(rb.velocity);
            }
        }
    }
    // Update is called once per frame
    void Update()
    {
        Vector3 reflexes = bdi.UpdateBDI();

        if (!reflexes.Equals(Vector3.zero) || bdi.myIntention == null)
        {
            Vector3 destination = transform.position + reflexes.normalized;
            //Debug.DrawLine(transform.position, destination, Color.black);
            rb.velocity        = ((destination - transform.position).normalized) * settings.MaxSpeed;
            transform.rotation = Quaternion.LookRotation(rb.velocity);
        }
        else
        {
            Vector3 intentionDirection = bdi.myIntention.DefaultState(this).normalized;

            intentionDirection.y = 0;
            List <Agent> neighbors = bdi.myPerception.AgentsInSight;

            Vector3 force       = (intentionDirection.Equals(Vector3.zero) ? flocking.Flocking(neighbors) : (1 - settings.CoeffI) * flocking.Flocking(neighbors) + settings.CoeffI * intentionDirection);
            Vector3 destination = transform.position + force.normalized;
            //Debug.DrawLine(transform.position, destination, Color.black);
            rb.velocity        = (force.Equals(Vector3.zero) ? transform.TransformDirection(Vector3.forward) : (destination - transform.position).normalized) * settings.MaxSpeed;
            transform.rotation = Quaternion.LookRotation(rb.velocity);
        }
    }