fix: interactable scaling

This commit is contained in:
tiger tiger tiger 2026-01-16 12:06:13 +01:00
parent 16b0fbb533
commit 8707ef9ecf
1 changed files with 19 additions and 8 deletions

View File

@ -7,9 +7,11 @@ var interaction_ui : Control = null
@onready var frame: Sprite3D = $Frame
@onready var canvas_layer: CanvasLayer = $CanvasLayer
@onready var note: Node3D = $View/Sprite3D
@onready var caption : Label3D = %Caption
@onready var prompt : Label3D = %Prompt
@export var billboard : bool = true
var active : bool = true
@ -24,6 +26,7 @@ var collected : bool = false:
var tween: Tween = null
func _ready() -> void:
assert(note and frame and canvas_layer, "Interactable must have views and frame attached")
view.scale = Vector3.ZERO
frame.modulate.a = 0
if interaction:
@ -44,21 +47,29 @@ func _player_active(value: bool) -> void:
func expand() -> void:
shown = true
if tween and tween.is_valid():
tween.kill()
else:
view.scale = Vector3.ZERO
note.rotation.z = -PI*0.5 # Godot angle wrapping is ... something
frame.modulate = Color.TRANSPARENT
view.rotation.z = -PI*0.5 # Godot angle wrapping is ... something
if tween: tween.kill()
frame.scale = Vector3(1.5, 1.5, 1.5)
tween = create_tween().set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
tween.parallel().tween_property(view, "scale", Vector3.ONE, 1.0).set_delay(0.5)
tween.parallel().tween_property(view, "rotation:z", 0, 0.8).set_delay(0.5)
tween.parallel().tween_property(frame, "modulate:a", 1.0, 2.0)
tween.parallel().tween_property(note, "rotation:z", 0, 0.8).set_delay(0.5)
tween.parallel().tween_property(frame, "modulate:a", 1.0, 2.0).set_trans(Tween.TRANS_QUAD)
tween.parallel().tween_property(frame, "scale", Vector3.ONE, 1.0).set_trans(Tween.TRANS_QUART)
func collapse() -> void:
shown = false
if tween: tween.kill()
if tween and tween.is_valid(): tween.kill()
tween = create_tween().set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_BACK)
tween.parallel().tween_property(view, "scale", Vector3.ZERO, 0.3)
tween.parallel().tween_property(frame, "modulate:a", 0, 0.6)
tween.parallel().tween_property(frame, "modulate:a", 0, 0.5).set_trans(Tween.TRANS_QUAD)
tween.parallel().tween_property(frame, "scale", Vector3.ONE * 2.0, 1.0).set_trans(Tween.TRANS_QUAD)
func _process(_delta: float) -> void:
_process_billboard()