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)