1 local Chunk = Dragonblocks.create_class()
4 local size_squared = math.pow(size, 2)
6 function Chunk.get_pos_hash(pos)
7 local x, y, z = pos.x, pos.y, pos.z
8 if x > 15 or y > 15 or z > 15 or x < 0 or y < 0 or z < 0 then return end
9 return x + size * y + size_squared * z
12 function Chunk:constructor(pos, blocks)
13 self.pos, self.blocks = pos, blocks
16 function Chunk:add_block(pos, def)
17 local pos_hash = Chunk.get_pos_hash(pos)
19 self.blocks[pos_hash] = WorldSystem.Block(pos, def)
24 function Chunk:remove_block(pos)
25 local pos_hash = Chunk.get_pos_hash(pos)
27 self.blocks[pos_hash] = nil
32 function Chunk:get_block(pos)
33 local pos_hash = Chunk.get_pos_hash(pos)
34 if pos_hash then return self.blocks[pos_hash] end
37 function Chunk:update_mesh()
38 if #self.blocks == 0 then return end
39 local mesh = RenderEngine.ChunkMesh()
40 mesh:set_pos(self.pos * 16 + glm.vec3(8, 8, 8))
41 mesh:set_size(glm.vec3(1, 1, 1))
42 mesh:create_faces(self.blocks)
44 mesh:set_effect(RenderEngine.Mesh.EFFECT_FLYIN)
47 self.mesh:remove_from_scene()