Beispiel #1
0
    void updateTargetSpotlightRotation(float deltaTime)
    {
        Vector3 spotPos = helicopter.getSpotlight().transform.position;

        if (helicopter.getSpotlight().transform.rotation == targetSpotlightRotation)
        {
            //build new target position for helicopter to rotate to

            targetSpotPos    = Vector3.zero;
            targetSpotPos.x  = frenzy.getLastKnownPlayerPosition().x;
            targetSpotPos.x += helicopter.xOffsetLightSearch.nextValue(deltaTime);
            targetSpotPos.y  = frenzy.getLastKnownPlayerPosition().y;
        }
        //Vector representing drawing directions to get from spotlight to player
        Vector3 hypotenuse = targetSpotPos - spotPos;

        hypotenuse.z = 0;
        //ratio to calculate angle through atan
        float ratio = -1 * hypotenuse.x / hypotenuse.y;
        //Offset from vertically down that the spotlight should point
        float radOffset = Mathf.Atan(ratio);
        //converted
        float degOffset = Mathf.Rad2Deg * radOffset;

        //The spotlight rotation should be quaternion representation of that offset
        targetSpotlightRotation = Quaternion.Euler(0, 0, degOffset);
    }
Beispiel #2
0
    public SearchInFrenzyState(HeliScript helicopter, float deltaTime, PursuitState comingFrom, HelicopterState afterLosing)
    {
        Debug.Log("Searching");
        //Initializing default, independent vals for behavioral variables
        this.helicopter = helicopter;
        this.comingFrom = comingFrom;
        goBackToPursuit = false;
        ifLost          = afterLosing;

        //Interacting with the frenzy controller
        frenzy = GameObject.Find("FrenzyController").GetComponent <FrenzyMode>();

        rootPos    = frenzy.getLastKnownPlayerPosition();
        rootPos.y += helicopter.vertDistanceFromPlayerInChase;

        //Getting the actual player we're chasing down
        player          = GameObject.Find("Player");
        lastSeenToRight = player.transform.position.x > rootPos.x;


        targetPosition          = rootPos + new Vector3(searchDist, 0, 0);
        targetSpotlightRotation = helicopter.getSpotlight().transform.rotation;
        //These two variables are never updated during pursuit state
        currSpeed = helicopter.speed * helicopter.frenzySpeedBonus;
        spotlightRotationSpeed = helicopter.spotlightRotationSpeedChase;

        //Updates to be ready for the first frame
        updateState(deltaTime);
    }
    void updateTargetSpotlightRotation(float deltaTime)
    {
        //Absolute position of spotlight
        Vector3 spotPos = helicopter.getSpotlight().transform.position;
        //Abs pos of player
        Vector3 playerPos      = player.transform.position;
        Vector3 xOffset        = Vector3.right * helicopter.xOffsetLightChase.nextValue(deltaTime);
        Vector3 targetLocation = playerPos + xOffset;



        //Vector representing drawing directions to get from spotlight to player
        Vector3 hypotenuse = targetLocation - spotPos;

        hypotenuse.z = 0;
        //ratio to calculate angle through atan
        float ratio = -1 * hypotenuse.x / hypotenuse.y;
        //Offset from vertically down that the spotlight should point
        float radOffset = Mathf.Atan(ratio);
        //converted
        float degOffset = Mathf.Rad2Deg * radOffset;

        //The spotlight rotation should be quaternion representation of that offset
        targetSpotlightRotation = Quaternion.Euler(0, 0, degOffset);
    }
Beispiel #4
0
    /**
     * The default constructor for FlipState.
     * This makes the assumption that we can finish this FlipState with
     * the position of the helicopter after the flip as the root, and then
     * begin the movement pattern from there (starting sine wave at t=0).
     * Because of this, this shouldn't be called by IdleState, as it can
     * result in the helicopter repeatedly changing it's anchor height after
     * every flip, over time making the helicopter descend or ascend significantly
     */
    public FlipState(HeliScript helicopter, float deltaTime, HelicopterState toReturnTo)
    {
        //Initializing default, independent vals for behavioral variables
        this.helicopter  = helicopter;
        timeIntoFlip     = 0f;
        haveFlipped      = false;
        flippedThisFrame = false;
        rootPosition     = toReturnTo.getTargetPosition();
        rootPosition.y  -= helicopter.yOffsetMovement.indexedValue();         //since we adjust for bob, remove from root position
        this.toReturnTo  = toReturnTo;
        justSawPlayer    = false;
        initialSpeed     = (helicopter.getMovingRight()) ? helicopter.speed : -helicopter.speed;

        //initalize debug vars
        //currSpeedDebug = new List<float>();
        //targetPositionDebug = new List<float> ();

        //Shortcuts for accessing frequent variables without reaching back into helicopter each time
        lengthOfFlipInSeconds       = helicopter.flipTime;
        halfwayPoint                = lengthOfFlipInSeconds / 2;
        spotlightRotationBeforeFlip = helicopter.getSpotlight().transform.rotation;

        //Only need to calculate new spotlight rotation once, as it is simply the negated spotlight's rotation along the z axis
        targetSpotlightRotation = calculateNewSpotlightRotation();

        //Similarly, only need to calculate spotlight rotation speed once, as it's just the value that is scaled by time
        //to allow the spotlight to rotate smoothly and end exactly on the rotation point at helicopter.flipTime seconds
        spotlightRotationSpeed = calculateSpotlightRotationSpeed(targetSpotlightRotation.eulerAngles.z);
        //Must call this once during the constructor so that we have values initiated for the first frame of it's instantiation
        updateState(deltaTime);
    }
Beispiel #5
0
 //Constructor run when creating IdleState
 public IdleState(HeliScript helicopter, float deltaTime)
 {
     this.helicopter         = helicopter;
     flippedThisFrame        = false;
     horizontalSpeed         = helicopter.speed;
     targetSpotlightRotation = helicopter.getSpotlight().transform.rotation;
     spotlightRotationSpeed  = 0f;
     rootPosition            = helicopter.transform.position;
     traversalDistance       = helicopter.idleRoamingDistanceCovered;
     justSawPlayer           = false;
     updateState(deltaTime);
 }