@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
44 lines (40 loc) • 1.32 kB
text/typescript
import {Object3DWithGeometry} from '../../../core/geometry/Group';
import {PlayerCollisionController} from './collisions/PlayerCollisionsController';
import {Object3D} from 'three';
import {Mesh} from 'three';
import {Capsule} from 'three/examples/jsm/math/Capsule';
import {EventDispatcher} from 'three';
import {Vector3} from 'three';
export interface JumpParams {
duration: number;
force: number;
}
export class BaseCollisionHandler extends EventDispatcher<{change: any}> {
protected _playerCollisionController: PlayerCollisionController | undefined;
setCheckCollisions(collisionObject?: Object3D) {
if (collisionObject) {
let objectWithGeo: Object3DWithGeometry | undefined;
collisionObject.traverse((child) => {
if (!objectWithGeo) {
const mesh = child as Mesh;
if (mesh.geometry) {
objectWithGeo = mesh;
}
}
});
if (objectWithGeo) {
this._playerCollisionController = new PlayerCollisionController(objectWithGeo);
} else {
console.error('no geo found in', collisionObject);
}
} else {
this._playerCollisionController = undefined;
}
}
setCollisionCapsule(capsule: Capsule) {
this._playerCollisionController?.setCapsule(capsule);
}
setJumpParams(params: JumpParams) {}
setGravity(gravity: Vector3) {}
setPlayerMass(mass: number) {}
}