Initial room creation and pathfinding
This commit is contained in:
parent
931aa8b350
commit
2534a72265
@ -3,9 +3,10 @@ extends Node3D
|
||||
var tile_grid_size = 64
|
||||
var astar_grid_room = AStarGrid2D.new()
|
||||
|
||||
var load_tile = preload("res://tiles/base_tile/tile.tscn")
|
||||
var load_tile = preload("res://tiles/base_tile/base_tile.tscn")
|
||||
var load_room = preload("res://places/base_place/base_room.tscn")
|
||||
|
||||
var tile_dict = {}
|
||||
var place_tile_dict = {}
|
||||
|
||||
var selection_drag_dict = {}
|
||||
var selection_dict = {}
|
||||
@ -31,7 +32,7 @@ func _ready():
|
||||
|
||||
tile.update(0, 2)
|
||||
|
||||
tile_dict[pos] = tile
|
||||
place_tile_dict[pos] = tile
|
||||
|
||||
add_child(tile)
|
||||
|
||||
@ -42,7 +43,7 @@ func draw_tile_click(click_pos):
|
||||
tile_count_x_hist = 0
|
||||
tile_count_z_hist = 0
|
||||
|
||||
if tile_dict.has(build_start_pos):
|
||||
if place_tile_dict.has(build_start_pos):
|
||||
select_tile(build_start_pos)
|
||||
|
||||
func init_select_drag(float_build_start_pos, float_build_mouse_pos):
|
||||
@ -64,8 +65,8 @@ func init_select_drag(float_build_start_pos, float_build_mouse_pos):
|
||||
for x in range(min(0, tile_count_x), max(0, tile_count_x) + 1):
|
||||
for z in range(min(0, tile_count_z), max(0, tile_count_z) + 1):
|
||||
var select_drag_pos = build_start_pos + Vector3i(x, 0, z)
|
||||
if tile_dict.has(select_drag_pos):
|
||||
if not tile_dict[select_drag_pos].construction_mode == 4:
|
||||
if place_tile_dict.has(select_drag_pos):
|
||||
if not place_tile_dict[select_drag_pos].construction_mode == 4:
|
||||
select_drag_array.append(select_drag_pos)
|
||||
|
||||
if select_drag_array:
|
||||
@ -74,9 +75,9 @@ func init_select_drag(float_build_start_pos, float_build_mouse_pos):
|
||||
func draw_select_drag(array):
|
||||
#Clears previous drag, then calls tile selection on all currently dragged tiles
|
||||
|
||||
for i in tile_dict:
|
||||
for i in place_tile_dict:
|
||||
if not selection_dict.has(i):
|
||||
var tile_selected = tile_dict[i]
|
||||
var tile_selected = place_tile_dict[i]
|
||||
tile_selected.update(1, 0)
|
||||
|
||||
selection_drag_dict.clear()
|
||||
@ -87,7 +88,7 @@ func draw_select_drag(array):
|
||||
func select_tile(pos):
|
||||
#Tells tiles to be selected
|
||||
|
||||
var tile = tile_dict[pos]
|
||||
var tile = place_tile_dict[pos]
|
||||
|
||||
selection_drag_dict[pos] = tile
|
||||
|
||||
@ -102,9 +103,7 @@ func verify_room():
|
||||
var verify_array = selection_dict.keys()
|
||||
var verify_queue_array = [verify_array[0]]
|
||||
var verify_checked_array = []
|
||||
|
||||
var wall_dict = {}
|
||||
|
||||
|
||||
while verify_array:
|
||||
if not verify_queue_array:
|
||||
|
||||
@ -112,7 +111,7 @@ func verify_room():
|
||||
|
||||
var verify_pos = verify_queue_array.pop_back()
|
||||
|
||||
var verify_neighbor_array = tile_dict[verify_pos].neighbor_array
|
||||
var verify_neighbor_array = place_tile_dict[verify_pos].neighbor_array
|
||||
|
||||
for n in verify_neighbor_array:
|
||||
|
||||
@ -147,11 +146,11 @@ func end_select_drag():
|
||||
if verify_room():
|
||||
build_allowed = true
|
||||
for i in selection_dict:
|
||||
tile_dict[i].update(3, 0)
|
||||
place_tile_dict[i].update(3, 0)
|
||||
else:
|
||||
build_allowed = false
|
||||
for i in selection_dict:
|
||||
tile_dict[i].update(4, 0)
|
||||
place_tile_dict[i].update(4, 0)
|
||||
|
||||
selection_drag_dict.clear()
|
||||
|
||||
@ -162,15 +161,12 @@ func build_selection():
|
||||
return
|
||||
|
||||
for i in selection_dict:
|
||||
var tile_selected = tile_dict[i]
|
||||
var tile_selected = place_tile_dict[i]
|
||||
tile_selected.update(1, 4)
|
||||
|
||||
create_room()
|
||||
|
||||
selection_dict.clear()
|
||||
|
||||
for i in tile_dict:
|
||||
#if not selection_dict.has(i):
|
||||
var tile_selected = tile_dict[i]
|
||||
tile_selected.update(1, 0)
|
||||
|
||||
func clear_selection():
|
||||
#When the clear button is clicked, it clears the selected tiles without doing anything.
|
||||
@ -186,3 +182,18 @@ func clear_selection():
|
||||
tile.update_face(j, 1)
|
||||
|
||||
selection_dict.clear()
|
||||
|
||||
func create_room():
|
||||
|
||||
var room = load_room.instantiate()
|
||||
|
||||
room.position = (selection_dict.keys().min())
|
||||
|
||||
room.room_tile_dict = selection_dict.duplicate()
|
||||
|
||||
room.name = str("Room", room.get_instance_id())
|
||||
|
||||
add_child(room)
|
||||
|
||||
for i in room.room_tile_dict:
|
||||
place_tile_dict[i].room_id = room
|
||||
@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bujuwgn3y42ek"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://n4vvqmlmq5fp" path="res://places/base_place/place.gd" id="1_uq3a8"]
|
||||
[ext_resource type="Script" uid="uid://n4vvqmlmq5fp" path="res://places/base_place/base_place.gd" id="1_uq3a8"]
|
||||
|
||||
[node name="BasePlace" type="Node3D"]
|
||||
script = ExtResource("1_uq3a8")
|
||||
|
||||
32
places/base_place/base_room.gd
Normal file
32
places/base_place/base_room.gd
Normal file
@ -0,0 +1,32 @@
|
||||
extends Node
|
||||
|
||||
var room_tile_dict = {}
|
||||
|
||||
var path_grid = AStar3D.new()
|
||||
|
||||
var neighbor_array = [
|
||||
Vector3i(0, 0, -1),
|
||||
Vector3i(1, 0, 0),
|
||||
Vector3i(0, 0, 1),
|
||||
Vector3i(-1, 0, 0),
|
||||
]
|
||||
|
||||
func _ready():
|
||||
self.name = str("Room", self.get_instance_id())
|
||||
|
||||
init_path_grid()
|
||||
|
||||
pass
|
||||
|
||||
func init_path_grid():
|
||||
print(self.name)
|
||||
|
||||
for i in room_tile_dict.keys():
|
||||
var id = path_grid.get_available_point_id()
|
||||
path_grid.add_point(id, i)
|
||||
|
||||
for n in neighbor_array:
|
||||
if room_tile_dict.has(i + n):
|
||||
var closest = path_grid.get_closest_point(i + n)
|
||||
if (i + n) == Vector3i(path_grid.get_point_position(closest)):
|
||||
path_grid.connect_points(id, closest)
|
||||
1
places/base_place/base_room.gd.uid
Normal file
1
places/base_place/base_room.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://c2neixe7kpvma
|
||||
12
places/base_place/base_room.tscn
Normal file
12
places/base_place/base_room.tscn
Normal file
@ -0,0 +1,12 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://f0b4ptwari8y"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c2neixe7kpvma" path="res://places/base_place/base_room.gd" id="1_3l4mp"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_3l4mp"]
|
||||
|
||||
[node name="BaseRoom" type="Node3D"]
|
||||
script = ExtResource("1_3l4mp")
|
||||
|
||||
[node name="ConnectMesh" type="MeshInstance3D" parent="."]
|
||||
visible = false
|
||||
mesh = SubResource("SphereMesh_3l4mp")
|
||||
@ -65,7 +65,10 @@ var grid_pos = null
|
||||
|
||||
var wall_dict = {}
|
||||
|
||||
var room_id = null
|
||||
|
||||
func _ready():
|
||||
$Label3D.text = str(grid_pos)
|
||||
pass
|
||||
|
||||
func invalid_this_tile():
|
||||
@ -131,12 +134,10 @@ func update(sel_mode: int = 0, con_mode: int = 0):
|
||||
|
||||
if con_mode == 1:
|
||||
# non-interactable
|
||||
$Label3D.text = "1"
|
||||
pass
|
||||
|
||||
elif con_mode == 2:
|
||||
# closed
|
||||
$Label3D.text = "2"
|
||||
$Floor/FloorMesh.set_material_override(gray)
|
||||
pass
|
||||
|
||||
@ -146,7 +147,6 @@ func update(sel_mode: int = 0, con_mode: int = 0):
|
||||
|
||||
elif con_mode == 4:
|
||||
# built
|
||||
$Label3D.text = "4"
|
||||
$Floor/FloorMesh.set_material_override(null)
|
||||
pass
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://gs6yynwvvot2"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://jqjcr7dxjnbt" path="res://tiles/base_tile/tile.gd" id="1_v7x5k"]
|
||||
[ext_resource type="PlaneMesh" uid="uid://bis4hdushjnjm" path="res://tiles/base_tile/base_floor.tres" id="2_ipr02"]
|
||||
[ext_resource type="Script" uid="uid://df68d87131dv7" path="res://tiles/base_tile/wall.gd" id="3_tmpem"]
|
||||
[ext_resource type="Script" uid="uid://jqjcr7dxjnbt" path="res://tiles/base_tile/base_tile.gd" id="1_yoisu"]
|
||||
[ext_resource type="PlaneMesh" uid="uid://bis4hdushjnjm" path="res://tiles/base_tile/base_floor.tres" id="2_wxg2y"]
|
||||
[ext_resource type="Script" uid="uid://df68d87131dv7" path="res://tiles/base_tile/base_wall.gd" id="3_enx1c"]
|
||||
|
||||
[node name="Tile" type="Node3D"]
|
||||
script = ExtResource("1_v7x5k")
|
||||
script = ExtResource("1_yoisu")
|
||||
|
||||
[node name="Floor" type="Node3D" parent="."]
|
||||
|
||||
[node name="FloorMesh" type="MeshInstance3D" parent="Floor"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5)
|
||||
mesh = ExtResource("2_ipr02")
|
||||
mesh = ExtResource("2_wxg2y")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="Walls" type="Node3D" parent="."]
|
||||
script = ExtResource("3_tmpem")
|
||||
script = ExtResource("3_enx1c")
|
||||
|
||||
[node name="Label3D" type="Label3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.0668138, 0.997765, 0, -0.997765, 0.0668138, 0.341829, 0.0223614, 0.130147)
|
||||
Loading…
Reference in New Issue
Block a user