@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
110 lines (109 loc) • 3.26 kB
JavaScript
;
import { Vector3 } from "three";
import { CorePlayer } from "../../core/player/PlayerSimple";
import { dummyReadRefVal } from "../../core/reactivity/CoreReactivity";
import { CapsuleSopOperation } from "../operations/sop/Capsule";
import { ObjectNamedFunction0, ObjectNamedFunction1 } from "./_Base";
function _createInputData() {
return { forward: false, backward: false, left: false, right: false, run: false, jump: false };
}
function _createComputeData() {
return {
collider: void 0,
speed: 2,
runAllowed: true,
runSpeedMult: 2,
jumpAllowed: true,
jumpStrength: 10,
physicsSteps: 5,
gravity: new Vector3(0, -9.8, 0),
capsuleInput: {
radius: CapsuleSopOperation.DEFAULT_PARAMS.radius,
height: CapsuleSopOperation.DEFAULT_PARAMS.height
}
};
}
const _elementByObject3D = /* @__PURE__ */ new WeakMap();
function _findOrCreateElement(object3D) {
let element = _elementByObject3D.get(object3D);
if (element) {
return element;
}
element = {
player: new CorePlayer(object3D),
inputData: _createInputData(),
computeData: _createComputeData()
};
_elementByObject3D.set(object3D, element);
return element;
}
export class playerSimpleUpdate extends ObjectNamedFunction1 {
static type() {
return "playerSimpleUpdate";
}
func(object3D, options) {
const {
collider,
speed,
runAllowed,
runSpeedMult,
jumpAllowed,
jumpStrength,
physicsSteps,
gravity,
capsuleRadius,
capsuleHeight,
left,
right,
backward,
forward,
run,
jump
} = options;
const { player, inputData, computeData } = _findOrCreateElement(object3D);
if (collider.geometry && collider.geometry.boundsTree) {
computeData.collider = collider;
} else {
computeData.collider = void 0;
}
computeData.speed = speed;
computeData.runAllowed = runAllowed;
computeData.runSpeedMult = runSpeedMult;
computeData.jumpAllowed = jumpAllowed;
computeData.jumpStrength = jumpStrength;
computeData.physicsSteps = physicsSteps;
computeData.gravity.copy(gravity);
computeData.capsuleInput.radius = capsuleRadius;
computeData.capsuleInput.height = capsuleHeight;
inputData.left = left;
inputData.right = right;
inputData.backward = backward;
inputData.forward = forward;
inputData.run = run;
inputData.jump = jump;
player.setComputeInputData(computeData);
player.setInputData(inputData);
player.update(this.scene.timeController.delta());
}
}
export class getPlayerSimplePropertyOnGround extends ObjectNamedFunction0 {
static type() {
return "getPlayerSimplePropertyOnGround";
}
func(object3D) {
dummyReadRefVal(this.timeController.timeUniform().value);
const { player } = _findOrCreateElement(object3D);
return player.onGround();
}
}
export class getPlayerSimplePropertyVelocity extends ObjectNamedFunction1 {
static type() {
return "getPlayerSimplePropertyVelocity";
}
func(object3D, target) {
dummyReadRefVal(this.timeController.timeUniform().value);
const { player } = _findOrCreateElement(object3D);
player.velocityFromPositionDelta(target);
return target;
}
}