small racing game im working on
allow block distance from camera to change
bendn 2023-04-25
parent 5910eea · commit dbf724e
-rw-r--r--ui/editor/block_dragdrop_preview.gd6
-rw-r--r--ui/editor/hatch.gd23
-rw-r--r--ui/editor/items.gd2
-rw-r--r--ui/editor/mousecast.gd2
-rw-r--r--ui/editor/track_editor.tscn18
5 files changed, 47 insertions, 4 deletions
diff --git a/ui/editor/block_dragdrop_preview.gd b/ui/editor/block_dragdrop_preview.gd
index 05a21f2..b5329e5 100644
--- a/ui/editor/block_dragdrop_preview.gd
+++ b/ui/editor/block_dragdrop_preview.gd
@@ -1,6 +1,7 @@
extends Control
class_name DragDropPreview
+var depth: float
var blocks: Array[Block] = []
var objects: Array[Block]
var offsets: PackedVector3Array = []
@@ -64,7 +65,7 @@ func viewport_event(e: InputEvent) -> void:
position_blocks(e.position)
func position_blocks(mp: Vector2):
- var at_position := cam.project_position(mp, 50)
+ var at_position := cam.project_position(mp, depth)
for i in len(blocks):
blocks[i].global_position = (
(offsets[i] + at_position)
@@ -76,3 +77,6 @@ func exit_viewport() -> void:
%panel.show()
for block in blocks:
block.hide()
+
+func depth_changed(new: float):
+ depth = new
diff --git a/ui/editor/hatch.gd b/ui/editor/hatch.gd
index 28bafeb..f52789d 100644
--- a/ui/editor/hatch.gd
+++ b/ui/editor/hatch.gd
@@ -4,6 +4,17 @@ extends SubViewportContainer
signal created(object: TrackObject)
signal remove_tobj(tobj: TrackObject)
+signal depth_changed(depth: float)
+
+@export var shift_scrollup: Shortcut
+@export var shift_scrolldown: Shortcut
+
+
+var input_ms: int = 0
+var depth: float = 50.0:
+ set(d):
+ depth = d
+ depth_changed.emit(d)
func _can_drop_data(_at_position: Vector2, data) -> bool:
return (
@@ -35,7 +46,7 @@ func _drop_data(at_position: Vector2, data) -> void:
for i in len(objs):
var obj := objs[i]
var node: Block = obj.create(true)
- var projected: Vector3 = %cam.project_position(at_position, 50)
+ var projected: Vector3 = %cam.project_position(at_position, depth)
var pos := (projected + offsets[i] if not offsets_unset else projected).snapped(Globals.SNAP)
obj.set_live(node)
history.add_do_method(add_obj.bind(obj, pos))
@@ -52,3 +63,13 @@ func add_obj(o: TrackObject, pos = null):
func remove_obj(o: TrackObject):
remove_tobj.emit(o)
%port.remove_child(o.live_node)
+
+func _gui_input(event: InputEvent) -> void:
+ var change := func(i: float):
+ # debounce
+ if Time.get_ticks_msec() - input_ms > 1:
+ depth = max(25, depth + i)
+ input_ms = Time.get_ticks_msec()
+ get_viewport().set_input_as_handled()
+ if shift_scrolldown.matches_event(event): change.call(-Globals.SNAP.y)
+ elif shift_scrollup.matches_event(event): change.call(Globals.SNAP.y)
diff --git a/ui/editor/items.gd b/ui/editor/items.gd
index bc42636..b16a36e 100644
--- a/ui/editor/items.gd
+++ b/ui/editor/items.gd
@@ -100,6 +100,8 @@ func make_drag_preview(textures: Array[Texture2D]) -> Control:
%view.gui_input.connect(preview.viewport_event)
%view.mouse_entered.connect(preview.over_viewport)
%view.mouse_exited.connect(preview.exit_viewport)
+ %view.depth_changed.connect(preview.depth_changed)
+ preview.depth = %view.depth
if Rect2(Vector2.ZERO, %port.size).has_point(%port.get_mouse_position()):
get_tree().physics_frame.connect(func():
preview.over_viewport()
diff --git a/ui/editor/mousecast.gd b/ui/editor/mousecast.gd
index a1faed6..90bd098 100644
--- a/ui/editor/mousecast.gd
+++ b/ui/editor/mousecast.gd
@@ -38,7 +38,7 @@ func _physics_process(_delta: float) -> void:
start = null
drag_area.hide()
drag_area.size = Vector2.ZERO
- if r.size.length_squared() < 1000:
+ if r.size.length() < depth:
position_to(r.get_center())
force_raycast_update()
if is_colliding() and get_collider() != null:
diff --git a/ui/editor/track_editor.tscn b/ui/editor/track_editor.tscn
index 115501f..be566d2 100644
--- a/ui/editor/track_editor.tscn
+++ b/ui/editor/track_editor.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=62 format=3 uid="uid://0x720q7tnsj0"]
+[gd_scene load_steps=66 format=3 uid="uid://0x720q7tnsj0"]
[ext_resource type="Script" path="res://ui/editor/tree.gd" id="1_65spq"]
[ext_resource type="Theme" uid="uid://d3ywcokn5ddy8" path="res://ui/theme.tres" id="1_cc7dd"]
@@ -161,6 +161,20 @@ corner_radius_bottom_left = 15
corner_detail = 12
anti_aliasing_size = 0.397
+[sub_resource type="InputEventMouseButton" id="InputEventMouseButton_sfut2"]
+shift_pressed = true
+button_index = 4
+
+[sub_resource type="Shortcut" id="Shortcut_m8lke"]
+events = [SubResource("InputEventMouseButton_sfut2")]
+
+[sub_resource type="InputEventMouseButton" id="InputEventMouseButton_7fxl4"]
+shift_pressed = true
+button_index = 5
+
+[sub_resource type="Shortcut" id="Shortcut_nokwa"]
+events = [SubResource("InputEventMouseButton_7fxl4")]
+
[sub_resource type="ShaderMaterial" id="ShaderMaterial_y3yf4"]
shader = ExtResource("22_sij02")
shader_parameter/bg_color = Color(0, 0, 0, 0.1)
@@ -483,6 +497,8 @@ custom_minimum_size = Vector2(250, 250)
layout_mode = 2
stretch = true
script = ExtResource("17_ugqw3")
+shift_scrollup = SubResource("Shortcut_m8lke")
+shift_scrolldown = SubResource("Shortcut_nokwa")
[node name="port" type="SubViewport" parent="split/split2/middle dock/viewport/view"]
unique_name_in_owner = true