Files
project-thor/Scripts/camera_3d.gd
Nikolai Fesenko a0efc6b9b8 context menu added
player can find food and eat it
2025-08-20 16:45:03 +02:00

57 lines
1.9 KiB
GDScript

extends Camera3D
@export var rayLength: float
@export var camera_speed: float
@export var ownRigidBody: RigidBody3D
@export var endZoom: Node3D
@export var particlesSystem: GPUParticles3D
@export var worldEnvironmentSystem: WorldEnvironment
var debugLabel
var global_delta
var default_pos
var zoom_pos
func _ready() -> void:
zoom_pos = 40
default_pos = self.position
debugLabel = $DebugLabel1
particlesSystem.emitting = true
var environment = worldEnvironmentSystem.environment
environment.fog_enabled = true
func _process(delta: float) -> void:
debugLabel.text = "Mode: " + str(BuildManager.build_mode)
global_delta = delta
look_at(ownRigidBody.position)
self.position.y = -0.1 * pow(self.position.z,2) + zoom_pos # y axis controll for camera
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: # zoom control
if(event.is_action("camera_zoom") and !Global.is_context_menu_active):
if (event.as_text() == "Mouse Wheel Up"):
#self.position = self.position.lerp(Vector3.ZERO,global_delta * 5.0)
zoom_pos += global_delta * 45.0
else:
#self.position = self.position.lerp(endZoom.position,global_delta * 5.0)
zoom_pos -= global_delta * 45.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