You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1001 B
37 lines
1001 B
extends Camera3D
|
|
|
|
const MOVE_MARGIN = 20
|
|
const MOVE_SPEED = 30
|
|
|
|
@export var min_zoom: float = 10
|
|
@export var max_zoom: float = 100
|
|
|
|
@export var zoom_sensibility: float = 1.4
|
|
|
|
func _process(delta):
|
|
var m_pos = get_viewport().get_mouse_position()
|
|
calc_move(m_pos, delta)
|
|
if Input.is_action_just_released("zoom_in"):
|
|
zoom(-1000)
|
|
if Input.is_action_just_released("zoom_out"):
|
|
zoom(1000)
|
|
|
|
|
|
func calc_move(m_pos, delta):
|
|
var v_size = get_viewport().size
|
|
var move_vec = Vector3()
|
|
if m_pos.x < MOVE_MARGIN:
|
|
move_vec.x -= 1
|
|
if m_pos.y < MOVE_MARGIN:
|
|
move_vec.z -= 1
|
|
if m_pos.x > v_size.x - MOVE_MARGIN:
|
|
move_vec.x += 1
|
|
if m_pos.y > v_size.y - MOVE_MARGIN:
|
|
move_vec.z += 1
|
|
move_vec = move_vec.rotated(Vector3(0, 1, 0), rotation_degrees.y)
|
|
global_translate(move_vec * delta * MOVE_SPEED)
|
|
|
|
func zoom(direction : float):
|
|
#Zooming using fov
|
|
var new_fov = fov + (sign(direction) * pow(abs(direction),zoom_sensibility)/100 * get_process_delta_time())
|
|
fov = clamp(new_fov,min_zoom,max_zoom)
|
|
|