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)
]
}
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]

View File

@ -8,19 +8,33 @@ extends Camera2D
@export var min_position: Vector2 = Vector2(-1000, -1000)
@export var max_position: Vector2 = Vector2(4000, 4000)
var target_position: Vector2
var velocity: Vector2 = Vector2.ZERO
#
var drag_active: bool = false
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():
target_position = position
func go_to_zooming(position: Vector2, zoom: float) -> void:
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):
if event is InputEventMouseButton:
if force_zoom == DISABLE_FORCE:
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
zoom = zoom * 1.1
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
@ -39,6 +53,19 @@ func _process(delta):
drag_start = drag_end
position -= drag_offset / zoom
if force_target_position != DISABLE_FORCE:
# 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")
@ -47,6 +74,11 @@ func _process(delta):
elif is_zoom_out:
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 screen_size: Vector2 = get_viewport().get_visible_rect().size
var acceleration: Vector2 = Vector2.ZERO
@ -80,7 +112,7 @@ func _process(delta):
velocity = velocity.normalized() * max_speed
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.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 player: PlayerManager = $PlayerManager
@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()