Improve Korean text readability checks
This commit is contained in:
@@ -25,6 +25,7 @@ func _init() -> void:
|
||||
_check_battle_presentation_sequence_contract(failures)
|
||||
_check_battle_start_notice_sequence(failures)
|
||||
_check_readability_contract(failures)
|
||||
_check_first_battle_rendered_text_fit(failures)
|
||||
_check_korean_fallback_labels(failures)
|
||||
_check_dialogue_localization_and_side(failures)
|
||||
_check_event_dialogue_side_passthrough(failures)
|
||||
@@ -731,6 +732,69 @@ func _check_text_fit_contract(scene, failures: Array[String]) -> void:
|
||||
failures.append("fitted briefing objective text should stay within its panel")
|
||||
|
||||
|
||||
func _check_first_battle_rendered_text_fit(failures: Array[String]) -> void:
|
||||
var scene = BattleSceneScript.new()
|
||||
scene._create_hud()
|
||||
scene._show_opening_prologue()
|
||||
for index in range(BattleSceneScript.OPENING_PROLOGUE_PAGES.size()):
|
||||
scene.opening_prologue_index = index
|
||||
scene._update_opening_prologue_page()
|
||||
_check_label_fits_visible_area(scene, failures, scene.opening_prologue_title_label, "opening prologue title page %d" % (index + 1))
|
||||
_check_label_fits_visible_area(scene, failures, scene.opening_prologue_step_label, "opening prologue step page %d" % (index + 1))
|
||||
_check_label_fits_visible_area(scene, failures, scene.opening_prologue_body_label, "opening prologue body page %d" % (index + 1))
|
||||
|
||||
if not scene.state.load_battle("res://data/scenarios/001_yellow_turbans.json"):
|
||||
failures.append("could not load opening battle for rendered text fit")
|
||||
scene.free()
|
||||
return
|
||||
scene._show_briefing()
|
||||
_check_label_fits_visible_area(scene, failures, scene.briefing_title_label, "opening briefing title")
|
||||
_check_label_fits_visible_area(scene, failures, scene.briefing_location_label, "opening briefing location")
|
||||
_check_label_fits_visible_area(scene, failures, scene.briefing_objective_label, "opening briefing objective")
|
||||
_check_label_fits_visible_area(scene, failures, scene.briefing_camp_overview_label, "opening briefing map overview")
|
||||
_check_label_fits_visible_area(scene, failures, scene.briefing_label, "opening briefing body")
|
||||
|
||||
var briefing: Dictionary = scene.state.get_briefing()
|
||||
var dialogue_lines: Array = []
|
||||
dialogue_lines.append_array(briefing.get("camp_dialogue", []))
|
||||
for conversation in briefing.get("camp_conversations", []):
|
||||
if typeof(conversation) != TYPE_DICTIONARY:
|
||||
continue
|
||||
dialogue_lines.append_array((conversation as Dictionary).get("lines", []))
|
||||
for index in range(dialogue_lines.size()):
|
||||
var normalized_lines := scene._normalized_dialogue_lines([dialogue_lines[index]])
|
||||
if normalized_lines.is_empty():
|
||||
continue
|
||||
scene.active_dialogue_lines = normalized_lines
|
||||
scene.active_dialogue_index = 0
|
||||
scene._render_dialogue_line()
|
||||
_check_label_fits_visible_area(scene, failures, scene.dialogue_speaker_label, "opening dialogue speaker %d" % (index + 1))
|
||||
_check_label_fits_visible_area(scene, failures, scene.dialogue_text_label, "opening dialogue body %d" % (index + 1))
|
||||
scene.free()
|
||||
|
||||
|
||||
func _check_label_fits_visible_area(scene, failures: Array[String], label: Label, context: String) -> void:
|
||||
if label == null:
|
||||
failures.append("%s missing" % context)
|
||||
return
|
||||
var text := str(label.text).strip_edges()
|
||||
if text.is_empty():
|
||||
failures.append("%s should render visible text" % context)
|
||||
return
|
||||
var area := label.custom_minimum_size
|
||||
if area.x <= 0.0 or area.y <= 0.0:
|
||||
failures.append("%s should reserve a stable text area, got %s" % [context, str(area)])
|
||||
return
|
||||
var font_size := label.get_theme_font_size("font_size")
|
||||
var fitted_height := float(scene._estimated_wrapped_text_height(text, area.x, font_size))
|
||||
if fitted_height > area.y + 2.0:
|
||||
failures.append("%s text should fit its visible area: height %.1f > %.1f at font %d text=`%s`" % [context, fitted_height, area.y, font_size, text])
|
||||
if font_size < 12:
|
||||
failures.append("%s should not shrink below readable Korean text size: %d" % [context, font_size])
|
||||
if label.clip_text:
|
||||
failures.append("%s should not hard-clip Korean text" % context)
|
||||
|
||||
|
||||
func _check_dialogue_localization_and_side(failures: Array[String]) -> void:
|
||||
var scene = BattleSceneScript.new()
|
||||
var lines := scene._normalized_dialogue_lines([
|
||||
|
||||
Reference in New Issue
Block a user