diff --git a/godot/.import/default.png-13971fa1f37d4ea367b7aa5973d2bb0a.md5 b/godot/.import/default.png-13971fa1f37d4ea367b7aa5973d2bb0a.md5 index 2741d11..9b2d15f 100644 --- a/godot/.import/default.png-13971fa1f37d4ea367b7aa5973d2bb0a.md5 +++ b/godot/.import/default.png-13971fa1f37d4ea367b7aa5973d2bb0a.md5 @@ -1,3 +1,3 @@ -source_md5="d864960022980c4270042a1ed80b9ac4" -dest_md5="5f766eea69301dc969f05fac899cb4cb" +source_md5="72b25c45d4743c578ac08e56b209be81" +dest_md5="73042650bec74eec84c50b98d4bafc70" diff --git a/godot/.import/default.png-13971fa1f37d4ea367b7aa5973d2bb0a.stex b/godot/.import/default.png-13971fa1f37d4ea367b7aa5973d2bb0a.stex index f5db78d..3eca1ec 100644 Binary files a/godot/.import/default.png-13971fa1f37d4ea367b7aa5973d2bb0a.stex and b/godot/.import/default.png-13971fa1f37d4ea367b7aa5973d2bb0a.stex differ diff --git a/godot/native/libroutes_native.so b/godot/native/libroutes_native.so index f273773..06496e7 100755 Binary files a/godot/native/libroutes_native.so and b/godot/native/libroutes_native.so differ diff --git a/godot/project.godot b/godot/project.godot index 957d385..c72c3c0 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -11,13 +11,9 @@ config_version=4 [application] config/name="routes" -run/main_scene="res://world/World.tscn" +run/main_scene="res://world/Main.tscn" config/icon="res://icon.png" -[autoload] - -StateServer="*res://native/StateServer.tscn" - [importer_defaults] texture={ diff --git a/godot/sprite/tiles/terrain/default.png b/godot/sprite/tiles/terrain/default.png index 20ea306..0c3cfb6 100644 Binary files a/godot/sprite/tiles/terrain/default.png and b/godot/sprite/tiles/terrain/default.png differ diff --git a/godot/world/Cam.tscn b/godot/world/Cam.tscn deleted file mode 100644 index 584fc51..0000000 --- a/godot/world/Cam.tscn +++ /dev/null @@ -1,8 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://world/worldcam.gd" type="Script" id=1] - -[node name="Worldcam" type="Camera2D"] -current = true -zoom = Vector2( 0.4, 0.4 ) -script = ExtResource( 1 ) diff --git a/godot/world/Main.tscn b/godot/world/Main.tscn index 78c21c0..756abba 100644 --- a/godot/world/Main.tscn +++ b/godot/world/Main.tscn @@ -1,10 +1,13 @@ [gd_scene load_steps=3 format=2] -[ext_resource path="res://world/Cam.tscn" type="PackedScene" id=1] +[ext_resource path="res://world/worldcam.gd" type="Script" id=1] [ext_resource path="res://world/World.tscn" type="PackedScene" id=2] [node name="Main" type="Node2D"] -[node name="Worldcam" parent="." instance=ExtResource( 1 )] +[node name="Worldcam" type="Camera2D" parent="."] +current = true +zoom = Vector2( 0.4, 0.4 ) +script = ExtResource( 1 ) [node name="World" parent="." instance=ExtResource( 2 )] diff --git a/godot/world/StateApi.gd b/godot/world/StateApi.gd index d271891..33ef3f4 100644 --- a/godot/world/StateApi.gd +++ b/godot/world/StateApi.gd @@ -1,13 +1,37 @@ extends Node +onready var server = $StateServer + export var xsize = 256 export var ysize = 256 -export var zsize = 6 +export var zsize = 16 + +var Tilemap = preload("res://world/Tilemap.tscn") +var tilemaps = [] func _ready(): - StateServer.generate_world(xsize, ysize, zsize) - print(StateServer.get_tile_at(0,0,0)) + server.generate_world(xsize, ysize, zsize) + print(server.get_tile_at(0,0,0)) func respawn_tilemaps(amount: int): - $Tilemaps.respawn_tilemaps(amount) + tilemaps = [] + for i in range(0, amount + 1): + var map = Tilemap.instance() + map.position.y -= i * map.cell_size.y + map.z_index = i + add_child(map) + tilemaps.push_back(map) +func get_tile_at(pos: Vector3) -> String: + return server.get_tile_at(int(pos.x), int(pos.y), int(pos.z)) + +func update_tiles(tile_positions: PoolVector3Array): + for tile in tile_positions: + tilemaps[tile.z].set_tile_graphics(Vector2(tile.x, tile.y), + get_tile_at(tile)) + +func _on_StateServer_request_init(): + respawn_tilemaps(zsize - 1) + +func _on_StateServer_changed_tiletypes(tile_positions: PoolVector3Array): + call_deferred("update_tiles", tile_positions) diff --git a/godot/world/Tilemap.gd b/godot/world/Tilemap.gd index 9bd981a..5d078f2 100644 --- a/godot/world/Tilemap.gd +++ b/godot/world/Tilemap.gd @@ -1,8 +1,4 @@ extends TileMap func set_tile_graphics(pos: Vector2, id: int): - var flip = true - set_cell(pos.x,pos.y,0,false,false,false,get_atlas_vec_for_id(id)) - -func get_atlas_vec_for_id(id: int) -> Vector2: - return Vector2(randi() % 4, id) + set_cell(pos.x,pos.y,0,false,false,false,Vector2(1,2)) diff --git a/godot/world/Tilemap.tscn b/godot/world/Tilemap.tscn index d835d56..bd723c0 100644 --- a/godot/world/Tilemap.tscn +++ b/godot/world/Tilemap.tscn @@ -4,11 +4,11 @@ [ext_resource path="res://world/Tilemap.gd" type="Script" id=2] [node name="Tilemap" type="TileMap"] -process_priority = 124 position = Vector2( -2, 0 ) mode = 1 tile_set = ExtResource( 1 ) cell_size = Vector2( 32, 16 ) +cell_tile_origin = 1 collision_layer = 0 collision_mask = 0 format = 1 diff --git a/godot/world/Tilemaps.gd b/godot/world/Tilemaps.gd deleted file mode 100644 index f39a136..0000000 --- a/godot/world/Tilemaps.gd +++ /dev/null @@ -1,31 +0,0 @@ -extends Node - -var Tilemap = preload("res://world/Tilemap.tscn") -var tilemaps = [] - -func _ready(): - StateServer.connect("changed_tiletypes", self, "_on_StateServer_changed_tiletypes") - StateServer.connect("request_init", self, "_on_StateServer_request_init") - -func respawn_tilemaps(): - tilemaps = [] - for i in range(0, StateServer.get_world_size().z): - var map = Tilemap.instance() - map.position.y -= i * map.cell_size.y - map.z_index = i - add_child(map) - tilemaps.push_back(map) - -func get_tile_at(pos: Vector3) -> String: - return StateServer.get_tile_at(int(pos.x), int(pos.y), int(pos.z)) - -func update_tiles(tile_positions: PoolVector3Array): - for tile in tile_positions: - tilemaps[tile.z].set_tile_graphics(Vector2(tile.x, tile.y), - get_tile_at(tile)) - -func _on_StateServer_request_init(): - call_deferred("respawn_tilemaps") - -func _on_StateServer_changed_tiletypes(tile_positions: PoolVector3Array): - call_deferred("update_tiles", tile_positions) diff --git a/godot/world/World.tscn b/godot/world/World.tscn index 93f171c..b58654f 100644 --- a/godot/world/World.tscn +++ b/godot/world/World.tscn @@ -1,13 +1,12 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://world/StateApi.gd" type="Script" id=1] -[ext_resource path="res://world/Cam.tscn" type="PackedScene" id=2] -[ext_resource path="res://world/Tilemaps.gd" type="Script" id=4] +[ext_resource path="res://native/StateServer.tscn" type="PackedScene" id=3] [node name="World" type="Node"] script = ExtResource( 1 ) -[node name="Worldcam" parent="." instance=ExtResource( 2 )] +[node name="StateServer" parent="." instance=ExtResource( 3 )] -[node name="Tilemaps" type="Node" parent="."] -script = ExtResource( 4 ) +[connection signal="changed_tiletypes" from="StateServer" to="." method="_on_StateServer_changed_tiletypes"] +[connection signal="request_init" from="StateServer" to="." method="_on_StateServer_request_init"] diff --git a/libresprite/tiles/default.ase b/libresprite/tiles/default.ase index 1266ca9..3834f0a 100644 Binary files a/libresprite/tiles/default.ase and b/libresprite/tiles/default.ase differ diff --git a/routes-native/src/stateserver.rs b/routes-native/src/stateserver.rs index c7d858f..6c63371 100644 --- a/routes-native/src/stateserver.rs +++ b/routes-native/src/stateserver.rs @@ -39,11 +39,6 @@ impl StateServer { _owner.emit_signal("changed_tiletypes", &[Variant::new(&w)]); } - #[export] - fn get_world_size(&self, _ownser: &Node) -> Vector3 { - Vector3::new(self.world.xsize as f32, self.world.ysize as f32, self.world.zsize as f32) - } - #[export] fn get_tile_at(&self, _owner: &Node, x: usize, y: usize, z: usize) -> u16 { self.world.get_tile_at(x, y, z) diff --git a/routes-native/src/stateserver/world.rs b/routes-native/src/stateserver/world.rs index 44a89f0..4b78618 100644 --- a/routes-native/src/stateserver/world.rs +++ b/routes-native/src/stateserver/world.rs @@ -3,16 +3,16 @@ use gdnative::prelude::*; mod tiles; pub struct World { - pub xsize: usize, - pub ysize: usize, - pub zsize: usize, - tiles: Vec>>, + xsize: usize, + ysize: usize, + zsize: usize, + tiles: Vec>>, } impl World { pub fn get_tile_at(&self, x: usize, y: usize, z: usize) -> u16{ //TODO: error handling, or maybe just do that in godot - self.tiles[x][y][z] as u16 + self.tiles[x][y][z] } pub fn generate(&mut self) -> Vector3Array{ self.tiles = get_vec3(self.xsize, self.ysize, self.zsize); @@ -21,7 +21,7 @@ impl World { for y in 0..self.ysize { for z in 0..self.zsize { ret.push(Vector3::new(x as f32, y as f32, z as f32)); - self.tiles[x][y][z] = tiles::Tiletypes::Grass; + self.tiles[x][y][z] = tiles::Tiletypes::Dirt as u16; } } } @@ -37,14 +37,14 @@ impl World { } } -fn get_vec3(xsize: usize, ysize: usize, zsize: usize) -> Vec>> { - let mut zvec: Vec = Vec::with_capacity(zsize); - zvec.resize(zsize, tiles::Tiletypes::Air); +fn get_vec3(xsize: usize, ysize: usize, zsize: usize) -> Vec>> { + let mut zvec: Vec = Vec::with_capacity(zsize); + zvec.resize(zsize, 0); - let mut yvec: Vec> = Vec::with_capacity(ysize); + let mut yvec: Vec> = Vec::with_capacity(ysize); yvec.resize(ysize, zvec.clone()); - let mut xvec: Vec>> = Vec::with_capacity(xsize); + let mut xvec: Vec>> = Vec::with_capacity(xsize); xvec.resize(ysize, yvec.clone()); yvec.push(zvec); diff --git a/routes-native/src/stateserver/world/tiles.rs b/routes-native/src/stateserver/world/tiles.rs index dd126f2..fa824b8 100644 --- a/routes-native/src/stateserver/world/tiles.rs +++ b/routes-native/src/stateserver/world/tiles.rs @@ -1,8 +1,8 @@ use derive_builder::Builder; use strum::{AsRefStr, EnumDiscriminants, EnumIter, FromRepr}; -#[derive(AsRefStr, EnumIter, FromRepr, EnumDiscriminants, Clone, Copy)] -#[repr(u8)] +#[derive(AsRefStr, EnumIter, FromRepr, EnumDiscriminants, Clone)] +#[repr(u16)] pub enum Tiletypes { Air, Water,