void OnTriggerExit(Collider c) { if (c.gameObject.tag == "HorizontalRail") { _currentHorRail = null; } if (c.gameObject.tag == "VerticalRail") { _currentVerRail = null; } }
// Methods // Initialization void Start() { // Cart for information player = GameObject.FindGameObjectWithTag("Player"); top = GameObject.FindGameObjectWithTag("Cart_Top"); playerScript = player.GetComponent <PlayerMovement>(); // Set up empty queues currentRails = new Queue <RailInfo>(); unused = new Queue <RailInfo>(); unusedTurns = new Queue <RailInfo>(); upcomingTurns = new Queue <RailInfo>(); // Change later to add more turns GameObject[] initialTurns = GameObject.FindGameObjectsWithTag("Turn"); for (int i = 0; i < initialTurns.Length; i++) { unusedTurns.Enqueue(initialTurns[i].GetComponent <RailInfo>()); } // Takes in initial rails GameObject[] objects = GameObject.FindGameObjectsWithTag("Rail"); int leng = objects.Length; initialRails = new RailInfo[leng]; for (int i = 0; i < leng; i++) { RailInfo temp = objects[i].GetComponent <RailInfo>(); initialRails[temp.initialPosition] = temp; } // Then puts them in the starting queue for (int i = 0; i < leng; i++) { currentRails.Enqueue(initialRails[i]); if (i == leng - 1) { newestRail = initialRails[i]; currentDirection = newestRail.direction; futureDirection = newestRail.direction; } } // Set default ints totalRailsPassed = 0; straightsSpawnedInRow = 18; }
void OnTriggerEnter(Collider c) { if (c.gameObject.tag == "PowerPellet") { if (!_munchSource.isPlaying) { _munchSource.Play(); } _munchElapseTime = 0.0f; Destroy(c.gameObject); GameManager.instance.AddScore(50); StartCoroutine(ChaseMode()); } else if (c.gameObject.tag == "Pellet") { if (!_munchSource.isPlaying) { _munchSource.Play(); } _munchElapseTime = 0.0f; Destroy(c.gameObject); GameManager.instance.AddScore(10); } if (c.gameObject.tag == "HorizontalRail") { _currentHorRail = c.gameObject.GetComponent<RailInfo>(); } if (c.gameObject.tag == "VerticalRail") { _currentVerRail = c.gameObject.GetComponent<RailInfo>(); } if (c.gameObject.tag == "Portal") { Debug.Log("Hit"); PortalTeleport portal = c.gameObject.GetComponent<PortalTeleport>(); GetComponent<Collider>().enabled = false; StartCoroutine("TimeToTele"); Vector3 newPos = transform.position; newPos.x = portal.teleDestination.x; newPos.z = portal.teleDestination.z; transform.position = newPos; } }
void LabelAndPlaceContainer(GameObject container, RailStruct railData, Transform startSnap, Transform endSnap, Transform meshPiece) { if (railData.length > 0) { container.transform.name = "Strait " + (railData.length * 100) + "mm" + " MyPiece"; } else { container.transform.name = "Radius " + (railData.radius * 100) + "mm, " + railData.angle + "º" + " MyPiece"; } RailInfo ri = container.AddComponent <RailInfo>(); ri.RailInfoInit(railData, startSnap, endSnap, meshPiece); container.transform.position = railData.position; container.transform.rotation = railData.rotation; }
void CleanUp() { bool tracksToCheck = true; do { // Direction check of cart Direction direction = currentDirection; bool bigEnoughZ = player.transform.position.z > currentRails.Peek().Position.z + 7.8 && direction == Direction.ZUp; bool smallEnoughZ = player.transform.position.z < currentRails.Peek().Position.z - 7.8 && direction == Direction.ZDown; bool bigEnoughX = player.transform.position.x > currentRails.Peek().Position.x + 7.8 && direction == Direction.XUp; bool smallEnoughX = player.transform.position.x < currentRails.Peek().Position.x - 7.8 && direction == Direction.XDown; // Take out the farthest rail if (bigEnoughZ || smallEnoughZ || bigEnoughX || smallEnoughX) { if (currentRails.Peek().turn) { RailInfo dequeued = currentRails.Dequeue(); dequeued.NewPosition(new Vector3(0, 100, 0)); unusedTurns.Enqueue(dequeued); } else { RailInfo dequeued = currentRails.Dequeue(); dequeued.NewPosition(new Vector3(0, 100, 0)); unused.Enqueue(dequeued); } totalRailsPassed++; AddTrack(); tracksToCheck = true; } else { tracksToCheck = false; } } while (tracksToCheck); }
void NewTurn() { // Starting direction of turn Direction direction = futureDirection; Vector3 position = newestRail.Position; bool zUp = direction == Direction.ZUp; bool zDown = direction == Direction.ZDown; bool xUp = direction == Direction.XUp; bool xDown = direction == Direction.XDown; RailInfo temp = newestRail; newestRail = unusedTurns.Dequeue(); // Setting turn type // Edit this newestRail.direction = futureDirection; bool leftOrRight = (1 == Random.Range(0, 2)); if (leftOrRight) { newestRail.turnDirection = (Direction)((int)futureDirection * 2); } else { newestRail.turnDirection = (Direction)((int)futureDirection / 2); } if ((int)newestRail.turnDirection > 8) { newestRail.turnDirection = (Direction)1; } if ((int)newestRail.turnDirection < 1) { newestRail.turnDirection = (Direction)8; } // Set position based on previous track if (zUp) { position.z += 2.95f; position.x -= 1.11f * newestRail.Lean * -1; } else if (zDown) { position.z -= 2.95f; position.x += 1.11f * newestRail.Lean * -1; } else if (xUp) { position.x += 2.95f; position.z += 1.11f * newestRail.Lean * -1; } else if (xDown) { position.x -= 2.95f; position.z -= 1.11f * newestRail.Lean * -1; } // Create rail and add it newestRail.NewPosition(position); upcomingTurns.Enqueue(newestRail); futureDirection = newestRail.turnDirection; temp.nextPosition = position; currentRails.Enqueue(newestRail); }
void NewStraight() { Vector3 position = newestRail.Position; Direction direction = futureDirection; bool zUp = direction == Direction.ZUp; bool zDown = direction == Direction.ZDown; bool xUp = direction == Direction.XUp; bool xDown = direction == Direction.XDown; if (newestRail.turn) { if (zUp) { position.z += 2.938f; position.x -= 1.105f * newestRail.Lean; } else if (zDown) { position.z -= 2.938f; position.x += 1.105f * newestRail.Lean; } else if (xUp) { position.x += 2.938f; position.z += 1.105f * newestRail.Lean; } else if (xDown) { position.x -= 2.938f; position.z -= 1.105f * newestRail.Lean; } } else { // Set position based on previous track if (zUp) { position.z += 2.6f; } else if (zDown) { position.z -= 2.6f; } else if (xUp) { position.x += 2.6f; } else if (xDown) { position.x -= 2.6f; } } newestRail.nextPosition = position; // Set new track and add it newestRail = unused.Dequeue(); newestRail.direction = futureDirection; newestRail.turnDirection = futureDirection; newestRail.NewPosition(position); currentRails.Enqueue(newestRail); }
// Method to see if a turn is needed void TurnNeeded() { // Checks for turning if (upcomingTurns.Count > 0) { // Check if the middle of the turn has passed RailInfo nextTurn = upcomingTurns.Peek(); nextTurnX = nextTurn.Position.x; nextTurnZ = nextTurn.Position.z; bool bigEnoughZ = player.transform.position.z > nextTurnZ && nextTurn.direction == Direction.ZUp; bool smallEnoughZ = player.transform.position.z < nextTurnZ && nextTurn.direction == Direction.ZDown; bool bigEnoughX = player.transform.position.x > nextTurnX && nextTurn.direction == Direction.XUp; bool smallEnoughX = player.transform.position.x < nextTurnX && nextTurn.direction == Direction.XDown; if (bigEnoughZ || smallEnoughZ || bigEnoughX || smallEnoughX) { //If the turn is passed take it out of the turning queue so that it isn't checked against RailInfo turnTaken = upcomingTurns.Dequeue(); // Check if cart turned if (TurnSucceeded(turnTaken)) { //Succeeded the turn currentDirection = nextTurn.turnDirection; //Puts the player on next track if (currentDirection == Direction.XUp) { player.transform.rotation = Quaternion.Euler(new Vector3(0, 90, 0)); } else if (currentDirection == Direction.XDown) { player.transform.rotation = Quaternion.Euler(new Vector3(0, -90, 0)); } else if (currentDirection == Direction.ZDown) { player.transform.rotation = Quaternion.Euler(new Vector3(0, 180, 0)); } else { player.transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0)); } // Set the position to align with the track if (currentDirection == Direction.ZDown || currentDirection == Direction.ZUp) { player.transform.position = new Vector3(turnTaken.nextPosition.x, player.transform.position.y, player.transform.position.z); } else { player.transform.position = new Vector3(player.transform.position.x, player.transform.position.y, turnTaken.nextPosition.z); } } else { // Game Over condition GameManager.instance.GameOver(); } } } }
// Method for easy access to turn condition bool TurnSucceeded(RailInfo turnTaken) { // Edit this return(GameManager.instance.speed < 1.1f && (turnTaken.Lean == 0) || turnTaken.Lean == playerScript.leanState); }
private void SetStamp(RailStruct railStruct) { stamp = WorkBench.railPieceGenerator.GenerateAPiece(railStruct); stampRailInfo = stamp.GetComponent <RailInfo>(); stamp.GetComponentInChildren <MeshRenderer>().material = material; }