121 lines
3.4 KiB
GDScript
121 lines
3.4 KiB
GDScript
extends TextureRect
|
|
|
|
var original_texture: Texture2D
|
|
var start_position: Vector2
|
|
var organ_name := "stomach"
|
|
var was_dropped := false
|
|
var start_camera_position: Vector2
|
|
var start_camera_zoom: Vector2
|
|
var click_locked := false
|
|
var hint_shown := false
|
|
|
|
func _ready() -> void:
|
|
original_texture = texture
|
|
start_position = global_position
|
|
mouse_filter = MOUSE_FILTER_STOP
|
|
$"../SnapSoundPlayer".finished.connect(_on_snap_finished)
|
|
|
|
func _gui_input(event: InputEvent) -> void:
|
|
if event is InputEventMouseButton and event.pressed:
|
|
var main = get_tree().root.get_node("Main")
|
|
if main.interaction_locked:
|
|
print("⛔️ Interaktion noch gesperrt!")
|
|
return
|
|
if click_locked:
|
|
return
|
|
|
|
if not hint_shown and not was_dropped:
|
|
_play_hint()
|
|
|
|
func _get_drag_data(_position: Vector2) -> Variant:
|
|
var main = get_tree().root.get_node("Main")
|
|
if main.interaction_locked or was_dropped:
|
|
return null
|
|
if not main.is_correct_organ(organ_name):
|
|
main.play_wrong_order_sound()
|
|
return
|
|
|
|
var preview := Control.new()
|
|
var preview_texture := TextureRect.new()
|
|
preview_texture.texture = original_texture
|
|
preview_texture.expand_mode = TextureRect.EXPAND_FIT_WIDTH_PROPORTIONAL
|
|
preview_texture.size = size
|
|
preview_texture.pivot_offset = size * 0.5
|
|
preview_texture.position = -preview_texture.pivot_offset
|
|
preview.add_child(preview_texture)
|
|
|
|
set_drag_preview(preview)
|
|
texture = null
|
|
|
|
return {
|
|
"organ": organ_name,
|
|
"node": self,
|
|
"texture": original_texture
|
|
}
|
|
|
|
func _notification(what: int) -> void:
|
|
if what == NOTIFICATION_DRAG_END and not get_viewport().gui_is_drag_successful():
|
|
_reset_drag()
|
|
|
|
func _reset_drag() -> void:
|
|
if was_dropped:
|
|
return
|
|
|
|
texture = original_texture
|
|
global_position = start_position
|
|
visible = true
|
|
print("🔁 Drag zurückgesetzt")
|
|
|
|
func start_zoom_and_animation() -> void:
|
|
var main = get_tree().root.get_node("Main")
|
|
if click_locked:
|
|
return
|
|
|
|
main.interaction_locked = true
|
|
var cam = get_tree().root.get_node("Main/Camera2D") as Camera2D
|
|
cam.make_current()
|
|
|
|
start_camera_position = cam.global_position
|
|
start_camera_zoom = cam.zoom
|
|
|
|
var target = global_position - Vector2(110, 250)
|
|
|
|
var sprite = $"../MagenAnimation"
|
|
sprite.visible = false
|
|
sprite.z_index = 100
|
|
|
|
var tween = create_tween()
|
|
click_locked = true
|
|
tween.tween_property(cam, "global_position", target, 1.0).set_ease(Tween.EASE_OUT)
|
|
tween.parallel().tween_property(cam, "zoom", Vector2(2.3, 2.3), 1.0).set_ease(Tween.EASE_OUT)
|
|
tween.tween_callback(Callable(self, "_play_gif"))
|
|
|
|
func _play_gif() -> void:
|
|
AudioManager.stop_all_audio_players()
|
|
$"../SnapSoundPlayer".play()
|
|
$"../MagenAnimation".visible = true
|
|
$"../MagenAnimation".play("default")
|
|
|
|
func _on_snap_finished() -> void:
|
|
$"../MagenAnimation".visible = false
|
|
$"../MagenAnimation".stop()
|
|
_start_zoom_back()
|
|
|
|
func _start_zoom_back() -> void:
|
|
var cam = get_tree().root.get_node("Main/Camera2D") as Camera2D
|
|
var tween = create_tween()
|
|
tween.tween_property(cam, "zoom", start_camera_zoom, 1.0).set_ease(Tween.EASE_OUT)
|
|
tween.parallel().tween_property(cam, "global_position", start_camera_position, 1.0).set_ease(Tween.EASE_OUT)
|
|
tween.tween_callback(Callable(self, "_unlock"))
|
|
|
|
func _unlock() -> void:
|
|
var main = get_tree().root.get_node("Main")
|
|
main.interaction_locked = false
|
|
click_locked = false
|
|
print("✅ Wieder klickbar!")
|
|
|
|
func _play_hint() -> void:
|
|
print("🧠 Hinweis wird abgespielt")
|
|
AudioManager.stop_all_audio_players()
|
|
$"../HintSoundPlayer".play()
|