Several camera adjustments
parent
ebe842edee
commit
0ba4cee5d4
|
@ -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]
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue