LevelChunkData PickNextChunk() { List <LevelChunkData> allowedChunkList = new List <LevelChunkData>(); LevelChunkData nextChunk = null; LevelChunkData.Direction nextRequiredDirection = LevelChunkData.Direction.North; switch (previousChunk.exitDirection) { case LevelChunkData.Direction.North: nextRequiredDirection = LevelChunkData.Direction.South; spawnPosition = spawnPosition + new Vector3(0f, 0, previousChunk.chunkSize.y); break; case LevelChunkData.Direction.East: nextRequiredDirection = LevelChunkData.Direction.West; spawnPosition = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, 0); break; case LevelChunkData.Direction.South: nextRequiredDirection = LevelChunkData.Direction.North; spawnPosition = spawnPosition + new Vector3(0, 0, -previousChunk.chunkSize.y); break; case LevelChunkData.Direction.West: nextRequiredDirection = LevelChunkData.Direction.East; spawnPosition = spawnPosition + new Vector3(-previousChunk.chunkSize.x, 0, 0); break; default: break; } for (int i = 0; i < levelChunkData.Length; i++) { if (levelChunkData[i].entryDirection == nextRequiredDirection) { allowedChunkList.Add(levelChunkData[i]); } } if (firstChunkCreated == false) { firstChunkCreated = true; nextChunk = allowedChunkList[1]; return(nextChunk); } else { nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)]; return(nextChunk); } }
LevelChunkData PickNextChunk() { List <LevelChunkData> allowedChunkList = new List <LevelChunkData>(); LevelChunkData nextChunk = null; LevelChunkData.Direction nextRequiredDirection = LevelChunkData.Direction.North; //Determine next chunk based on the exit direction of previous chunk and the entry direction of the next switch (previousChunk.exitDirection) { case LevelChunkData.Direction.North: nextRequiredDirection = LevelChunkData.Direction.South; spawnPosition = spawnPosition + new Vector3(0, 0, previousChunk.chunkSize.y); break; case LevelChunkData.Direction.East: nextRequiredDirection = LevelChunkData.Direction.West; spawnPosition = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, 0); break; case LevelChunkData.Direction.South: nextRequiredDirection = LevelChunkData.Direction.North; spawnPosition = spawnPosition + new Vector3(0, 0, -previousChunk.chunkSize.y); break; case LevelChunkData.Direction.West: nextRequiredDirection = LevelChunkData.Direction.East; spawnPosition = spawnPosition + new Vector3(-previousChunk.chunkSize.x, 0, 0); break; } //Take all chunks with determined entry point and add them to allowed list for (int i = 0; i < levelChunkData.Length; i++) { if (levelChunkData[i].entryDirection == nextRequiredDirection) { allowedChunkList.Add(levelChunkData[i]); } } nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)]; return(nextChunk); }
LevelChunkData PickNextChunk() { List <LevelChunkData> allowedChunkList = new List <LevelChunkData>(); LevelChunkData nextChunk = null; LevelChunkData.Direction nextRequiredDirection = LevelChunkData.Direction.North; switch (_previousChunk.exitDirection) { case LevelChunkData.Direction.North: nextRequiredDirection = LevelChunkData.Direction.South; _spawnPosition = _spawnPosition + new Vector3(0f, 0, _previousChunk.chunkSize.y); break; case LevelChunkData.Direction.East: nextRequiredDirection = LevelChunkData.Direction.East; _spawnPosition = _spawnPosition + new Vector3(0f, 0, _previousChunk.chunkSize.y); break; case LevelChunkData.Direction.South: nextRequiredDirection = LevelChunkData.Direction.South; _spawnPosition = _spawnPosition + new Vector3(0, 0, -_previousChunk.chunkSize.y); break; case LevelChunkData.Direction.West: nextRequiredDirection = LevelChunkData.Direction.West; _spawnPosition = _spawnPosition + new Vector3(0f, 0, _previousChunk.chunkSize.y); break; default: break; } foreach (var t in levelChunkData) { if (t.entryDirection == nextRequiredDirection) { allowedChunkList.Add(t); } } nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)]; return(nextChunk); }
private void UpdateSpawnPoint() { switch (previousChunk.exitDirection) { case LevelChunkData.Direction.North: nextRequiredDirection = LevelChunkData.Direction.South; spawnPosition = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y); break; case LevelChunkData.Direction.West: nextRequiredDirection = LevelChunkData.Direction.West; spawnPosition = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y); break; case LevelChunkData.Direction.South: nextRequiredDirection = LevelChunkData.Direction.North; spawnPosition = spawnPosition + new Vector3(0, 0, previousChunk.chunkSize.y); break; case LevelChunkData.Direction.East: nextRequiredDirection = LevelChunkData.Direction.East; spawnPosition = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y); break; case LevelChunkData.Direction.EastNorth: nextRequiredDirection = LevelChunkData.Direction.South; spawnPosition = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y); break; case LevelChunkData.Direction.WestNorth: nextRequiredDirection = LevelChunkData.Direction.South; spawnPosition = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y); break; default: break; } }
LevelChunkData PickNextChunk_nopos() // Function to determine which trackpiece to used based on entry direction { List <LevelChunkData> allowedChunkList = new List <LevelChunkData>(); LevelChunkData nextChunk = null; LevelChunkData.Direction nextRequiredDirection = LevelChunkData.Direction.North; switch (previousChunk.exitDirection) { case LevelChunkData.Direction.North: nextRequiredDirection = LevelChunkData.Direction.South; break; case LevelChunkData.Direction.East: nextRequiredDirection = LevelChunkData.Direction.West; break; case LevelChunkData.Direction.South: nextRequiredDirection = LevelChunkData.Direction.North; break; case LevelChunkData.Direction.West: nextRequiredDirection = LevelChunkData.Direction.East; break; default: break; } for (int i = 0; i < levelChunkData.Length; i++) { if (levelChunkData[i].entryDirection == nextRequiredDirection) { allowedChunkList.Add(levelChunkData[i]); } } nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)]; return(nextChunk); }
LevelChunkDataVariable PickNextChunk() { List <LevelChunkDataVariable> allowedChunkList = new List <LevelChunkDataVariable>(); LevelChunkDataVariable nextChunk = null; // Pick Next Chunk by looking at the previous chunks allowed directions LevelChunkData.Direction nextRequiredEntryDirection = LevelChunkData.Direction.North; // if previous chunk is a U road, we want to adjust spawn position if (previousChunk.Value.entryDirection == previousChunk.Value.exitDirection) { spawnPosition += new Vector3(0f, 0f, previousChunk.Value.chunkSize.y / 2f); } switch (previousChunk.Value.exitDirection) { case LevelChunkData.Direction.North: nextRequiredEntryDirection = LevelChunkData.Direction.South; spawnPosition += new Vector3(0f, 0f, previousChunk.Value.chunkSize.y); break; case LevelChunkData.Direction.East: nextRequiredEntryDirection = LevelChunkData.Direction.West; spawnPosition += new Vector3(previousChunk.Value.chunkSize.x, 0f, 0f); break; case LevelChunkData.Direction.South: nextRequiredEntryDirection = LevelChunkData.Direction.North; spawnPosition += new Vector3(0f, 0f, -previousChunk.Value.chunkSize.y); break; case LevelChunkData.Direction.West: nextRequiredEntryDirection = LevelChunkData.Direction.East; spawnPosition += new Vector3(-previousChunk.Value.chunkSize.x, 0f, 0f); break; default: break; } // if previous chunk is a corner chunk then we want straight road next time LevelChunkData.Direction nextRequiredExitDirection; if (previousChunk.Value.turningDirection != 0) { nextRequiredExitDirection = LevelChunkData.GetOppositeDirection(nextRequiredEntryDirection); foreach (var item in levelChunkDatas) { if (item.Value.entryDirection == nextRequiredEntryDirection && item.Value.exitDirection == nextRequiredExitDirection) { allowedChunkList.Add(item); } } } else { foreach (var item in levelChunkDatas) { if (item.Value.entryDirection == nextRequiredEntryDirection) { allowedChunkList.Add(item); } } } nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)]; return(nextChunk); }