diff --git a/godot/native/libroutes_native.so b/godot/native/libroutes_native.so index 84e0fc9..de4a071 100755 Binary files a/godot/native/libroutes_native.so and b/godot/native/libroutes_native.so differ diff --git a/godot/world/StateApi.gd b/godot/world/StateApi.gd index c6a8462..05ca9fc 100644 --- a/godot/world/StateApi.gd +++ b/godot/world/StateApi.gd @@ -13,11 +13,14 @@ func _ready(): server.generate_world(xsize, ysize, zsize) print(server.get_tile_at(xsize -1,ysize -1,zsize-1)) -func _on_StateServer_request_full_reload(): - respawn_tilemaps(zsize - 1) - func respawn_tilemaps(amount): tilemaps = [] for tile in range(0, amount + 1): add_child(Tilemap.instance()) tilemaps.push_back(tile) + +func _on_StateServer_request_init(): + respawn_tilemaps(zsize - 1) + +func _on_StateServer_changed_tiletypes(tile_positions): + pass diff --git a/godot/world/world.tscn b/godot/world/world.tscn index d2ddb26..925365b 100644 --- a/godot/world/world.tscn +++ b/godot/world/world.tscn @@ -16,4 +16,5 @@ script = ExtResource( 5 ) [node name="StateServer" parent="World" instance=ExtResource( 2 )] -[connection signal="request_full_reload" from="World/StateServer" to="World" method="_on_StateServer_request_full_reload"] +[connection signal="changed_tiletypes" from="World/StateServer" to="World" method="_on_StateServer_changed_tiletypes"] +[connection signal="request_init" from="World/StateServer" to="World" method="_on_StateServer_request_init"] diff --git a/routes-native/src/stateserver.rs b/routes-native/src/stateserver.rs index 321b7c9..78302f8 100644 --- a/routes-native/src/stateserver.rs +++ b/routes-native/src/stateserver.rs @@ -29,15 +29,15 @@ impl StateServer { } #[export] - fn _ready(&self, _owner: &Node) { - //godot_print!("hello world") - } + fn _ready(&self, _owner: &Node) {} #[export] fn generate_world(&mut self, _owner: &Node, xsize: usize, ysize: usize, zsize: usize) { self.world = world::World::new(xsize, ysize, zsize); - self.world.generate(); - _owner.emit_signal("request_full_reload", &[]); + _owner.emit_signal("request_init", &[]); + _owner.emit_signal("changed_tiletypes", &[Variant::new( + // changes what the world looks like! by generating a new one! + self.world.generate())]); } #[export] @@ -50,10 +50,9 @@ impl StateServer { impl StateServer { fn register(builder: &ClassBuilder) { builder - .signal("changed_tile") - .with_param("position", VariantType::Vector3) - .with_param("new_type", VariantType::GodotString) + .signal("changed_tiletypes") + .with_param("tile_positions", VariantType::Vector3Array) .done(); - builder.signal("request_full_reload").done(); + builder.signal("request_init").done(); } } diff --git a/routes-native/src/stateserver/world.rs b/routes-native/src/stateserver/world.rs index 67cf83a..13bd95e 100644 --- a/routes-native/src/stateserver/world.rs +++ b/routes-native/src/stateserver/world.rs @@ -1,3 +1,5 @@ +use gdnative::prelude::*; + mod tiles; pub struct World { @@ -11,16 +13,19 @@ impl World { pub fn get_tile_at(&self, x: usize, y: usize, z: usize) -> &tiles::Tile{ &self.tiles[x][y][z] } - pub fn generate(&mut self) { + pub fn generate(&mut self) -> Vector3Array{ self.tiles = get_vec3(self.xsize, self.ysize, self.zsize); + let mut ret: Vector3Array = Vector3Array::new(); for x in 0..self.xsize { for y in 0..self.ysize { for z in 0..self.zsize { - let tile = tiles::Tile::new(tiles::Tiletypes::Dirt); + let tile = tiles::Tile::new(tiles::Tiletypes::Dirt, x, y, z); + ret.push(Vector3::new(x as f32, y as f32, z as f32)); self.tiles[x][y][z] = tile; } } } + ret } pub fn new(xsize: usize, ysize: usize, zsize: usize) -> World { World { @@ -34,7 +39,7 @@ impl World { fn get_vec3(xsize: usize, ysize: usize, zsize: usize) -> Vec>> { let mut zvec: Vec = Vec::with_capacity(zsize); - zvec.resize(zsize, tiles::Tile::new(tiles::Tiletypes::Air)); + zvec.resize(zsize, tiles::Tile::new(tiles::Tiletypes::Air, 0, 0, 0)); let mut yvec: Vec> = Vec::with_capacity(ysize); yvec.resize(ysize, zvec.clone()); diff --git a/routes-native/src/stateserver/world/tiles.rs b/routes-native/src/stateserver/world/tiles.rs index 76dc2fc..819b02d 100644 --- a/routes-native/src/stateserver/world/tiles.rs +++ b/routes-native/src/stateserver/world/tiles.rs @@ -1,6 +1,6 @@ use strum::AsRefStr; -#[derive(Debug, Clone, AsRefStr)] +#[derive(Debug, Clone, AsRefStr, Copy)] pub enum Tiletypes { Air, Water, @@ -9,16 +9,19 @@ pub enum Tiletypes { Sand, } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Copy)] pub struct Tile { kind: Tiletypes, + x: usize, + y: usize, + z: usize, } impl Tile { - pub fn new(kind: Tiletypes) -> Tile { - Tile { kind } + pub fn new(kind: Tiletypes, x: usize, y: usize, z: usize) -> Tile { + Tile { kind, x, y, z } } pub fn kind_to_string(&self) -> &str { - self.kind.as_ref() + &self.kind.as_ref() } }