Basic selector drag implemented

This commit is contained in:
effie 2025-06-26 15:49:42 +10:00
parent a7da10c17c
commit 04ea9c0be2
3 changed files with 76 additions and 41 deletions

View File

@ -43,6 +43,8 @@ func draw_tile_click(start_pos):
func init_tile_drag(float_build_start_pos, float_build_mouse_pos): func init_tile_drag(float_build_start_pos, float_build_mouse_pos):
var tile_drag_array = []
var build_start_pos: Vector3i = float_build_start_pos.snapped(Vector3i(1.0, 1.0, 1.0)) var build_start_pos: Vector3i = float_build_start_pos.snapped(Vector3i(1.0, 1.0, 1.0))
var build_mouse_pos: Vector3i = float_build_mouse_pos.snapped(Vector3i(1.0, 1.0, 1.0)) var build_mouse_pos: Vector3i = float_build_mouse_pos.snapped(Vector3i(1.0, 1.0, 1.0))
@ -56,47 +58,71 @@ func init_tile_drag(float_build_start_pos, float_build_mouse_pos):
tile_count_x_hist = tile_count_x tile_count_x_hist = tile_count_x
tile_count_z_hist = tile_count_z tile_count_z_hist = tile_count_z
draw_tile_drag(tile_count_x_diff, tile_count_z_diff, build_start_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 tile_drag_pos = build_start_pos + Vector3i(x, 0, z)
tile_drag_array.append(tile_drag_pos)
draw_tile_drag(tile_drag_array)
func draw_tile_drag(x_diff, z_diff, start_pos): func draw_tile_drag(array):
tile_drag_x_hist = x_diff + tile_drag_x_hist tile_drag_dict.clear()
tile_drag_z_hist = z_diff + tile_drag_z_hist
if x_diff: for i in self.get_children():
for z in range(min(0, tile_drag_z_hist), max(0, tile_drag_z_hist) + 1): i.queue_free()
for x in abs(x_diff):
var id = Vector3i(start_pos.x - tile_drag_x_hist, 0, start_pos.z - tile_drag_z_hist - z)
if tile_drag_dict.has(id): for i in array:
var tile = tile_drag_dict[id]
tile.queue_free()
tile_drag_dict.erase(id)
else:
var id = i
if not tile_drag_dict.has(id):
var tile = load_tile.instantiate() var tile = load_tile.instantiate()
tile.position = id
tile.position = i
tile_drag_dict[id] = tile tile_drag_dict[id] = tile
add_child(tile) add_child(tile)
if z_diff: #tile_drag_x_hist = x_diff + tile_drag_x_hist
for x in range(min(0, tile_drag_x_hist), max(0, tile_drag_x_hist) + 1): #tile_drag_z_hist = z_diff + tile_drag_z_hist
for z in abs(z_diff): #
var id = Vector3i(start_pos.x - tile_drag_x_hist - x, 0, start_pos.z - tile_drag_z_hist) #if x_diff:
#for z in range(min(0, tile_drag_z_hist), max(0, tile_drag_z_hist) + 1):
#for x in abs(x_diff):
#var id = Vector3i(start_pos.x - tile_drag_x_hist, 0, start_pos.z - z)
##var lastid = Vector3i(start_pos.x - tile_drag_x_hist - x_diff, 0, start_pos.z - z)
#if tile_drag_dict.has(id):
#var tile = tile_drag_dict[id]
#tile.queue_free()
#tile_drag_dict.erase(id)
#else:
#
#var tile = load_tile.instantiate()
#tile.position = id
#tile_drag_dict[id] = tile
#add_child(tile)
#
#if z_diff:
#for x in range(min(0, tile_drag_x_hist), max(0, tile_drag_x_hist) + 1):
#for z in abs(z_diff):
#var id = Vector3i(start_pos.x - x, 0, start_pos.z - tile_drag_z_hist)
#
#if tile_drag_dict.has(id):
#var tile = tile_drag_dict[id]
#tile.queue_free()
#tile_drag_dict.erase(id)
#else:
#var tile = load_tile.instantiate()
#tile.position = id
#tile_drag_dict[id] = tile
#add_child(tile)
if tile_drag_dict.has(id): #print(tile_drag_dict)
var tile = tile_drag_dict[id]
tile.queue_free()
tile_drag_dict.erase(id)
else:
var tile = load_tile.instantiate()
tile.position = id
tile_drag_dict[id] = tile
add_child(tile)
print(tile_drag_dict)
#if x_diff > 0: #if x_diff > 0:
#var tile = load_tile.instantiate() #var tile = load_tile.instantiate()
#tile.position = Vector3i(start_pos.x - tile_drag_x_hist, 0, tile_drag_z_hist - z) #tile.position = Vector3i(start_pos.x - tile_drag_x_hist, 0, tile_drag_z_hist - z)

View File

@ -6,3 +6,6 @@
script = ExtResource("1_2j6sh") script = ExtResource("1_2j6sh")
[node name="Grid" type="Node3D" parent="."] [node name="Grid" type="Node3D" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.345446, 0.938439, 0, -0.938439, 0.345446, 41.393, 18.7409, 34.4224)

View File

@ -1,11 +1,17 @@
[gd_scene load_steps=3 format=3 uid="uid://gs6yynwvvot2"] [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="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="PlaneMesh" uid="uid://bis4hdushjnjm" path="res://tiles/base_tile/base_floor.tres" id="2_ipr02"]
[sub_resource type="SphereMesh" id="SphereMesh_sbkyc"]
[node name="Tile" type="Node3D"] [node name="Tile" type="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5)
script = ExtResource("1_v7x5k") script = ExtResource("1_v7x5k")
[node name="FloorMesh" type="MeshInstance3D" parent="."] [node name="FloorMesh" type="MeshInstance3D" parent="."]
visible = false
mesh = ExtResource("2_ipr02") mesh = ExtResource("2_ipr02")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0)
mesh = SubResource("SphereMesh_sbkyc")