_-Katsu-_

World.java

Sep 2nd, 2014
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.75 KB | None | 0 0
  1. package de.syscy.engine.world;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import de.syscy.engine.core.GameObject;
  6. import de.syscy.engine.core.Vector2f;
  7. import de.syscy.engine.core.Vector3f;
  8.  
  9. public class World extends GameObject {
  10.     public static final float VIEW_RANGE = 256;
  11.     public static final float LOAD_RANGE = 128;
  12.  
  13.     public static World currentWorld;
  14.  
  15.     private GameObject camera;
  16.  
  17.     // public ArrayList<Chunk> loadedChunks = new ArrayList<Chunk>();
  18.     private ArrayList<Chunk> chunksToRemove = new ArrayList<Chunk>();
  19.     public Noise noise;
  20.     private int seed = (int) System.nanoTime();
  21.  
  22.     public World(GameObject camera) {
  23.         setName("World");
  24.         currentWorld = this;
  25.  
  26.         this.camera = camera;
  27.  
  28.         noise = new Noise(seed);
  29.         addChild(new Chunk(new Vector3f(0, 0, 0), noise, seed));
  30.         update2(0);
  31.     }
  32.  
  33.     boolean loaded = false;
  34.     int updates = 0;
  35.     int chunksLoadedThisUpdate = 0;
  36.  
  37.     public void update2(float delta) {
  38.         updates++;
  39.         if (updates % 4 == 0) {
  40.             Vector2f cameraPos = new Vector2f(camera.getTransform().getPos()
  41.                     .getX(), camera.getTransform().getPos().getZ());
  42.             Vector2f cID = new Vector2f((float) Math.round(cameraPos.getX()
  43.                     / Chunk.WIDTH), (float) Math.round(cameraPos.getY()
  44.                     / Chunk.LENGTH));
  45.             for (int x = Math.round(cID.getX() - LOAD_RANGE / Chunk.WIDTH); x <= cID
  46.                     .getX() + LOAD_RANGE / Chunk.WIDTH; x++) {
  47.                 for (int z = Math.round(cID.getY() - LOAD_RANGE / Chunk.LENGTH); z <= cID
  48.                         .getY() + LOAD_RANGE / Chunk.LENGTH; z++) {
  49.                     if (chunksLoadedThisUpdate < 16 || !loaded)
  50.                         if (findChunk(new Vector2f(x, z)) == null) {
  51.                             addChild(new Chunk(new Vector3f(x * Chunk.WIDTH, 0,
  52.                                     z * Chunk.LENGTH), noise, seed));
  53.                             chunksLoadedThisUpdate++;
  54.                         }
  55.                 }
  56.             }
  57.  
  58.             loaded = true;
  59.  
  60.             for (GameObject chunk : children) {
  61.                 if (chunk.getName().contains("chunk")) {
  62.                     Vector2f chunkPos = new Vector2f(chunk.getTransform()
  63.                             .getPos().getX(), chunk.getTransform().getPos()
  64.                             .getZ());
  65.  
  66.                     Vector2f directionToCamera = cameraPos.sub(chunkPos);
  67.  
  68.                     float distance = directionToCamera.length();
  69.  
  70.                     if (distance >= VIEW_RANGE) {
  71.                         chunksToRemove.add((Chunk) chunk);
  72.                     }
  73.                 }
  74.             }
  75.  
  76.             for (Chunk chunk : chunksToRemove) {
  77.                 chunk.dispose();
  78.                 children.remove(chunk);
  79.             }
  80.  
  81.             chunksLoadedThisUpdate = 0;
  82.         }
  83.     }
  84.  
  85.     public Chunk findChunk(Vector2f cID) {
  86.         for (GameObject chunk : children) {
  87.             if (chunk.getName().contains("chunk") && (cID.getX() == ((Chunk) chunk).cID.getX()
  88.                     && cID.getY() == ((Chunk) chunk).cID.getY()))
  89.                 return (Chunk) chunk;
  90.         }
  91.         return null;
  92.     }
  93.    
  94.     public Vector2f posToCID(Vector3f pos) {
  95.         return new Vector2f(Math.round(pos.getX() / Chunk.WIDTH - 4.999), Math.round(pos.getZ() / Chunk.LENGTH - 4.999));
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment