UNPKG

@polygonjs/polygonjs

Version:

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

110 lines (109 loc) 3.26 kB
"use strict"; 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; } }