Window Utils(GUI 库 - 动画 - 网格对齐) 封面

Window Utils(GUI 库 - 动画 - 网格对齐)

赛博朋克2077实用工具

Window Utils 是用于我的 CET 模组窗口的共享 UI 库与设置悬浮层。它还包含网格吸附、一些视觉点缀以及便利性功能。

预览

前置 Mod

详情

Window Utils 是用于我的 CET 模组窗口的共享 UI 库与设置悬浮层(但其他人也可能用得上)。它的诞生是因为我厌倦了在自己的各个模组之间反复复制同样的样式代码、可折叠面板和按钮长按逻辑。来自 LUT Switcher、Shift 以及我其他项目中所有可复用的东西,最终都汇集到了这一个库里。得益于 Spirit 的 Window Manager 插件,其他模组的窗口也能获得网格吸附和动画效果。对于最终用户来说,有一个设置面板可以自定义所有 CET 窗口的外观与行为。

可与 Window Manager 配合实现外部窗口管理,并与 Window Switcher 配合实现带自定义图标和尺寸调整的任务栏。

核心理念

是否曾打开过十几个 CET 模组窗口,只希望它们能整整齐齐地排列?Window Utils 让混乱归于秩序。它为每个 CET 模组窗口添加了吸附网格、平滑动画、对齐参考线和背景效果,全部都可以通过单个设置面板进行配置。安装 Window Manager 插件后,它还能自动管理其他模组的窗口,无需任何集成。

功能

  • 网格吸附: 拖动窗口时,窗口会吸附到可配置的像素网格上。
  • 平滑动画: 窗口以可配置的缓动和时长滑向吸附位置。
  • 对齐参考线: 在吸附的窗口边缘会显示参考线。拖动时按住 Shift 可将移动锁定在单一轴上。
  • 羽化网格覆盖层: 可视化网格会围绕你的窗口平滑淡出,半径和曲线均可配置。
  • 背景变暗与模糊: 将窗口后方的游戏世界变暗或模糊,以获得更好的对比度。模糊需要 BlurUtils(可选)。
  • 外部窗口管理: 自动将网格吸附和动画应用到其他模组的窗口,无需任何集成。需要 Window Manager 插件。
  • 窗口浏览器: 在一处浏览所有已发现的 CET 窗口。启用/禁用窗口、切换关闭按钮、隐藏或忽略单个窗口。
  • Window Switcher 集成: 与 Window Switcher 配合,提供带自定义图标和逐窗口尺寸调整的任务栏。
  • 逐窗口覆盖设置: 为每个窗口单独配置网格、动画和行为设置。优先级链:主覆盖 > 逐窗口 > 默认值。
  • 设置面板: 用于自定义所有行为的中央 GUI。可搜索的控件、右键重置为默认值、跨会话持久保存。
  • 教程与提示: 引导式走查和脉冲高亮,模组可用它们来引导新用户。

使用方法

  • 将 Window Utils 安装到你的 CET 模组文件夹中。
  • 在游戏内打开 CET 悬浮层。
  • 通过 CET 悬浮层访问设置面板,或在 CET 设置中绑定“Toggle Window Utils GUI”热键。
  • 调整网格大小、动画速度、视觉效果以及逐窗口设置。
  • 所有设置都会自动持久保存。

Window Manager 插件(RedCetWM)

Window Manager 插件是一个 RED4ext 插件,用于向 CET 模组暴露窗口布局数据。Window Utils 将其用于:

  • 覆盖所有窗口: 自动将网格吸附和动画应用到每个 CET 模组窗口,无需模组作者进行任何集成。
  • 窗口浏览器: 浏览、搜索并管理所有已发现的 CET 窗口。

需求:

  • 必须安装 RED4ext。
  • 将 RedCetWM.dll 放入你的 RED4ext 插件文件夹(直接安装 CET Window Manager 即可):
    Cyberpunk 2077/red4ext/plugins/CET Window Manager/RedCetWM.dll
  • Window Utils 会自动检测该插件。若未安装,外部窗口管理功能会被隐藏,其他一切照常工作。

致模组作者

通过将 ImGui.Begin / ImGui.End 替换为 wu.Begin / wu.End 即可集成 Window Utils。网格吸附、动画和折叠跟踪都会自动进行,无需单独调用 Update():

local wu = GetMod("WindowUtils") or ImGui    -- makes it optional

registerForEvent("onDraw", function()

    if wu.Begin("My Window") then

        ImGui.Text("Hello")

    end

    wu.End()

end)

or ImGui 回退意味着无论是否安装 Window Utils,这段代码的运行方式都完全相同。对于改造现有模组,仍然支持手动集成 Update(),详情请参阅 wiki。

绑定系统 - 控件库的核心。用自动读写、右键重置为默认值、搜索变暗和保存持久化来构建整个设置面板:

local c = wu.Controls.bind(settings, defaults, saveSettings, {

    search = mySearch, defs = myDefs

})

c:SectionHeader("Display", "display")

c:SliderFloat(IconGlyphs.Brightness, "brightness", 0, 10)

c:Checkbox("VSync", "vsync")

c:Combo(IconGlyphs.Palette, "theme", {"Dark", "Light"})

wu.Controls.unbind(c)

每个绑定控件都会从你的设置表中读取、在变更时写入、自动保存、右键重置,并在不匹配搜索查询时变暗。无需为每个控件手动接线。

此外还包括: 样式化按钮、滑块、复选框、下拉框、颜色选择器、输入框、工具提示、分割布局、展开面板、标签栏、拖放列表、吐司通知、模态对话框、弹出面板、搜索过滤、图标浏览器和教程。

完整的 API 参考请参阅模组随附的 docs/ 目录。

可选依赖

  • BlurUtils(将在 XUtils 中推出):启用背景模糊效果。若未安装,模糊开关会显示为禁用状态。
  • Window Manager(RedCetWM RED4ext 插件):启用窗口浏览器和外部窗口管理。需要 RED4ext。
  • Window Switcher:启用带自定义图标和窗口尺寸调整的任务栏。

常见问题

  • 问:其他模组需要更新才能使用 Window Utils 吗? 答:不需要。安装 Window Manager 插件并启用“覆盖所有窗口”后,Window Utils 会自动管理任何 CET 模组窗口。
  • 问:这会与其他模组冲突吗? 答:不会。Window Utils 不会修改游戏文件。它只影响 CET ImGui 窗口的行为。
  • 问:我可以为特定窗口禁用它吗? 答:可以。使用窗口浏览器或逐窗口配置覆盖。
  • 问:如果我卸载它会怎样? 答:已集成 Window Utils 的模组会跳过 GetMod("WindowUtils") 调用,并像以前一样工作。不会留下永久性更改。
  • 问:模糊开关是灰色的? 答:安装 UXtils 以启用背景模糊(尚未发布)。

Wiki

https://github.com/CyanideX/Window-Utils/wiki

网页编辑器(开发中)

https://cyanidex.github.io/Window-Utils/editor/

计划中

  • 本地化

致谢

排名不分先后,向以下各位致以绝对万分感谢:psiberx、KeanuWheeze、spirit、misterchedda、anygoodname、Rayshader、ultramatt、lazorr、robber、Alithea、MartinVanStorm、Akiway、DZK、roms1383。❤️

如果我漏掉了其他任何人,我诚挚地道歉。赛博朋克模组 Discord 是我们能拥有这些美好事物的原因,感谢大家给予的指导以及愿意帮我排查问题的热心。