diff --git a/src/game/engine/scenes/tests/climate_proof.gd.uid b/src/game/engine/scenes/tests/climate_proof.gd.uid new file mode 100644 index 00000000..f3091f1c --- /dev/null +++ b/src/game/engine/scenes/tests/climate_proof.gd.uid @@ -0,0 +1 @@ +uid://bpjf08mbhnsw diff --git a/src/game/engine/scenes/tests/combat_proof.gd b/src/game/engine/scenes/tests/combat_proof.gd new file mode 100644 index 00000000..946a0fd0 --- /dev/null +++ b/src/game/engine/scenes/tests/combat_proof.gd @@ -0,0 +1,88 @@ +extends Node2D +## Phase 8 Combat Proof Scene. +## Proves: CombatPreview popup displays attacker/defender stats and damage estimates. +## Sets up a Dwarf Warrior vs Orc Warrior with known D20 stats. +## Self-capturing: renders the preview popup, saves screenshot, and quits. + +const UnitScript: GDScript = preload("res://engine/src/entities/unit.gd") +const CombatPreviewScene: PackedScene = preload( + "res://engine/scenes/combat/combat_preview.tscn" +) + +const OUTPUT_DIR: String = "user://screenshots" +const CAPTURE_DELAY: float = 1.5 + +var _attacker: RefCounted = null +var _defender: RefCounted = null +var _preview: CanvasLayer = null + + +func _ready() -> void: + DataLoader.load_theme("age-of-dwarves") + await get_tree().create_timer(0.3).timeout + _setup_units() + _setup_preview() + await get_tree().create_timer(CAPTURE_DELAY).timeout + _capture_and_quit() + + +func _setup_units() -> void: + _attacker = UnitScript.new() + _attacker.id = "proof_atk_1" + _attacker.type_id = "warriors" + _attacker.owner = 0 + _attacker.name = "Dwarf Warriors" + _attacker.position = Vector2i(5, 5) + _attacker.base_str = 14 + _attacker.base_dex = 10 + _attacker.base_con = 14 + _attacker.base_int = 8 + _attacker.hp = 80 + _attacker.max_hp = 80 + + _defender = UnitScript.new() + _defender.id = "proof_def_1" + _defender.type_id = "warriors" + _defender.owner = 1 + _defender.name = "Orc Warriors" + _defender.position = Vector2i(6, 5) + _defender.base_str = 16 + _defender.base_dex = 8 + _defender.base_con = 12 + _defender.base_int = 6 + _defender.hp = 70 + _defender.max_hp = 70 + _defender.fortified_turns = 1 + + +func _setup_preview() -> void: + _preview = CombatPreviewScene.instantiate() + add_child(_preview) + await get_tree().process_frame + _preview.show_preview(_attacker, _defender, null, [_attacker, _defender]) + + +func _capture_and_quit() -> void: + DirAccess.make_dir_recursive_absolute(ProjectSettings.globalize_path(OUTPUT_DIR)) + var image: Image = get_viewport().get_texture().get_image() + if image == null: + push_error("CombatProof: Failed to get viewport image") + get_tree().quit(1) + return + + var timestamp: String = Time.get_datetime_string_from_system().replace( + ":", "-" + ).replace("T", "_") + var rel_path: String = "%s/phase8_proof_%s.png" % [OUTPUT_DIR, timestamp] + var abs_path: String = ProjectSettings.globalize_path(rel_path) + var err: Error = image.save_png(abs_path) + + if err == OK: + print("SCREENSHOT_PATH:%s" % abs_path) + print("CombatProof: %dx%d saved to %s" % [ + image.get_width(), image.get_height(), abs_path + ]) + else: + push_error("CombatProof: Save failed: %s" % error_string(err)) + + get_tree().quit() diff --git a/src/game/engine/scenes/tests/combat_proof.gd.uid b/src/game/engine/scenes/tests/combat_proof.gd.uid new file mode 100644 index 00000000..70bb94ae --- /dev/null +++ b/src/game/engine/scenes/tests/combat_proof.gd.uid @@ -0,0 +1 @@ +uid://bne8dw3hagjnh diff --git a/src/game/engine/scenes/tests/combat_proof.tscn b/src/game/engine/scenes/tests/combat_proof.tscn new file mode 100644 index 00000000..1c88c011 --- /dev/null +++ b/src/game/engine/scenes/tests/combat_proof.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://combat_proof"] + +[ext_resource type="Script" path="res://engine/scenes/tests/combat_proof.gd" id="1"] + +[node name="CombatProof" type="Node2D"] +script = ExtResource("1")