28 lines
859 B
GDScript
28 lines
859 B
GDScript
extends Camera3D
|
|
|
|
var held_dart: Dart = null
|
|
|
|
func _unhandled_input(event):
|
|
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
|
|
if event.pressed:
|
|
try_grab_dart(event.position)
|
|
else:
|
|
if held_dart:
|
|
held_dart.release_drag()
|
|
held_dart = null
|
|
elif event is InputEventMouseMotion and held_dart:
|
|
held_dart.update_drag(self, event.position)
|
|
|
|
func try_grab_dart(mouse_pos: Vector2):
|
|
var ray_origin = project_ray_origin(mouse_pos)
|
|
var ray_dir = project_ray_normal(mouse_pos)
|
|
var ray_end = ray_origin + ray_dir * 1000.0
|
|
|
|
var space_state = get_world_3d().direct_space_state
|
|
var query = PhysicsRayQueryParameters3D.create(ray_origin, ray_end)
|
|
var result = space_state.intersect_ray(query)
|
|
|
|
if result and result.collider is Dart:
|
|
held_dart = result.collider
|
|
held_dart.start_drag(self, mouse_pos, result.position)
|