world shifting almost working

This commit is contained in:
Piotrek
2021-05-13 16:18:01 +02:00
parent 98736c39a0
commit 120049d9f7
5 changed files with 54 additions and 26 deletions
+25 -9
View File
@@ -19,7 +19,8 @@ pub struct Game {
#[allow(unused)]
world: World,
prev_pos: Option<Vector3<i32>>
prev_pos: Option<Vector3<i32>>,
prev_chunk_pos: Option<Vector3<i32>>,
}
impl Game {
@@ -28,7 +29,8 @@ impl Game {
state: GameState::Paused,
player: Player::new(),
world: World::init("hello".to_string()),
prev_pos: None
prev_pos: None,
prev_chunk_pos: None,
}
// // Try to load world from file
@@ -62,19 +64,33 @@ impl Game {
let camera = renderer.get_camera_transform();
self.player.camera_controller.update(delta, camera);
// Update chunks
// Get positions
let pos = camera.get_position();
let pos = Vector3{x: pos.x as i32, y: pos.y as i32, z: pos.z as i32};
if self.prev_pos == None || self.prev_pos != Some(pos) {
self.prev_pos = Some(pos);
renderer.get_ui().set_text("World", 0, format!("Position: {}, {}, {}", pos.x, pos.y, pos.z));
let chunk_pos = pos / world::chunk::SIZE as i32;
// Load sphere of chunks around player
let chunk_pos = pos / 32;//Vector3{x: pos.x / 32, y: pos.y / 32, z: pos.z / 32};
// Block position
if self.prev_pos == None || self.prev_pos != Some(pos) {
renderer.get_ui().set_text("World", 0, format!("Position: {}, {}, {}", pos.x, pos.y, pos.z));
self.prev_pos = Some(pos);
}
// Chunk position
if self.prev_chunk_pos == None || self.prev_chunk_pos != Some(chunk_pos) {
renderer.get_ui().set_text("World", 1, format!("Chunk: {}, {}, {}", chunk_pos.x, chunk_pos.y, chunk_pos.z));
// Shift world
let dir = chunk_pos - self.prev_chunk_pos.unwrap_or(chunk_pos);
renderer.shift(&(dir * world::chunk::SIZE as i32));
// Load chunk
if self.world.load_chunk(chunk_pos) {
let chunk = self.world.get_chunk(&chunk_pos).unwrap();
chunk.write_to(renderer, chunk_pos * 32);
chunk.write_to(renderer, chunk_pos * world::chunk::SIZE as i32);
println!("Writing chunk to {:?}", chunk_pos * world::chunk::SIZE as i32);
}
self.prev_chunk_pos = Some(chunk_pos);
}
}