hand over the changed tiles !!! >:(
This commit is contained in:
parent
539727ca3f
commit
38e5cbb2dd
Binary file not shown.
|
@ -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
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue