Ejemplo n.º 1
0
        public override void Update(GameTime gameTime)
        {
            fpsCounter.Update(gameTime);
            state = GetLitteralState();

            PlayerCoordinates = Nocubeless.CubeWorld.GetCoordinatesFromGraphics(Nocubeless.Camera.ScreenPosition);
            ChunkCoordinates  = CubeChunkHelper.FindBaseCoordinates(PlayerCoordinates);

            int margin = 2;

            coordinatesDrawPosition = new Vector2(margin, margin);
            fpsDrawPosition         = new Vector2(GraphicsDevice.Viewport.Width / 2, margin);

            base.Update(gameTime);

            string GetLitteralState()
            {
                switch (Nocubeless.CurrentState)
                {
                case NocubelessState.Playing:
                    return("Playing");

                case NocubelessState.Editing:
                    return("Editing world");

                case NocubelessState.ColorPicking:
                    return("Picking a color...");

                default:
                    return("Unknown");
                }
            }
        }
Ejemplo n.º 2
0
        public CubeColor GetCubeColorAt(CubeCoordinates coordinates)         // TODO: Redundance fix
        {
            var chunkCoordinates = CubeChunkHelper.FindBaseCoordinates(coordinates);

            var tookChunk = TakeChunkAt(chunkCoordinates);

            int cubePositionInChunk = CubeChunkHelper.GetIndexFromCoordinates(coordinates);

            return(tookChunk[cubePositionInChunk]);
        }
Ejemplo n.º 3
0
        public void BreakCube(CubeCoordinates coordinates)
        {
            var chunkCoordinates = CubeChunkHelper.FindBaseCoordinates(coordinates);

            var tookChunk = TakeChunkAt(chunkCoordinates);

            int cubePositionInChunk = CubeChunkHelper.GetIndexFromCoordinates(coordinates);

            tookChunk[cubePositionInChunk] = null;
        }
Ejemplo n.º 4
0
        public void LayCube(Cube cube)
        {
            var chunkCoordinates = CubeChunkHelper.FindBaseCoordinates(cube.Coordinates);

            var tookChunk = TakeChunkAt(chunkCoordinates);

            int cubePositionInChunk = CubeChunkHelper.GetIndexFromCoordinates(cube.Coordinates);

            tookChunk[cubePositionInChunk] = cube.Color;
        }
Ejemplo n.º 5
0
        void UnloadFarChunks(CubeCoordinates playerCoordinates) // TODO: no need this argument now
        {
            int viewingCubes = CubeChunk.Size * Nocubeless.Settings.Graphics.ChunkViewDistance;
            int min          = -(viewingCubes / 2);
            int max          = viewingCubes / 2;

            for (int i = 0; i < Nocubeless.CubeWorld.LoadedChunks.Count; i++)
            {
                var playerMinCoordinates = CubeChunkHelper.FindBaseCoordinates(new CubeCoordinates(playerCoordinates.X + min, playerCoordinates.Y + min, playerCoordinates.Z + min));
                var playerMaxCoordinates = CubeChunkHelper.FindBaseCoordinates(new CubeCoordinates(playerCoordinates.X + max, playerCoordinates.Y + max, playerCoordinates.Z + max));

                if (Nocubeless.CubeWorld.LoadedChunks[i].Coordinates <playerMinCoordinates ||
                                                                      Nocubeless.CubeWorld.LoadedChunks[i].Coordinates> playerMaxCoordinates)
                {
                    var gotChunk = Nocubeless.CubeWorld.TakeChunkAt(Nocubeless.CubeWorld.LoadedChunks[i].Coordinates);
                    Nocubeless.CubeWorld.UnloadChunk(gotChunk);
                }
            }
        }
Ejemplo n.º 6
0
        public bool IsFreeSpace(CubeCoordinates coordinates)         // TO-OPTIMIZE
        {
            var chunkCoordinates = CubeChunkHelper.FindBaseCoordinates(coordinates);

            var gotChunk = (from chunk in LoadedChunks
                            where chunk.Coordinates == chunkCoordinates
                            select chunk).FirstOrDefault();

            if (gotChunk == null)             // don't try to check in a not loaded chunk, or it will crash
            {
                return(false);
            }

            int cubePositionInChunk = CubeChunkHelper.GetIndexFromCoordinates(coordinates);

            if (!(gotChunk[cubePositionInChunk] == null))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 7
0
        private void LoadChunks(CubeCoordinates playerCoordinates) // it's the big cube algorithm
        {
            int viewingCubes = CubeChunk.Size * Nocubeless.Settings.Graphics.ChunkViewDistance;
            int min          = -(viewingCubes / 2);
            int max          = viewingCubes / 2;

            for (int x = min; x < max; x += CubeChunk.Size)
            {
                for (int y = min; y < max; y += CubeChunk.Size)
                {
                    for (int z = min; z < max; z += CubeChunk.Size)
                    { // explore chunks to load
                        var chunkCoordinates = CubeChunkHelper.FindBaseCoordinates(new CubeCoordinates(playerCoordinates.X + x, playerCoordinates.Y + y, playerCoordinates.Z + z));

                        var tookChunk = Nocubeless.CubeWorld.TakeChunkAt(chunkCoordinates);

                        if (tookChunk == null)
                        {
                            Nocubeless.CubeWorld.LoadChunk(chunkCoordinates);
                        }
                    }
                }
            }
        }