Ejemplo n.º 1
0
    // 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();
    }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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");
        }