Explosion_der_Spiele/scripts/levels/end_screen.gd
copilot 1cc8aa9b9d Add village 3D wiring, voice lines, and 1.74 m world scale.
Houses ~8.5 m; chimps capped ~0.85 m with safer axis fitting. Large GLB/PBR packs stay local until Git LFS (Forgejo HTTP 413).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 12:02:57 +02:00

75 lines
2.6 KiB
GDScript

extends Node3D
## Enddorf: Hausbau + Zahnionär. Kein Happy End.
func _ready() -> void:
GameState.current_scene_id = "end_screen"
GameState.heal_full()
var ui := get_node_or_null("/root/UIRoot")
if ui and ui.has_method("show_dialog"):
ui.show_dialog_key("dialog_end_angry", 4.0)
var house := get_node_or_null("HouseSpot")
if house and house.has_signal("interacted"):
house.interacted.connect(_on_house)
var dentist := get_node_or_null("DentistHeist")
if dentist and dentist.has_signal("interacted"):
dentist.interacted.connect(_on_heist)
# Plot marker stays small until built — don't show full house twice
_setup_plot_marker()
if GameState.house_built or GameState.get_flag("house_built", false):
_show_house()
func _setup_plot_marker() -> void:
var spot := get_node_or_null("HouseSpot")
if spot == null:
return
if GameState.house_built or GameState.get_flag("house_built", false):
return
# Before build: small plot sign, not a second full-size house
spot.set("billboard_height", 1.0)
spot.set("billboard_max_width", 1.5)
var bill = spot.get_node_or_null("BillboardSprite")
if bill:
bill.set("max_width", 1.5)
if bill.has_method("set_target_height"):
bill.set_target_height(1.0)
func _on_house(_n: Node = null) -> void:
GameState.house_built = true
GameState.set_flag("house_built", true)
_show_house()
var ui := get_node_or_null("/root/UIRoot")
if ui and ui.has_method("show_dialog"):
ui.show_dialog(Locale.tr_key("build_house"))
func _show_house() -> void:
## One house only: grow HouseSpot to full size (no duplicate BuiltHouse).
var spot := get_node_or_null("HouseSpot")
if spot == null:
return
spot.set("billboard_height", SpriteFit.WORLD_HOUSE_HEIGHT)
spot.set("billboard_max_width", SpriteFit.WORLD_HOUSE_MAX_WIDTH)
spot.set("texture_path", "res://assets/sprites/placeholders/house.png")
_fit_house_billboard(spot)
# Remove legacy duplicate if any
var dup := get_node_or_null("BuiltHouse")
if dup:
dup.queue_free()
func _fit_house_billboard(node: Node) -> void:
var bill = node.get_node_or_null("BillboardSprite")
if bill == null:
return
bill.set("max_width", SpriteFit.WORLD_HOUSE_MAX_WIDTH)
if bill.has_method("set_target_height"):
bill.set_target_height(SpriteFit.WORLD_HOUSE_HEIGHT)
if bill.has_method("set_texture"):
var tex: Texture2D = load("res://assets/sprites/placeholders/house.png")
if tex:
bill.set_texture(tex)
func _on_heist(_n: Node = null) -> void:
Inventory.add_item("tooth", 100)
Achievements.unlock("tooth_millionaire")
var ui := get_node_or_null("/root/UIRoot")
if ui and ui.has_method("show_dialog"):
ui.show_dialog_key("dialog_toothionaire", 4.0)