40 lines
1.6 KiB
GDScript
40 lines
1.6 KiB
GDScript
extends Sprite2D
|
|
|
|
# Określa minimalny ZOOM kamery (największe PRZYBLIŻENIE),
|
|
# przy którym gwiazda osiągnie MAKSYMALNY rozmiar ekranowy.
|
|
@export var MAX_ZOOM_IN_LIMIT: float = 0.5
|
|
|
|
# NOWA ZMIENNA: Określa maksymalny ZOOM kamery (największe ODDALENIE),
|
|
# przy którym gwiazda osiągnie MINIMALNY rozmiar ekranowy.
|
|
# Np. jeśli ustawisz na 5.0, przy zoomie 5.0x gwiazda osiągnie swój
|
|
# najmniejszy dopuszczalny rozmiar na ekranie i przestanie się zmniejszać.
|
|
@export var MIN_ZOOM_OUT_LIMIT: float = 1.0
|
|
|
|
var initial_scale: Vector2
|
|
|
|
func _ready():
|
|
initial_scale = scale
|
|
|
|
func _process(delta):
|
|
var camera: Camera2D = get_viewport().get_camera_2d()
|
|
|
|
if is_instance_valid(camera):
|
|
var cam_zoom: Vector2 = camera.zoom
|
|
|
|
# 1. Obliczamy efektywny zoom kamery, który będziemy używać w obliczeniach.
|
|
# Używamy MIN i MAX, aby ograniczyć wartość zoomu:
|
|
# - Nie mniejszy niż MAX_ZOOM_IN_LIMIT (ograniczenie "rosnące" gwiazdy).
|
|
# - Nie większy niż MIN_ZOOM_OUT_LIMIT (ograniczenie "malejące" gwiazdy).
|
|
|
|
var effective_zoom_x = clampf(cam_zoom.x, MAX_ZOOM_IN_LIMIT, MIN_ZOOM_OUT_LIMIT)
|
|
var effective_zoom_y = clampf(cam_zoom.y, MAX_ZOOM_IN_LIMIT, MIN_ZOOM_OUT_LIMIT)
|
|
|
|
# 2. Obliczamy ostateczną skalę na podstawie OGRANICZONEGO zoomu.
|
|
# Im większa jest wartość effective_zoom, tym MNIEJSZA będzie skala.
|
|
# Wartość ta jest teraz zawsze w zakresie [1.0 / MAX_ZOOM_IN_LIMIT, 1.0 / MIN_ZOOM_OUT_LIMIT]
|
|
|
|
var final_scale_x = initial_scale.x / effective_zoom_x
|
|
var final_scale_y = initial_scale.y / effective_zoom_y
|
|
|
|
scale = Vector2(final_scale_x, final_scale_y)
|