TowerDefense/Levels/Scripts/Camera.gd

53 lines
1.3 KiB
GDScript3
Raw Normal View History

2025-09-06 00:05:22 +02:00
extends Camera3D
2025-09-07 10:52:05 +02:00
const SCREEN_MARGIN : int = 15
const SCREEN_MOVEMENT_SPEED : float = .08
2025-09-06 00:05:22 +02:00
2025-09-06 04:01:33 +02:00
@export var curve : Curve
2025-09-06 22:08:29 +02:00
var shouldMove : bool = true
2025-09-06 04:01:33 +02:00
func _ready() -> void:
curve.bake()
2025-09-07 19:48:58 +02:00
rotation.x = deg_to_rad(curve.min_value)
position.y = curve.max_domain
2025-09-06 04:01:33 +02:00
2025-09-06 00:05:22 +02:00
func _process(_delta: float) -> void:
2025-09-06 22:08:29 +02:00
if not shouldMove:
return
2025-09-06 00:05:22 +02:00
var windowSize : Vector2i = get_window().size
var mousePosition : Vector2 = get_viewport().get_mouse_position()
if mousePosition.x < SCREEN_MARGIN:
position.x += -SCREEN_MOVEMENT_SPEED
2025-09-06 00:05:22 +02:00
if mousePosition.y < SCREEN_MARGIN:
position.z += -SCREEN_MOVEMENT_SPEED
2025-09-06 04:01:33 +02:00
if mousePosition.x > windowSize.x - SCREEN_MARGIN:
position.x += SCREEN_MOVEMENT_SPEED
2025-09-06 04:01:33 +02:00
if mousePosition.y > windowSize.y - SCREEN_MARGIN:
position.z += SCREEN_MOVEMENT_SPEED
2025-09-06 04:01:33 +02:00
2025-09-06 22:08:29 +02:00
func _notification(what: int) -> void:
match what:
NOTIFICATION_WM_MOUSE_ENTER: shouldMove = true
NOTIFICATION_WM_MOUSE_EXIT: shouldMove = false
2025-09-06 04:01:33 +02:00
func _input(event: InputEvent) -> void:
if not event is InputEventMouseButton:
return
var newPosition : float = position.y
2025-09-06 22:08:29 +02:00
match event.button_index:
MOUSE_BUTTON_WHEEL_UP: newPosition -= .2
MOUSE_BUTTON_WHEEL_DOWN: newPosition += .2
newPosition = clampf(newPosition, curve.min_domain, curve.max_domain)
2025-09-06 04:01:33 +02:00
rotation.x = deg_to_rad(curve.sample(newPosition))
position.y = newPosition