// Start is called before the first frame update void Start() { relativeControls = GameManager.Instance.getCurrentDifficulty() == GameManager.Difficulty.HARD; //Reset camera to same position and orientation as this block Camera.main.transform.position = new Vector3(transform.position.x, transform.position.y, -10); Camera.main.transform.rotation = Quaternion.identity; playAreaManager = (PlayAreaManager)FindObjectOfType <PlayAreaManager>(); // If not valid when spawned, then Game Over if (!playAreaManager.isValidGridPos(this)) { Destroy(gameObject); playAreaManager.GameOver(); } // Find the direction labels on screen upLabel = GameObject.FindGameObjectWithTag("upLabel").GetComponent <Text>(); rightLabel = GameObject.FindGameObjectWithTag("rightLabel").GetComponent <Text>(); downLabel = GameObject.FindGameObjectWithTag("downLabel").GetComponent <Text>(); leftLabel = GameObject.FindGameObjectWithTag("leftLabel").GetComponent <Text>(); updateDirectionLabels(); }
public void PlayAreaInitialiseNoStructures() { Vector3Int chunkDimensions = new Vector3Int(16, 16, 16); Vector3Int collidableRadii = new Vector3Int(1, 1, 1); Vector3Int renderedRadii = new Vector3Int(4, 4, 4); //Set up the mocks SetupMocks(chunkDimensions, generateStructures: false); PlayAreaManager playArea = new PlayAreaManager(collidableRadii, renderedRadii); //Initialise play area playArea.Initialise(mockManager, mockPipeline, player); Vector3Int MaxActiveRadii = renderedRadii + new Vector3Int(1, 1, 1); //Ensure we've got the max active radii correct Assert.AreEqual(MaxActiveRadii, playArea.MaximumActiveRadii); Vector3Int PlayerChunkId = playArea.playerChunkID; //Ensure player chunk id correct Assert.AreEqual(Vector3Int.zero, PlayerChunkId); //After initialise, check all positions have the expected target. //printStageMap2DSlice(MaxActiveRadii,0,PlayerChunkId); AssertStatusMapCorrect(MaxActiveRadii, PlayerChunkId, playArea); }
public void PlayAreaIncrementalUpdateInterrupted(Vector3Int[] displacements) { Debug.Log($"Displacement sequence {displacements.ArrayToString()}"); Vector3Int chunkDimensions = new Vector3Int(16, 16, 16); Vector3Int collidableRadii = new Vector3Int(1, 1, 1); Vector3Int renderedRadii = new Vector3Int(2, 2, 2); //Set up the mocks SetupMocks(chunkDimensions); PlayAreaManager playArea = new PlayAreaManager(collidableRadii, renderedRadii); playArea.UpdateRate = 5;//Limited update rate //Initialise play area playArea.Initialise(mockManager, mockPipeline, player); Vector3Int MaxActiveRadii = playArea.MaximumActiveRadii; Vector3Int originalPlayerChunkId = playArea.playerChunkID; //printStageMap2DSlice(MaxActiveRadii, 0, originalPlayerChunkId); printStageMap2DSlice(MaxActiveRadii, 0, playArea.playerChunkID); for (int i = 0; i < displacements.Length; i++) { player.Position += displacements[i] * chunkDimensions;//move player interrupting progress playArea.Update(); } //remove update limit playArea.UpdateRate = ushort.MaxValue; playArea.Update();//Final update Vector3Int playerChunkIdAfterUpdate = playArea.playerChunkID; Debug.Log("PostUpdate"); //printStageMap2DSlice(MaxActiveRadii, 0, playArea.playerChunkID); //Check play area is correct AssertStatusMapCorrect(MaxActiveRadii, playerChunkIdAfterUpdate, playArea); }
public void PlayAreaUpdateWithLargeDisplacement(int xDisp, int yDisp, int zDisp) { Vector3Int displacement = new Vector3Int(xDisp, yDisp, zDisp) * 10; Debug.Log(displacement); Vector3Int chunkDimensions = new Vector3Int(16, 16, 16); Vector3Int collidableRadii = new Vector3Int(1, 1, 1); Vector3Int renderedRadii = new Vector3Int(2, 2, 2); //Set up the mocks SetupMocks(chunkDimensions); PlayAreaManager playArea = new PlayAreaManager(collidableRadii, renderedRadii); playArea.UpdateRate = ushort.MaxValue;//Unlimited update rate for testing //Initialise play area playArea.Initialise(mockManager, mockPipeline, player); Vector3Int MaxActiveRadii = playArea.MaximumActiveRadii; Vector3Int originalPlayerChunkId = playArea.playerChunkID; player.Position += displacement * chunkDimensions; //Debug.Log("PreUpdate"); //printStageMap2DSlice(MaxActiveRadii, 0, originalPlayerChunkId); playArea.Update(); Vector3Int playerChunkIdAfterUpdate = playArea.playerChunkID; //Ensure player chunk updated correctly Assert.AreEqual(originalPlayerChunkId + displacement, playerChunkIdAfterUpdate, $"Player chunk id was incorrect"); //Debug.Log("PostUpdate"); //printStageMap2DSlice(MaxActiveRadii, 0, playerChunkIdAfterUpdate); //Check play area is correct AssertStatusMapCorrect(MaxActiveRadii, playerChunkIdAfterUpdate, playArea); }
private void AssertStatusMapCorrect(Vector3Int MaxActiveRadii, Vector3Int PlayerChunkId, PlayAreaManager playArea) { HashSet <Vector3Int> keysTmp = new HashSet <Vector3Int>(statusMap.Keys); for (int x = -MaxActiveRadii.x; x <= MaxActiveRadii.x; x++) { for (int y = -MaxActiveRadii.y; y <= MaxActiveRadii.y; y++) { for (int z = -MaxActiveRadii.z; z <= MaxActiveRadii.z; z++) { Vector3Int displacement = new Vector3Int(x, y, z); Vector3Int chunkId = displacement + PlayerChunkId; Assert.IsTrue(statusMap.ContainsKey(chunkId), $"Chunk ID {chunkId} with displacement {displacement} was not in the status map"); if (InsideRadius(displacement, playArea.CollidableChunksRadii)) { Assert.AreEqual(mockPipeline.CompleteStage, statusMap[chunkId], $"Chunk ID {chunkId} with displacement {displacement} not correct"); } else if (InsideRadius(displacement, playArea.RenderedChunksRadii)) { Assert.AreEqual(mockPipeline.RenderedStage, statusMap[chunkId], $"Chunk ID {chunkId} with displacement {displacement} not correct"); } else if (InsideRadius(displacement, playArea.FullyGeneratedRadii)) { Assert.AreEqual(mockPipeline.FullyGeneratedStage, statusMap[chunkId], $"Chunk ID {chunkId} with displacement {displacement} not correct"); } else if (InsideRadius(displacement, playArea.StructureChunksRadii)) { Assert.AreEqual(mockPipeline.OwnStructuresStage, statusMap[chunkId], $"Chunk ID {chunkId} with displacement {displacement} not correct"); } else { Assert.AreEqual(mockPipeline.TerrainDataStage, statusMap[chunkId], $"Chunk ID {chunkId} with displacement {displacement} not correct"); } keysTmp.Remove(chunkId); } } } Assert.AreEqual(0, keysTmp.Count, $"Status map contained more than the maximum active area"); }