UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

63 lines (62 loc) 2.05 kB
"use strict"; 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); }