以前要加一份佈景主題,得手動改四個地方 — 產生器的調色盤、形狀、一份外觀、一個預設集資源。 現在一道指令就把它們全部就位。
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.json 與 themes/presets/neon.tres。這份
JSON 會把它所繼承的佈景主題的每一個值都完整寫出來,所以它同時就是一份「可以改什麼」的清單:
刪掉一個鍵就沿用上層的值,寫上去就覆寫它。預設集是靠掃描
themes/presets/ 找到的,所以不用改任何註冊用的程式碼 — 專案設定的下拉選單也會自動抓到。
可以改的東西 — 一頁看完
| 位置 | 改什麼 | 怎麼寫 |
|---|---|---|
from | 上層佈景主題 | dark · light · scifi_dark · medieval_dark · … 或另一份 JSON 佈景主題。省略的鍵沿用它的值;繼承成環就會失敗 |
palette | 背景 · 三層面板 · 邊框 · 三級文字 · 強調色 · 四種狀態色 · 遮罩 · 陰影 · 量條軌道 | "#RRGGBB",帶 alpha 時寫成 "#RRGGBB@0.35" |
只用於填色的鮮豔顏色 *_vivid | 即使文字顏色必須變深,量條仍能保持飽和 — 漏掉一個,產生器會提醒你 | |
| 可讀性 | 不是手動調的。文字、邊框、強調色,以及疊在強調色上的標籤,都由產生器推到達標為止 — 你只改強調色,檢查照樣會過 | |
shape | kind | flat(圓角) · cut(切角) · medieval(鍛造框) |
| 尺寸 | radius · radius_small · radius_large · gap · gap_small · gap_large · padding · button_height · button_padding[4] — token 會跟著走,所以面板與控制項的計算永遠不會對不上 | |
只有 cut 才有 | cut_ratio · cut_max · corners(diagonal|all) · glow · edge | |
只有 medieval 才有 | material(0 鐵 · 1 皮革 · 2 羊皮紙) · grain_alpha · ornament_scale · bevel_strength · fonts — 把 title、subtitle、caption、body、button 對應到附加元件本地的 res:// 字型檔 | |
skin | base — 那些由程式碼自己畫的地方(搖桿、快捷格、徽章、導覽標記的圈、標籤片、分隔線)屬於哪個家族 | 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_alpha | 0.16 | 標籤片面板的填色不透明度。 |
chip_edge_alpha | 0.45 | 標籤片面板的邊緣不透明度。 |
alert_tint | 0.1 | 行內提示的面板往它的狀態色偏多少。 |
slot_tint_lit | 0.24 | 冷卻進行中的快捷格面板的強調色著色量。 |
slot_tint_idle | 0.08 | 閒置時快捷格面板的強調色著色量。 |
slot_border_lit | 2 | 冷卻進行中的快捷格邊框寬度(dp)。 |
slot_border_idle | 1 | 閒置時的快捷格邊框寬度(dp)。 |
badge_pad_x | 5 | 徽章(數量、剩餘時間)的水平內距(dp)。 |
badge_pad_y | 1 | 徽章的垂直內距(dp)。 |
badge_edge_alpha | 0.6 | 徽章面板的邊緣不透明度。 |
float_shadow_alpha | 0.45 | 浮動卡片(導覽標記、提示卡)的陰影不透明度。 |
float_shadow_size | 14 | 浮動卡片的陰影模糊(dp)。 |
float_shadow_lift | 4 | 浮動卡片陰影往下的位移(dp)。 |
float_glow_size | 10.0 | 不投影而改用發光的浮動面板(例如科幻的切角面板)的光暈距離(dp)。 |
joystick_base_alpha | 0.42 | 搖桿底盤的不透明度。 |
joystick_ring_alpha | 0.45 | 搖桿外圈的不透明度。 |
joystick_ring_width | 2.0 | 搖桿外圈的寬度(dp)。 |
科幻外觀 GoSkinSciFi — 10
| 旋鈕 | 預設值 | 設定什麼 |
|---|---|---|
cut_chip | 7.0 | 標籤片面板的切角大小(dp)。 |
cut_skeleton | 5.0 | 骨架佔位面板的切角大小(dp)。 |
cut_alert | 8.0 | 行內提示框的切角大小(dp)。 |
cut_segment | 8.0 | 分段控制項的切角大小(dp)。 |
cut_slot | 6.0 | 快捷格面板的切角大小(dp)。 |
cut_disc_ratio | 0.24 | 頭像與圓盤的切角 = 直徑 × 這個比例。 |
slot_glow_alpha | 0.45 | 冷卻進行中的快捷格的光暈不透明度。 |
slot_glow_size | 6.0 | 冷卻進行中的快捷格的光暈距離(dp)。 |
bracket_arm | 12.0 | 導覽標記瞄準框角的臂長(dp)。 |
bracket_thickness | 2.0 | 導覽標記瞄準框角的線條粗細(dp)。 |
中世紀外觀 GoSkinMedieval — 5
| 旋鈕 | 預設值 | 設定什麼 |
|---|---|---|
slot_radius | 4.0 | 中世紀快捷格外框的圓角半徑(dp)。 |
leather_grain_alpha | 0.035 | 快捷格內側細微皮革紋路的不透明度。 |
ornament_scale | 1.0 | 快捷格角落金屬裝飾的縮放。選單框用的是 shape.ornament_scale。 |
bevel_strength | 0.18 | 快捷格邊緣金屬高光的強度。 |
slot_rivets | 1 | 是否在快捷格上顯示小金屬鉚釘:0 隱藏,1 顯示。 |
繼承外觀(選用)
只有佈景主題與形狀碰不到的東西 — 搖桿的六邊形、快捷格徽章、導覽標記的
瞄準框角 — 才住在外觀裡。繼承 GoSkin,只覆寫那幾個方法,再把 JSON 的
skin 指向那份資源。只改顏色的佈景主題可以略過這一步。
有一項檢查替這個承諾把關。
tools/check_scaffold.sh 每次執行都會建立一份用完即丟的佈景主題 —
改掉強調色、把圓角半徑設成 4 — 並在刪掉它之前驗證產生、token 傳遞與乾淨的對比檢查。
第一次跑就抓到:只改了強調色的佈景主題有8 組配色不合格 — 產生器推了文字顏色,
卻照著原樣使用強調色。現在連強調色與疊在它上面的標籤也一起推。