mirror of
https://git.kittycat.homes/zoe/codename-routes.git
synced 2024-08-15 03:18:26 +00:00
Compare commits
4 commits
93fa683319
...
5b58f246a0
Author | SHA1 | Date | |
---|---|---|---|
5b58f246a0 | |||
74e9d94977 | |||
59ddadb46a | |||
3c5bbd204e |
16 changed files with 82 additions and 56 deletions
|
@ -1,3 +1,3 @@
|
||||||
source_md5="72b25c45d4743c578ac08e56b209be81"
|
source_md5="d864960022980c4270042a1ed80b9ac4"
|
||||||
dest_md5="73042650bec74eec84c50b98d4bafc70"
|
dest_md5="5f766eea69301dc969f05fac899cb4cb"
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -11,9 +11,13 @@ config_version=4
|
||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="routes"
|
config/name="routes"
|
||||||
run/main_scene="res://world/Main.tscn"
|
run/main_scene="res://world/World.tscn"
|
||||||
config/icon="res://icon.png"
|
config/icon="res://icon.png"
|
||||||
|
|
||||||
|
[autoload]
|
||||||
|
|
||||||
|
StateServer="*res://native/StateServer.tscn"
|
||||||
|
|
||||||
[importer_defaults]
|
[importer_defaults]
|
||||||
|
|
||||||
texture={
|
texture={
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.9 KiB |
8
godot/world/Cam.tscn
Normal file
8
godot/world/Cam.tscn
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[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 )
|
|
@ -1,13 +1,10 @@
|
||||||
[gd_scene load_steps=3 format=2]
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://world/worldcam.gd" type="Script" id=1]
|
[ext_resource path="res://world/Cam.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://world/World.tscn" type="PackedScene" id=2]
|
[ext_resource path="res://world/World.tscn" type="PackedScene" id=2]
|
||||||
|
|
||||||
[node name="Main" type="Node2D"]
|
[node name="Main" type="Node2D"]
|
||||||
|
|
||||||
[node name="Worldcam" type="Camera2D" parent="."]
|
[node name="Worldcam" parent="." instance=ExtResource( 1 )]
|
||||||
current = true
|
|
||||||
zoom = Vector2( 0.4, 0.4 )
|
|
||||||
script = ExtResource( 1 )
|
|
||||||
|
|
||||||
[node name="World" parent="." instance=ExtResource( 2 )]
|
[node name="World" parent="." instance=ExtResource( 2 )]
|
||||||
|
|
|
@ -1,37 +1,13 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
onready var server = $StateServer
|
|
||||||
|
|
||||||
export var xsize = 256
|
export var xsize = 256
|
||||||
export var ysize = 256
|
export var ysize = 256
|
||||||
export var zsize = 16
|
export var zsize = 6
|
||||||
|
|
||||||
var Tilemap = preload("res://world/Tilemap.tscn")
|
|
||||||
var tilemaps = []
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
server.generate_world(xsize, ysize, zsize)
|
StateServer.generate_world(xsize, ysize, zsize)
|
||||||
print(server.get_tile_at(0,0,0))
|
print(StateServer.get_tile_at(0,0,0))
|
||||||
|
|
||||||
func respawn_tilemaps(amount: int):
|
func respawn_tilemaps(amount: int):
|
||||||
tilemaps = []
|
$Tilemaps.respawn_tilemaps(amount)
|
||||||
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)
|
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
extends TileMap
|
extends TileMap
|
||||||
|
|
||||||
func set_tile_graphics(pos: Vector2, id: int):
|
func set_tile_graphics(pos: Vector2, id: int):
|
||||||
set_cell(pos.x,pos.y,0,false,false,false,Vector2(1,2))
|
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)
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
[ext_resource path="res://world/Tilemap.gd" type="Script" id=2]
|
[ext_resource path="res://world/Tilemap.gd" type="Script" id=2]
|
||||||
|
|
||||||
[node name="Tilemap" type="TileMap"]
|
[node name="Tilemap" type="TileMap"]
|
||||||
|
process_priority = 124
|
||||||
position = Vector2( -2, 0 )
|
position = Vector2( -2, 0 )
|
||||||
mode = 1
|
mode = 1
|
||||||
tile_set = ExtResource( 1 )
|
tile_set = ExtResource( 1 )
|
||||||
cell_size = Vector2( 32, 16 )
|
cell_size = Vector2( 32, 16 )
|
||||||
cell_tile_origin = 1
|
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
collision_mask = 0
|
collision_mask = 0
|
||||||
format = 1
|
format = 1
|
||||||
|
|
31
godot/world/Tilemaps.gd
Normal file
31
godot/world/Tilemaps.gd
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
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)
|
|
@ -1,12 +1,13 @@
|
||||||
[gd_scene load_steps=3 format=2]
|
[gd_scene load_steps=4 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://world/StateApi.gd" type="Script" id=1]
|
[ext_resource path="res://world/StateApi.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://native/StateServer.tscn" type="PackedScene" id=3]
|
[ext_resource path="res://world/Cam.tscn" type="PackedScene" id=2]
|
||||||
|
[ext_resource path="res://world/Tilemaps.gd" type="Script" id=4]
|
||||||
|
|
||||||
[node name="World" type="Node"]
|
[node name="World" type="Node"]
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
[node name="StateServer" parent="." instance=ExtResource( 3 )]
|
[node name="Worldcam" parent="." instance=ExtResource( 2 )]
|
||||||
|
|
||||||
[connection signal="changed_tiletypes" from="StateServer" to="." method="_on_StateServer_changed_tiletypes"]
|
[node name="Tilemaps" type="Node" parent="."]
|
||||||
[connection signal="request_init" from="StateServer" to="." method="_on_StateServer_request_init"]
|
script = ExtResource( 4 )
|
||||||
|
|
Binary file not shown.
|
@ -39,6 +39,11 @@ impl StateServer {
|
||||||
_owner.emit_signal("changed_tiletypes", &[Variant::new(&w)]);
|
_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]
|
#[export]
|
||||||
fn get_tile_at(&self, _owner: &Node, x: usize, y: usize, z: usize) -> u16 {
|
fn get_tile_at(&self, _owner: &Node, x: usize, y: usize, z: usize) -> u16 {
|
||||||
self.world.get_tile_at(x, y, z)
|
self.world.get_tile_at(x, y, z)
|
||||||
|
|
|
@ -3,16 +3,16 @@ use gdnative::prelude::*;
|
||||||
mod tiles;
|
mod tiles;
|
||||||
|
|
||||||
pub struct World {
|
pub struct World {
|
||||||
xsize: usize,
|
pub xsize: usize,
|
||||||
ysize: usize,
|
pub ysize: usize,
|
||||||
zsize: usize,
|
pub zsize: usize,
|
||||||
tiles: Vec<Vec<Vec<u16>>>,
|
tiles: Vec<Vec<Vec<tiles::Tiletypes>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl World {
|
impl World {
|
||||||
pub fn get_tile_at(&self, x: usize, y: usize, z: usize) -> u16{
|
pub fn get_tile_at(&self, x: usize, y: usize, z: usize) -> u16{
|
||||||
//TODO: error handling, or maybe just do that in godot
|
//TODO: error handling, or maybe just do that in godot
|
||||||
self.tiles[x][y][z]
|
self.tiles[x][y][z] as u16
|
||||||
}
|
}
|
||||||
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);
|
||||||
|
@ -21,7 +21,7 @@ impl World {
|
||||||
for y in 0..self.ysize {
|
for y in 0..self.ysize {
|
||||||
for z in 0..self.zsize {
|
for z in 0..self.zsize {
|
||||||
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] = tiles::Tiletypes::Dirt as u16;
|
self.tiles[x][y][z] = tiles::Tiletypes::Grass;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,14 +37,14 @@ impl World {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_vec3(xsize: usize, ysize: usize, zsize: usize) -> Vec<Vec<Vec<u16>>> {
|
fn get_vec3(xsize: usize, ysize: usize, zsize: usize) -> Vec<Vec<Vec<tiles::Tiletypes>>> {
|
||||||
let mut zvec: Vec<u16> = Vec::with_capacity(zsize);
|
let mut zvec: Vec<tiles::Tiletypes> = Vec::with_capacity(zsize);
|
||||||
zvec.resize(zsize, 0);
|
zvec.resize(zsize, tiles::Tiletypes::Air);
|
||||||
|
|
||||||
let mut yvec: Vec<Vec<u16>> = Vec::with_capacity(ysize);
|
let mut yvec: Vec<Vec<tiles::Tiletypes>> = Vec::with_capacity(ysize);
|
||||||
yvec.resize(ysize, zvec.clone());
|
yvec.resize(ysize, zvec.clone());
|
||||||
|
|
||||||
let mut xvec: Vec<Vec<Vec<u16>>> = Vec::with_capacity(xsize);
|
let mut xvec: Vec<Vec<Vec<tiles::Tiletypes>>> = Vec::with_capacity(xsize);
|
||||||
xvec.resize(ysize, yvec.clone());
|
xvec.resize(ysize, yvec.clone());
|
||||||
|
|
||||||
yvec.push(zvec);
|
yvec.push(zvec);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
use derive_builder::Builder;
|
use derive_builder::Builder;
|
||||||
use strum::{AsRefStr, EnumDiscriminants, EnumIter, FromRepr};
|
use strum::{AsRefStr, EnumDiscriminants, EnumIter, FromRepr};
|
||||||
|
|
||||||
#[derive(AsRefStr, EnumIter, FromRepr, EnumDiscriminants, Clone)]
|
#[derive(AsRefStr, EnumIter, FromRepr, EnumDiscriminants, Clone, Copy)]
|
||||||
#[repr(u16)]
|
#[repr(u8)]
|
||||||
pub enum Tiletypes {
|
pub enum Tiletypes {
|
||||||
Air,
|
Air,
|
||||||
Water,
|
Water,
|
||||||
|
|
Loading…
Reference in a new issue