50 lines
1.6 KiB
GDScript
50 lines
1.6 KiB
GDScript
extends Node
|
|
|
|
@export_group("Gestione Palette")
|
|
@export var materiale_da_cambiare: ShaderMaterial # Trascina qui il tuo materiale dall'Inspector
|
|
@export var tempo_transizione: float = 2.0 # Quanto dura la sfumatura (in secondi)
|
|
@export var valore_riga_2: float = 0.2 # Il valore target della seconda riga
|
|
|
|
var palette_spostata: bool = false
|
|
var tween_palette: Tween
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
# Usiamo il tasto P (Palette) per innescare l'effetto
|
|
if event is InputEventKey and event.pressed and not event.echo:
|
|
if event.keycode == KEY_P:
|
|
_cambia_palette_fluida()
|
|
|
|
func _cambia_palette_fluida() -> void:
|
|
if materiale_da_cambiare == null:
|
|
print("ERRORE: Non hai assegnato il materiale nell'Inspector!")
|
|
return
|
|
|
|
# Invertiamo lo stato
|
|
palette_spostata = !palette_spostata
|
|
|
|
# Decidiamo dove deve arrivare lo slider
|
|
var target_shift = valore_riga_2 if palette_spostata else 0.0
|
|
|
|
# Se c'è già un'animazione in corso (es. hai premuto due volte velocemente), la fermiamo
|
|
if tween_palette and tween_palette.is_valid():
|
|
tween_palette.kill()
|
|
|
|
# Creiamo la nuova animazione fluida
|
|
tween_palette = create_tween()
|
|
|
|
# Usiamo SINE e IN_OUT per renderla morbidissima in partenza e in arrivo
|
|
tween_palette.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
|
|
|
|
# Anima il parametro dello shader
|
|
tween_palette.tween_property(
|
|
materiale_da_cambiare,
|
|
"shader_parameter/palette_shift_y", # Sintassi magica per parlare con lo shader
|
|
target_shift,
|
|
tempo_transizione
|
|
)
|
|
|
|
if palette_spostata:
|
|
print("Transizione verso la Palette 2 iniziata...")
|
|
else:
|
|
print("Ritorno alla Palette 1 originale...")
|