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 мс на компьютере), а не 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. Уведомления едут в ZIP в файле THIRD_PARTY_NOTICES.md.

НаборИсточникЛицензия
СтандартныйНарисованы для gohudMIT
СредневековыйНарисованы для gohudMIT
Игровой171 из Tabler Icons 3.46.0, 16 нарисованы для gohudMIT
БиблиотекаTabler Icons 3.46.0MIT

Если подключаете чужие иконки, укажите источник в GoIconSet.attribution — а коммерческие иконочные шрифты держите внутри своей игры, а не в публикуемом форке.