@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
63 lines (62 loc) • 2.05 kB
JavaScript
;
import { CorePhysicsAttribute } from "../PhysicsAttribute";
import { _getRBDFromObject } from "../PhysicsRBD";
import { CorePlayerPhysics } from "./CorePlayerPhysics";
const physicsCharacterControllerByIdByObjectUuid = /* @__PURE__ */ new Map();
export var PhysicsPlayerType = /* @__PURE__ */ ((PhysicsPlayerType2) => {
PhysicsPlayerType2["CHARACTER_CONTROLLER"] = "characterController";
PhysicsPlayerType2["TORQUE"] = "torque";
return PhysicsPlayerType2;
})(PhysicsPlayerType || {});
export function clearPhysicsPlayers() {
physicsCharacterControllerByIdByObjectUuid.forEach((map, id) => {
map.forEach((player) => {
player.dispose();
});
map.clear();
});
physicsCharacterControllerByIdByObjectUuid.clear();
}
export function createOrFindPhysicsPlayer(options) {
const { scene, object, PhysicsLib: PhysicsLib2, world, worldObject } = options;
let player = findPhysicsPlayer(object);
if (!player) {
const characterControllerId = CorePhysicsAttribute.getCharacterControllerId(object);
if (!characterControllerId) {
return;
}
const body = _getRBDFromObject(object);
if (!body) {
return;
}
const collider = body.collider(0);
if (!collider) {
return;
}
player = new CorePlayerPhysics({
scene,
object,
PhysicsLib: PhysicsLib2,
world,
worldObject,
body,
collider,
type: "torque" /* TORQUE */
});
let map = physicsCharacterControllerByIdByObjectUuid.get(characterControllerId);
if (!map) {
map = /* @__PURE__ */ new Map();
physicsCharacterControllerByIdByObjectUuid.set(characterControllerId, map);
}
map.set(object.uuid, player);
}
return player;
}
export function findPhysicsPlayer(object) {
var _a;
const characterControllerId = CorePhysicsAttribute.getCharacterControllerId(object);
if (!characterControllerId) {
return;
}
return (_a = physicsCharacterControllerByIdByObjectUuid.get(characterControllerId)) == null ? void 0 : _a.get(object.uuid);
}