From 2534a72265d457495834fa323ef9c2d8abbb858e Mon Sep 17 00:00:00 2001 From: effie Date: Tue, 1 Jul 2025 16:55:26 +1000 Subject: [PATCH] Initial room creation and pathfinding --- places/base_place/{place.gd => base_place.gd} | 53 +++++++++++-------- .../{place.gd.uid => base_place.gd.uid} | 0 places/base_place/base_place.tscn | 2 +- places/base_place/base_room.gd | 32 +++++++++++ places/base_place/base_room.gd.uid | 1 + places/base_place/base_room.tscn | 12 +++++ tiles/base_tile/{tile.gd => base_tile.gd} | 6 +-- .../{tile.gd.uid => base_tile.gd.uid} | 0 tiles/base_tile/{tile.tscn => base_tile.tscn} | 12 ++--- tiles/base_tile/{wall.gd => base_wall.gd} | 0 .../{wall.gd.uid => base_wall.gd.uid} | 0 11 files changed, 87 insertions(+), 31 deletions(-) rename places/base_place/{place.gd => base_place.gd} (80%) rename places/base_place/{place.gd.uid => base_place.gd.uid} (100%) create mode 100644 places/base_place/base_room.gd create mode 100644 places/base_place/base_room.gd.uid create mode 100644 places/base_place/base_room.tscn rename tiles/base_tile/{tile.gd => base_tile.gd} (97%) rename tiles/base_tile/{tile.gd.uid => base_tile.gd.uid} (100%) rename tiles/base_tile/{tile.tscn => base_tile.tscn} (74%) rename tiles/base_tile/{wall.gd => base_wall.gd} (100%) rename tiles/base_tile/{wall.gd.uid => base_wall.gd.uid} (100%) diff --git a/places/base_place/place.gd b/places/base_place/base_place.gd similarity index 80% rename from places/base_place/place.gd rename to places/base_place/base_place.gd index 1b84edf..4bd6990 100644 --- a/places/base_place/place.gd +++ b/places/base_place/base_place.gd @@ -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 diff --git a/places/base_place/place.gd.uid b/places/base_place/base_place.gd.uid similarity index 100% rename from places/base_place/place.gd.uid rename to places/base_place/base_place.gd.uid diff --git a/places/base_place/base_place.tscn b/places/base_place/base_place.tscn index 8d55512..f4ec465 100644 --- a/places/base_place/base_place.tscn +++ b/places/base_place/base_place.tscn @@ -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") diff --git a/places/base_place/base_room.gd b/places/base_place/base_room.gd new file mode 100644 index 0000000..a372836 --- /dev/null +++ b/places/base_place/base_room.gd @@ -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) diff --git a/places/base_place/base_room.gd.uid b/places/base_place/base_room.gd.uid new file mode 100644 index 0000000..672b610 --- /dev/null +++ b/places/base_place/base_room.gd.uid @@ -0,0 +1 @@ +uid://c2neixe7kpvma diff --git a/places/base_place/base_room.tscn b/places/base_place/base_room.tscn new file mode 100644 index 0000000..069fc00 --- /dev/null +++ b/places/base_place/base_room.tscn @@ -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") diff --git a/tiles/base_tile/tile.gd b/tiles/base_tile/base_tile.gd similarity index 97% rename from tiles/base_tile/tile.gd rename to tiles/base_tile/base_tile.gd index 503d85d..e14b2f9 100644 --- a/tiles/base_tile/tile.gd +++ b/tiles/base_tile/base_tile.gd @@ -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 diff --git a/tiles/base_tile/tile.gd.uid b/tiles/base_tile/base_tile.gd.uid similarity index 100% rename from tiles/base_tile/tile.gd.uid rename to tiles/base_tile/base_tile.gd.uid diff --git a/tiles/base_tile/tile.tscn b/tiles/base_tile/base_tile.tscn similarity index 74% rename from tiles/base_tile/tile.tscn rename to tiles/base_tile/base_tile.tscn index e558085..f8fc0d3 100644 --- a/tiles/base_tile/tile.tscn +++ b/tiles/base_tile/base_tile.tscn @@ -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) diff --git a/tiles/base_tile/wall.gd b/tiles/base_tile/base_wall.gd similarity index 100% rename from tiles/base_tile/wall.gd rename to tiles/base_tile/base_wall.gd diff --git a/tiles/base_tile/wall.gd.uid b/tiles/base_tile/base_wall.gd.uid similarity index 100% rename from tiles/base_tile/wall.gd.uid rename to tiles/base_tile/base_wall.gd.uid