Іконку викликають за іменем
Віджет ніколи не зберігає картинку. Він запитує ім'я, а що малювати, вирішує поточний набір іконок — змініть набір, і всі іконки зміняться без правки жодного рядка коду.
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. Шукайте за іменем або за зображенням, звузьте пошук до набору чи групи й виберіть іконку, щоб скопіювати її ім'я.
Імена й слова для пошуку лишаються англійськими будь-якою мовою — саме їх ви пишете в коді.
Чотири набори, один пошук
Кожен набір відповідає на той самий виклик. Великі набори додаються поверх поточного.
| Набір | Імена | Константи | Як увімкнути |
|---|---|---|---|
| Стандартний | 84 | GoIconSet | Увімкнений завжди |
| Середньовічний | 16 гравійованих | — | GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK) |
| Ігровий | 187 | GoGameIcons | GoUi.add_icons(GoGameIcons.icon_set()) |
| Бібліотека | 1 000 | GoIconLibrary | GoUi.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/; стандартному «експорту всіх ресурсів» нічого не потрібно.Як шукається ім'я
Один порядок для всіх наборів, тож наперед ясно, який малюнок переможе.
- Спершу власні малюнки кожного набору — поточного, далі кожного доданого, потім їхніх запасних, рівень за рівнем. Власний малюнок набору — це текстура, шлях або гліф шрифту іконок.
- Якщо ніхто його не намалював, пробується псевдонім:
gearведе доsettings,x— доclose. Лише один перехід. - І якщо нічого немає — порожнє поле того самого розміру.
Саме тому гравійований меч середньовічного пресету лишається зверху, коли ви додаєте бібліотеку: його власний малюнок знаходиться раніше за будь-чий запасний.
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())
- Малюйте на сітці 24×24 білою лінією. Колір задає
modulate, а він уміє лише затемнювати — чорний малюнок лишиться чорним у будь-якій темі. - Імпортуйте SVG як
DPITexture, щоб вони лишалися чіткими в клітинці інвентаря розміром 64 dp. - У мовах із письмом справа наліво іконки не віддзеркалюються. Напрям змінюють лише
backіforward, і їх ви вибираєте за іменем. - Підійде й шрифт іконок: заповніть
fontіcodepoints. Більше нічого не змінюється.
Імена, групи й пошук
Правила, яких дотримуються вбудовані набори, і виклики, що знаходять ім'я.
- lower_snake_case: спочатку те, що намальовано, наприкінці — стан:
volume_off,battery_charging,arrow_bar_left. - Жодних групових префіксів. Групи — це дані, тож ім'я не змінюється, хоч куди його віднесуть.
- Імена бібліотеки — це імена Tabler із підкресленнями:
cloud-rainна tabler.io тутcloud_rain. Імена Tabler для малюнків, які в gohud уже були, ведуть до них як псевдоніми (shopping_cart→cart). - Синонім — це псевдонім, а не другий малюнок.
search()
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.
| Набір | Джерело | Ліцензія |
|---|---|---|
| Стандартний | Намальовані для gohud | MIT |
| Середньовічний | Намальовані для gohud | MIT |
| Ігровий | 171 з Tabler Icons 3.46.0, 16 намальовані для gohud | MIT |
| Бібліотека | Tabler Icons 3.46.0 | MIT |
Якщо підключаєте чужі іконки, вкажіть джерело в GoIconSet.attribution — а комерційні шрифти іконок тримайте всередині своєї гри, а не в публічному форку.