gohud

图标

按名称调用的图形 1,287 个 —— 常驻的 84 个、游戏用的 187 个、图标库中的 1,000 个。在下面找到一个并复制名称,gohud 的任何控件都能绘制它。

用名称调用图标

控件从不持有图片。它只询问名称,画什么由当前使用的图标集决定 —— 换一套图标集,所有图标随之改变,一行代码都不用改。

GoStyle.icon_button(GoIconSet.SETTINGS, open_settings)   # a button
slot.icon_name = GoGameIcons.BACKPACK                     # a quick slot
var mark := GoUi.icons().node(&"cloud_rain", 24)          # a bare Control, any size

GoUi.icons() 就是当前使用的图标集。画不出的名称会变成一个保留位置的空框,调试构建中会给出警告,所以缺一个图标也不会让整行错位。

查找图标

gohud 自带的全部图形。按名称或外观搜索,按图标集或分组筛选,选中图标即可复制名称。

名称和搜索词在任何语言中都保持英文 —— 因为它们就是你在代码里输入的内容。

四套图标集,一条查找路径

每套图标集都响应同一个调用。大的图标集叠加在当前图标集之上使用。

图标集名称常量启用方式
默认84GoIconSet始终启用
中世纪雕刻图形 16 个—GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)
游戏187GoGameIconsGoUi.add_icons(GoGameIcons.icon_set())
图标库1,000GoIconLibraryGoUi.add_icons(GoIconLibrary.icon_set())
GoUi.add_icons(GoIconLibrary.icon_set())   # the library — and the game set under it
GoUi.add_icons(GoGameIcons.icon_set())     # or the game set alone

图标库回退到游戏图标集,游戏图标集再回退到默认图标集,因此一行代码就能绘制 1,271 个名称。图标集以路径记录图形,只在某个名称第一次被绘制时才读取文件 —— 添加图标库读取的是一张路径表(桌面端约 30 ms),而不是 1,000 张纹理。

路径只是字符串,不是依赖项。按资源选择导出时,必须包含 addons/gohud/icons/;默认的“导出所有资源”无需任何操作。

名称的查找顺序

所有图标集遵循同一顺序,所以你能预知哪个图形胜出。

  1. 先看所有图标集自己的图形 —— 当前图标集,然后是每个附加图标集,再逐层查看它们的回退。图标集自己的图形指纹理、路径或图标字体字形。
  2. 如果都画不出,就尝试别名:gear 指向 settings,x 指向 close。只跳转一次。
  3. 仍然没有:一个保留位置的空框。

正因为这个顺序,在中世纪预设上添加图标库后,雕刻风格的剑依然在最上层 —— 中世纪图标集自己的图形会先于任何回退被找到。

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)
GoUi.add_icons(GoIconLibrary.icon_set())

GoUi.icons().texture(&"sword")      # the medieval engraving — its own drawing comes first
GoUi.icons().texture(&"rocket")     # from the game set
GoUi.icons().canonical(&"gear")     # &"settings" — an alias

预设、你的图标集和附加图标集

画什么由三处决定。

调用作用
GoUi.use_preset(…)一次性切换主题、皮肤和图标集。清空 config.icons,保留 config.extra_icons。
GoUi.config.icons = my_set用你的图标集替换预设的图标集。
GoUi.add_icons(set)添加一套在当前图标集之后查找的图标集,切换预设后依然保留。

使用你自己的图形

覆盖几个名称、添加整个文件夹,或接入图标字体 —— 调用代码保持不变。

# Override a few names — everything else still comes from the set in use
var mine := GoIconSet.new()
mine.fallback = GoUi.icons()
mine.textures = {GoIconSet.CLOSE: preload("res://art/close.svg")}
GoUi.config.icons = mine

# A folder of drawings — file name = icon name, each read when first drawn
GoUi.config.icons = GoIconSet.from_folder("res://art/icons", GoUi.icons())

名称、分组与搜索

自带图标集遵循的规则,以及查找名称的调用。

var icons := GoUi.icons()
icons.search("arrow left", 5)       # best matches first: back, arrow_bar_left …
icons.search("rain")                # cloud_rain, then drawings tagged "rain"

group_names() · names_in_group()

icons.group_names()                 # every group key, in lookup order
icons.names_in_group(&"weather")    # one group, in display order — every set's share of it
icons.group_title(&"weather")       # "Weather & sky"

canonical() · has_icon()

icons.canonical(&"gear")            # &"settings"
icons.canonical(&"treasure_chest")  # &"chest" — Tabler's name for a game drawing
icons.has_icon(&"cloud_rain")       # true once the library is added — nothing is loaded to answer

图形的来源

全部采用 MIT 许可。声明以 THIRD_PARTY_NOTICES.md 的形式随 ZIP 一起分发。

图标集来源许可
默认为 gohud 绘制MIT
中世纪为 gohud 绘制MIT
游戏171 个来自 Tabler Icons 3.46.0,16 个为 gohud 绘制MIT
图标库Tabler Icons 3.46.0MIT

如果接入他人的图标,请在 GoIconSet.attribution 中写明来源 —— 商用图标字体只放在你的游戏里,不要放进你公开的分支。