Skip to content

Commit

Permalink
fix bpmx converter does not serialize bone flags
Browse files Browse the repository at this point in the history
  • Loading branch information
noname0310 committed Jun 13, 2024
1 parent b5d2fdc commit 8cf034e
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 8 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
- you can find the wasm version of ammo.js in `babylon-mmd/esm/Runtime/Physics/External/ammo.wasm`
- this distribution of ammo.js has been modified to work with bundlers like Webpack

- fix bpmx converter does not serialize bone flags correctly

## 0.46.0 (2024-06-08)

- improve CreateMmdModelOptions parameter type
Expand Down
2 changes: 1 addition & 1 deletion docs/static/pmx_converter/main.bundle.js

Large diffs are not rendered by default.

25 changes: 18 additions & 7 deletions src/Loader/Optimized/bpmxConverter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -491,13 +491,24 @@ export class BpmxConverter implements ILogger {
const externalParentTransform = boneMetadata.externalParentTransform;
const ik = boneMetadata.ik; // remapped later

let flag = (boneMetadata.flag ?? 0) &
(!Array.isArray(tailPosition) ? 0 : ~PmxObject.Bone.Flag.UseBoneIndexAsTailPosition) &
(appendTransform ? 0 : (~PmxObject.Bone.Flag.HasAppendRotate | ~PmxObject.Bone.Flag.HasAppendMove)) &
(axisLimit ? 0 : ~PmxObject.Bone.Flag.HasAxisLimit) &
(localVector ? 0 : ~PmxObject.Bone.Flag.HasLocalVector) &
(externalParentTransform ? 0 : ~PmxObject.Bone.Flag.IsExternalParentTransformed) &
(ik ? 0 : ~PmxObject.Bone.Flag.IsIkEnabled);
let flag = 0;
if (boneMetadata.flag) {
flag = boneMetadata.flag;
} else {
flag =
PmxObject.Bone.Flag.IsRotatable |
PmxObject.Bone.Flag.IsMovable |
PmxObject.Bone.Flag.IsVisible |
PmxObject.Bone.Flag.IsControllable;
}

flag &=
(!Array.isArray(tailPosition) ? ~0 : ~PmxObject.Bone.Flag.UseBoneIndexAsTailPosition) &
(appendTransform ? ~0 : (~PmxObject.Bone.Flag.HasAppendRotate | ~PmxObject.Bone.Flag.HasAppendMove)) &
(axisLimit ? ~0 : ~PmxObject.Bone.Flag.HasAxisLimit) &
(localVector ? ~0 : ~PmxObject.Bone.Flag.HasLocalVector) &
(externalParentTransform ? ~0 : ~PmxObject.Bone.Flag.IsExternalParentTransformed) &
(ik ? ~0 : ~PmxObject.Bone.Flag.IsIkEnabled);
flag |=
(!Array.isArray(tailPosition) ? PmxObject.Bone.Flag.UseBoneIndexAsTailPosition : 0) |
(appendTransform ? PmxObject.Bone.Flag.HasAppendRotate | PmxObject.Bone.Flag.HasAppendMove : 0) |
Expand Down

0 comments on commit 8cf034e

Please sign in to comment.