gohud

你自己的預設集 — 一個檔案

← 佈景主題

以前要加一份佈景主題,得手動改四個地方 — 產生器的調色盤、形狀、一份外觀、一個預設集資源。 現在一道指令就把它們全部就位。

python3 addons/gohud/tools/new_theme.py neon --from scifi_dark --title "Neon"
python3 addons/gohud/tools/make_theme.py neon      # 佈景主題 .tres + 控制項圖檔
godot --headless --path . --import                  # 把新圖檔匯入一次
GoUi.use_preset(&"neon")                             # 完成 — 選擇器裡也會出現

第一行會寫出 themes/palettes/neon.jsonthemes/presets/neon.tres。這份 JSON 會把它所繼承的佈景主題的每一個值都完整寫出來,所以它同時就是一份「可以改什麼」的清單: 刪掉一個鍵就沿用上層的值,寫上去就覆寫它。預設集是靠掃描 themes/presets/ 找到的,所以不用改任何註冊用的程式碼 — 專案設定的下拉選單也會自動抓到。

可以改的東西 — 一頁看完

位置改什麼怎麼寫
from上層佈景主題dark · light · scifi_dark · medieval_dark · … 或另一份 JSON 佈景主題。省略的鍵沿用它的值;繼承成環就會失敗
palette背景 · 三層面板 · 邊框 · 三級文字 · 強調色 · 四種狀態色 · 遮罩 · 陰影 · 量條軌道"#RRGGBB",帶 alpha 時寫成 "#RRGGBB@0.35"
只用於填色的鮮豔顏色 *_vivid即使文字顏色必須變深,量條仍能保持飽和 — 漏掉一個,產生器會提醒你
可讀性不是手動調的。文字、邊框、強調色,以及疊在強調色上的標籤,都由產生器推到達標為止 — 你只改強調色,檢查照樣會過
shapekindflat(圓角) · cut(切角) · medieval(鍛造框)
尺寸radius · radius_small · radius_large · gap · gap_small · gap_large · padding · button_height · button_padding[4] — token 會跟著走,所以面板與控制項的計算永遠不會對不上
只有 cut 才有cut_ratio · cut_max · cornersdiagonal|all) · glow · edge
只有 medieval 才有material(0 鐵 · 1 皮革 · 2 羊皮紙) · grain_alpha · ornament_scale · bevel_strength · fonts — 把 titlesubtitlecaptionbodybutton 對應到附加元件本地的 res:// 字型檔
skinbase — 那些由程式碼自己畫的地方(搖桿、快捷格、徽章、導覽標記的圈、標籤片、分隔線)屬於哪個家族default · scifi · medieval
dials — 那些地方的數字:快捷格邊框寬度與著色、徽章內距、標籤片與行內提示的不透明度、搖桿圈的寬度與不透明度、科幻切角大小、光暈與框角上層的每一個值都在 JSON 裡寫得清清楚楚。產生器會把它們寫進 themes/skins/gohud_skin_<id>.tres完全不動外觀的程式碼。只有要改圖案本身時才需要跑 --new-skin,它會搭出一個 GoSkin 子類別
icons圖示組指向 GoIconSet 資源的 res:// 路徑 — 省略時沿用 JSON 上層的設定
dark · title選擇器裡怎麼顯示布林值 · 字串

所有旋鈕

下面的表格由 tools/make_site.py 直接從外觀指令碼的 @export 行填出來 — 加一個旋鈕或改一個預設值,表格就跟著變。在 JSON 的 skin.dials 底下使用這些名稱。預設值寫成 14 的旋鈕是整數,寫成 10.0 的是浮點數 — JSON 裡兩種寫法都行,產生器會轉成指令碼所要的型別。

預設外觀 GoSkin — 17

旋鈕預設值設定什麼
chip_fill_alpha0.16標籤片面板的填色不透明度。
chip_edge_alpha0.45標籤片面板的邊緣不透明度。
alert_tint0.1行內提示的面板往它的狀態色偏多少。
slot_tint_lit0.24冷卻進行中的快捷格面板的強調色著色量。
slot_tint_idle0.08閒置時快捷格面板的強調色著色量。
slot_border_lit2冷卻進行中的快捷格邊框寬度(dp)。
slot_border_idle1閒置時的快捷格邊框寬度(dp)。
badge_pad_x5徽章(數量、剩餘時間)的水平內距(dp)。
badge_pad_y1徽章的垂直內距(dp)。
badge_edge_alpha0.6徽章面板的邊緣不透明度。
float_shadow_alpha0.45浮動卡片(導覽標記、提示卡)的陰影不透明度。
float_shadow_size14浮動卡片的陰影模糊(dp)。
float_shadow_lift4浮動卡片陰影往下的位移(dp)。
float_glow_size10.0不投影而改用發光的浮動面板(例如科幻的切角面板)的光暈距離(dp)。
joystick_base_alpha0.42搖桿底盤的不透明度。
joystick_ring_alpha0.45搖桿外圈的不透明度。
joystick_ring_width2.0搖桿外圈的寬度(dp)。

科幻外觀 GoSkinSciFi — 10

旋鈕預設值設定什麼
cut_chip7.0標籤片面板的切角大小(dp)。
cut_skeleton5.0骨架佔位面板的切角大小(dp)。
cut_alert8.0行內提示框的切角大小(dp)。
cut_segment8.0分段控制項的切角大小(dp)。
cut_slot6.0快捷格面板的切角大小(dp)。
cut_disc_ratio0.24頭像與圓盤的切角 = 直徑 × 這個比例。
slot_glow_alpha0.45冷卻進行中的快捷格的光暈不透明度。
slot_glow_size6.0冷卻進行中的快捷格的光暈距離(dp)。
bracket_arm12.0導覽標記瞄準框角的臂長(dp)。
bracket_thickness2.0導覽標記瞄準框角的線條粗細(dp)。

中世紀外觀 GoSkinMedieval — 5

旋鈕預設值設定什麼
slot_radius4.0中世紀快捷格外框的圓角半徑(dp)。
leather_grain_alpha0.035快捷格內側細微皮革紋路的不透明度。
ornament_scale1.0快捷格角落金屬裝飾的縮放。選單框用的是 shape.ornament_scale。
bevel_strength0.18快捷格邊緣金屬高光的強度。
slot_rivets1是否在快捷格上顯示小金屬鉚釘:0 隱藏,1 顯示。

繼承外觀(選用)

只有佈景主題與形狀碰不到的東西 — 搖桿的六邊形、快捷格徽章、導覽標記的 瞄準框角 — 才住在外觀裡。繼承 GoSkin,只覆寫那幾個方法,再把 JSON 的 skin 指向那份資源。只改顏色的佈景主題可以略過這一步。

有一項檢查替這個承諾把關。tools/check_scaffold.sh 每次執行都會建立一份用完即丟的佈景主題 — 改掉強調色、把圓角半徑設成 4 — 並在刪掉它之前驗證產生、token 傳遞與乾淨的對比檢查。 第一次跑就抓到:只改了強調色的佈景主題有8 組配色不合格 — 產生器推了文字顏色, 卻照著原樣使用強調色。現在連強調色與疊在它上面的標籤也一起推。