private void DoBoundaryBehavior()
    {
        bool isOutOfBounds = !steering.CheckBounds();

        if (isOutOfBounds)
        {
            isAvoiding = true;
            steering.Seek(SceneManager.Instance.worldCenter, 0.0f);
        }
        else if (isAvoiding)
        {
            // not out of bounds
            isAvoiding = false;
            steering.SetWanderAngle(SceneManager.Instance.worldCenter);
        }
    }
Esempio n. 2
0
    // Update is called once per frame
    private void Update()
    {
        if (CamaraMouse.state_Locked)
        {
            Target = CamaraMouse.lockOnTarget;
            hook.transform.forward = manager.Seek(hook.transform.position, Target.transform.position, 1.0f);
            //hook.transform.forward = manager.Pursuit(hook.transform.position, Target.transform.position, Target.transform.forward.normalized,1.0f,SeekTime);
            if (Input.GetButtonDown("Whip") || Input.GetAxis("Whip") > 0 && isFired == false)
            {
                CamaraMouse.SelectStateEnabled = false;
                isFired = true;
            }
            if (isHooked && isFired)
            {
                Character.verticalMomentum = 0f;
                hook.transform.parent      = hookedObj.transform;
                transform.position         = Vector3.MoveTowards(transform.position, hook.transform.position, Time.deltaTime * hookPlayerSpeed);
                float distancetoHook = Vector3.Distance(transform.position, hook.transform.position);

                if (distancetoHook < 0.5f)
                {
                    //HERE GOES EDGE GRABBING SCRIPT//
                    ReturnHook();
                }
            }
            else
            {
                //this.GetComponent<Character>().enabled = true;
                hook.transform.parent = hookholder.transform;
                //this.GetComponent<Character>().moveSpeed = charspeed_placeholder;
            }
            if (isFired && isHooked == false)
            {
                hook.transform.parent   = null;
                hook.transform.position = Vector3.MoveTowards(hook.transform.position, Target.transform.position, Time.deltaTime * hookTravelSpeed);
                currentDistance         = Vector3.Distance(transform.position, hook.transform.position);
                //this.GetComponent<Character>().enabled = false;
                if (currentDistance >= maxDistance)
                {
                    ReturnHook();
                }
            }
        }
    }
Esempio n. 3
0
    // Update is called once per frame
    void Update()
    {
        mSteeringManager.ClearSteering();

        switch (mSettingsScript.getEnemyType())
        {
        case EnemySettings.enemyType.Seek:
        {
            mSteeringManager.Seek(mTarget.transform.position);
            mSteeringManager.wallAvoid(mTarget.transform.position);
            changeColour(Color.cyan);
            break;
        }

        case EnemySettings.enemyType.Flee:
        {
            mSteeringManager.Flee(mTarget.transform.position);
            changeColour(Color.green);
            break;
        }

        case EnemySettings.enemyType.Arrive:
        {
            mSteeringManager.Arrive(mTarget.transform.position);
            changeColour(Color.yellow);
            break;
        }

        case EnemySettings.enemyType.Pursue:
        {
            mSteeringManager.Pursue(mTarget.transform.position, mTarget.GetComponent <Rigidbody>().velocity);
            changeColour(Color.magenta);
            break;
        }

        case EnemySettings.enemyType.Evade:
        {
            mSteeringManager.Evade(mTarget.transform.position, mTarget.GetComponent <Rigidbody>().velocity);
            changeColour(Color.black);
            break;
        }

        case EnemySettings.enemyType.Wander:
        {
            mSteeringManager.Wander();
            mSteeringManager.Arrive(mTarget.transform.position);
            changeColour(Color.grey);
            break;
        }
        }

        Vector3 steering = mSteeringManager.getSteeringValue(mSettingsScript.getMaxForce());

        Vector3 velocityIn = mRigidBody.velocity;

        velocityIn.y = 0;

        Vector3 velocity = Vector3.ClampMagnitude(velocityIn + steering, mSettingsScript.getMaxSpeed());

        mRigidBody.velocity = velocity;


        checkState();
    }
Esempio n. 4
0
    private void Locomotion()
    {
        velocity = manager.Truncate(velocity + steering, moveSpeed);

        //QBIT BEHAVIOR STATE MACHINE

        switch (actualstate)
        {
        case "WANDER":
            Vector3 wander = new Vector3(0.0f, 0.0f, 0.0f);
            if (Vector3.Distance(transform.position, home.transform.position) > homeradius)
            {
                Vector3 seek_wander = manager.Seek(transform.position, home.transform.position, moveSpeed);
                wander  = manager.Wander(transform.position, seek_wander, moveSpeed, VISIONANGLE, homeradius, displacementmargin);
                wander += velocity;
            }
            else
            {
                if (QBitController.velocity.magnitude > 0.1f)
                {
                    wander = manager.Wander(transform.position, pivot.transform.position, moveSpeed, VISIONANGLE, homeradius, displacementmargin);
                }
                else
                {
                    Vector3 flee_wander = manager.Flee(transform.position, pivot.transform.position, moveSpeed, homeradius);
                    wander = manager.Wander(transform.position, flee_wander, moveSpeed, VISIONANGLE, homeradius, displacementmargin);
                }
            }
            steering = wander;
            pivot.transform.position = steering;
            break;

        case "SEEK":
            if (Vector3.Distance(transform.position, objective.transform.position) > approachradius)
            {
                Vector3 seek = manager.Seek(transform.position, objective.transform.position, moveSpeed);
                steering = steering + seek;
            }
            else
            {
                Vector3 arrive = manager.Arrive(transform.position, objective.transform.position, runSpeed, approachradius);
                steering = velocity - arrive;
            }
            break;

        case "FLEE":
            Vector3 flee = manager.Flee(transform.position, objective.transform.position, moveSpeed, warningradius);
            if (QBitController.velocity.magnitude > 0.1f)
            {
                steering = (steering + flee) / 1.2f;
            }
            else
            {
                steering = flee;
            }
            break;

        case "STOP":
            steering.Set(0.0f, 0.0f, 0.0f);
            break;

        default:
            break;
        }

        //QBIT BEHAVIOR STATE MACHINE

        steering = new Vector3(steering.x, 0.0f, steering.z);

        //if (!QBitController.isGrounded)
        //{
        //    steering.y -= (GRAVITY * Time.deltaTime);
        //}
        steering = transform.TransformDirection(steering);
        QBitController.Move(steering * Time.fixedDeltaTime);
    }