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",带透明度写成 "#RRGGBB@0.35"
仅用于填充的鲜艳色 *_vivid即使文字颜色不得不压暗,状态条也保持饱和 —— 漏写一个,生成器会告诉你
可读性不需要手工调。 文字、边框、强调色以及压在它上面的文字,都由生成器推到达标为止 —— 你只改强调色,检查照样能过
shapekindflat(圆角) · cut(切角) · medieval(锻造边框)
尺寸radius · radius_small · radius_large · gap · gap_small · gap_large · padding · button_height · button_padding[4] —— 令牌会跟着走,所以面板和控件内部的计算永远不会对不上
cutcut_ratio · cut_max · cornersdiagonal|all) · glow · edge
medievalmaterial(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 —— 并验证生成、令牌传播和对比度全过之后再把它删掉。 第一次运行就发现:一套只改了强调色的主题竟有 8 对颜色不达标 —— 生成器推高了文字颜色,却原封不动地用了强调色。现在它连强调色和压在上面的文字也一起推。