lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
69 lines • 3.54 kB
JavaScript
import { deg2Rad } from "@lincode/math";
import { assertExhaustive } from "@lincode/utils";
import { physxPtr } from "../../pointers/physxPtr";
import { CM2M } from "../../globals";
import createInternalSystem from "../utils/createInternalSystem";
const getMotion = (val) => {
const { PxD6MotionEnum } = physxPtr[0];
switch (val) {
case "locked":
return PxD6MotionEnum.eLOCKED();
case "limited":
return PxD6MotionEnum.eLIMITED();
case "free":
return PxD6MotionEnum.eFREE();
default:
assertExhaustive(val);
}
};
export const configD6JointSystem = createInternalSystem("configD6JointSystem", {
effect: (self) => {
const { $pxJoint } = self;
if (!$pxJoint)
return;
const { PxD6AxisEnum, PxJointLimitCone, PxJointAngularLimitPair, PxJointLinearLimitPair, destroy } = physxPtr[0];
const { linearX, linearY, linearZ, linearLimitXLow, linearLimitXHigh, linearLimitYLow, linearLimitYHigh, linearLimitZLow, linearLimitZHigh, linearStiffnessX, linearStiffnessY, linearStiffnessZ, linearDampingX, linearDampingY, linearDampingZ, twistX, swingY, swingZ, twistLimitLow, twistLimitHigh, swingLimitY, swingLimitZ, twistStiffness, twistDamping, swingStiffness, swingDamping } = self;
$pxJoint.setMotion(PxD6AxisEnum.eX(), getMotion(linearX));
$pxJoint.setMotion(PxD6AxisEnum.eY(), getMotion(linearY));
$pxJoint.setMotion(PxD6AxisEnum.eZ(), getMotion(linearZ));
if (linearX === "limited") {
const linearLimit = new PxJointLinearLimitPair(linearLimitXLow * CM2M, linearLimitXHigh * CM2M);
linearLimit.stiffness = linearStiffnessX;
linearLimit.damping = linearDampingX;
$pxJoint.setLinearLimit(PxD6AxisEnum.eX(), linearLimit);
destroy(linearLimit);
}
if (linearY === "limited") {
const linearLimit = new PxJointLinearLimitPair(linearLimitYLow * CM2M, linearLimitYHigh * CM2M);
linearLimit.stiffness = linearStiffnessY;
linearLimit.damping = linearDampingY;
$pxJoint.setLinearLimit(PxD6AxisEnum.eY(), linearLimit);
destroy(linearLimit);
}
if (linearZ === "limited") {
const linearLimit = new PxJointLinearLimitPair(linearLimitZLow * CM2M, linearLimitZHigh * CM2M);
linearLimit.stiffness = linearStiffnessZ;
linearLimit.damping = linearDampingZ;
$pxJoint.setLinearLimit(PxD6AxisEnum.eZ(), linearLimit);
destroy(linearLimit);
}
$pxJoint.setMotion(PxD6AxisEnum.eSWING1(), getMotion(swingY));
$pxJoint.setMotion(PxD6AxisEnum.eSWING2(), getMotion(swingZ));
$pxJoint.setMotion(PxD6AxisEnum.eTWIST(), getMotion(twistX));
if (swingY === "limited" || swingZ === "limited") {
const limitCone = new PxJointLimitCone(swingLimitY * deg2Rad, swingLimitZ * deg2Rad);
limitCone.stiffness = swingStiffness;
limitCone.damping = swingDamping;
$pxJoint.setSwingLimit(limitCone);
destroy(limitCone);
}
if (twistX === "limited") {
const limitPair = new PxJointAngularLimitPair(twistLimitLow * deg2Rad, twistLimitHigh * deg2Rad);
limitPair.stiffness = twistStiffness;
limitPair.damping = twistDamping;
$pxJoint.setTwistLimit(limitPair);
destroy(limitPair);
}
}
});
//# sourceMappingURL=configD6JointSystem.js.map