用名稱呼叫圖示
控制項從不持有圖片。它只詢問名稱,畫什麼由目前使用的圖示集決定 —— 換一套圖示集,所有圖示跟著改變,一行程式碼都不用改。
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 ms),而不是 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 名稱的連字號換成底線:tabler.io 上的
cloud-rain在這裡是cloud_rain。gohud 原本就有的圖案,其 Tabler 名稱會作為別名指向它(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。聲明以 THIRD_PARTY_NOTICES.md 的形式隨 ZIP 一起發行。
| 圖示集 | 來源 | 授權 |
|---|---|---|
| 預設 | 為 gohud 繪製 | MIT |
| 中世紀 | 為 gohud 繪製 | MIT |
| 遊戲 | 171 個來自 Tabler Icons 3.46.0,16 個為 gohud 繪製 | MIT |
| 圖示庫 | Tabler Icons 3.46.0 | MIT |
如果接上他人的圖示,請在 GoIconSet.attribution 寫明來源 —— 商用圖示字型只放在你的遊戲裡,不要放進你公開的分支。