small racing game im working on
allow block distance from camera to change
| -rw-r--r-- | ui/editor/block_dragdrop_preview.gd | 6 | ||||
| -rw-r--r-- | ui/editor/hatch.gd | 23 | ||||
| -rw-r--r-- | ui/editor/items.gd | 2 | ||||
| -rw-r--r-- | ui/editor/mousecast.gd | 2 | ||||
| -rw-r--r-- | ui/editor/track_editor.tscn | 18 |
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 |