Several camera adjustments

pull/1/head
Yan Wittmann 2025-01-04 12:32:22 +01:00
parent ebe842edee
commit 0ba4cee5d4
3 changed files with 73 additions and 15 deletions

View File

@ -56,6 +56,21 @@ camera_drag={
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":4,"position":Vector2(373, 18),"global_position":Vector2(382, 64),"factor":1.0,"button_index":3,"canceled":false,"pressed":true,"double_click":false,"script":null) "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":4,"position":Vector2(373, 18),"global_position":Vector2(382, 64),"factor":1.0,"button_index":3,"canceled":false,"pressed":true,"double_click":false,"script":null)
] ]
} }
key_1={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":49,"key_label":0,"unicode":49,"location":0,"echo":false,"script":null)
]
}
key_2={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":50,"key_label":0,"unicode":50,"location":0,"echo":false,"script":null)
]
}
key_9={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":57,"key_label":0,"unicode":57,"location":0,"echo":false,"script":null)
]
}
[rendering] [rendering]

View File

@ -8,23 +8,37 @@ extends Camera2D
@export var min_position: Vector2 = Vector2(-1000, -1000) @export var min_position: Vector2 = Vector2(-1000, -1000)
@export var max_position: Vector2 = Vector2(4000, 4000) @export var max_position: Vector2 = Vector2(4000, 4000)
var target_position: Vector2
var velocity: Vector2 = Vector2.ZERO var velocity: Vector2 = Vector2.ZERO
# #
var drag_active: bool = false var drag_active: bool = false
var drag_start: Vector2 var drag_start: Vector2
#
const DISABLE_FORCE: Vector2 = Vector2(-1, -1)
#
var force_target_position: Vector2 = DISABLE_FORCE
var force_zoom: Vector2 = DISABLE_FORCE
func _ready(): func go_to_zooming(position: Vector2, zoom: float) -> void:
target_position = position force_target_position = position
force_zoom = Vector2(zoom, zoom)
func go_to(position: Vector2) -> void:
force_target_position = position
func print_config() -> void:
print("camera.go_to_zooming(Vector2(", position.x, ", ", position.y, "), ", zoom, ")")
func _input(event): func _input(event):
if event is InputEventMouseButton: if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_WHEEL_UP: if force_zoom == DISABLE_FORCE:
zoom = zoom * 1.1 if event.button_index == MOUSE_BUTTON_WHEEL_UP:
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN: zoom = zoom * 1.1
zoom = zoom / 1.1 elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
zoom = zoom / 1.1
func _process(delta): func _process(delta):
@ -39,13 +53,31 @@ func _process(delta):
drag_start = drag_end drag_start = drag_end
position -= drag_offset / zoom position -= drag_offset / zoom
var is_zoom_in: bool = Input.is_action_pressed("camera_zoom_in") if force_target_position != DISABLE_FORCE:
var is_zoom_out: bool = Input.is_action_pressed("camera_zoom_out") # move towards the target position
var offset: Vector2 = force_target_position - position
position += offset * 0.1
if offset.length() < 1:
force_target_position = DISABLE_FORCE
if force_zoom != DISABLE_FORCE:
# move towards the target zoom
var offset: Vector2 = force_zoom - zoom
zoom += offset * 0.04
if offset.length() < 0.02:
force_zoom = DISABLE_FORCE
else:
var is_zoom_in: bool = Input.is_action_pressed("camera_zoom_in")
var is_zoom_out: bool = Input.is_action_pressed("camera_zoom_out")
if is_zoom_in: if is_zoom_in:
zoom = zoom * 1.1 zoom = zoom * 1.1
elif is_zoom_out: elif is_zoom_out:
zoom = zoom / 1.1 zoom = zoom / 1.1
if zoom.length() < 0.2:
zoom = Vector2(1, 1).normalized() * 0.2
elif zoom.length() > 10:
zoom = Vector2(1, 1).normalized() * 10
var mouse_pos: Vector2 = get_viewport().get_mouse_position() var mouse_pos: Vector2 = get_viewport().get_mouse_position()
var screen_size: Vector2 = get_viewport().get_visible_rect().size var screen_size: Vector2 = get_viewport().get_visible_rect().size
@ -79,8 +111,8 @@ func _process(delta):
if velocity.length() > max_speed: if velocity.length() > max_speed:
velocity = velocity.normalized() * max_speed velocity = velocity.normalized() * max_speed
var target_offset = velocity * delta var target_offset = velocity * delta
target_position = position + target_offset var target_position = position + target_offset
target_position.x = clamp(target_position.x, min_position.x, max_position.x) target_position.x = clamp(target_position.x, min_position.x, max_position.x)
target_position.y = clamp(target_position.y, min_position.y, max_position.y) target_position.y = clamp(target_position.y, min_position.y, max_position.y)

View File

@ -4,3 +4,14 @@ extends Node
@onready var world: World = $Tileset @onready var world: World = $Tileset
@onready var player: PlayerManager = $PlayerManager @onready var player: PlayerManager = $PlayerManager
@onready var camera: Camera2D = $Camera2D @onready var camera: Camera2D = $Camera2D
func _ready() -> void:
pass
func _process(delta: float) -> void:
if Input.is_action_just_pressed("key_1"):
camera.go_to_zooming(Vector2(-100, -50), 1.5)
if Input.is_action_just_pressed("key_2"):
camera.go_to_zooming(Vector2(200, 100), 0.4)
if Input.is_action_just_pressed("key_9"):
camera.print_config()