Ejemplo n.º 1
0
    public UNA_Level (string levelName, int sceneIndex, int numSegments)
    {
        this.levelName = levelName;
        this.sceneIndex = sceneIndex;

        pointsCollected = 0;
        timeElapsed = 0f;
        finalLevelPieceCollected = false;
        levelComplete = false;
        levelUnlocked = false;

        if (numSegments > 0)
        {
            levelSegments = new UNA_Segment[numSegments];

            for (int i = 0; i < numSegments; i++)
            {
                levelSegments[i] = new UNA_Segment(i + 1);
            }

        }

        else
        {
            levelSegments = new UNA_Segment[1];

            levelSegments[0] = new UNA_Segment(0);

        }

        lastCompletedSegment = levelSegments[0];
    }
Ejemplo n.º 2
0
    // ------------------------------------------------------------------------------
    // FUNCTIONS
    // ------------------------------------------------------------------------------

    // ------------------------------------------------------------------------------
    // Function Name: Start
    // Return types: void
    // Argument types: N/A
    // Author: Michael Smith
    // Date: 9/26/2017
    // ------------------------------------------------------------------------------
    // Purpose: Runs at the start of a scene. Ensures the associated collider is a trigger;
    //          sets the current level tracking to the level provided in the enum selection;
    //          iterates through all segments in the designated level to locate the appropriate
    //          segment data. Sets the gravity of the segment to the selected gravity setting.
    // ------------------------------------------------------------------------------

    private void Start()
    {
        GetComponent<BoxCollider>().isTrigger = true;

        currentLevel = WLD_GameController.activeLevel;

        for (int i = 0; i < currentLevel.LevelSegments.Length; i++)
        {
            if (currentLevel.LevelSegments[i].SegmentNumber == segmentNumber)
            {
                segment = currentLevel.LevelSegments[i];
            }
        }

        WLD_Teleporter[] teleporters = FindObjectsOfType<WLD_Teleporter>();

        for (int i = 0; i < teleporters.Length; i++)
        {
            if (teleporters[i].GetComponent<WLD_TeleporterOff>() != null)
            {
                teleporters[i].enabled = false;

            }

        }

        segment.GravitySetting = segmentGravity;

    }
    // ------------------------------------------------------------------------------
    // Function Name: OnTriggerStay
    // Return types: void
    // Argument types: Collider
    // Author: Michael Smith
    // Date: 9/27/2017
    // ------------------------------------------------------------------------------
    // Purpose: Runs while within a trigger volume. Collects segment info and calculates
    //          effective gravity based on environmental and gravity gun settings
    // ------------------------------------------------------------------------------

    private void OnTriggerStay(Collider other)
    {
        //Added to test InvertedGravity Areas
        //if (other.tag == UNA_Tags.invertGravity && drag > 0)
        //{
        //    drag = -1;
        //}
        //Finish Add

        if (other.tag == UNA_Tags.segment)
        {
            segment = other.GetComponent<WLD_SegmentController>().Segment;
            segmentGravity = WLD_GameController.gravityValues[segment.GravitySetting];

            segNum = segment.SegmentNumber;

            if (gunGravity == 0)
            {
                try
                {
                    effectiveGravity = -(CalculateGravity(segmentGravity) * drag);
                }
                catch (System.NullReferenceException)
                {
                    effectiveGravity = -(CalculateGravity(1));
                    throw;
                }

            }

            //ORIGINAL BEFORE TESTING FOR INVERTED GRAVITY
            //else if (segmentGravity - gunGravity > 0)
            //{
            //    effectiveGravity = -(CalculateGravity(gunGravity) - CalculateGravity(segmentGravity) * drag);
            //}


            //else if (segmentGravity - gunGravity < 0)
            //{
            //    effectiveGravity = -(CalculateGravity(segmentGravity) + CalculateGravity(gunGravity) * drag);
            //}
            //Finish Original

            //Added to test InvertedGravity Areas
            else if (drag > 0)
            {
                if (segmentGravity - gunGravity > 0)
                {
                    effectiveGravity = -(CalculateGravity(gunGravity) - CalculateGravity(segmentGravity));
                }


                else if (segmentGravity - gunGravity < 0)
                {
                    effectiveGravity = -(CalculateGravity(segmentGravity) + CalculateGravity(gunGravity));
                }
            }

            else if (drag < 0)
            {
                effectiveGravity = -(CalculateGravity(segmentGravity) - CalculateGravity(gunGravity));
            }
            //Finsish Add

            ApplyGravity();
        }

    }