conquista-mort/scripts/player.gd

43 lines
1.3 KiB
GDScript

extends Node3D
var center = Vector3.ZERO
var screen_size
@export var LIMIT_ZOOM = [1.0, 4.0]
func _ready() -> void:
$Camera3D.position.y = 2.0
screen_size = get_viewport().get_visible_rect().size
func _physics_process(delta: float) -> void:
camera_player_movement()
camera_player_zoom()
func camera_player_movement():
var mouse_pos = get_viewport().get_mouse_position()
# Récupération de la position de la souris par rapport aux mondes
# En tirant un raycast
var camera = get_viewport().get_camera_3d()
var from = camera.project_ray_origin(mouse_pos)
var dir = camera.project_ray_normal(mouse_pos)
var mouse_pos_world = Plane(Vector3.UP, 0).intersects_ray(from, dir)
var dragging = Input.is_action_pressed("dragging")
if (dragging && center == Vector3.ZERO):
center = mouse_pos_world
elif (dragging):
var distance_center_mouse = center - mouse_pos_world
$Camera3D.position.x += distance_center_mouse.x
$Camera3D.position.z += distance_center_mouse.z
elif (not dragging):
center = Vector3.ZERO
func camera_player_zoom():
if (Input.is_action_just_released("zoom-in")):
$Camera3D.position.y -= 0.1
elif (Input.is_action_just_released("zoom-out")):
$Camera3D.position.y += 0.1
# Mettre une limite au zomm de la caméra
$Camera3D.position.y = clamp($Camera3D.position.y, LIMIT_ZOOM[0], LIMIT_ZOOM[1])