netfishing/ui/interface_font_controller.gd

55 lines
1.5 KiB
GDScript

class_name InterfaceFontController
extends Node
signal font_mode_changed(use_readable_font: bool)
const READABLE_FONT_PATH: String = "res://ui/fonts/Tuffy_Bold.otf"
var _game_theme: Theme = preload("res://ui/game_theme.tres")
var _game_font: Font = preload("res://ui/fonts/seattle_avenue.otf")
var _readable_font: Font
var _utility_theme: Theme
var _use_readable_font: bool = false
func _ready() -> void:
if ResourceLoader.exists(READABLE_FONT_PATH):
_readable_font = load(READABLE_FONT_PATH) as Font
if _readable_font == null:
push_error("Readable interface font resource is unavailable.")
else:
_readable_font.fallbacks = [_game_font]
_utility_theme = _game_theme.duplicate(true)
_utility_theme.default_font = readable_font()
func set_readable_font_enabled(enabled: bool) -> void:
_use_readable_font = enabled
_game_theme.default_font = (
_readable_font
if enabled and _readable_font != null
else _game_font
)
font_mode_changed.emit(_use_readable_font)
func is_readable_font_enabled() -> bool:
return _use_readable_font
func apply_utility_theme(themed_node: Node) -> void:
if themed_node == null:
return
if _utility_theme == null:
_utility_theme = _game_theme.duplicate(true)
_utility_theme.default_font = (
_readable_font if _readable_font != null else _game_font
)
if themed_node is Control:
(themed_node as Control).theme = _utility_theme
elif themed_node is Window:
(themed_node as Window).theme = _utility_theme
func readable_font() -> Font:
return _readable_font if _readable_font != null else _game_font