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

        if (rb.velocity.magnitude <= slowSpeed)
        {
            // print("we slow");
            // A
            if (Vector3.Distance(position, target) <= closeDistance)
            {
                // print("we close");
                //A i) behaviour

                //move to target, no turning
                if (!isSteering)
                {
                    Kinematic.Arrive(rb, transform, targetPos.position, closeSpeed);
                }
                else
                {
                    Steering.Arrive(rb, transform, targetPos.position, closeAcceleration, closeSpeed);
                }
            }
            else
            {
                // print("we far");
                //A ii) behaviour

                //if angle btw forward and target close to 0,
                if (Vector3.Angle(transform.forward, target - position) <= 2f)
                {
                    // then move forward
                    if (!isSteering)
                    {
                        Kinematic.Arrive(rb, transform, targetPos.position, farSpeed);
                    }
                    else
                    {
                        Steering.Arrive(rb, transform, targetPos.position, farAcceleration, farSpeed);
                    }
                }
                else
                {
                    // else turn towards target
                    if (isSteering || rb.velocity.magnitude < 1f)
                    {
                        Helper.Alignment(transform, target - position, stopRotationSpeed);
                    }
                    else
                    {
                        Helper.Alignment(transform, rb.velocity, stopRotationSpeed);
                    }
                }
            }
        }
        else
        {
            // print("we fast");
            //B
            // check arc infront of character
            float coneAngle = Helper.Map(rb.velocity.magnitude, 0f, farSpeed, fastAngle, slowAngle);
            if (Vector3.Angle(transform.forward, target - position)
                <= coneAngle)
            {
                // print("OhISee");
                //B i)
                if (!isSteering)
                {
                    Kinematic.Arrive(rb, transform, targetPos.position, farSpeed);
                }
                else
                {
                    Steering.Arrive(rb, transform, targetPos.position, farAcceleration, farSpeed);
                }
                Helper.Alignment(transform, rb.velocity, moveRotationSpeed);
            }
            else
            {
                // print("OhImBlind");
                // B ii)
                rb.velocity = Vector3.zero; //stop
                Helper.Alignment(transform, target - position, stopRotationSpeed);
            }
        }
    }
Esempio n. 2
0
    private void Update()
    {
        captureIcon.SetActive(isCapturer);

        if (isTagged)
        {
            if (isReturning)
            {
                ResetFlag();
                isReturning = false;
            }
            isCapturer = false;
            // FREEZE
            rb.velocity = Vector3.zero;
            return;
        }

        if (!isCapturer && !isReviver && !isTagged && !isReturning)
        {
            if (findingNewTarget)
            {
                StartCoroutine(FindNewPosition());
            }
            Debug.DrawLine(transform.position, targetPos, Color.green);
        }

        if (isCapturer && !isReturning)
        {
            targetPos = flagPos.position;
        }

        if (isReviver)
        {
            if (teamID == 1)
            {
                foreach (var guy in blueTeam)
                {
                    var capturer = guy.GetComponent <Capturer>();
                    if (capturer.isTagged)
                    {
                        targetPos = capturer.transform.position;
                        break;
                    }
                }
            }
            else if (teamID == 2)
            {
                foreach (var guy in redTeam)
                {
                    var capturer = guy.GetComponent <Capturer>();
                    if (capturer.isTagged)
                    {
                        targetPos = capturer.transform.position;
                        break;
                    }
                }
            }
        }

        Kinematic.Arrive(rb, transform, targetPos, wanderSpeed);
        Helper.Alignment(transform, rb.velocity, 1f);
        transform.rotation = Quaternion.Euler(0f, transform.eulerAngles.y, 0f);
    }