Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.syscy.engine.world;
- import java.util.ArrayList;
- import de.syscy.engine.core.GameObject;
- import de.syscy.engine.core.Vector2f;
- import de.syscy.engine.core.Vector3f;
- public class World extends GameObject {
- public static final float VIEW_RANGE = 256;
- public static final float LOAD_RANGE = 128;
- public static World currentWorld;
- private GameObject camera;
- // public ArrayList<Chunk> loadedChunks = new ArrayList<Chunk>();
- private ArrayList<Chunk> chunksToRemove = new ArrayList<Chunk>();
- public Noise noise;
- private int seed = (int) System.nanoTime();
- public World(GameObject camera) {
- setName("World");
- currentWorld = this;
- this.camera = camera;
- noise = new Noise(seed);
- addChild(new Chunk(new Vector3f(0, 0, 0), noise, seed));
- update2(0);
- }
- boolean loaded = false;
- int updates = 0;
- int chunksLoadedThisUpdate = 0;
- public void update2(float delta) {
- updates++;
- if (updates % 4 == 0) {
- Vector2f cameraPos = new Vector2f(camera.getTransform().getPos()
- .getX(), camera.getTransform().getPos().getZ());
- Vector2f cID = new Vector2f((float) Math.round(cameraPos.getX()
- / Chunk.WIDTH), (float) Math.round(cameraPos.getY()
- / Chunk.LENGTH));
- for (int x = Math.round(cID.getX() - LOAD_RANGE / Chunk.WIDTH); x <= cID
- .getX() + LOAD_RANGE / Chunk.WIDTH; x++) {
- for (int z = Math.round(cID.getY() - LOAD_RANGE / Chunk.LENGTH); z <= cID
- .getY() + LOAD_RANGE / Chunk.LENGTH; z++) {
- if (chunksLoadedThisUpdate < 16 || !loaded)
- if (findChunk(new Vector2f(x, z)) == null) {
- addChild(new Chunk(new Vector3f(x * Chunk.WIDTH, 0,
- z * Chunk.LENGTH), noise, seed));
- chunksLoadedThisUpdate++;
- }
- }
- }
- loaded = true;
- for (GameObject chunk : children) {
- if (chunk.getName().contains("chunk")) {
- Vector2f chunkPos = new Vector2f(chunk.getTransform()
- .getPos().getX(), chunk.getTransform().getPos()
- .getZ());
- Vector2f directionToCamera = cameraPos.sub(chunkPos);
- float distance = directionToCamera.length();
- if (distance >= VIEW_RANGE) {
- chunksToRemove.add((Chunk) chunk);
- }
- }
- }
- for (Chunk chunk : chunksToRemove) {
- chunk.dispose();
- children.remove(chunk);
- }
- chunksLoadedThisUpdate = 0;
- }
- }
- public Chunk findChunk(Vector2f cID) {
- for (GameObject chunk : children) {
- if (chunk.getName().contains("chunk") && (cID.getX() == ((Chunk) chunk).cID.getX()
- && cID.getY() == ((Chunk) chunk).cID.getY()))
- return (Chunk) chunk;
- }
- return null;
- }
- public Vector2f posToCID(Vector3f pos) {
- return new Vector2f(Math.round(pos.getX() / Chunk.WIDTH - 4.999), Math.round(pos.getZ() / Chunk.LENGTH - 4.999));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment