Added Dart Physics
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
extends Camera3D
|
||||
|
||||
const RAY_LENGTH = 1000
|
||||
|
||||
func ray_cast():
|
||||
var space_state = get_world_3d().direct_space_state
|
||||
var cam = $"."
|
||||
var mousepos = get_viewport().get_mouse_position()
|
||||
var origin = cam.project_ray_origin(mousepos)
|
||||
var end = origin + cam.project_ray_normal(mousepos) * RAY_LENGTH
|
||||
var query = PhysicsRayQueryParameters3D.create(origin,end)
|
||||
query.collide_with_areas = true
|
||||
var result = space_state.intersect_ray(query)
|
||||
result = result.get("collider")
|
||||
return result
|
||||
@@ -0,0 +1 @@
|
||||
uid://ckbdoamrm313u
|
||||
@@ -0,0 +1,50 @@
|
||||
extends Node3D
|
||||
|
||||
var draggingCollider
|
||||
var mousePosition
|
||||
var doDrag = false
|
||||
|
||||
func _input(event):
|
||||
var intersect
|
||||
|
||||
if event is InputEventMouse:
|
||||
intersect = get_mouse_intersect(event.position)
|
||||
if intersect: mousePosition = intersect.position
|
||||
#snap on collider
|
||||
#if intersect: mousePosition = intersect.collider.global_position
|
||||
|
||||
if event is InputEventMouseButton:
|
||||
var leftButtonPressed = event.button_index == MOUSE_BUTTON_LEFT && event.pressed
|
||||
var leftButtonReleased = event.button_index == MOUSE_BUTTON_LEFT && !event.pressed
|
||||
|
||||
if leftButtonReleased:
|
||||
doDrag = false
|
||||
drag_and_drop(intersect)
|
||||
elif leftButtonPressed:
|
||||
doDrag = true
|
||||
drag_and_drop(intersect)
|
||||
|
||||
|
||||
func _process(delta):
|
||||
if draggingCollider:
|
||||
draggingCollider.global_position = mousePosition
|
||||
|
||||
func drag_and_drop(intersect):
|
||||
var canMove = intersect.collider in get_tree().get_nodes_in_group("Dart")
|
||||
if !draggingCollider && doDrag && canMove:
|
||||
draggingCollider = intersect.collider
|
||||
elif draggingCollider:
|
||||
draggingCollider = null
|
||||
|
||||
func get_mouse_intersect(mousePosition):
|
||||
var currentCamera = get_viewport().get_camera_3d()
|
||||
var params = PhysicsRayQueryParameters3D.new()
|
||||
|
||||
params.from = currentCamera.project_ray_origin(mousePosition)
|
||||
params.to = currentCamera.project_position(mousePosition, 1000)
|
||||
if draggingCollider: params.exclude = [draggingCollider]
|
||||
|
||||
var worldspace = get_world_3d().direct_space_state
|
||||
var result = worldspace.intersect_ray(params)
|
||||
|
||||
return result
|
||||
@@ -0,0 +1 @@
|
||||
uid://sueo33rxr07e
|
||||
@@ -0,0 +1,16 @@
|
||||
extends MeshInstance3D
|
||||
|
||||
@onready var camera = get_node("Camera3D")
|
||||
@onready var area = get_node("../../../Dart")
|
||||
|
||||
func _input(event):
|
||||
if Input.is_action_just_pressed("leftClick"):
|
||||
print(camera.ray_cast().position)
|
||||
|
||||
if camera.ray_cast() != null and Input.is_action_pressed("midleclic"):
|
||||
var mousepos = get_viewport().get_mouse_position()
|
||||
var origin = camera.projectray_origin(mousepos)
|
||||
var end = camera.project_ray_normal(mousepos)
|
||||
var depth = origin.distence_to(area.global_position)
|
||||
var final_position = origin + end * depth
|
||||
area.global_position=final_position
|
||||
@@ -0,0 +1 @@
|
||||
uid://cc5yy1yc3j2uu
|
||||
Reference in New Issue
Block a user