Skip to content

[codex] 为各玩家姿态添加独立相机旋转设置#209

Open
rsdadada wants to merge 3 commits into
xTracr:26.1/devfrom
rsdadada:codex/posture-pitch-adjustments
Open

[codex] 为各玩家姿态添加独立相机旋转设置#209
rsdadada wants to merge 3 commits into
xTracr:26.1/devfrom
rsdadada:codex/posture-pitch-adjustments

Conversation

@rsdadada
Copy link
Copy Markdown

@rsdadada rsdadada commented May 27, 2026

总体思路

这个 PR 将绑定模式中的“姿态俯仰修正”改为“按玩家姿态保存完整相机旋转”。旧实现只在基础 pitch 上叠加游泳/爬行 pitch adjustment,容易让配置者误解;现在 STANDSNEAKINGSWIMMINGCRAWLING 四种姿态各自拥有独立的 pitch/yaw/roll,运行时、热键调整、模型视图预览和导入导出都围绕同一个姿态枚举工作。

配置兼容策略是:导出的绑定配置版本升级到 0.7.8,直接写入四种姿态的完整旋转;旧 0.7.3 导入仍受支持,并把旧的单组 pitch/yaw/roll 复制到全部姿态,避免旧配置导入后姿态间出现意外差异。

代码增改明细

  • common/build.gradle.kts

    • 增加 JUnit Jupiter 测试依赖和 JUnit Platform launcher runtime 依赖。
    • Test 任务启用 useJUnitPlatform(),使 common 模块可以运行新增单元测试。
  • common/src/main/java/com/xtracr/realcamera/KeyMappings.java

    • 引入 CameraPosture
    • 前/后/上/下/左/右六个调整快捷键都改为从 client.player 计算当前姿态,并把姿态传给 ModConfig 的对应调整方法。
    • 结果是绑定模式下调整旋转时会修改当前姿态的独立 roll/yaw/pitch,不再只修改通用旋转值。
  • common/src/main/java/com/xtracr/realcamera/RealCameraCore.java

    • 计算绑定相机时通过 CameraPosture.from(entity) 获取当前姿态。
    • 调用 BindResult.computeCamera(false, posture),使运行时相机直接使用当前姿态的完整旋转。
  • common/src/main/java/com/xtracr/realcamera/api/BindResult.java

    • 引入 CameraPosture
    • computeCamera(boolean mirrored) 保留,并默认使用 CameraPosture.STAND
    • 新增 computeCamera(boolean mirrored, CameraPosture posture)
    • yaw、pitch、roll 三个本地旋转都改为通过 OffsetConfig 按姿态读取,不再传入或叠加 pitch adjustment。
  • common/src/main/java/com/xtracr/realcamera/config/CameraPosture.java

    • 新增玩家姿态枚举:STANDSNEAKINGSWIMMINGCRAWLING
    • 新增 from(Entity):非玩家或默认状态返回 STAND;玩家按游泳、视觉爬行、潜行、站立的顺序判定。
  • common/src/main/java/com/xtracr/realcamera/config/ConfigScreen.java

    • 补齐文件末尾换行,无功能逻辑变化。
  • common/src/main/java/com/xtracr/realcamera/config/ModConfig.java

    • adjustOffsetX/Y/Z 分别增加带 CameraPosture 参数的重载,原无姿态参数的方法默认使用 STAND
    • 绑定模式且处于偏移调整时仍只修改 x/y/z 并在同一分支 clamp。
    • 绑定模式且处于旋转调整时分别调用 OffsetConfig.adjustRoll/adjustYaw/adjustPitch(posture, delta),让热键调整写入当前姿态的独立旋转。
    • 保持经典模式调整逻辑不变。
    • 补齐文件末尾换行。
  • common/src/main/java/com/xtracr/realcamera/config/OffsetConfig.java

    • 保留 scale/x/y/z 和站立姿态的 pitch/yaw/roll 字段。
    • 新增潜行、游泳、爬行三组完整旋转字段:sneakingPitch/Yaw/RollswimmingPitch/Yaw/RollcrawlingPitch/Yaw/Roll
    • 旧 7 参数构造函数改为把同一组 pitch/yaw/roll 复制到四种姿态。
    • 新增完整构造函数,可一次传入四种姿态的全部旋转值。
    • clamp() 现在 wrap 四种姿态的全部旋转角。
    • 新增 pitch/yaw/roll(CameraPosture) 按姿态读取旋转。
    • 新增 setRotation(CameraPosture, pitch, yaw, roll) 按姿态写入整组旋转并 clamp。
    • 新增 adjustPitch/adjustYaw/adjustRoll(CameraPosture, value),只调整对应姿态的单个旋转轴。
    • write(FriendlyByteBuf) 改为依次写入四种姿态的 pitch/yaw/roll,移除旧的游泳/爬行 pitch adjustment 写法。
  • common/src/main/java/com/xtracr/realcamera/config/serialization/ConfigSerializer.java

    • 注册新增的 ConfigSerializer708
    • 导出绑定配置时写入版本从 0.7.3 改为 0.7.8
    • 读取端同时保留 0.7.30.7.8
  • common/src/main/java/com/xtracr/realcamera/config/serialization/ConfigSerializer708.java

    • 新增 0.7.8 绑定配置反序列化器。
    • readOffsetConfigscale/x/y/z 后读取四种姿态各自的 pitch/yaw/roll
    • 构造新格式 OffsetConfig,保持目标配置、绑定轴配置、禁用配置、UV 矩形读取逻辑完整。
  • common/src/main/java/com/xtracr/realcamera/gui/ModelAnalyser.java

    • 引入 CameraPosture
    • captureModel 和内部 computeRecord 的额外参数从 float pitchAdjustment 改为 CameraPosture posture
    • 预览中计算绑定相机时调用 BindResult.computeCamera(true, posture),使用当前预览姿态的完整旋转。
  • common/src/main/java/com/xtracr/realcamera/gui/ModelViewScreen.java

    • 新增潜行、游泳、爬行三组 pitch/yaw/roll 数值控件;站立继续使用原三组控件。
    • widgetPairs 扩展为包含四种姿态的全部旋转控件,使滑块/输入框切换与归零按钮覆盖全部姿态值。
    • 新增小尺寸姿态切换按钮,选项为站立、潜行、游泳、爬行。
    • 预览页旋转区域按当前姿态显示并编辑对应的 pitch/yaw/roll 三个控件。
    • 重置预览按钮会把姿态切回 STAND 并刷新控件。
    • 模型捕获预览传入当前 CameraPosture,不再传 pitch adjustment。
    • loadBindTargetOffsetConfig 中按四种姿态读取全部旋转值并填入控件。
    • genBindTarget 从四种姿态的控件生成新格式 OffsetConfig
    • 新增 currentPitchPair/currentYawPair/currentRollPair/previewPosture 辅助方法。
  • common/src/main/resources/assets/realcamera/lang/en_us.json

    • 将 pitch 文案从基础俯仰/修正语义改为普通 Pitch
    • 移除游泳/爬行 pitch adjustment 文案。
    • 更新姿态 tooltip 为“按姿态调整旋转值”。
    • 新增 standPosturesneakingPosture,并保留/使用游泳、爬行姿态文案。
    • 补齐文件末尾换行。
  • common/src/main/resources/assets/realcamera/lang/zh_cn.json

    • 将 pitch 文案从“基础俯仰角/修正”改为普通“俯仰角”。
    • 移除游泳/爬行 pitch adjustment 文案。
    • 更新姿态 tooltip 为“预览并调整每种姿态的旋转值”。
    • 新增 standPosturesneakingPosture,并保留/使用游泳、爬行姿态文案。
    • 补齐文件末尾换行。
  • common/src/main/resources/assets/realcamera/lang/zh_hk.json

    • 新增姿态 tooltip。
    • 新增姿态按钮文案以及站立、潜行、游泳、爬行四个姿态选项。
    • 补齐新增 UI 在繁体中文香港语言下的本地化。
    • 补齐文件末尾换行。
  • common/src/main/resources/assets/realcamera/lang/zh_tw.json

    • 新增姿态 tooltip。
    • 新增姿态按钮文案以及站立、潜行、游泳、爬行四个姿态选项。
    • 补齐新增 UI 在繁体中文台湾语言下的本地化。
    • 补齐文件末尾换行。
  • common/src/test/java/com/xtracr/realcamera/config/OffsetConfigTest.java

    • 新增测试,覆盖四种姿态旋转互不覆盖。
    • 新增测试,覆盖按姿态调整旋转后角度 wrap 行为。
  • common/src/test/java/com/xtracr/realcamera/config/serialization/ConfigSerializer703Test.java

    • 新增测试,覆盖旧 0.7.3 绑定配置读取时会把旧 pitch/yaw/roll 复制到每一种 CameraPosture

验证

  • ./gradlew.bat build

@rsdadada rsdadada changed the title [codex] Add posture-specific pitch adjustments [codex] 为站立、游泳和爬行姿态添加独立俯仰角设置 May 27, 2026
@rsdadada rsdadada marked this pull request as ready for review May 28, 2026 05:10
@rsdadada rsdadada changed the title [codex] 为站立、游泳和爬行姿态添加独立俯仰角设置 [codex] 为各玩家姿态添加独立相机旋转设置 May 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant