Fix save and load.
This commit is contained in:
parent
280318b8d3
commit
af0eb67a65
|
@ -15,20 +15,16 @@ func _ready():
|
||||||
add_child(start_tile);
|
add_child(start_tile);
|
||||||
pass
|
pass
|
||||||
|
|
||||||
#func _process(delta):
|
func _physics_process(delta):
|
||||||
#mark_free_tiles()
|
mark_free_tiles()
|
||||||
|
|
||||||
func mark_free_tiles():
|
func mark_free_tiles():
|
||||||
var tiles = get_children()
|
var tiles = get_children()
|
||||||
|
var available = []
|
||||||
for tile in tiles:
|
for tile in tiles:
|
||||||
tile.update_tile()
|
tile.update_tile()
|
||||||
if tile.tile_type == TileType.Empty: continue
|
if tile.tile_type == TileType.Empty: continue
|
||||||
var free_dirs = tile.get_free_dirs_around()
|
var free_dirs = tile.get_free_dirs_around()
|
||||||
for dir in free_dirs:
|
for dir in free_dirs:
|
||||||
var free_tile = tile_exemplar.instantiate()
|
|
||||||
free_tile.tile_type = TileType.Empty
|
|
||||||
free_tile.add_to_group("Persistent")
|
|
||||||
add_child(free_tile)
|
|
||||||
var pos: Vector3 = tile.position
|
var pos: Vector3 = tile.position
|
||||||
match dir:
|
match dir:
|
||||||
"north":
|
"north":
|
||||||
|
@ -39,7 +35,12 @@ func mark_free_tiles():
|
||||||
pos.z -= 10
|
pos.z -= 10
|
||||||
"east":
|
"east":
|
||||||
pos.z += 10
|
pos.z += 10
|
||||||
|
if (available.has(pos)): continue
|
||||||
|
var free_tile = tile_exemplar.instantiate()
|
||||||
|
free_tile.tile_type = TileType.Empty
|
||||||
|
free_tile.add_to_group("Persistent")
|
||||||
|
add_child(free_tile)
|
||||||
|
|
||||||
free_tile.position = pos;
|
free_tile.position = pos;
|
||||||
|
available.push_back(pos)
|
||||||
free_tile.update_tile()
|
free_tile.update_tile()
|
||||||
#print("Created on " + str(pos) + " by " + str(tile.position))
|
|
||||||
#tiles = get_children()
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ func _physics_process(delta):
|
||||||
if Input.is_action_just_pressed("LMC") and eye_raycast.is_colliding() and !get_node("UI/ingame_menu").visible:
|
if Input.is_action_just_pressed("LMC") and eye_raycast.is_colliding() and !get_node("UI/ingame_menu").visible:
|
||||||
var target = eye_raycast.get_collider()
|
var target = eye_raycast.get_collider()
|
||||||
if "TileType" in target:
|
if "TileType" in target:
|
||||||
earth.mark_free_tiles()
|
#earth.mark_free_tiles()
|
||||||
target.tile_type = creating_tile_type
|
target.tile_type = creating_tile_type
|
||||||
target.update_tile()
|
target.update_tile()
|
||||||
earth.mark_free_tiles()
|
earth.mark_free_tiles()
|
||||||
|
|
|
@ -7,12 +7,6 @@ enum TileType {
|
||||||
}
|
}
|
||||||
|
|
||||||
@export var tile_type: TileType = TileType.Empty;
|
@export var tile_type: TileType = TileType.Empty;
|
||||||
var free_sides = {
|
|
||||||
"north": false,
|
|
||||||
"south": false,
|
|
||||||
"west": false,
|
|
||||||
"east": false,
|
|
||||||
}
|
|
||||||
|
|
||||||
func update_tile():
|
func update_tile():
|
||||||
var children = find_children("*tile");
|
var children = find_children("*tile");
|
||||||
|
@ -25,7 +19,9 @@ func update_tile():
|
||||||
func _ready():
|
func _ready():
|
||||||
update_tile()
|
update_tile()
|
||||||
|
|
||||||
func _physics_process(delta):
|
func get_free_dirs_around():
|
||||||
|
var free_tiles_around = []
|
||||||
|
|
||||||
var space_state = get_world_3d().direct_space_state
|
var space_state = get_world_3d().direct_space_state
|
||||||
|
|
||||||
var query_north = PhysicsRayQueryParameters3D.create(self.position + Vector3(0, 2.5, 0), self.position + Vector3(10, 2.5, 0))
|
var query_north = PhysicsRayQueryParameters3D.create(self.position + Vector3(0, 2.5, 0), self.position + Vector3(10, 2.5, 0))
|
||||||
|
@ -37,18 +33,12 @@ func _physics_process(delta):
|
||||||
var result_south = space_state.intersect_ray(query_south)
|
var result_south = space_state.intersect_ray(query_south)
|
||||||
var result_west = space_state.intersect_ray(query_west)
|
var result_west = space_state.intersect_ray(query_west)
|
||||||
var result_east = space_state.intersect_ray(query_east)
|
var result_east = space_state.intersect_ray(query_east)
|
||||||
free_sides = {
|
|
||||||
"north": result_north == {},
|
|
||||||
"south": result_south == {},
|
|
||||||
"west": result_west == {},
|
|
||||||
"east": result_east == {}
|
|
||||||
}
|
|
||||||
|
|
||||||
func get_free_dirs_around():
|
if !result_north: free_tiles_around.push_back("north")
|
||||||
var free_tiles_around = []
|
if !result_south: free_tiles_around.push_back("south")
|
||||||
for side in free_sides.keys():
|
if !result_west: free_tiles_around.push_back("west")
|
||||||
if free_sides[side]:
|
if !result_east: free_tiles_around.push_back("east")
|
||||||
free_tiles_around.push_back(side)
|
|
||||||
return free_tiles_around
|
return free_tiles_around
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,6 @@ func load_world(save_name):
|
||||||
continue
|
continue
|
||||||
new_object.set(i, node_data[i])
|
new_object.set(i, node_data[i])
|
||||||
new_object.update_tile()
|
new_object.update_tile()
|
||||||
#get_tree().root.get_node("world/Earth").mark_free_tiles()
|
|
||||||
|
|
||||||
#await get_tree().create_timer(1).timeout
|
#await get_tree().create_timer(1).timeout
|
||||||
|
|
||||||
|
|
9
todo
9
todo
|
@ -1,2 +1,9 @@
|
||||||
Починить кривую загрузку мира, в результате которой плюсики по всему миру
|
|
||||||
Упростить устройство тайла, сделать единственную модель со сменяемым через скрипт материалом
|
Упростить устройство тайла, сделать единственную модель со сменяемым через скрипт материалом
|
||||||
|
Создать следующие типы тайлов:
|
||||||
|
* Лес
|
||||||
|
* Озеро
|
||||||
|
* Море (Будут отличаться глубиной и чуть-чуть цветом)
|
||||||
|
* Река (возможно)
|
||||||
|
* Горы
|
||||||
|
* Пустыни
|
||||||
|
Создать первый прототип людей и поселений
|
||||||
|
|
Loading…
Reference in New Issue