feature-fonts #23
@ -6,6 +6,7 @@
|
|||||||
Tree = {
|
Tree = {
|
||||||
assets = (require "lib.utils.asset_bundle"):load()
|
assets = (require "lib.utils.asset_bundle"):load()
|
||||||
}
|
}
|
||||||
|
Tree.fonts = (require "lib.utils.font_manager"):load("WDXL_Lubrifont_TC") -- дефолтный шрифт
|
||||||
Tree.panning = require "lib/panning"
|
Tree.panning = require "lib/panning"
|
||||||
Tree.controls = require "lib.controls"
|
Tree.controls = require "lib.controls"
|
||||||
Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен
|
Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен
|
||||||
|
|||||||
87
lib/utils/font_manager.lua
Normal file
87
lib/utils/font_manager.lua
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
--- @alias FontVariant "smallest" | "small" | "medium" | "large" | "headline"
|
||||||
|
|
||||||
|
--- @class TextTheme
|
||||||
|
--- @field private _sizes {[FontVariant]: integer}
|
||||||
|
local theme = {
|
||||||
|
_sizes = {
|
||||||
|
smallest = 10,
|
||||||
|
small = 12,
|
||||||
|
medium = 14,
|
||||||
|
large = 16,
|
||||||
|
headline = 20,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
theme.__index = theme
|
||||||
|
|
||||||
|
--- @param loader fun(size: integer): love.Font?
|
||||||
|
function theme.new(loader)
|
||||||
|
local t = {}
|
||||||
|
for tag, size in pairs(theme._sizes) do
|
||||||
|
local f = loader(size)
|
||||||
|
if not f then return nil end
|
||||||
|
t[tag] = f
|
||||||
|
end
|
||||||
|
|
||||||
|
return setmetatable(t, theme)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param variant FontVariant
|
||||||
|
--- @return love.Font
|
||||||
|
function theme:getVariant(variant)
|
||||||
|
return self[variant]
|
||||||
|
end
|
||||||
|
|
||||||
|
----------------------------------------------------------
|
||||||
|
|
||||||
|
--- A singleton to handle fonts
|
||||||
|
--- @class FontManager
|
||||||
|
--- @field private _themes table
|
||||||
|
local FontManager = {
|
||||||
|
_themes = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
--- @param name string
|
||||||
|
--- @param size integer
|
||||||
|
function FontManager.newFont(name, size)
|
||||||
|
local err = function()
|
||||||
|
print("[FontManager]: font " .. name .. " not found!")
|
||||||
|
end
|
||||||
|
local fontDir = Tree.assets.files.fonts[name]
|
||||||
|
if not fontDir then return err() end
|
||||||
|
local font = fontDir.font
|
||||||
|
if not font then return err() end
|
||||||
|
return love.graphics.newFont(font, size)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param name string
|
||||||
|
--- @return TextTheme?
|
||||||
|
function FontManager:loadTheme(name)
|
||||||
|
self._themes[name] = theme.new(
|
||||||
|
function(size)
|
||||||
|
return self.newFont(name, size)
|
||||||
|
end
|
||||||
|
)
|
||||||
|
return self._themes[name]
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param name string
|
||||||
|
--- @return TextTheme?
|
||||||
|
function FontManager:getTheme(name)
|
||||||
|
return self._themes[name]
|
||||||
|
end
|
||||||
|
|
||||||
|
--- initial setup
|
||||||
|
--- @param defaultFontName string
|
||||||
|
function FontManager:load(defaultFontName)
|
||||||
|
local t = self:loadTheme(defaultFontName)
|
||||||
|
if not t then
|
||||||
|
print("[FontManager]: default font " .. defaultFontName .. " is missing")
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
local f = t:getVariant("medium")
|
||||||
|
love.graphics.setFont(f)
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
return FontManager
|
||||||
Loading…
x
Reference in New Issue
Block a user