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)
|
server.generate_world(xsize, ysize, zsize)
|
||||||
print(server.get_tile_at(xsize -1,ysize -1,zsize-1))
|
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):
|
func respawn_tilemaps(amount):
|
||||||
tilemaps = []
|
tilemaps = []
|
||||||
for tile in range(0, amount + 1):
|
for tile in range(0, amount + 1):
|
||||||
add_child(Tilemap.instance())
|
add_child(Tilemap.instance())
|
||||||
tilemaps.push_back(tile)
|
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 )]
|
[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]
|
#[export]
|
||||||
fn _ready(&self, _owner: &Node) {
|
fn _ready(&self, _owner: &Node) {}
|
||||||
//godot_print!("hello world")
|
|
||||||
}
|
|
||||||
|
|
||||||
#[export]
|
#[export]
|
||||||
fn generate_world(&mut self, _owner: &Node, xsize: usize, ysize: usize, zsize: usize) {
|
fn generate_world(&mut self, _owner: &Node, xsize: usize, ysize: usize, zsize: usize) {
|
||||||
self.world = world::World::new(xsize, ysize, zsize);
|
self.world = world::World::new(xsize, ysize, zsize);
|
||||||
self.world.generate();
|
_owner.emit_signal("request_init", &[]);
|
||||||
_owner.emit_signal("request_full_reload", &[]);
|
_owner.emit_signal("changed_tiletypes", &[Variant::new(
|
||||||
|
// changes what the world looks like! by generating a new one!
|
||||||
|
self.world.generate())]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[export]
|
#[export]
|
||||||
|
@ -50,10 +50,9 @@ impl StateServer {
|
||||||
impl StateServer {
|
impl StateServer {
|
||||||
fn register(builder: &ClassBuilder<StateServer>) {
|
fn register(builder: &ClassBuilder<StateServer>) {
|
||||||
builder
|
builder
|
||||||
.signal("changed_tile")
|
.signal("changed_tiletypes")
|
||||||
.with_param("position", VariantType::Vector3)
|
.with_param("tile_positions", VariantType::Vector3Array)
|
||||||
.with_param("new_type", VariantType::GodotString)
|
|
||||||
.done();
|
.done();
|
||||||
builder.signal("request_full_reload").done();
|
builder.signal("request_init").done();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
use gdnative::prelude::*;
|
||||||
|
|
||||||
mod tiles;
|
mod tiles;
|
||||||
|
|
||||||
pub struct World {
|
pub struct World {
|
||||||
|
@ -11,16 +13,19 @@ impl World {
|
||||||
pub fn get_tile_at(&self, x: usize, y: usize, z: usize) -> &tiles::Tile{
|
pub fn get_tile_at(&self, x: usize, y: usize, z: usize) -> &tiles::Tile{
|
||||||
&self.tiles[x][y][z]
|
&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);
|
self.tiles = get_vec3(self.xsize, self.ysize, self.zsize);
|
||||||
|
let mut ret: Vector3Array = Vector3Array::new();
|
||||||
for x in 0..self.xsize {
|
for x in 0..self.xsize {
|
||||||
for y in 0..self.ysize {
|
for y in 0..self.ysize {
|
||||||
for z in 0..self.zsize {
|
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;
|
self.tiles[x][y][z] = tile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ret
|
||||||
}
|
}
|
||||||
pub fn new(xsize: usize, ysize: usize, zsize: usize) -> World {
|
pub fn new(xsize: usize, ysize: usize, zsize: usize) -> World {
|
||||||
World {
|
World {
|
||||||
|
@ -34,7 +39,7 @@ impl World {
|
||||||
|
|
||||||
fn get_vec3(xsize: usize, ysize: usize, zsize: usize) -> Vec<Vec<Vec<tiles::Tile>>> {
|
fn get_vec3(xsize: usize, ysize: usize, zsize: usize) -> Vec<Vec<Vec<tiles::Tile>>> {
|
||||||
let mut zvec: Vec<tiles::Tile> = Vec::with_capacity(zsize);
|
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);
|
let mut yvec: Vec<Vec<tiles::Tile>> = Vec::with_capacity(ysize);
|
||||||
yvec.resize(ysize, zvec.clone());
|
yvec.resize(ysize, zvec.clone());
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use strum::AsRefStr;
|
use strum::AsRefStr;
|
||||||
|
|
||||||
#[derive(Debug, Clone, AsRefStr)]
|
#[derive(Debug, Clone, AsRefStr, Copy)]
|
||||||
pub enum Tiletypes {
|
pub enum Tiletypes {
|
||||||
Air,
|
Air,
|
||||||
Water,
|
Water,
|
||||||
|
@ -9,16 +9,19 @@ pub enum Tiletypes {
|
||||||
Sand,
|
Sand,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub struct Tile {
|
pub struct Tile {
|
||||||
kind: Tiletypes,
|
kind: Tiletypes,
|
||||||
|
x: usize,
|
||||||
|
y: usize,
|
||||||
|
z: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Tile {
|
impl Tile {
|
||||||
pub fn new(kind: Tiletypes) -> Tile {
|
pub fn new(kind: Tiletypes, x: usize, y: usize, z: usize) -> Tile {
|
||||||
Tile { kind }
|
Tile { kind, x, y, z }
|
||||||
}
|
}
|
||||||
pub fn kind_to_string(&self) -> &str {
|
pub fn kind_to_string(&self) -> &str {
|
||||||
self.kind.as_ref()
|
&self.kind.as_ref()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue