fix: interactable scaling
This commit is contained in:
parent
16b0fbb533
commit
8707ef9ecf
|
|
@ -7,9 +7,11 @@ var interaction_ui : Control = null
|
||||||
@onready var frame: Sprite3D = $Frame
|
@onready var frame: Sprite3D = $Frame
|
||||||
@onready var canvas_layer: CanvasLayer = $CanvasLayer
|
@onready var canvas_layer: CanvasLayer = $CanvasLayer
|
||||||
|
|
||||||
|
@onready var note: Node3D = $View/Sprite3D
|
||||||
@onready var caption : Label3D = %Caption
|
@onready var caption : Label3D = %Caption
|
||||||
@onready var prompt : Label3D = %Prompt
|
@onready var prompt : Label3D = %Prompt
|
||||||
|
|
||||||
|
|
||||||
@export var billboard : bool = true
|
@export var billboard : bool = true
|
||||||
|
|
||||||
var active : bool = true
|
var active : bool = true
|
||||||
|
|
@ -24,6 +26,7 @@ var collected : bool = false:
|
||||||
var tween: Tween = null
|
var tween: Tween = null
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
assert(note and frame and canvas_layer, "Interactable must have views and frame attached")
|
||||||
view.scale = Vector3.ZERO
|
view.scale = Vector3.ZERO
|
||||||
frame.modulate.a = 0
|
frame.modulate.a = 0
|
||||||
if interaction:
|
if interaction:
|
||||||
|
|
@ -44,21 +47,29 @@ func _player_active(value: bool) -> void:
|
||||||
|
|
||||||
func expand() -> void:
|
func expand() -> void:
|
||||||
shown = true
|
shown = true
|
||||||
|
|
||||||
|
if tween and tween.is_valid():
|
||||||
|
tween.kill()
|
||||||
|
else:
|
||||||
view.scale = Vector3.ZERO
|
view.scale = Vector3.ZERO
|
||||||
|
note.rotation.z = -PI*0.5 # Godot angle wrapping is ... something
|
||||||
frame.modulate = Color.TRANSPARENT
|
frame.modulate = Color.TRANSPARENT
|
||||||
view.rotation.z = -PI*0.5 # Godot angle wrapping is ... something
|
frame.scale = Vector3(1.5, 1.5, 1.5)
|
||||||
if tween: tween.kill()
|
|
||||||
tween = create_tween().set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
|
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, "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(note, "rotation:z", 0, 0.8).set_delay(0.5)
|
||||||
tween.parallel().tween_property(frame, "modulate:a", 1.0, 2.0)
|
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:
|
func collapse() -> void:
|
||||||
shown = false
|
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 = 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(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:
|
func _process(_delta: float) -> void:
|
||||||
_process_billboard()
|
_process_billboard()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue