テーマを1つ足すのに、かつては4か所を手で編集する必要があった — ビルダーのパレット、形、スキン、 プリセットのリソース。いまは1つのコマンドがすべてを置いてくれる。
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/ を
走査して見つけるので、登録コードの変更はいらない — プロジェクト設定のドロップダウンにも同じように載る。
変えられるもの — 1ページで
| 場所 | 何を | どう書くか |
|---|---|---|
from | 継承元のテーマ | dark · light · scifi_dark · medieval_dark · … あるいは別の JSON テーマ。書かなかったキーはその値を継承し、循環すると失敗する |
palette | 背景 · 3つのサーフェス · 枠 · 3段階の文字色 · アクセント · 4つの状態色 · 幕 · 影 · バーの溝 | "#RRGGBB"、アルファ付きは "#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] — トークンも一緒に動くので、パネルとウィジェットの計算が食い違わない | |
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 — それらの場所の数値。スロットの枠の太さと色味、バッジの余白、チップとアラートの不透明度、スティックのリングの太さと不透明度、SF の面取り寸法、発光とブラケット | 親の値はすべて 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 | SF の面取りパネルのように、影ではなく発光を使う浮かぶパネルの発光距離(dp)。 |
joystick_base_alpha | 0.42 | スティックの土台の円の不透明度。 |
joystick_ring_alpha | 0.45 | スティックのリングの不透明度。 |
joystick_ring_width | 2.0 | スティックのリングの太さ(dp)。 |
SF スキン 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 にして — 生成・トークンの伝播・コントラスト検査の通過までを確かめてから消す。
最初の実行では、アクセントだけを変えたテーマが8組で不足していた。ビルダーが文字色は押し上げるのに、
アクセントは書かれたまま使っていたのだ。いまはアクセントと、その上のラベルも押し上げる。