hand over the changed tiles !!! >:(

This commit is contained in:
Zoe 2022-05-05 11:13:29 +02:00
parent 539727ca3f
commit 38e5cbb2dd
6 changed files with 32 additions and 21 deletions

Binary file not shown.

View File

@ -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

View File

@ -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"]

View File

@ -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<StateServer>) {
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();
}
}

View File

@ -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<Vec<Vec<tiles::Tile>>> {
let mut zvec: Vec<tiles::Tile> = 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<tiles::Tile>> = Vec::with_capacity(ysize);
yvec.resize(ysize, zvec.clone());

View File

@ -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()
}
}