diff --git a/_Core/managers/UIFontManager.gd b/_Core/managers/UIFontManager.gd new file mode 100644 index 0000000..e1315f5 --- /dev/null +++ b/_Core/managers/UIFontManager.gd @@ -0,0 +1,26 @@ +extends Node + +# Enforce a Chinese-capable font for every UI control, including controls +# constructed dynamically after their scene has loaded. +const UI_FONT: FontFile = preload("res://assets/fonts/msyh.ttc") + +func _enter_tree() -> void: + get_tree().node_added.connect(_on_node_added) + _apply_font_recursively(get_tree().root) + +func _exit_tree() -> void: + var node_added_callback := Callable(self, "_on_node_added") + if get_tree().node_added.is_connected(node_added_callback): + get_tree().node_added.disconnect(node_added_callback) + +func _on_node_added(node: Node) -> void: + _apply_font_recursively(node) + +func _apply_font_recursively(node: Node) -> void: + if node is Control: + var control := node as Control + control.add_theme_font_override(&"font", UI_FONT) + if control is RichTextLabel: + control.add_theme_font_override(&"normal_font", UI_FONT) + for child in node.get_children(): + _apply_font_recursively(child) diff --git a/_Core/managers/UIFontManager.gd.uid b/_Core/managers/UIFontManager.gd.uid new file mode 100644 index 0000000..decf853 --- /dev/null +++ b/_Core/managers/UIFontManager.gd.uid @@ -0,0 +1 @@ +uid://cvb5smbfhqnfc diff --git a/export_presets.cfg b/export_presets.cfg index 7ab6047..405d297 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -8,7 +8,7 @@ dedicated_server=false custom_features="" export_filter="scenes" export_files=PackedStringArray("res://scenes/ui/WebBootstrap.tscn") -include_filter="Config/*.gd,Config/*.json,_Core/*.gd,_Core/managers/*.gd,_Core/systems/*.gd,_Core/utils/*.gd,assets/audio/ui/*.wav" +include_filter="Config/*.gd,Config/*.json,_Core/*.gd,_Core/managers/*.gd,_Core/systems/*.gd,_Core/utils/*.gd,assets/audio/ui/*.wav,assets/fonts/*.ttc" exclude_filter="" export_path="build/web/index.html" patches=PackedStringArray() diff --git a/project.godot b/project.godot index 4335e80..74977bf 100644 --- a/project.godot +++ b/project.godot @@ -21,6 +21,7 @@ config/icon="res://icon.svg" [autoload] +UIFontManager="*res://_Core/managers/UIFontManager.gd" SceneManager="*res://_Core/managers/SceneManager.gd" EventSystem="*res://_Core/systems/EventSystem.gd" ApiClient="*res://_Core/managers/ApiClient.gd"