46 lines
1.5 KiB
GDScript
46 lines
1.5 KiB
GDScript
extends Camera3D
|
|
|
|
@export var rayLength: float
|
|
@export var camera_speed: float
|
|
@export var ownRigidBody: RigidBody3D
|
|
@export var endZoom: Node3D
|
|
var debugLabel
|
|
var global_delta
|
|
var default_pos
|
|
|
|
func _ready() -> void:
|
|
default_pos = self.position
|
|
debugLabel = $DebugLabel1
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
global_delta = delta
|
|
look_at(ownRigidBody.position)
|
|
self.position.y = -0.1 * pow(self.position.z,2) + 40
|
|
if(Input.is_action_just_released("move_camera_enable")):
|
|
ownRigidBody.angular_velocity = Vector3.ZERO
|
|
if(Input.is_action_pressed("move_camera_enable")):
|
|
var mouseV = Input.get_last_mouse_velocity()
|
|
ownRigidBody.angular_velocity.y = -mouseV.x * delta / camera_speed
|
|
self.position.z += mouseV.y * delta / 10.0
|
|
#ownRigidBody.angular_velocity.x = mouseV.y * delta / camera_speed
|
|
#print(self.position.dot(ownRigidBody.position))
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if(event.is_action("camera_zoom")):
|
|
if (event.as_text() == "Mouse Wheel Up"):
|
|
self.position = self.position.lerp(Vector3.ZERO,global_delta * 5.0)
|
|
else:
|
|
self.position = self.position.lerp(endZoom.position,global_delta * 5.0)
|
|
|
|
|
|
|
|
func getGlobalRayTargetObject():
|
|
var space = get_world_3d().direct_space_state
|
|
var mousePos = get_viewport().get_mouse_position()
|
|
var from = self.project_ray_origin(mousePos)
|
|
var to = from + self.project_ray_normal(mousePos) * rayLength
|
|
var query = PhysicsRayQueryParameters3D.create(from,to)
|
|
var collison = space.intersect_ray(query)
|
|
return collison
|