Esempio n. 1
0
    private void Update()
    {
        Vector3 position   = transform.position;
        Vector3 target     = targetPos.position;
        bool    isSteering = GlobalSettings.isInSteering;

        //C
        if (Vector3.Distance(position, target) <= distance)
        {
            //C i)
            if (isSteering)
            {
                Steering.Flee(rb, transform, targetPos.position, acceleration, speed);
            }
            else
            {
                Kinematic.Flee(rb, transform, targetPos.position, speed);
            }
        }
        else
        {
            rb.velocity = Vector3.zero;
            //C ii)
            //if angle btw forward and target close to 0,
            if (Vector3.Angle(-transform.forward, target - position) <= 2f)
            {
                // then move forward
                if (isSteering)
                {
                    Steering.Flee(rb, transform, targetPos.position, acceleration, speed);
                }
                else
                {
                    Kinematic.Flee(rb, transform, targetPos.position, speed);
                }
            }
            else
            {
                // else turn towards target
                if (isSteering || rb.velocity.magnitude < 1f)
                {
                    Helper.Alignment(transform, position - target, stopRotationSpeed);
                }
                else
                {
                    Helper.Alignment(transform, position - target, stopRotationSpeed);
                }
            }
        }
    }