feat: 添加跨平台运行时、资产系统和UI适配功能 (#256)
* feat(platform-common): 添加WASM加载器和环境检测API * feat(rapier2d): 新增Rapier2D WASM绑定包 * feat(physics-rapier2d): 添加跨平台WASM加载器 * feat(asset-system): 添加运行时资产目录和bundle格式 * feat(asset-system-editor): 新增编辑器资产管理包 * feat(editor-core): 添加构建系统和模块管理 * feat(editor-app): 重构浏览器预览使用import maps * feat(platform-web): 添加BrowserRuntime和资产读取 * feat(engine): 添加材质系统和着色器管理 * feat(material): 新增材质系统和着色器编辑器 * feat(tilemap): 增强tilemap编辑器和动画系统 * feat(modules): 添加module.json配置 * feat(core): 添加module.json和类型定义更新 * chore: 更新依赖和构建配置 * refactor(plugins): 更新插件模板使用ModuleManifest * chore: 添加第三方依赖库 * chore: 移除BehaviourTree-ai和ecs-astar子模块 * docs: 更新README和文档主题样式 * fix: 修复Rust文档测试和添加rapier2d WASM绑定 * fix(tilemap-editor): 修复画布高DPI屏幕分辨率适配问题 * feat(ui): 添加UI屏幕适配系统(CanvasScaler/SafeArea) * fix(ecs-engine-bindgen): 添加缺失的ecs-framework-math依赖 * fix: 添加缺失的包依赖修复CI构建 * fix: 修复CodeQL检测到的代码问题 * fix: 修复构建错误和缺失依赖 * fix: 修复类型检查错误 * fix(material-system): 修复tsconfig配置支持TypeScript项目引用 * fix(editor-core): 修复Rollup构建配置添加tauri external * fix: 修复CodeQL检测到的代码问题 * fix: 修复CodeQL检测到的代码问题
This commit is contained in:
190
packages/rapier2d/src/dynamics/multibody_joint.ts
Normal file
190
packages/rapier2d/src/dynamics/multibody_joint.ts
Normal file
@@ -0,0 +1,190 @@
|
||||
import {
|
||||
RawImpulseJointSet,
|
||||
RawJointAxis,
|
||||
RawJointType,
|
||||
RawMultibodyJointSet,
|
||||
} from "../raw";
|
||||
import {
|
||||
FixedImpulseJoint,
|
||||
ImpulseJointHandle,
|
||||
JointType,
|
||||
MotorModel,
|
||||
PrismaticImpulseJoint,
|
||||
RevoluteImpulseJoint,
|
||||
} from "./impulse_joint";
|
||||
|
||||
|
||||
/**
|
||||
* The integer identifier of a collider added to a `ColliderSet`.
|
||||
*/
|
||||
export type MultibodyJointHandle = number;
|
||||
|
||||
export class MultibodyJoint {
|
||||
protected rawSet: RawMultibodyJointSet; // The MultibodyJoint won't need to free this.
|
||||
handle: MultibodyJointHandle;
|
||||
|
||||
constructor(rawSet: RawMultibodyJointSet, handle: MultibodyJointHandle) {
|
||||
this.rawSet = rawSet;
|
||||
this.handle = handle;
|
||||
}
|
||||
|
||||
public static newTyped(
|
||||
rawSet: RawMultibodyJointSet,
|
||||
handle: MultibodyJointHandle,
|
||||
): MultibodyJoint {
|
||||
switch (rawSet.jointType(handle)) {
|
||||
case RawJointType.Revolute:
|
||||
return new RevoluteMultibodyJoint(rawSet, handle);
|
||||
case RawJointType.Prismatic:
|
||||
return new PrismaticMultibodyJoint(rawSet, handle);
|
||||
case RawJointType.Fixed:
|
||||
return new FixedMultibodyJoint(rawSet, handle);
|
||||
default:
|
||||
return new MultibodyJoint(rawSet, handle);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this joint is still valid (i.e. that it has
|
||||
* not been deleted from the joint set yet).
|
||||
*/
|
||||
public isValid(): boolean {
|
||||
return this.rawSet.contains(this.handle);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * The unique integer identifier of the first rigid-body this joint it attached to.
|
||||
// */
|
||||
// public bodyHandle1(): RigidBodyHandle {
|
||||
// return this.rawSet.jointBodyHandle1(this.handle);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * The unique integer identifier of the second rigid-body this joint is attached to.
|
||||
// */
|
||||
// public bodyHandle2(): RigidBodyHandle {
|
||||
// return this.rawSet.jointBodyHandle2(this.handle);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * The type of this joint given as a string.
|
||||
// */
|
||||
// public type(): JointType {
|
||||
// return this.rawSet.jointType(this.handle);
|
||||
// }
|
||||
//
|
||||
// // #if DIM3
|
||||
// /**
|
||||
// * The rotation quaternion that aligns this joint's first local axis to the `x` axis.
|
||||
// */
|
||||
// public frameX1(): Rotation {
|
||||
// return RotationOps.fromRaw(this.rawSet.jointFrameX1(this.handle));
|
||||
// }
|
||||
//
|
||||
// // #endif
|
||||
//
|
||||
// // #if DIM3
|
||||
// /**
|
||||
// * The rotation matrix that aligns this joint's second local axis to the `x` axis.
|
||||
// */
|
||||
// public frameX2(): Rotation {
|
||||
// return RotationOps.fromRaw(this.rawSet.jointFrameX2(this.handle));
|
||||
// }
|
||||
//
|
||||
// // #endif
|
||||
//
|
||||
// /**
|
||||
// * The position of the first anchor of this joint.
|
||||
// *
|
||||
// * The first anchor gives the position of the points application point on the
|
||||
// * local frame of the first rigid-body it is attached to.
|
||||
// */
|
||||
// public anchor1(): Vector {
|
||||
// return VectorOps.fromRaw(this.rawSet.jointAnchor1(this.handle));
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * The position of the second anchor of this joint.
|
||||
// *
|
||||
// * The second anchor gives the position of the points application point on the
|
||||
// * local frame of the second rigid-body it is attached to.
|
||||
// */
|
||||
// public anchor2(): Vector {
|
||||
// return VectorOps.fromRaw(this.rawSet.jointAnchor2(this.handle));
|
||||
// }
|
||||
|
||||
/**
|
||||
* Controls whether contacts are computed between colliders attached
|
||||
* to the rigid-bodies linked by this joint.
|
||||
*/
|
||||
public setContactsEnabled(enabled: boolean) {
|
||||
this.rawSet.jointSetContactsEnabled(this.handle, enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if contacts are enabled between colliders attached
|
||||
* to the rigid-bodies linked by this joint.
|
||||
*/
|
||||
public contactsEnabled(): boolean {
|
||||
return this.rawSet.jointContactsEnabled(this.handle);
|
||||
}
|
||||
}
|
||||
|
||||
export class UnitMultibodyJoint extends MultibodyJoint {
|
||||
/**
|
||||
* The axis left free by this joint.
|
||||
*/
|
||||
protected rawAxis?(): RawJointAxis;
|
||||
|
||||
// /**
|
||||
// * Are the limits enabled for this joint?
|
||||
// */
|
||||
// public limitsEnabled(): boolean {
|
||||
// return this.rawSet.jointLimitsEnabled(this.handle, this.rawAxis());
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * The min limit of this joint.
|
||||
// */
|
||||
// public limitsMin(): number {
|
||||
// return this.rawSet.jointLimitsMin(this.handle, this.rawAxis());
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * The max limit of this joint.
|
||||
// */
|
||||
// public limitsMax(): number {
|
||||
// return this.rawSet.jointLimitsMax(this.handle, this.rawAxis());
|
||||
// }
|
||||
//
|
||||
// public configureMotorModel(model: MotorModel) {
|
||||
// this.rawSet.jointConfigureMotorModel(this.handle, this.rawAxis(), model);
|
||||
// }
|
||||
//
|
||||
// public configureMotorVelocity(targetVel: number, factor: number) {
|
||||
// this.rawSet.jointConfigureMotorVelocity(this.handle, this.rawAxis(), targetVel, factor);
|
||||
// }
|
||||
//
|
||||
// public configureMotorPosition(targetPos: number, stiffness: number, damping: number) {
|
||||
// this.rawSet.jointConfigureMotorPosition(this.handle, this.rawAxis(), targetPos, stiffness, damping);
|
||||
// }
|
||||
//
|
||||
// public configureMotor(targetPos: number, targetVel: number, stiffness: number, damping: number) {
|
||||
// this.rawSet.jointConfigureMotor(this.handle, this.rawAxis(), targetPos, targetVel, stiffness, damping);
|
||||
// }
|
||||
}
|
||||
|
||||
export class FixedMultibodyJoint extends MultibodyJoint {}
|
||||
|
||||
export class PrismaticMultibodyJoint extends UnitMultibodyJoint {
|
||||
public rawAxis(): RawJointAxis {
|
||||
return RawJointAxis.LinX;
|
||||
}
|
||||
}
|
||||
|
||||
export class RevoluteMultibodyJoint extends UnitMultibodyJoint {
|
||||
public rawAxis(): RawJointAxis {
|
||||
return RawJointAxis.AngX;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user