Added terrain and robot prototypes
This commit is contained in:
70
nodes/camera/controllable_camera.gd
Normal file
70
nodes/camera/controllable_camera.gd
Normal file
@@ -0,0 +1,70 @@
|
||||
extends Camera3D
|
||||
|
||||
@export var base_move_speed := 5.0
|
||||
@export var min_move_speed := 1.0
|
||||
@export var max_move_speed := 20.0
|
||||
@export var rotation_speed := 0.002
|
||||
|
||||
var input_delay_over := false
|
||||
var current_move_speed := base_move_speed
|
||||
var mouse_delta := Vector2.ZERO
|
||||
var mouse_pos := Vector2.ZERO
|
||||
|
||||
func _process(delta):
|
||||
if Input.is_action_just_pressed("camera_control"):
|
||||
mouse_pos = get_viewport().get_mouse_position()
|
||||
input_delay_over = false
|
||||
get_tree().create_timer(0.15).timeout.connect(
|
||||
func():
|
||||
if Input.is_action_pressed("camera_control"):
|
||||
input_delay_over = true
|
||||
)
|
||||
if Input.is_action_pressed("camera_control") and input_delay_over:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
handle_movement(delta)
|
||||
handle_rotation()
|
||||
else:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
if Input.is_action_just_released("camera_control") and input_delay_over:
|
||||
Input.warp_mouse(mouse_pos)
|
||||
|
||||
func _unhandled_input(event):
|
||||
if event is InputEventMouseButton and event.is_pressed():
|
||||
handle_scroll_wheel(event)
|
||||
if event is InputEventMouseMotion:
|
||||
mouse_delta = event.relative
|
||||
|
||||
func handle_movement(delta: float) -> void:
|
||||
var input_dir = Vector3.ZERO
|
||||
if Input.is_key_pressed(KEY_W):
|
||||
input_dir.z -= 1
|
||||
if Input.is_key_pressed(KEY_S):
|
||||
input_dir.z += 1
|
||||
if Input.is_key_pressed(KEY_A):
|
||||
input_dir.x -= 1
|
||||
if Input.is_key_pressed(KEY_D):
|
||||
input_dir.x += 1
|
||||
if Input.is_key_pressed(KEY_E):
|
||||
input_dir.y += 1
|
||||
if Input.is_key_pressed(KEY_Q):
|
||||
input_dir.y -= 1
|
||||
|
||||
if input_dir.length() > 0:
|
||||
input_dir = input_dir.normalized()
|
||||
translate(input_dir * current_move_speed * delta)
|
||||
|
||||
func handle_rotation() -> void:
|
||||
var current_rotation_x = rotation.x - mouse_delta.y * rotation_speed
|
||||
current_rotation_x = clamp(current_rotation_x, -1.5, 1.5)
|
||||
var current_rotation_y = rotation.y - mouse_delta.x * rotation_speed
|
||||
rotation = Vector3(current_rotation_x, current_rotation_y, 0)
|
||||
mouse_delta = Vector2.ZERO
|
||||
|
||||
func handle_scroll_wheel(event: InputEventMouseButton ) -> void:
|
||||
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||
adjust_move_speed(1.0)
|
||||
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
||||
adjust_move_speed(-1.0)
|
||||
|
||||
func adjust_move_speed(delta: float) -> void:
|
||||
current_move_speed = clamp(current_move_speed + delta, min_move_speed, max_move_speed)
|
||||
Reference in New Issue
Block a user