package projectzombie.world; import java.nio.ByteBuffer; import java.nio.FloatBuffer; import java.util.ArrayList; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL33; import bdf.classes.IBdfClassManager; import bdf.types.BdfArray; import bdf.types.BdfNamedList; import bdf.types.BdfObject; import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec3d; import projectzombie.Main; import projectzombie.display.Camera; import projectzombie.display.DisplayLighting; import projectzombie.entity.player.EntityPlayer; import projectzombie.model.Model; import projectzombie.time.GameTimer; import projectzombie.world.chunk.ChunkEventHandler; import projectzombie.world.layer.Layer; public class World implements IBdfClassManager { public static final double BIOME_SIZE = 1024; private Layer loaded; private ArrayList layers = new ArrayList(); private String path; private int pool_vao, pool_vbo, pool_ibo; private boolean pool_dirty = true; private int pool_particle_count = 0; private int pool_size = 1; public World(String path) { this.path = path; } public String getSavePath() { return path; } public boolean isPoolDirty() { return pool_dirty; } public void markPoolDirty() { this.pool_dirty = true; } public void render(Camera camera) { // Render the world and the player if(!Main.player.dead) { Vec3d ppos = Main.player.getPos(); Model model = Main.player.getModel(); model.setModel(Matrix4.translate( ppos.x - Camera.camera.x - 0.5, ppos.y, ppos.z - Camera.camera.y - 0.5)); model.render(); } // Re-generate the particle pool if the pool has changed if(pool_dirty) { pool_particle_count = loaded.getParticlePoolSize(); boolean changed = false; if(pool_particle_count > pool_size) { changed = true; while(pool_particle_count > pool_size) { pool_size *= 2; } } if(changed) { ByteBuffer pool = BufferUtils.createByteBuffer(pool_size * Model.SIZE * 16); loaded.render(camera, pool.asFloatBuffer(), 0); if(pool_vao != 0) { GL33.glDeleteVertexArrays(pool_vao); GL33.glDeleteBuffers(pool_vbo); GL33.glDeleteBuffers(pool_ibo); } pool_vao = GL33.glGenVertexArrays(); pool_vbo = GL33.glGenBuffers(); pool_ibo = GL33.glGenBuffers(); GL33.glBindVertexArray(pool_vao); int[] indicies = new int[pool_size * 6]; for(int i=0;i