64 lines
2.7 KiB
GDScript
64 lines
2.7 KiB
GDScript
extends SceneTree
|
|
|
|
const View = preload("res://entry/views/contract_choice_page_view.gd")
|
|
const FIXTURES := [Vector2i(760, 360), Vector2i(844, 390), Vector2i(1280, 720)]
|
|
const LOCALES := ["zh_CN", "en"]
|
|
|
|
func _initialize() -> void:
|
|
call_deferred("_run")
|
|
|
|
func _run() -> void:
|
|
var out := OS.get_environment("ABG_EVIDENCE_DIR")
|
|
if out.is_empty():
|
|
push_error("requires ABG_EVIDENCE_DIR")
|
|
quit(1)
|
|
return
|
|
DirAccess.make_dir_recursive_absolute(out)
|
|
for fixture in FIXTURES:
|
|
for locale in LOCALES:
|
|
await _capture(fixture, locale, out)
|
|
print("ABG_M54_CONTRACT_VISUAL_PROBE_OK fixtures=3 locales=2 views=static,dynamic,final")
|
|
quit(0)
|
|
|
|
func _capture(fixture: Vector2i, locale: String, out: String) -> void:
|
|
var viewport := SubViewport.new()
|
|
viewport.size = fixture
|
|
viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS
|
|
root.add_child(viewport)
|
|
var view := View.new()
|
|
view.name = "ContractVisualProbeView"
|
|
view.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
|
view.configure_presentation({"safe_area": 24, "text_scale": 1.0, "locale": locale})
|
|
viewport.add_child(view)
|
|
view.render(_fixture(locale))
|
|
await _settle()
|
|
_save(viewport, out, fixture, locale, "final")
|
|
var overlay := view.find_child("ContractChoiceFrame", true, false) as Control
|
|
if overlay != null:
|
|
overlay.visible = false
|
|
await _settle()
|
|
_save(viewport, out, fixture, locale, "static")
|
|
if overlay != null:
|
|
overlay.visible = true
|
|
var world := view.find_child("WorldBackground", true, false) as Control
|
|
if world != null:
|
|
world.visible = false
|
|
await _settle()
|
|
_save(viewport, out, fixture, locale, "dynamic")
|
|
view.queue_free()
|
|
viewport.queue_free()
|
|
await process_frame
|
|
|
|
func _settle() -> void:
|
|
for _i in range(3):
|
|
await process_frame
|
|
|
|
func _save(viewport: SubViewport, out: String, fixture: Vector2i, locale: String, kind: String) -> void:
|
|
var image := viewport.get_texture().get_image()
|
|
if image != null:
|
|
image.save_png(out.path_join("contract-%dx%d-%s-%s.png" % [fixture.x, fixture.y, locale, kind]))
|
|
|
|
func _fixture(locale: String) -> Dictionary:
|
|
var zh := locale == "zh_CN"
|
|
return {"ok": true, "locale": locale, "company": {"owned_count": 2, "recruits": [{"id":"a"},{"id":"b"}]}, "selected_difficulty":"standard", "difficulties":[{"id":"standard","name":"标准" if zh else "Standard","copy":"稳妥的首次远征" if zh else "A steady first expedition."}], "contract":{"route_title":"风镜初渡" if zh else "FIRST WINDGLASS CROSSING", "route_copy":"穿越悬浮风镜,建立安全通路。" if zh else "Cross the suspended windglass and establish a safe route.", "starting_coin":38,"line_capacity":4,"market_counts":{"recruit":3,"equipment":2,"battle":1}}, "confirm":{"eligible":true}, "notice":""}
|