u64 sync; // keep track of when a chunk was synced the last time (used to detect when a chunk got out of and then back into load distance)
Model *model; // generated by terrain_gfx
bool empty; // whether the chunk is all air
+ bool has_model; // whether the chunk got a model before
+ bool depends[6]; // neighbours it depends on
} TerrainChunkMeta;
extern Terrain *client_terrain;
-void client_terrain_init(); // called on startup
-void client_terrain_deinit(); // called on shutdown
-void client_terrain_set_load_distance(u32 dist); // update load distance
-u32 client_terrain_get_load_distance(); // return load distance
-void client_terrain_start(); // start meshgen and sync threads
-void client_terrain_stop(); // stop meshgen and sync threads
-void client_terrain_chunk_received(TerrainChunk *chunk); // called when a chunk was recieved from server
-void client_terrain_meshgen_task(TerrainChunk *chunk); // enqueue chunk to mesh update queue
+void client_terrain_init(); // called on startup
+void client_terrain_deinit(); // called on shutdown
+void client_terrain_set_load_distance(u32 dist); // update load distance
+u32 client_terrain_get_load_distance(); // return load distance
+void client_terrain_start(); // start meshgen and sync threads
+void client_terrain_stop(); // stop meshgen and sync threads
+void client_terrain_chunk_received(TerrainChunk *chunk); // called when a chunk was recieved from server
+void client_terrain_meshgen_task(TerrainChunk *chunk, bool changed); // enqueue chunk to mesh update queue
#endif