40 lines
1.2 KiB
GDScript
40 lines
1.2 KiB
GDScript
extends XROrigin3D
|
|
|
|
# Gleiches Enum zur Sicherheit
|
|
enum AgeState { BABY, CHILD, TEEN }
|
|
|
|
# Skalierungs-Faktoren (XROrigin Scale)
|
|
# < 1.0 macht dich klein (Welt wirkt riesig)
|
|
# 1.0 ist Normalgröße
|
|
var scale_baby = 0.3 # ca. 30% Größe (Baby)
|
|
var scale_child = 0.65 # ca. 65% Größe (Kind)
|
|
var scale_teen = 1.0 # 100% Größe (Teenager)
|
|
|
|
func _ready():
|
|
# Wir starten initial als Baby
|
|
apply_scale(scale_baby)
|
|
|
|
# Diese Funktion muss mit dem Signal der Uhr verbunden werden
|
|
func _on_watch_age_changed(new_age_state):
|
|
match new_age_state:
|
|
AgeState.BABY:
|
|
tween_scale(scale_baby)
|
|
AgeState.CHILD:
|
|
tween_scale(scale_child)
|
|
AgeState.TEEN:
|
|
tween_scale(scale_teen)
|
|
|
|
func tween_scale(target_scale_value: float):
|
|
# Wir nutzen Tween für einen sanften Übergang (vermeidet Übelkeit)
|
|
var tween = create_tween()
|
|
|
|
# Wir skalieren den gesamten XROrigin
|
|
# Vector3.ONE * target_scale ergibt (x, y, z) mit dem gleichen Wert
|
|
tween.tween_property(self, "scale", Vector3.ONE * target_scale_value, 0.5).set_trans(Tween.TRANS_SINE)
|
|
|
|
print("Skaliere Spieler zu: ", target_scale_value)
|
|
|
|
func apply_scale(val: float):
|
|
# Harte Skalierung ohne Animation (für den Start)
|
|
scale = Vector3.ONE * val
|