예제 #1
0
파일: World.cs 프로젝트: nedearb/Laser
 public Block getBlock(Vector3i position, bool createChunkIfNeeded = false)
 {
     Vector3i p = MathCustom.chunkFromBlock(position, Chunk.chunkSize);
     if (createChunkIfNeeded) {
         loadChunk(p, false);
     } else if(!loadedChunks.ContainsKey(p)) {
         return Block.air;
     }
     return loadedChunks[p].getBlock(MathCustom.negModFix(position.x, Chunk.chunkSize.x), MathCustom.negModFix(position.y, Chunk.chunkSize.y), MathCustom.negModFix(position.z, Chunk.chunkSize.z));
 }
예제 #2
0
파일: World.cs 프로젝트: nedearb/Laser
 public bool setBlock(Vector3i position, Block block, bool createChunkIfNeeded = false)
 {
     Vector3i p = MathCustom.chunkFromBlock(position, Chunk.chunkSize);
     if (createChunkIfNeeded) {
         loadChunk(p, false);
     } else {
         return false;
     }
     loadedChunks[p].setBlock(MathCustom.negModFix(position.x, Chunk.chunkSize.x), MathCustom.negModFix(position.y, Chunk.chunkSize.y), MathCustom.negModFix(position.z, Chunk.chunkSize.z), block);
     return true;
 }
예제 #3
0
파일: Chunk.cs 프로젝트: nedearb/Laser
        public Chunk(Vector3i pos, World world, Game game)
        {
            this.chunkPosition = new Vector3i(pos.x, pos.y, pos.z);
            vbo = new VboGroup(game);

            fileName = world.directory + "\\chunk_" + chunkPosition.getSafeString()+".chunk";

            bool loaded = false;

            if (File.Exists(fileName)) {
                loaded = load();
            }

            if (!loaded) {
                generate(game, world);
                save();
                Console.WriteLine("Generate Chunk");
            } else {
                Console.WriteLine("Loaded Chunk");
            }

            this.world = world;
        }
예제 #4
0
파일: MathCustom.cs 프로젝트: nedearb/Laser
 internal static Vector3i chunkFromBlock(int x, int y, int z, Vector3i chunkSize)
 {
     return new Vector3i(chunkFromBlock(x, chunkSize.x), chunkFromBlock(y, chunkSize.y), chunkFromBlock(z, chunkSize.z));
 }
예제 #5
0
파일: MathCustom.cs 프로젝트: nedearb/Laser
 public static Vector3i chunkFromBlock(Vector3i blockPosition, Vector3i chunkSize)
 {
     return new Vector3i(chunkFromBlock(blockPosition.x, chunkSize.x), chunkFromBlock(blockPosition.y, chunkSize.y), chunkFromBlock(blockPosition.z, chunkSize.z));
 }
예제 #6
0
파일: World.cs 프로젝트: nedearb/Laser
 private void unloadChunk(Vector3i p)
 {
     if (loadedChunks.ContainsKey(p)) {
         loadedChunks[p].save();
         loadedChunks.Remove(p);
     }
 }
예제 #7
0
파일: World.cs 프로젝트: nedearb/Laser
 private bool outOfView(Vector3i p, int x, int y, int z, Game game)
 {
     return
         (p.x < x - game.renderDistance) ||
         (p.y < y - game.renderDistance) ||
         (p.z < z - game.renderDistance) ||
         (p.x > x + game.renderDistance) ||
         (p.y > y + game.renderDistance) ||
         (p.z > z + game.renderDistance);
 }
예제 #8
0
파일: World.cs 프로젝트: nedearb/Laser
 private void loadChunk(Vector3i p, bool forceLoad = false)
 {
     if(!loadedChunks.ContainsKey(p) || forceLoad){
         loadedChunks.Add(p, new Chunk(p, this, game));
     }
 }
예제 #9
0
파일: World.cs 프로젝트: nedearb/Laser
 private void addToLoadedIfNeeded(Vector3i p)
 {
     if(!loadedChunks.ContainsKey(p)){
         if(!chunksToLoad.Contains(p)){
             chunksToLoad.Add(p);
         }
     }
 }