mirror of
https://git.kittycat.homes/zoe/codename-routes.git
synced 2024-08-15 03:18:26 +00:00
try to optimize memory usage a tiny bit by using u16 instead of string
This commit is contained in:
parent
67d1480f35
commit
7895471778
7 changed files with 24 additions and 20 deletions
Binary file not shown.
|
@ -2,8 +2,8 @@ extends Node
|
||||||
|
|
||||||
onready var server = $StateServer
|
onready var server = $StateServer
|
||||||
|
|
||||||
export var xsize = 512
|
export var xsize = 16
|
||||||
export var ysize = 512
|
export var ysize = 16
|
||||||
export var zsize = 16
|
export var zsize = 16
|
||||||
|
|
||||||
var Tilemap = preload("res://world/Tilemap.tscn")
|
var Tilemap = preload("res://world/Tilemap.tscn")
|
||||||
|
@ -11,6 +11,7 @@ var tilemaps = []
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
server.generate_world(xsize, ysize, zsize)
|
server.generate_world(xsize, ysize, zsize)
|
||||||
|
print(server.get_tile_at(0,0,0))
|
||||||
|
|
||||||
func respawn_tilemaps(amount: int):
|
func respawn_tilemaps(amount: int):
|
||||||
tilemaps = []
|
tilemaps = []
|
||||||
|
@ -28,7 +29,6 @@ func update_tiles(tile_positions: PoolVector3Array):
|
||||||
for tile in tile_positions:
|
for tile in tile_positions:
|
||||||
tilemaps[tile.z].set_tile_graphics(Vector2(tile.x, tile.y),
|
tilemaps[tile.z].set_tile_graphics(Vector2(tile.x, tile.y),
|
||||||
get_tile_at(tile))
|
get_tile_at(tile))
|
||||||
pass
|
|
||||||
|
|
||||||
func _on_StateServer_request_init():
|
func _on_StateServer_request_init():
|
||||||
respawn_tilemaps(zsize - 1)
|
respawn_tilemaps(zsize - 1)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
extends TileMap
|
extends TileMap
|
||||||
|
|
||||||
func set_tile_graphics(pos: Vector2, type: String):
|
func set_tile_graphics(pos: Vector2, id: int):
|
||||||
set_cell(pos.x,pos.y,0,false,false,false,Vector2(1,2))
|
set_cell(pos.x,pos.y,0,false,false,false,Vector2(1,2))
|
||||||
|
|
|
@ -11,6 +11,7 @@ crate-type = ["cdylib"]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
gdnative = {version = "0.10", features = ["async"]}
|
gdnative = {version = "0.10", features = ["async"]}
|
||||||
strum = { version = "0.24", features = ["derive"] }
|
strum = { version = "0.24", features = ["derive"] }
|
||||||
|
strum_macros = "0.24"
|
||||||
# tokio = {version = "1.18.0", features = ["sync"]}
|
# tokio = {version = "1.18.0", features = ["sync"]}
|
||||||
# lazy_static = "1.4.0"
|
# lazy_static = "1.4.0"
|
||||||
# pathfinding = "3.0.12"
|
# pathfinding = "3.0.12"
|
||||||
|
|
|
@ -40,8 +40,8 @@ impl StateServer {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[export]
|
#[export]
|
||||||
fn get_tile_at(&self, _owner: &Node, x: usize, y: usize, z: usize) -> &str {
|
fn get_tile_at(&self, _owner: &Node, x: usize, y: usize, z: usize) -> u16 {
|
||||||
self.world.get_tile_at(x, y, z).kind_to_string()
|
self.world.get_tile_at(x, y, z)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,13 @@ pub struct World {
|
||||||
xsize: usize,
|
xsize: usize,
|
||||||
ysize: usize,
|
ysize: usize,
|
||||||
zsize: usize,
|
zsize: usize,
|
||||||
tiles: Vec<Vec<Vec<tiles::Tile>>>,
|
tiles: Vec<Vec<Vec<u16>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl World {
|
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) -> u16{
|
||||||
&self.tiles[x][y][z]
|
//TODO: error handling, or maybe just do that in godot
|
||||||
|
self.tiles[x][y][z]
|
||||||
}
|
}
|
||||||
pub fn generate(&mut self) -> Vector3Array{
|
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);
|
||||||
|
@ -19,9 +20,8 @@ impl World {
|
||||||
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);
|
|
||||||
ret.push(Vector3::new(x as f32, y as f32, z as f32));
|
ret.push(Vector3::new(x as f32, y as f32, z as f32));
|
||||||
self.tiles[x][y][z] = tile;
|
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<Vec<Vec<tiles::Tile>>> {
|
fn get_vec3(xsize: usize, ysize: usize, zsize: usize) -> Vec<Vec<Vec<u16>>> {
|
||||||
let mut zvec: Vec<tiles::Tile> = Vec::with_capacity(zsize);
|
let mut zvec: Vec<u16> = Vec::with_capacity(zsize);
|
||||||
zvec.resize(zsize, tiles::Tile::new(tiles::Tiletypes::Air));
|
zvec.resize(zsize, 0);
|
||||||
|
|
||||||
let mut yvec: Vec<Vec<tiles::Tile>> = Vec::with_capacity(ysize);
|
let mut yvec: Vec<Vec<u16>> = Vec::with_capacity(ysize);
|
||||||
yvec.resize(ysize, zvec.clone());
|
yvec.resize(ysize, zvec.clone());
|
||||||
|
|
||||||
let mut xvec: Vec<Vec<Vec<tiles::Tile>>> = Vec::with_capacity(xsize);
|
let mut xvec: Vec<Vec<Vec<u16>>> = Vec::with_capacity(xsize);
|
||||||
xvec.resize(ysize, yvec.clone());
|
xvec.resize(ysize, yvec.clone());
|
||||||
|
|
||||||
yvec.push(zvec);
|
yvec.push(zvec);
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
use strum::AsRefStr;
|
use strum::{AsRefStr, EnumIter, FromRepr, EnumDiscriminants};
|
||||||
|
|
||||||
#[derive(Debug, Clone, AsRefStr, Copy)]
|
|
||||||
|
#[derive(Debug, Clone, AsRefStr, Copy, EnumIter, FromRepr, EnumDiscriminants)]
|
||||||
|
#[repr(u16)]
|
||||||
pub enum Tiletypes {
|
pub enum Tiletypes {
|
||||||
Air,
|
Air,
|
||||||
Water,
|
Water,
|
||||||
|
@ -16,9 +18,10 @@ pub struct Tile {
|
||||||
|
|
||||||
impl Tile {
|
impl Tile {
|
||||||
pub fn new(kind: Tiletypes) -> Tile {
|
pub fn new(kind: Tiletypes) -> Tile {
|
||||||
|
|
||||||
Tile { kind }
|
Tile { kind }
|
||||||
}
|
}
|
||||||
pub fn kind_to_string(&self) -> &str {
|
pub fn kind_to_string(&self) -> String {
|
||||||
&self.kind.as_ref()
|
self.kind.as_ref().to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue