WIP generating chunks at player position

This commit is contained in:
Piotrek
2021-05-12 16:17:38 +02:00
parent 4acf8ea816
commit ab9f4c83d0
10 changed files with 186 additions and 147 deletions
+17 -16
View File
@@ -1,11 +1,9 @@
mod camera_controller;
mod player;
pub mod world;
use std::time::Instant;
use crate::renderer::content_view::ContentView;
use crate::renderer::renderer_view::RendererView;
use cgmath::Point3;
use winit::event::Event;
use crate::renderer::{camera::CameraTransform};
use player::Player;
use world::World;
@@ -18,19 +16,20 @@ pub enum GameState {
pub struct Game {
state: GameState,
player: Player,
#[allow(unused)]
world: World,
prev_pos: Point3<i32>
prev_pos: Option<Point3<i32>>
}
impl Game {
pub fn new() -> Self {
let mut app = Self {
Self {
state: GameState::Paused,
player: Player::new(),
world: World::new("default".to_string()),
prev_pos: Point3{ x:0, y:0, z:0 }
};
prev_pos: None
}
// // Try to load world from file
// let timer = Instant::now();
@@ -56,24 +55,26 @@ impl Game {
// app.world.save();
// println!("Saved in {}", timer.elapsed().as_secs_f32());
// }
println!("App initialized");
app
}
pub fn update(&mut self, delta: f32, content: &mut impl ContentView) {
pub fn update(&mut self, delta: f32, renderer: &mut impl RendererView) {
// Update camera controller
let camera = content.get_camera_transform();
let camera = renderer.get_camera_transform();
self.player.camera_controller.update(delta, camera);
// Update chunks
let pos = camera.get_position();
let pos = Point3{x: pos.x as i32, y: pos.y as i32, z: pos.z as i32};
if pos != self.prev_pos {
self.prev_pos = pos;
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));
// Load sphere of chunks around player
// Load sphere of chunks around player (TODO)
let chunk_pos = Point3{x: pos.x / 32, y: pos.y / 32, z: pos.z / 32};
if self.world.load_chunk(chunk_pos) {
renderer.write(, block: &WorldBlock)
}
}
}