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]; }
// ------------------------------------------------------------------------------ // 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(); } }