Skip to content

Commit

Permalink
Merge pull request #77 from LeXXik/character
Browse files Browse the repository at this point in the history
Character step walking
  • Loading branch information
LeXXik authored Aug 20, 2024
2 parents 1158ad3 + 03b794d commit 7bafe5b
Show file tree
Hide file tree
Showing 15 changed files with 653 additions and 164 deletions.
18 changes: 9 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@gamebop/physics",
"description": "Physics components for PlayCanvas engine",
"version": "0.2.1",
"version": "0.3.0",
"main": "dist/physics.min.mjs",
"author": "Gamebop",
"license": "MIT",
Expand Down Expand Up @@ -52,7 +52,7 @@
"dist/*"
],
"peerDependencies": {
"jolt-physics": "^0.24.0",
"jolt-physics": "^0.25.0",
"playcanvas": "^1.71.3"
},
"devDependencies": {
Expand Down
32 changes: 8 additions & 24 deletions src/physics/jolt/back/backend.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -361,11 +361,6 @@ class JoltBackend {

this._dispatcher = null;

if (this._charUpdateSettings) {
Jolt.destroy(this._charUpdateSettings);
this._charUpdateSettings = null;
}

if (this._joltInterface) {
Jolt.destroy(this._joltInterface);
this._joltInterface = null;
Expand Down Expand Up @@ -497,34 +492,26 @@ class JoltBackend {
const characters = this._tracker.character;
if (characters.size === 0) return true;

const movingBPFilter = this._bpFilter;
const movingLayerFilter = this._objFilter;
const defaultMovingBPLayerFilter = this._bpFilter;
const defaultMovingObjLayerFilter = this._objFilter;
const bodyFilter = this._bodyFilter;
const shapeFilter = this._shapeFilter;
let updateSettings = this._charUpdateSettings;

try {
if (!updateSettings) {
updateSettings = this._charUpdateSettings = new Jolt.ExtendedUpdateSettings();
}
const allocator = joltInterface.GetTempAllocator();

// TODO
// make it customizable, like the raycast
// const objectVsBroadPhaseLayerFilter = joltInterface.GetObjectVsBroadPhaseLayerFilter();
// const objectLayerPairFilter = joltInterface.GetObjectLayerPairFilter();
// const movingBPFilter = new Jolt.DefaultBroadPhaseLayerFilter(objectVsBroadPhaseLayerFilter, BP_LAYER_MOVING);
// const movingLayerFilter = new Jolt.DefaultObjectLayerFilter(objectLayerPairFilter, 2);

characters.forEach((char) => {
// body filter for paired body
// TODO
// switch to new Jolt's inner body, instead of paired body
const bFilter = char.bodyFilter || bodyFilter;

char.ExtendedUpdate(
fixedStep,
char.GetUp(),
updateSettings,
movingBPFilter,
movingLayerFilter,
char.updateSettings,
char.bpFilter ? char.bpFilter : defaultMovingBPLayerFilter,
char.objFilter ? char.objFilter : defaultMovingObjLayerFilter,
bFilter,
shapeFilter,
allocator
Expand All @@ -540,9 +527,6 @@ class JoltBackend {
bodyInterface.MoveKinematic(pairedBody.GetID(), pos, Jolt.Quat.prototype.sIdentity(), fixedStep);
}
});

// Jolt.destroy(movingBPFilter);
// Jolt.destroy(movingLayerFilter);
} catch (e) {
if ($_DEBUG) {
Debug.error(e);
Expand Down
10 changes: 10 additions & 0 deletions src/physics/jolt/back/operators/cleaner.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,19 @@ class Cleaner {

if (body.isCharacter) {
if (body.bodyFilter) {
// body filter for paired body
Jolt.destroy(body.bodyFilter);
}

if (body.bpFilter) {
Jolt.destroy(body.bpFilter);
}

if (body.objFilter) {
Jolt.destroy(body.objFilter);
}

Jolt.destroy(body.updateSettings);
Jolt.destroy(body);
} else {
const id = body.GetID();
Expand Down
24 changes: 22 additions & 2 deletions src/physics/jolt/back/operators/creator.mjs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Debug } from '../../debug.mjs';
import { MotionState } from '../motion-state.mjs';
import {
BFM_IGNORE_BACK_FACES, BUFFER_READ_BOOL, BUFFER_READ_FLOAT32,
BFM_IGNORE_BACK_FACES, BP_LAYER_MOVING, BUFFER_READ_BOOL, BUFFER_READ_FLOAT32,
BUFFER_READ_UINT16, BUFFER_READ_UINT32, BUFFER_READ_UINT8, CMD_CREATE_BODY,
CMD_CREATE_CHAR, CMD_CREATE_CONSTRAINT, CMD_CREATE_GROUPS, CMD_CREATE_SHAPE,
CMD_CREATE_SOFT_BODY, CMD_CREATE_VEHICLE, MOTION_QUALITY_DISCRETE, MOTION_TYPE_DYNAMIC,
MOTION_TYPE_KINEMATIC, OMP_CALCULATE_MASS_AND_INERTIA, OMP_MASS_AND_INERTIA_PROVIDED,
MOTION_TYPE_KINEMATIC, OBJ_LAYER_MOVING, OMP_CALCULATE_MASS_AND_INERTIA, OMP_MASS_AND_INERTIA_PROVIDED,
SHAPE_BOX, SHAPE_CAPSULE, SHAPE_CONVEX_HULL, SHAPE_CYLINDER, SHAPE_HEIGHTFIELD, SHAPE_MESH,
SHAPE_SPHERE, SHAPE_STATIC_COMPOUND
} from '../../constants.mjs';
Expand Down Expand Up @@ -630,6 +630,7 @@ class Creator {
const Jolt = backend.Jolt;
const listener = backend.listener;
const config = backend.config;
const joltInterface = backend.joltInterface;
const charEvents = config.charContactEventsEnabled;
const jv = this._joltVec3;
const jq = this._joltQuat;
Expand Down Expand Up @@ -691,6 +692,25 @@ class Creator {
}

const character = new Jolt.CharacterVirtual(settings, jv, jq, backend.physicsSystem);
const updateSettings = new Jolt.ExtendedUpdateSettings();

updateSettings.mStickToFloorStepDown.FromBuffer(cb);
updateSettings.mWalkStairsStepUp.FromBuffer(cb);
updateSettings.mWalkStairsMinStepForward = cb.read(BUFFER_READ_FLOAT32);
updateSettings.mWalkStairsStepForwardTest = cb.read(BUFFER_READ_FLOAT32);
updateSettings.mWalkStairsCosAngleForwardContact = cb.read(BUFFER_READ_FLOAT32);
updateSettings.mWalkStairsStepDownExtra.FromBuffer(cb);

const bpLayer = cb.read(BUFFER_READ_UINT16);
const objLayer = cb.read(BUFFER_READ_UINT16);

character.bpFilter = bpLayer !== BP_LAYER_MOVING ? new Jolt.DefaultBroadPhaseLayerFilter(
joltInterface.GetObjectVsBroadPhaseLayerFilter(), bpLayer) : null;

character.objFilter = objLayer !== OBJ_LAYER_MOVING ? new Jolt.DefaultObjectLayerFilter(
joltInterface.GetObjectLayerPairFilter(), objLayer) : null;

character.updateSettings = updateSettings;

if ($_DEBUG) {
character.debugDrawDepth = cb.read(BUFFER_READ_BOOL);
Expand Down
Loading

0 comments on commit 7bafe5b

Please sign in to comment.