From 34efd62c1e8b92be32926aa6887efdabd0d3fc4d Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Sun, 28 Mar 2021 15:24:23 -0400 Subject: [PATCH 01/13] initial ts changes --- .gitignore | 5 + README.md | 22 + client/main.js | 1128 ---------- client/package.json | 12 + ...r-controller.js => attacker-controller.ts} | 0 .../src/{blood-effect.js => blood-effect.ts} | 0 .../{entity-manager.js => entity-manager.ts} | 0 client/src/{entity.js => entity.ts} | 0 ...component.js => equip-weapon-component.ts} | 0 ...ate-machine.js => finite-state-machine.ts} | 0 .../{floating-name.js => floating-name.ts} | 0 .../{gltf-component.js => gltf-component.ts} | 0 client/src/{health-bar.js => health-bar.ts} | 0 ...ealth-component.js => health-component.ts} | 0 ...-controller.js => inventory-controller.ts} | 0 ...-up-component.js => level-up-component.ts} | 0 ...{load-controller.js => load-controller.ts} | 0 ...{loading-manager.js => loading-manager.ts} | 0 client/src/main.js | 1208 +++++++++-- client/src/main.ts | 170 ++ ...rk-controller.js => network-controller.ts} | 0 ...roller.js => network-entity-controller.ts} | 0 ...roller.js => network-player-controller.ts} | 0 client/src/{npc-entity.js => npc-entity.ts} | 0 ...{particle-system.js => particle-system.ts} | 0 .../{player-entity.js => player-entity.ts} | 0 .../src/{player-input.js => player-input.ts} | 0 .../src/{player-state.js => player-state.ts} | 0 client/src/{quadtree.js => quadtree.ts} | 0 ...{quest-component.js => quest-component.ts} | 0 ...ender-component.js => render-component.ts} | 0 ...ry-controller.js => scenery-controller.ts} | 0 ...{sorceror-effect.js => sorceror-effect.ts} | 0 ...ntroller.js => spatial-grid-controller.ts} | 0 client/src/{spawners.js => spawners.ts} | 0 ....js => terrain-builder-threaded-worker.ts} | 0 ...hreaded.js => terrain-builder-threaded.ts} | 0 ...{terrain-builder.js => terrain-builder.ts} | 0 .../{terrain-chunk.js => terrain-chunk.ts} | 0 .../{terrain-shader.js => terrain-shader.ts} | 0 client/src/{terrain.js => terrain.ts} | 0 client/src/{test.js => test.ts} | 0 ...exture-splatter.js => texture-splatter.ts} | 0 client/src/{textures.js => textures.ts} | 0 ...erson-camera.js => third-person-camera.ts} | 0 ...eejs_component.js => thre.ts_component.ts} | 0 .../{ui-controller.js => ui-controller.ts} | 0 client/src/{utils.js => utils.ts} | 0 client/{ => styles}/base.css | 0 client/tsconfig.json | 9 + package.json | 19 + server/index.mjs | 101 - server/package.json | 20 + server/src/index.ts | 27 + server/src/login-queue.mjs | 130 -- server/src/scripts/login-queue.ts | 162 ++ .../world-client.ts} | 0 .../world-entity.ts} | 0 .../world-manager.ts} | 0 .../world-server.ts} | 0 server/tsconfig.json | 10 + shared/package.json | 11 + client/shared/defs.mjs => shared/src/defs.ts | 0 shared/src/index.ts | 3 + client/shared/math.mjs => shared/src/math.ts | 0 .../shared/noise.mjs => shared/src/noise.ts | 2 +- .../src/simplex-noise.ts | 0 .../src/spatial-hash-grid.ts | 0 .../shared/spline.mjs => shared/src/spline.ts | 0 .../src/terrain-constants.ts | 0 .../src/terrain-height.ts | 0 shared/tsconfig.json | 18 + shared/tsconfig.tsbuildinfo | 1823 +++++++++++++++++ tsconfig.json | 18 + tsconfig.packages.json | 0 yarn.lock | 1117 ++++++++++ 76 files changed, 4530 insertions(+), 1485 deletions(-) create mode 100644 .gitignore create mode 100644 README.md delete mode 100644 client/main.js create mode 100644 client/package.json rename client/src/{attacker-controller.js => attacker-controller.ts} (100%) rename client/src/{blood-effect.js => blood-effect.ts} (100%) rename client/src/{entity-manager.js => entity-manager.ts} (100%) rename client/src/{entity.js => entity.ts} (100%) rename client/src/{equip-weapon-component.js => equip-weapon-component.ts} (100%) rename client/src/{finite-state-machine.js => finite-state-machine.ts} (100%) rename client/src/{floating-name.js => floating-name.ts} (100%) rename client/src/{gltf-component.js => gltf-component.ts} (100%) rename client/src/{health-bar.js => health-bar.ts} (100%) rename client/src/{health-component.js => health-component.ts} (100%) rename client/src/{inventory-controller.js => inventory-controller.ts} (100%) rename client/src/{level-up-component.js => level-up-component.ts} (100%) rename client/src/{load-controller.js => load-controller.ts} (100%) rename client/src/{loading-manager.js => loading-manager.ts} (100%) create mode 100644 client/src/main.ts rename client/src/{network-controller.js => network-controller.ts} (100%) rename client/src/{network-entity-controller.js => network-entity-controller.ts} (100%) rename client/src/{network-player-controller.js => network-player-controller.ts} (100%) rename client/src/{npc-entity.js => npc-entity.ts} (100%) rename client/src/{particle-system.js => particle-system.ts} (100%) rename client/src/{player-entity.js => player-entity.ts} (100%) rename client/src/{player-input.js => player-input.ts} (100%) rename client/src/{player-state.js => player-state.ts} (100%) rename client/src/{quadtree.js => quadtree.ts} (100%) rename client/src/{quest-component.js => quest-component.ts} (100%) rename client/src/{render-component.js => render-component.ts} (100%) rename client/src/{scenery-controller.js => scenery-controller.ts} (100%) rename client/src/{sorceror-effect.js => sorceror-effect.ts} (100%) rename client/src/{spatial-grid-controller.js => spatial-grid-controller.ts} (100%) rename client/src/{spawners.js => spawners.ts} (100%) rename client/src/{terrain-builder-threaded-worker.js => terrain-builder-threaded-worker.ts} (100%) rename client/src/{terrain-builder-threaded.js => terrain-builder-threaded.ts} (100%) rename client/src/{terrain-builder.js => terrain-builder.ts} (100%) rename client/src/{terrain-chunk.js => terrain-chunk.ts} (100%) rename client/src/{terrain-shader.js => terrain-shader.ts} (100%) rename client/src/{terrain.js => terrain.ts} (100%) rename client/src/{test.js => test.ts} (100%) rename client/src/{texture-splatter.js => texture-splatter.ts} (100%) rename client/src/{textures.js => textures.ts} (100%) rename client/src/{third-person-camera.js => third-person-camera.ts} (100%) rename client/src/{threejs_component.js => thre.ts_component.ts} (100%) rename client/src/{ui-controller.js => ui-controller.ts} (100%) rename client/src/{utils.js => utils.ts} (100%) rename client/{ => styles}/base.css (100%) create mode 100644 client/tsconfig.json create mode 100644 package.json delete mode 100644 server/index.mjs create mode 100644 server/package.json create mode 100644 server/src/index.ts delete mode 100644 server/src/login-queue.mjs create mode 100644 server/src/scripts/login-queue.ts rename server/src/{world-client.mjs => scripts/world-client.ts} (100%) rename server/src/{world-entity.mjs => scripts/world-entity.ts} (100%) rename server/src/{world-manager.mjs => scripts/world-manager.ts} (100%) rename server/src/{world-server.mjs => scripts/world-server.ts} (100%) create mode 100644 server/tsconfig.json create mode 100644 shared/package.json rename client/shared/defs.mjs => shared/src/defs.ts (100%) create mode 100644 shared/src/index.ts rename client/shared/math.mjs => shared/src/math.ts (100%) rename client/shared/noise.mjs => shared/src/noise.ts (95%) rename client/shared/simplex-noise.mjs => shared/src/simplex-noise.ts (100%) rename client/shared/spatial-hash-grid.mjs => shared/src/spatial-hash-grid.ts (100%) rename client/shared/spline.mjs => shared/src/spline.ts (100%) rename client/shared/terrain-constants.mjs => shared/src/terrain-constants.ts (100%) rename client/shared/terrain-height.mjs => shared/src/terrain-height.ts (100%) create mode 100644 shared/tsconfig.json create mode 100644 shared/tsconfig.tsbuildinfo create mode 100644 tsconfig.json create mode 100644 tsconfig.packages.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..3d87d659 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +client/node_modules +server/node_modules +shared/node_modules +.history \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..4afe1dc3 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# QUICK_3D_MMORPG +## [Original Youtube Video](https://www.youtube.com/watch?v=IptkgFOoci0) + +## How to Work on This :ox: +- _Only tested this with node v15.11.0. YMMV_ +- Clone the repository +- run `yarn` from the root folder. The Yarn workspace settings will handle installing the packages for client and server. +- run `yarn start:dev` +- Ensure a browser is open to localhost:3000 (Maybe. See below) + - If 3000 is taken unavailable, on most systems, you can run `PORT={NEW_PORT | 4444 | 1337} yarn start{:dev}` + - Example `PORT=1337 yarn start` +- This should set the server to auto restart on changes. +- The client will need to be manually refreshed, if you want it to display any changes. That's by design. Noone wants to relog every time they make a change. + +
+What are Yarn Workspaces? +

+https://yarnpkg.com/ +Put some really good documentation on what they are here. + +

+
\ No newline at end of file diff --git a/client/main.js b/client/main.js deleted file mode 100644 index b08d2c6f..00000000 --- a/client/main.js +++ /dev/null @@ -1,1128 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {OrbitControls} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/controls/OrbitControls.js'; -import {FBXLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/FBXLoader.js'; - -import 'https://cdn.jsdelivr.net/npm/socket.io-client@3.1.0/dist/socket.io.js'; - - -const _CHARACTER_MODELS = { - zombie: { - base: 'mremireh_o_desbiens.fbx', - path: './resources/characters/zombie/', - animations: { - idle: 'idle.fbx', - walk: 'walk.fbx', - run: 'run.fbx', - dance: 'dance.fbx', - }, - nameOffset: 25, - }, - guard: { - base: 'castle_guard_01.fbx', - path: './resources/characters/guard/', - animations: { - idle: 'Sword And Shield Idle.fbx', - walk: 'Sword And Shield Walk.fbx', - run: 'Sword And Shield Run.fbx', - dance: 'Macarena Dance.fbx', - }, - nameOffset: 20, - } -} - - -class FloatingName { - constructor(params) { - this.params_ = params; - this.Init_(); - } - - Destroy() { - this.element_ = null; - } - - Init_() { - const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; - - this.element_ = document.createElement('canvas'); - this.context2d_ = this.element_.getContext('2d'); - this.context2d_.canvas.width = 256; - this.context2d_.canvas.height = 128; - this.context2d_.fillStyle = '#FFF'; - this.context2d_.font = "18pt Helvetica"; - this.context2d_.shadowOffsetX = 3; - this.context2d_.shadowOffsetY = 3; - this.context2d_.shadowColor = "rgba(0,0,0,0.3)"; - this.context2d_.shadowBlur = 4; - this.context2d_.textAlign = 'center'; - this.context2d_.fillText(this.params_.desc.account.name, 128, 64); - - const map = new THREE.CanvasTexture(this.context2d_.canvas); - - this.sprite_ = new THREE.Sprite( - new THREE.SpriteMaterial({map: map, color: 0xffffff})); - this.sprite_.scale.set(20, 10, 1) - this.sprite_.position.y += modelData.nameOffset; - this.params_.parent.add(this.sprite_); - } -}; - - -class OurLoadingManager { - constructor(loader) { - this.loader_ = loader; - this.files_ = new Set(); - this.onLoad = () => {}; - } - - load(file, cb) { - this.files_.add(file); - - this.loader_.load(file, (result) => { - this.files_.delete(file); - cb(result); - - if (this.files_.size == 0) { - this.onLoad(); - } - }); - } -}; - - -class BasicCharacterControllerProxy { - constructor(animations) { - this.animations_ = animations; - } - - get animations() { - return this.animations_; - } -}; - - -class AnimatedMesh { - constructor(params) { - this.params_ = params; - this.group_ = new THREE.Group(); - this.params_.scene.add(this.group_); - this.target_ = null; - this.animations_ = {}; - this.mixer_ = null; - this.onLoad = () => {}; - this.Load_(); - } - - Destroy() { - if (this.target_) { - this.target_.traverse(c => { - if (c.material) { - c.material.dispose(); - } - if (c.geometry) { - c.geometry.dispose(); - } - }); - } - this.params_.scene.remove(this.group_); - } - - get position() { - return this.group_.position; - } - - get quaternion() { - return this.group_.quaternion; - } - - Load_() { - const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; - const loader = new FBXLoader(); - loader.setPath(modelData.path); - loader.load(modelData.base, (fbx) => { - fbx.scale.setScalar(0.1); - fbx.traverse(c => { - c.castShadow = true; - }); - - this.target_ = fbx; - this.group_.add(this.target_); - - this.mixer_ = new THREE.AnimationMixer(this.target_); - - const _OnLoad = (animName, anim) => { - const clip = anim.animations[0]; - const action = this.mixer_.clipAction(clip); - - this.animations_[animName] = { - clip: clip, - action: action, - }; - }; - - // LoadingManager seems to be broken when you attempt to load multiple - // resources multiple times, only first onLoad is called. - // So roll our own. - const loader = new FBXLoader(); - loader.setPath(modelData.path); - - this.manager_ = new OurLoadingManager(loader); - this.manager_.load( - modelData.animations.idle, - (a) => { _OnLoad('idle', a); }); - this.manager_.load( - modelData.animations.walk, - (a) => { _OnLoad('walk', a); }); - this.manager_.load( - modelData.animations.run, - (a) => { _OnLoad('run', a); }); - this.manager_.load( - modelData.animations.dance, - (a) => { _OnLoad('dance', a); }); - this.manager_.onLoad = () => { - this.onLoad(); - }; - }); - } - - Update(timeElapsed) { - if (this.mixer_) { - this.mixer_.update(timeElapsed); - } - } -}; - - -class BasicCharacterController { - constructor(params) { - this._Init(params); - } - - _Init(params) { - this.params_ = params; - this.decceleration_ = new THREE.Vector3(-0.0005, -0.0001, -5.0); - this.acceleration_ = new THREE.Vector3(1, 0.25, 50.0); - this.velocity_ = new THREE.Vector3(0, 0, 0); - this.position_ = new THREE.Vector3(); - this.quaternion_ = new THREE.Quaternion(); - this.loaded_ = false; - - this._input = new BasicCharacterControllerInput(); - - this.target_ = new AnimatedMesh({ - scene: params.scene, - desc: params.desc, - }); - this.target_.onLoad = () => { - this.loaded_ = true; - this.stateMachine_.SetState('idle'); - } - this.stateMachine_ = new CharacterFSM( - new BasicCharacterControllerProxy(this.target_.animations_)); - } - - get IsLoaded() { - return this.loaded_; - } - - get Position() { - return this.position_; - } - - get Rotation() { - return this.quaternion_; - } - - SetTransform(p, q) { - this.position_.copy(p); - this.quaternion_.copy(q); - this.target_.group_.position.copy(this.position_); - this.target_.group_.quaternion.copy(this.quaternion_); - } - - CreateTransformPacket() { - return [ - this.stateMachine_.currentState_.Name, - this.position_.toArray(), - this.quaternion_.toArray(), - ]; - } - - Update(timeInSeconds) { - if (!this.stateMachine_.currentState_) { - return; - } - - this.stateMachine_.Update(timeInSeconds, this._input); - - const velocity = this.velocity_; - const frameDecceleration = new THREE.Vector3( - velocity.x * this.decceleration_.x, - velocity.y * this.decceleration_.y, - velocity.z * this.decceleration_.z - ); - frameDecceleration.multiplyScalar(timeInSeconds); - frameDecceleration.z = Math.sign(frameDecceleration.z) * Math.min( - Math.abs(frameDecceleration.z), Math.abs(velocity.z)); - - velocity.add(frameDecceleration); - - const controlObject = this.target_; - const _Q = new THREE.Quaternion(); - const _A = new THREE.Vector3(); - const _R = controlObject.quaternion.clone(); - - const acc = this.acceleration_.clone(); - if (this._input._keys.shift) { - acc.multiplyScalar(2.0); - } - - if (this.stateMachine_.currentState_.Name == 'dance') { - acc.multiplyScalar(0.0); - } - - if (this._input._keys.forward) { - velocity.z += acc.z * timeInSeconds; - } - if (this._input._keys.backward) { - velocity.z -= acc.z * timeInSeconds; - } - if (this._input._keys.left) { - _A.set(0, 1, 0); - _Q.setFromAxisAngle(_A, 4.0 * Math.PI * timeInSeconds * this.acceleration_.y); - _R.multiply(_Q); - } - if (this._input._keys.right) { - _A.set(0, 1, 0); - _Q.setFromAxisAngle(_A, 4.0 * -Math.PI * timeInSeconds * this.acceleration_.y); - _R.multiply(_Q); - } - - controlObject.quaternion.copy(_R); - - const oldPosition = new THREE.Vector3(); - oldPosition.copy(controlObject.position); - - const forward = new THREE.Vector3(0, 0, 1); - forward.applyQuaternion(controlObject.quaternion); - forward.normalize(); - - const sideways = new THREE.Vector3(1, 0, 0); - sideways.applyQuaternion(controlObject.quaternion); - sideways.normalize(); - - sideways.multiplyScalar(velocity.x * timeInSeconds); - forward.multiplyScalar(velocity.z * timeInSeconds); - - controlObject.position.add(forward); - controlObject.position.add(sideways); - - this.position_.copy(controlObject.position); - this.quaternion_.copy(controlObject.quaternion); - - this.target_.Update(timeInSeconds); - } -}; - -class BasicCharacterControllerInput { - constructor() { - this._Init(); - } - - _Init() { - this._keys = { - forward: false, - backward: false, - left: false, - right: false, - space: false, - shift: false, - }; - document.addEventListener('keydown', (e) => this.OnKeyDown_(e), false); - document.addEventListener('keyup', (e) => this._onKeyUp(e), false); - } - - OnKeyDown_(event) { - if (event.currentTarget.activeElement != document.body) { - return; - } - switch (event.keyCode) { - case 87: // w - this._keys.forward = true; - break; - case 65: // a - this._keys.left = true; - break; - case 83: // s - this._keys.backward = true; - break; - case 68: // d - this._keys.right = true; - break; - case 32: // SPACE - this._keys.space = true; - break; - case 16: // SHIFT - this._keys.shift = true; - break; - } - } - - _onKeyUp(event) { - if (event.currentTarget.activeElement != document.body) { - return; - } - switch(event.keyCode) { - case 87: // w - this._keys.forward = false; - break; - case 65: // a - this._keys.left = false; - break; - case 83: // s - this._keys.backward = false; - break; - case 68: // d - this._keys.right = false; - break; - case 32: // SPACE - this._keys.space = false; - break; - case 16: // SHIFT - this._keys.shift = false; - break; - } - } -}; - - -class FiniteStateMachine { - constructor() { - this._states = {}; - this.currentState_ = null; - } - - _AddState(name, type) { - this._states[name] = type; - } - - SetState(name) { - const prevState = this.currentState_; - - if (prevState) { - if (prevState.Name == name) { - return; - } - prevState.Exit(); - } - - const state = new this._states[name](this); - - this.currentState_ = state; - state.Enter(prevState); - } - - Update(timeElapsed, input) { - if (this.currentState_) { - this.currentState_.Update(timeElapsed, input); - } - } -}; - - -class CharacterFSM extends FiniteStateMachine { - constructor(proxy) { - super(); - this._proxy = proxy; - this._Init(); - } - - _Init() { - this._AddState('idle', IdleState); - this._AddState('walk', WalkState); - this._AddState('run', RunState); - this._AddState('dance', DanceState); - } -}; - - -class State { - constructor(parent) { - this._parent = parent; - } - - Enter() {} - Exit() {} - Update() {} -}; - - -class DanceState extends State { - constructor(parent) { - super(parent); - - this._FinishedCallback = () => { - this._Finished(); - } - } - - get Name() { - return 'dance'; - } - - Enter(prevState) { - const curAction = this._parent._proxy.animations_['dance'].action; - const mixer = curAction.getMixer(); - mixer.addEventListener('finished', this._FinishedCallback); - - if (prevState) { - const prevAction = this._parent._proxy.animations_[prevState.Name].action; - - curAction.reset(); - curAction.setLoop(THREE.LoopOnce, 1); - curAction.clampWhenFinished = true; - curAction.crossFadeFrom(prevAction, 0.2, true); - curAction.play(); - } else { - curAction.play(); - } - } - - _Finished() { - this._Cleanup(); - this._parent.SetState('idle'); - } - - _Cleanup() { - const action = this._parent._proxy.animations_['dance'].action; - - action.getMixer().removeEventListener('finished', this._CleanupCallback); - } - - Exit() { - this._Cleanup(); - } - - Update(_) { - } -}; - - -class WalkState extends State { - constructor(parent) { - super(parent); - } - - get Name() { - return 'walk'; - } - - Enter(prevState) { - const curAction = this._parent._proxy.animations_['walk'].action; - if (prevState) { - const prevAction = this._parent._proxy.animations_[prevState.Name].action; - - curAction.enabled = true; - - if (prevState.Name == 'run') { - const ratio = curAction.getClip().duration / prevAction.getClip().duration; - curAction.time = prevAction.time * ratio; - } else { - curAction.time = 0.0; - curAction.setEffectiveTimeScale(1.0); - curAction.setEffectiveWeight(1.0); - } - - curAction.crossFadeFrom(prevAction, 0.5, true); - curAction.play(); - } else { - curAction.play(); - } - } - - Exit() { - } - - Update(timeElapsed, input) { - if (!input) { - return; - } - - if (input._keys.forward || input._keys.backward) { - if (input._keys.shift) { - this._parent.SetState('run'); - } - return; - } - - this._parent.SetState('idle'); - } -}; - - -class RunState extends State { - constructor(parent) { - super(parent); - } - - get Name() { - return 'run'; - } - - Enter(prevState) { - const curAction = this._parent._proxy.animations_['run'].action; - if (prevState) { - const prevAction = this._parent._proxy.animations_[prevState.Name].action; - - curAction.enabled = true; - - if (prevState.Name == 'walk') { - const ratio = curAction.getClip().duration / prevAction.getClip().duration; - curAction.time = prevAction.time * ratio; - } else { - curAction.time = 0.0; - curAction.setEffectiveTimeScale(1.0); - curAction.setEffectiveWeight(1.0); - } - - curAction.crossFadeFrom(prevAction, 0.5, true); - curAction.play(); - } else { - curAction.play(); - } - } - - Exit() { - } - - Update(timeElapsed, input) { - if (!input) { - return; - } - - if (input._keys.forward || input._keys.backward) { - if (!input._keys.shift) { - this._parent.SetState('walk'); - } - return; - } - - this._parent.SetState('idle'); - } -}; - - -class IdleState extends State { - constructor(parent) { - super(parent); - } - - get Name() { - return 'idle'; - } - - Enter(prevState) { - const idleAction = this._parent._proxy.animations_['idle'].action; - if (prevState) { - const prevAction = this._parent._proxy.animations_[prevState.Name].action; - idleAction.time = 0.0; - idleAction.enabled = true; - idleAction.setEffectiveTimeScale(1.0); - idleAction.setEffectiveWeight(1.0); - idleAction.crossFadeFrom(prevAction, 0.5, true); - idleAction.play(); - } else { - idleAction.play(); - } - } - - Exit() { - } - - Update(_, input) { - if (!input) { - return; - } - if (input._keys.forward || input._keys.backward) { - this._parent.SetState('walk'); - } else if (input._keys.space) { - this._parent.SetState('dance'); - } - } -}; - - -class ThirdPersonCamera { - constructor(params) { - this.params_ = params; - this._camera = params.camera; - - this._currentPosition = new THREE.Vector3(); - this._currentLookat = new THREE.Vector3(); - } - - _CalculateIdealOffset() { - const idealOffset = new THREE.Vector3(-15, 20, -30); - idealOffset.applyQuaternion(this.params_.target.Rotation); - idealOffset.add(this.params_.target.Position); - return idealOffset; - } - - _CalculateIdealLookat() { - const idealLookat = new THREE.Vector3(0, 10, 50); - idealLookat.applyQuaternion(this.params_.target.Rotation); - idealLookat.add(this.params_.target.Position); - return idealLookat; - } - - Update(timeElapsed) { - const idealOffset = this._CalculateIdealOffset(); - const idealLookat = this._CalculateIdealLookat(); - - // const t = 0.05; - // const t = 4.0 * timeElapsed; - const t = 1.0 - Math.pow(0.001, timeElapsed); - - this._currentPosition.lerp(idealOffset, t); - this._currentLookat.lerp(idealLookat, t); - - this._camera.position.copy(this._currentPosition); - this._camera.lookAt(this._currentLookat); - } -} - - -class PlayerEntity { - constructor(params) { - this.params_ = params; - this.Init_(); - } - - Init_() { - } - - CreateFromDesc(desc) { - const params = { - camera: this.params_.camera, - scene: this.params_.scene, - desc: desc, - }; - this.controls_ = new BasicCharacterController(params); - - this.thirdPersonCamera_ = new ThirdPersonCamera({ - camera: this.params_.camera, - target: this.controls_, - }); - - this.updateTimer_ = 0.0; - } - - UpdateTransform(data) { - const s = data[0]; - const p = data[1]; - const q = data[2]; - this.controls_.SetTransform( - new THREE.Vector3(...p), - new THREE.Quaternion(...q) - ); - } - - Update(timeElapsed) { - this.controls_.Update(timeElapsed); - this.thirdPersonCamera_.Update(timeElapsed); - this.SendTransform_(timeElapsed); - } - - SendTransform_(timeElapsed) { - this.updateTimer_ -= timeElapsed; - if (this.updateTimer_ <= 0.0 && this.controls_.IsLoaded) { - this.updateTimer_ = 0.1; - this.params_.socket.emit( - 'world.update', - this.controls_.CreateTransformPacket(), - ); - } - } -}; - - -class NetworkCharacterController { - constructor(params) { - this._Init(params); - } - - Destroy() { - this.name_.Destroy(); - this.name_ = null; - this.target_.Destroy(); - this.target_ = null; - } - - _Init(params) { - this.params_ = params; - - this.target_ = new AnimatedMesh({ - scene: params.scene, - desc: params.desc, - }); - this.target_.onLoad = () => { - this.stateMachine_ = new CharacterFSM( - new BasicCharacterControllerProxy(this.target_.animations_)); - this.stateMachine_.SetState('idle'); - } - - this.name_ = new FloatingName({ - parent: this.target_.group_, - desc: params.desc, - }); - } - - get position() { - return this.target_.position; - } - - get quaternion() { - return this.target_.quaternion; - } - - SetState(s) { - if (!this.stateMachine_) { - return; - } - this.stateMachine_.SetState(s); - } - - Update(timeInSeconds) { - if (!this.stateMachine_) { - return; - } - - this.stateMachine_.Update(timeInSeconds, null); - this.target_.Update(timeInSeconds); - } -}; - - -class NetworkEntity { - constructor(params) { - this.params_ = params; - this.transformUpdates_ = []; - this.targetFrame_ = null; - this.lastFrame_ = null; - this.Init_(); - } - - Destroy() { - this.controller_.Destroy(); - } - - Init_() { - } - - CreateFromDesc(desc, transform) { - this.controller_ = new NetworkCharacterController({ - scene: this.params_.scene, - desc: desc, - }); - this.controller_.position.set(...transform[1]); - this.controller_.quaternion.set(...transform[2]); - this.targetFrame_ = {time: 0.1, transform: transform}; -} - - UpdateTransform(data) { - this.transformUpdates_.push({time: 0.1, transform: data}); - } - - Update(timeElapsed) { - this.controller_.Update(timeElapsed); - - this.ApplyLCT_(timeElapsed); - } - - ApplyLCT_(timeElapsed) { - if (this.transformUpdates_.length == 0) { - return; - } - - for (let i = 0; i < this.transformUpdates_.length; ++i) { - this.transformUpdates_[i].time -= timeElapsed; - } - - while (this.transformUpdates_.length > 0 && - this.transformUpdates_[0].time <= 0.0) { - this.lastFrame_ = { - transform: [ - this.targetFrame_.transform[0], - this.controller_.position.toArray(), - this.controller_.quaternion.toArray() - ] - }; - this.targetFrame_ = this.transformUpdates_.shift(); - this.targetFrame_.time = 0.0; - } - - if (this.targetFrame_ && this.lastFrame_) { - this.targetFrame_.time += timeElapsed; - const p1 = new THREE.Vector3(...this.lastFrame_.transform[1]); - const p2 = new THREE.Vector3(...this.targetFrame_.transform[1]); - const q1 = new THREE.Quaternion(...this.lastFrame_.transform[2]); - const q2 = new THREE.Quaternion(...this.targetFrame_.transform[2]); - this.controller_.position.copy(p1); - this.controller_.quaternion.copy(q1); - const t = Math.max(Math.min(this.targetFrame_.time / 0.1, 1.0), 0.0); - this.controller_.position.lerp(p2, t); - this.controller_.quaternion.slerp(q2, t); - this.controller_.SetState(this.lastFrame_.transform[0]); - } - } -} - - -class Chatbox { - constructor(params) { - this.params_ = params; - this.OnChat = () => {}; - this.Init_(); - } - - Init_() { - this.element_ = document.getElementById('chat-input'); - this.element_.addEventListener( - 'keydown', (e) => this.OnKeyDown_(e), false); - } - - OnKeyDown_(evt) { - if (evt.keyCode === 13) { - evt.preventDefault(); - const msg = this.element_.value; - if (msg != '') { - this.OnChat(msg); - } - this.element_.value = ''; - } - } - - AddMessage(msg) { - const e = document.createElement('div'); - e.className = 'chat-text'; - e.innerText = '[' + msg.name + ']: ' + msg.text; - const chatElement = document.getElementById('chat-ui-text-area'); - chatElement.insertBefore(e, document.getElementById('chat-input')); - } -}; - - -class BasicMMODemo { - constructor() { - this._Initialize(); - } - - _Initialize() { - this.threejs_ = new THREE.WebGLRenderer({ - antialias: true, - }); - this.threejs_.outputEncoding = THREE.sRGBEncoding; - this.threejs_.gammaFactor = 2.2; - this.threejs_.shadowMap.enabled = true; - this.threejs_.shadowMap.type = THREE.PCFSoftShadowMap; - this.threejs_.setPixelRatio(window.devicePixelRatio); - this.threejs_.setSize(window.innerWidth, window.innerHeight); - - document.getElementById('container').appendChild( - this.threejs_.domElement); - - window.addEventListener('resize', () => { - this.OnWindowResize_(); - }, false); - - const fov = 60; - const aspect = 1920 / 1080; - const near = 1.0; - const far = 1000.0; - this.camera_ = new THREE.PerspectiveCamera(fov, aspect, near, far); - this.camera_.position.set(75, 20, 0); - - this.scene_ = new THREE.Scene(); - - let light = new THREE.DirectionalLight(0xFFFFFF, 1.0); - light.position.set(20, 100, 10); - light.target.position.set(0, 0, 0); - light.castShadow = true; - light.shadow.bias = -0.001; - light.shadow.mapSize.width = 2048; - light.shadow.mapSize.height = 2048; - light.shadow.camera.near = 0.1; - light.shadow.camera.far = 500.0; - light.shadow.camera.near = 0.5; - light.shadow.camera.far = 500.0; - light.shadow.camera.left = 100; - light.shadow.camera.right = -100; - light.shadow.camera.top = 100; - light.shadow.camera.bottom = -100; - this.scene_.add(light); - - light = new THREE.AmbientLight(0x101010); - this.scene_.add(light); - - const controls = new OrbitControls( - this.camera_, this.threejs_.domElement); - controls.target.set(0, 20, 0); - controls.update(); - - const loader = new THREE.CubeTextureLoader(); - const texture = loader.load([ - './resources/posx.jpg', - './resources/negx.jpg', - './resources/posy.jpg', - './resources/negy.jpg', - './resources/posz.jpg', - './resources/negz.jpg', - ]); - texture.encoding = THREE.sRGBEncoding; - this.scene_.background = texture; - - const plane = new THREE.Mesh( - new THREE.PlaneGeometry(100, 100, 10, 10), - new THREE.MeshStandardMaterial({ - color: 0x808080, - })); - plane.castShadow = false; - plane.receiveShadow = true; - plane.rotation.x = -Math.PI / 2; - this.scene_.add(plane); - - this.SetupSocket_(); - - this.entities_ = {}; - - this.chatbox_ = new Chatbox(); - this.chatbox_.OnChat = (txt) => { this.OnChat_(txt); }; - - this.previousRAF_ = null; - this.RAF_(); - } - - GenerateRandomName_() { - const names1 = [ - 'Aspiring', 'Nameless', 'Cautionary', 'Excited', - 'Modest', 'Maniacal', 'Caffeinated', 'Sleepy', - 'Passionate', 'Masochistic', 'Aging', 'Pedantic', - 'Talkative', - ]; - const names2 = [ - 'Coder', 'Mute', 'Giraffe', 'Snowman', - 'Machinist', 'Fondler', 'Typist', - 'Noodler', 'Arborist', 'Peeper', 'Ghost', - ]; - const n1 = names1[ - Math.floor(Math.random() * names1.length)]; - const n2 = names2[ - Math.floor(Math.random() * names2.length)]; - return n1 + ' ' + n2; - } - - SetupSocket_() { - this.socket_ = io('ws://localhost:3000', { - reconnection: false, - transports: ['websocket'], - }); - - this.socket_.on("connect", () => { - console.log(this.socket_.id); - const randomName = this.GenerateRandomName_(); - this.socket_.emit('login.commit', randomName); - }); - - this.socket_.on("disconnect", () => { - console.log('DISCONNECTED: ' + this.socket_.id); // undefined - }); - - this.socket_.onAny((e, d) => { - this.OnMessage_(e, d); - }); - } - - OnChat_(txt) { - this.socket_.emit('chat.msg', txt); - } - - OnMessage_(e, d) { - if (e == 'world.player') { - this.playerID_ = d.id; - const e = new PlayerEntity({ - scene: this.scene_, - camera: this.camera_, - socket: this.socket_ - }); - e.CreateFromDesc(d.desc); - e.UpdateTransform(d.transform); - this.entities_[d.id] = e; - console.log('entering world: ' + d.id); - } else if (e == 'world.update') { - const updates = d; - const alive = {}; - - alive[this.playerID_] = this.entities_[this.playerID_]; - - for (let u of updates) { - if ('desc' in u) { - const e = new NetworkEntity({scene: this.scene_}); - e.CreateFromDesc(u.desc, u.transform); - this.entities_[u.id] = e; - } else { - this.entities_[u.id].UpdateTransform(u.transform); - } - - alive[u.id] = this.entities_[u.id]; - } - - const dead = []; - for (let k in this.entities_) { - if (!(k in alive)) { - dead.push(this.entities_[k]); - } - } - - this.entities_ = alive; - - for (let i = 0; i < dead.length; ++i) { - dead[i].Destroy(); - } - } else if (e == 'chat.message') { - this.chatbox_.AddMessage(d); - } - } - - OnWindowResize_() { - this.camera_.aspect = window.innerWidth / window.innerHeight; - this.camera_.updateProjectionMatrix(); - this.threejs_.setSize(window.innerWidth, window.innerHeight); - } - - RAF_() { - requestAnimationFrame((t) => { - if (this.previousRAF_ == null) { - this.previousRAF_ = t; - } - - this.Update_((t - this.previousRAF_) * 0.001); - this.threejs_.render(this.scene_, this.camera_); - this.previousRAF_ = t; - this.RAF_(); - }); - } - - Update_(timeElapsed) { - for (let k in this.entities_) { - this.entities_[k].Update(timeElapsed); - } - } -} - - -let _APP = null; - -window.addEventListener('DOMContentLoaded', () => { - _APP = new BasicMMODemo(); -}); diff --git a/client/package.json b/client/package.json new file mode 100644 index 00000000..867c9e93 --- /dev/null +++ b/client/package.json @@ -0,0 +1,12 @@ +{ + "name": "client", + "version": "0.0.1", + "devDependencies": { + "cross-env": "^5.0.5", + "nodemon": "^2.0.7", + "tsc-watch": "^4.2.9" + }, + "dependencies": { + "typescript": "^4.2.3" + } +} diff --git a/client/src/attacker-controller.js b/client/src/attacker-controller.ts similarity index 100% rename from client/src/attacker-controller.js rename to client/src/attacker-controller.ts diff --git a/client/src/blood-effect.js b/client/src/blood-effect.ts similarity index 100% rename from client/src/blood-effect.js rename to client/src/blood-effect.ts diff --git a/client/src/entity-manager.js b/client/src/entity-manager.ts similarity index 100% rename from client/src/entity-manager.js rename to client/src/entity-manager.ts diff --git a/client/src/entity.js b/client/src/entity.ts similarity index 100% rename from client/src/entity.js rename to client/src/entity.ts diff --git a/client/src/equip-weapon-component.js b/client/src/equip-weapon-component.ts similarity index 100% rename from client/src/equip-weapon-component.js rename to client/src/equip-weapon-component.ts diff --git a/client/src/finite-state-machine.js b/client/src/finite-state-machine.ts similarity index 100% rename from client/src/finite-state-machine.js rename to client/src/finite-state-machine.ts diff --git a/client/src/floating-name.js b/client/src/floating-name.ts similarity index 100% rename from client/src/floating-name.js rename to client/src/floating-name.ts diff --git a/client/src/gltf-component.js b/client/src/gltf-component.ts similarity index 100% rename from client/src/gltf-component.js rename to client/src/gltf-component.ts diff --git a/client/src/health-bar.js b/client/src/health-bar.ts similarity index 100% rename from client/src/health-bar.js rename to client/src/health-bar.ts diff --git a/client/src/health-component.js b/client/src/health-component.ts similarity index 100% rename from client/src/health-component.js rename to client/src/health-component.ts diff --git a/client/src/inventory-controller.js b/client/src/inventory-controller.ts similarity index 100% rename from client/src/inventory-controller.js rename to client/src/inventory-controller.ts diff --git a/client/src/level-up-component.js b/client/src/level-up-component.ts similarity index 100% rename from client/src/level-up-component.js rename to client/src/level-up-component.ts diff --git a/client/src/load-controller.js b/client/src/load-controller.ts similarity index 100% rename from client/src/load-controller.js rename to client/src/load-controller.ts diff --git a/client/src/loading-manager.js b/client/src/loading-manager.ts similarity index 100% rename from client/src/loading-manager.js rename to client/src/loading-manager.ts diff --git a/client/src/main.js b/client/src/main.js index d7803d0d..b08d2c6f 100644 --- a/client/src/main.js +++ b/client/src/main.js @@ -1,139 +1,1100 @@ -import {GUI} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/libs/dat.gui.module.js'; +import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; -import {entity_manager} from './entity-manager.js'; -import {entity} from './entity.js'; -import {ui_controller} from './ui-controller.js'; -import {level_up_component} from './level-up-component.js'; -import {network_controller} from './network-controller.js'; -import {scenery_controller} from './scenery-controller.js'; -import {load_controller} from './load-controller.js'; -import {spawners} from './spawners.js'; -import {terrain} from './terrain.js'; -import {inventory_controller} from './inventory-controller.js'; +import {OrbitControls} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/controls/OrbitControls.js'; +import {FBXLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/FBXLoader.js'; -import {spatial_hash_grid} from '/shared/spatial-hash-grid.mjs'; -import {defs} from '/shared/defs.mjs'; -import {threejs_component} from './threejs_component.js'; +import 'https://cdn.jsdelivr.net/npm/socket.io-client@3.1.0/dist/socket.io.js'; +const _CHARACTER_MODELS = { + zombie: { + base: 'mremireh_o_desbiens.fbx', + path: './resources/characters/zombie/', + animations: { + idle: 'idle.fbx', + walk: 'walk.fbx', + run: 'run.fbx', + dance: 'dance.fbx', + }, + nameOffset: 25, + }, + guard: { + base: 'castle_guard_01.fbx', + path: './resources/characters/guard/', + animations: { + idle: 'Sword And Shield Idle.fbx', + walk: 'Sword And Shield Walk.fbx', + run: 'Sword And Shield Run.fbx', + dance: 'Macarena Dance.fbx', + }, + nameOffset: 20, + } +} + + +class FloatingName { + constructor(params) { + this.params_ = params; + this.Init_(); + } + + Destroy() { + this.element_ = null; + } + + Init_() { + const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; + + this.element_ = document.createElement('canvas'); + this.context2d_ = this.element_.getContext('2d'); + this.context2d_.canvas.width = 256; + this.context2d_.canvas.height = 128; + this.context2d_.fillStyle = '#FFF'; + this.context2d_.font = "18pt Helvetica"; + this.context2d_.shadowOffsetX = 3; + this.context2d_.shadowOffsetY = 3; + this.context2d_.shadowColor = "rgba(0,0,0,0.3)"; + this.context2d_.shadowBlur = 4; + this.context2d_.textAlign = 'center'; + this.context2d_.fillText(this.params_.desc.account.name, 128, 64); + + const map = new THREE.CanvasTexture(this.context2d_.canvas); + + this.sprite_ = new THREE.Sprite( + new THREE.SpriteMaterial({map: map, color: 0xffffff})); + this.sprite_.scale.set(20, 10, 1) + this.sprite_.position.y += modelData.nameOffset; + this.params_.parent.add(this.sprite_); + } +}; + + +class OurLoadingManager { + constructor(loader) { + this.loader_ = loader; + this.files_ = new Set(); + this.onLoad = () => {}; + } + + load(file, cb) { + this.files_.add(file); + + this.loader_.load(file, (result) => { + this.files_.delete(file); + cb(result); + + if (this.files_.size == 0) { + this.onLoad(); + } + }); + } +}; + + +class BasicCharacterControllerProxy { + constructor(animations) { + this.animations_ = animations; + } + + get animations() { + return this.animations_; + } +}; + + +class AnimatedMesh { + constructor(params) { + this.params_ = params; + this.group_ = new THREE.Group(); + this.params_.scene.add(this.group_); + this.target_ = null; + this.animations_ = {}; + this.mixer_ = null; + this.onLoad = () => {}; + this.Load_(); + } + + Destroy() { + if (this.target_) { + this.target_.traverse(c => { + if (c.material) { + c.material.dispose(); + } + if (c.geometry) { + c.geometry.dispose(); + } + }); + } + this.params_.scene.remove(this.group_); + } + + get position() { + return this.group_.position; + } + + get quaternion() { + return this.group_.quaternion; + } + + Load_() { + const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; + const loader = new FBXLoader(); + loader.setPath(modelData.path); + loader.load(modelData.base, (fbx) => { + fbx.scale.setScalar(0.1); + fbx.traverse(c => { + c.castShadow = true; + }); + + this.target_ = fbx; + this.group_.add(this.target_); + + this.mixer_ = new THREE.AnimationMixer(this.target_); + + const _OnLoad = (animName, anim) => { + const clip = anim.animations[0]; + const action = this.mixer_.clipAction(clip); + + this.animations_[animName] = { + clip: clip, + action: action, + }; + }; + + // LoadingManager seems to be broken when you attempt to load multiple + // resources multiple times, only first onLoad is called. + // So roll our own. + const loader = new FBXLoader(); + loader.setPath(modelData.path); + + this.manager_ = new OurLoadingManager(loader); + this.manager_.load( + modelData.animations.idle, + (a) => { _OnLoad('idle', a); }); + this.manager_.load( + modelData.animations.walk, + (a) => { _OnLoad('walk', a); }); + this.manager_.load( + modelData.animations.run, + (a) => { _OnLoad('run', a); }); + this.manager_.load( + modelData.animations.dance, + (a) => { _OnLoad('dance', a); }); + this.manager_.onLoad = () => { + this.onLoad(); + }; + }); + } + + Update(timeElapsed) { + if (this.mixer_) { + this.mixer_.update(timeElapsed); + } + } +}; + + +class BasicCharacterController { + constructor(params) { + this._Init(params); + } + + _Init(params) { + this.params_ = params; + this.decceleration_ = new THREE.Vector3(-0.0005, -0.0001, -5.0); + this.acceleration_ = new THREE.Vector3(1, 0.25, 50.0); + this.velocity_ = new THREE.Vector3(0, 0, 0); + this.position_ = new THREE.Vector3(); + this.quaternion_ = new THREE.Quaternion(); + this.loaded_ = false; + + this._input = new BasicCharacterControllerInput(); + + this.target_ = new AnimatedMesh({ + scene: params.scene, + desc: params.desc, + }); + this.target_.onLoad = () => { + this.loaded_ = true; + this.stateMachine_.SetState('idle'); + } + this.stateMachine_ = new CharacterFSM( + new BasicCharacterControllerProxy(this.target_.animations_)); + } + + get IsLoaded() { + return this.loaded_; + } + + get Position() { + return this.position_; + } + + get Rotation() { + return this.quaternion_; + } + + SetTransform(p, q) { + this.position_.copy(p); + this.quaternion_.copy(q); + this.target_.group_.position.copy(this.position_); + this.target_.group_.quaternion.copy(this.quaternion_); + } + + CreateTransformPacket() { + return [ + this.stateMachine_.currentState_.Name, + this.position_.toArray(), + this.quaternion_.toArray(), + ]; + } + + Update(timeInSeconds) { + if (!this.stateMachine_.currentState_) { + return; + } + + this.stateMachine_.Update(timeInSeconds, this._input); + + const velocity = this.velocity_; + const frameDecceleration = new THREE.Vector3( + velocity.x * this.decceleration_.x, + velocity.y * this.decceleration_.y, + velocity.z * this.decceleration_.z + ); + frameDecceleration.multiplyScalar(timeInSeconds); + frameDecceleration.z = Math.sign(frameDecceleration.z) * Math.min( + Math.abs(frameDecceleration.z), Math.abs(velocity.z)); + + velocity.add(frameDecceleration); + + const controlObject = this.target_; + const _Q = new THREE.Quaternion(); + const _A = new THREE.Vector3(); + const _R = controlObject.quaternion.clone(); + + const acc = this.acceleration_.clone(); + if (this._input._keys.shift) { + acc.multiplyScalar(2.0); + } + + if (this.stateMachine_.currentState_.Name == 'dance') { + acc.multiplyScalar(0.0); + } + + if (this._input._keys.forward) { + velocity.z += acc.z * timeInSeconds; + } + if (this._input._keys.backward) { + velocity.z -= acc.z * timeInSeconds; + } + if (this._input._keys.left) { + _A.set(0, 1, 0); + _Q.setFromAxisAngle(_A, 4.0 * Math.PI * timeInSeconds * this.acceleration_.y); + _R.multiply(_Q); + } + if (this._input._keys.right) { + _A.set(0, 1, 0); + _Q.setFromAxisAngle(_A, 4.0 * -Math.PI * timeInSeconds * this.acceleration_.y); + _R.multiply(_Q); + } + + controlObject.quaternion.copy(_R); + + const oldPosition = new THREE.Vector3(); + oldPosition.copy(controlObject.position); + + const forward = new THREE.Vector3(0, 0, 1); + forward.applyQuaternion(controlObject.quaternion); + forward.normalize(); + + const sideways = new THREE.Vector3(1, 0, 0); + sideways.applyQuaternion(controlObject.quaternion); + sideways.normalize(); -class CrappyMMOAttempt { + sideways.multiplyScalar(velocity.x * timeInSeconds); + forward.multiplyScalar(velocity.z * timeInSeconds); + + controlObject.position.add(forward); + controlObject.position.add(sideways); + + this.position_.copy(controlObject.position); + this.quaternion_.copy(controlObject.quaternion); + + this.target_.Update(timeInSeconds); + } +}; + +class BasicCharacterControllerInput { constructor() { - this._Initialize(); + this._Init(); } - _Initialize() { - this.entityManager_ = new entity_manager.EntityManager(); + _Init() { + this._keys = { + forward: false, + backward: false, + left: false, + right: false, + space: false, + shift: false, + }; + document.addEventListener('keydown', (e) => this.OnKeyDown_(e), false); + document.addEventListener('keyup', (e) => this._onKeyUp(e), false); + } + + OnKeyDown_(event) { + if (event.currentTarget.activeElement != document.body) { + return; + } + switch (event.keyCode) { + case 87: // w + this._keys.forward = true; + break; + case 65: // a + this._keys.left = true; + break; + case 83: // s + this._keys.backward = true; + break; + case 68: // d + this._keys.right = true; + break; + case 32: // SPACE + this._keys.space = true; + break; + case 16: // SHIFT + this._keys.shift = true; + break; + } + } + + _onKeyUp(event) { + if (event.currentTarget.activeElement != document.body) { + return; + } + switch(event.keyCode) { + case 87: // w + this._keys.forward = false; + break; + case 65: // a + this._keys.left = false; + break; + case 83: // s + this._keys.backward = false; + break; + case 68: // d + this._keys.right = false; + break; + case 32: // SPACE + this._keys.space = false; + break; + case 16: // SHIFT + this._keys.shift = false; + break; + } + } +}; + + +class FiniteStateMachine { + constructor() { + this._states = {}; + this.currentState_ = null; + } + + _AddState(name, type) { + this._states[name] = type; + } + + SetState(name) { + const prevState = this.currentState_; + + if (prevState) { + if (prevState.Name == name) { + return; + } + prevState.Exit(); + } + + const state = new this._states[name](this); + + this.currentState_ = state; + state.Enter(prevState); + } + + Update(timeElapsed, input) { + if (this.currentState_) { + this.currentState_.Update(timeElapsed, input); + } + } +}; + + +class CharacterFSM extends FiniteStateMachine { + constructor(proxy) { + super(); + this._proxy = proxy; + this._Init(); + } + + _Init() { + this._AddState('idle', IdleState); + this._AddState('walk', WalkState); + this._AddState('run', RunState); + this._AddState('dance', DanceState); + } +}; + + +class State { + constructor(parent) { + this._parent = parent; + } + + Enter() {} + Exit() {} + Update() {} +}; + - document.getElementById('login-ui').style.visibility = 'visible'; - document.getElementById('login-button').onclick = () => { - this.OnGameStarted_(); +class DanceState extends State { + constructor(parent) { + super(parent); + + this._FinishedCallback = () => { + this._Finished(); + } + } + + get Name() { + return 'dance'; + } + + Enter(prevState) { + const curAction = this._parent._proxy.animations_['dance'].action; + const mixer = curAction.getMixer(); + mixer.addEventListener('finished', this._FinishedCallback); + + if (prevState) { + const prevAction = this._parent._proxy.animations_[prevState.Name].action; + + curAction.reset(); + curAction.setLoop(THREE.LoopOnce, 1); + curAction.clampWhenFinished = true; + curAction.crossFadeFrom(prevAction, 0.2, true); + curAction.play(); + } else { + curAction.play(); + } + } + + _Finished() { + this._Cleanup(); + this._parent.SetState('idle'); + } + + _Cleanup() { + const action = this._parent._proxy.animations_['dance'].action; + + action.getMixer().removeEventListener('finished', this._CleanupCallback); + } + + Exit() { + this._Cleanup(); + } + + Update(_) { + } +}; + + +class WalkState extends State { + constructor(parent) { + super(parent); + } + + get Name() { + return 'walk'; + } + + Enter(prevState) { + const curAction = this._parent._proxy.animations_['walk'].action; + if (prevState) { + const prevAction = this._parent._proxy.animations_[prevState.Name].action; + + curAction.enabled = true; + + if (prevState.Name == 'run') { + const ratio = curAction.getClip().duration / prevAction.getClip().duration; + curAction.time = prevAction.time * ratio; + } else { + curAction.time = 0.0; + curAction.setEffectiveTimeScale(1.0); + curAction.setEffectiveWeight(1.0); + } + + curAction.crossFadeFrom(prevAction, 0.5, true); + curAction.play(); + } else { + curAction.play(); + } + } + + Exit() { + } + + Update(timeElapsed, input) { + if (!input) { + return; + } + + if (input._keys.forward || input._keys.backward) { + if (input._keys.shift) { + this._parent.SetState('run'); + } + return; + } + + this._parent.SetState('idle'); + } +}; + + +class RunState extends State { + constructor(parent) { + super(parent); + } + + get Name() { + return 'run'; + } + + Enter(prevState) { + const curAction = this._parent._proxy.animations_['run'].action; + if (prevState) { + const prevAction = this._parent._proxy.animations_[prevState.Name].action; + + curAction.enabled = true; + + if (prevState.Name == 'walk') { + const ratio = curAction.getClip().duration / prevAction.getClip().duration; + curAction.time = prevAction.time * ratio; + } else { + curAction.time = 0.0; + curAction.setEffectiveTimeScale(1.0); + curAction.setEffectiveWeight(1.0); + } + + curAction.crossFadeFrom(prevAction, 0.5, true); + curAction.play(); + } else { + curAction.play(); + } + } + + Exit() { + } + + Update(timeElapsed, input) { + if (!input) { + return; + } + + if (input._keys.forward || input._keys.backward) { + if (!input._keys.shift) { + this._parent.SetState('walk'); + } + return; + } + + this._parent.SetState('idle'); + } +}; + + +class IdleState extends State { + constructor(parent) { + super(parent); + } + + get Name() { + return 'idle'; + } + + Enter(prevState) { + const idleAction = this._parent._proxy.animations_['idle'].action; + if (prevState) { + const prevAction = this._parent._proxy.animations_[prevState.Name].action; + idleAction.time = 0.0; + idleAction.enabled = true; + idleAction.setEffectiveTimeScale(1.0); + idleAction.setEffectiveWeight(1.0); + idleAction.crossFadeFrom(prevAction, 0.5, true); + idleAction.play(); + } else { + idleAction.play(); + } + } + + Exit() { + } + + Update(_, input) { + if (!input) { + return; + } + if (input._keys.forward || input._keys.backward) { + this._parent.SetState('walk'); + } else if (input._keys.space) { + this._parent.SetState('dance'); + } + } +}; + + +class ThirdPersonCamera { + constructor(params) { + this.params_ = params; + this._camera = params.camera; + + this._currentPosition = new THREE.Vector3(); + this._currentLookat = new THREE.Vector3(); + } + + _CalculateIdealOffset() { + const idealOffset = new THREE.Vector3(-15, 20, -30); + idealOffset.applyQuaternion(this.params_.target.Rotation); + idealOffset.add(this.params_.target.Position); + return idealOffset; + } + + _CalculateIdealLookat() { + const idealLookat = new THREE.Vector3(0, 10, 50); + idealLookat.applyQuaternion(this.params_.target.Rotation); + idealLookat.add(this.params_.target.Position); + return idealLookat; + } + + Update(timeElapsed) { + const idealOffset = this._CalculateIdealOffset(); + const idealLookat = this._CalculateIdealLookat(); + + // const t = 0.05; + // const t = 4.0 * timeElapsed; + const t = 1.0 - Math.pow(0.001, timeElapsed); + + this._currentPosition.lerp(idealOffset, t); + this._currentLookat.lerp(idealLookat, t); + + this._camera.position.copy(this._currentPosition); + this._camera.lookAt(this._currentLookat); + } +} + + +class PlayerEntity { + constructor(params) { + this.params_ = params; + this.Init_(); + } + + Init_() { + } + + CreateFromDesc(desc) { + const params = { + camera: this.params_.camera, + scene: this.params_.scene, + desc: desc, }; + this.controls_ = new BasicCharacterController(params); + + this.thirdPersonCamera_ = new ThirdPersonCamera({ + camera: this.params_.camera, + target: this.controls_, + }); + + this.updateTimer_ = 0.0; + } + + UpdateTransform(data) { + const s = data[0]; + const p = data[1]; + const q = data[2]; + this.controls_.SetTransform( + new THREE.Vector3(...p), + new THREE.Quaternion(...q) + ); + } + + Update(timeElapsed) { + this.controls_.Update(timeElapsed); + this.thirdPersonCamera_.Update(timeElapsed); + this.SendTransform_(timeElapsed); + } + + SendTransform_(timeElapsed) { + this.updateTimer_ -= timeElapsed; + if (this.updateTimer_ <= 0.0 && this.controls_.IsLoaded) { + this.updateTimer_ = 0.1; + this.params_.socket.emit( + 'world.update', + this.controls_.CreateTransformPacket(), + ); + } + } +}; + + +class NetworkCharacterController { + constructor(params) { + this._Init(params); + } + + Destroy() { + this.name_.Destroy(); + this.name_ = null; + this.target_.Destroy(); + this.target_ = null; + } + + _Init(params) { + this.params_ = params; + + this.target_ = new AnimatedMesh({ + scene: params.scene, + desc: params.desc, + }); + this.target_.onLoad = () => { + this.stateMachine_ = new CharacterFSM( + new BasicCharacterControllerProxy(this.target_.animations_)); + this.stateMachine_.SetState('idle'); + } + + this.name_ = new FloatingName({ + parent: this.target_.group_, + desc: params.desc, + }); + } + + get position() { + return this.target_.position; + } + + get quaternion() { + return this.target_.quaternion; + } + + SetState(s) { + if (!this.stateMachine_) { + return; + } + this.stateMachine_.SetState(s); + } + + Update(timeInSeconds) { + if (!this.stateMachine_) { + return; + } + + this.stateMachine_.Update(timeInSeconds, null); + this.target_.Update(timeInSeconds); + } +}; + + +class NetworkEntity { + constructor(params) { + this.params_ = params; + this.transformUpdates_ = []; + this.targetFrame_ = null; + this.lastFrame_ = null; + this.Init_(); + } + + Destroy() { + this.controller_.Destroy(); + } + + Init_() { + } + + CreateFromDesc(desc, transform) { + this.controller_ = new NetworkCharacterController({ + scene: this.params_.scene, + desc: desc, + }); + this.controller_.position.set(...transform[1]); + this.controller_.quaternion.set(...transform[2]); + this.targetFrame_ = {time: 0.1, transform: transform}; +} + + UpdateTransform(data) { + this.transformUpdates_.push({time: 0.1, transform: data}); + } + + Update(timeElapsed) { + this.controller_.Update(timeElapsed); + + this.ApplyLCT_(timeElapsed); + } + + ApplyLCT_(timeElapsed) { + if (this.transformUpdates_.length == 0) { + return; + } + + for (let i = 0; i < this.transformUpdates_.length; ++i) { + this.transformUpdates_[i].time -= timeElapsed; + } + + while (this.transformUpdates_.length > 0 && + this.transformUpdates_[0].time <= 0.0) { + this.lastFrame_ = { + transform: [ + this.targetFrame_.transform[0], + this.controller_.position.toArray(), + this.controller_.quaternion.toArray() + ] + }; + this.targetFrame_ = this.transformUpdates_.shift(); + this.targetFrame_.time = 0.0; + } + + if (this.targetFrame_ && this.lastFrame_) { + this.targetFrame_.time += timeElapsed; + const p1 = new THREE.Vector3(...this.lastFrame_.transform[1]); + const p2 = new THREE.Vector3(...this.targetFrame_.transform[1]); + const q1 = new THREE.Quaternion(...this.lastFrame_.transform[2]); + const q2 = new THREE.Quaternion(...this.targetFrame_.transform[2]); + this.controller_.position.copy(p1); + this.controller_.quaternion.copy(q1); + const t = Math.max(Math.min(this.targetFrame_.time / 0.1, 1.0), 0.0); + this.controller_.position.lerp(p2, t); + this.controller_.quaternion.slerp(q2, t); + this.controller_.SetState(this.lastFrame_.transform[0]); + } + } +} + + +class Chatbox { + constructor(params) { + this.params_ = params; + this.OnChat = () => {}; + this.Init_(); + } + + Init_() { + this.element_ = document.getElementById('chat-input'); + this.element_.addEventListener( + 'keydown', (e) => this.OnKeyDown_(e), false); + } + + OnKeyDown_(evt) { + if (evt.keyCode === 13) { + evt.preventDefault(); + const msg = this.element_.value; + if (msg != '') { + this.OnChat(msg); + } + this.element_.value = ''; + } + } + + AddMessage(msg) { + const e = document.createElement('div'); + e.className = 'chat-text'; + e.innerText = '[' + msg.name + ']: ' + msg.text; + const chatElement = document.getElementById('chat-ui-text-area'); + chatElement.insertBefore(e, document.getElementById('chat-input')); + } +}; + + +class BasicMMODemo { + constructor() { + this._Initialize(); } - OnGameStarted_() { - this.CreateGUI_(); + _Initialize() { + this.threejs_ = new THREE.WebGLRenderer({ + antialias: true, + }); + this.threejs_.outputEncoding = THREE.sRGBEncoding; + this.threejs_.gammaFactor = 2.2; + this.threejs_.shadowMap.enabled = true; + this.threejs_.shadowMap.type = THREE.PCFSoftShadowMap; + this.threejs_.setPixelRatio(window.devicePixelRatio); + this.threejs_.setSize(window.innerWidth, window.innerHeight); + + document.getElementById('container').appendChild( + this.threejs_.domElement); + + window.addEventListener('resize', () => { + this.OnWindowResize_(); + }, false); + + const fov = 60; + const aspect = 1920 / 1080; + const near = 1.0; + const far = 1000.0; + this.camera_ = new THREE.PerspectiveCamera(fov, aspect, near, far); + this.camera_.position.set(75, 20, 0); + + this.scene_ = new THREE.Scene(); + + let light = new THREE.DirectionalLight(0xFFFFFF, 1.0); + light.position.set(20, 100, 10); + light.target.position.set(0, 0, 0); + light.castShadow = true; + light.shadow.bias = -0.001; + light.shadow.mapSize.width = 2048; + light.shadow.mapSize.height = 2048; + light.shadow.camera.near = 0.1; + light.shadow.camera.far = 500.0; + light.shadow.camera.near = 0.5; + light.shadow.camera.far = 500.0; + light.shadow.camera.left = 100; + light.shadow.camera.right = -100; + light.shadow.camera.top = 100; + light.shadow.camera.bottom = -100; + this.scene_.add(light); + + light = new THREE.AmbientLight(0x101010); + this.scene_.add(light); + + const controls = new OrbitControls( + this.camera_, this.threejs_.domElement); + controls.target.set(0, 20, 0); + controls.update(); - this.grid_ = new spatial_hash_grid.SpatialHashGrid( - [[-1000, -1000], [1000, 1000]], [100, 100]); + const loader = new THREE.CubeTextureLoader(); + const texture = loader.load([ + './resources/posx.jpg', + './resources/negx.jpg', + './resources/posy.jpg', + './resources/negy.jpg', + './resources/posz.jpg', + './resources/negz.jpg', + ]); + texture.encoding = THREE.sRGBEncoding; + this.scene_.background = texture; - this.LoadControllers_(); - this.LoadPlayer_(); + const plane = new THREE.Mesh( + new THREE.PlaneGeometry(100, 100, 10, 10), + new THREE.MeshStandardMaterial({ + color: 0x808080, + })); + plane.castShadow = false; + plane.receiveShadow = true; + plane.rotation.x = -Math.PI / 2; + this.scene_.add(plane); + + this.SetupSocket_(); + + this.entities_ = {}; + + this.chatbox_ = new Chatbox(); + this.chatbox_.OnChat = (txt) => { this.OnChat_(txt); }; this.previousRAF_ = null; this.RAF_(); } - CreateGUI_() { - this._guiParams = { - general: { - }, - }; - this._gui = new GUI(); - - const generalRollup = this._gui.addFolder('General'); - this._gui.close(); - } - - LoadControllers_() { - const threejs = new entity.Entity(); - threejs.AddComponent(new threejs_component.ThreeJSController()); - this.entityManager_.Add(threejs); - - // Hack - this.scene_ = threejs.GetComponent('ThreeJSController').scene_; - this.camera_ = threejs.GetComponent('ThreeJSController').camera_; - this.threejs_ = threejs.GetComponent('ThreeJSController').threejs_; - - const ui = new entity.Entity(); - ui.AddComponent(new ui_controller.UIController()); - this.entityManager_.Add(ui, 'ui'); - - const network = new entity.Entity(); - network.AddComponent(new network_controller.NetworkController()); - this.entityManager_.Add(network, 'network'); - - const t = new entity.Entity(); - t.AddComponent(new terrain.TerrainChunkManager({ - scene: this.scene_, - target: 'player', - gui: this._gui, - guiParams: this._guiParams, - threejs: this.threejs_, - })); - this.entityManager_.Add(t, 'terrain'); - - const l = new entity.Entity(); - l.AddComponent(new load_controller.LoadController()); - this.entityManager_.Add(l, 'loader'); - - const scenery = new entity.Entity(); - scenery.AddComponent(new scenery_controller.SceneryController({ - scene: this.scene_, - grid: this.grid_, - })); - this.entityManager_.Add(scenery, 'scenery'); - - const spawner = new entity.Entity(); - spawner.AddComponent(new spawners.PlayerSpawner({ - grid: this.grid_, - scene: this.scene_, - camera: this.camera_, - })); - spawner.AddComponent(new spawners.NetworkEntitySpawner({ - grid: this.grid_, - scene: this.scene_, - camera: this.camera_, - })); - this.entityManager_.Add(spawner, 'spawners'); - - - const database = new entity.Entity(); - database.AddComponent(new inventory_controller.InventoryDatabaseController()); - this.entityManager_.Add(database, 'database'); - - // HACK - for (let k in defs.WEAPONS_DATA) { - database.GetComponent('InventoryDatabaseController').AddItem( - k, defs.WEAPONS_DATA[k]); - } - } - - LoadPlayer_() { - const params = { - camera: this.camera_, - scene: this.scene_, - }; + GenerateRandomName_() { + const names1 = [ + 'Aspiring', 'Nameless', 'Cautionary', 'Excited', + 'Modest', 'Maniacal', 'Caffeinated', 'Sleepy', + 'Passionate', 'Masochistic', 'Aging', 'Pedantic', + 'Talkative', + ]; + const names2 = [ + 'Coder', 'Mute', 'Giraffe', 'Snowman', + 'Machinist', 'Fondler', 'Typist', + 'Noodler', 'Arborist', 'Peeper', 'Ghost', + ]; + const n1 = names1[ + Math.floor(Math.random() * names1.length)]; + const n2 = names2[ + Math.floor(Math.random() * names2.length)]; + return n1 + ' ' + n2; + } + + SetupSocket_() { + this.socket_ = io('ws://localhost:3000', { + reconnection: false, + transports: ['websocket'], + }); + + this.socket_.on("connect", () => { + console.log(this.socket_.id); + const randomName = this.GenerateRandomName_(); + this.socket_.emit('login.commit', randomName); + }); + + this.socket_.on("disconnect", () => { + console.log('DISCONNECTED: ' + this.socket_.id); // undefined + }); + + this.socket_.onAny((e, d) => { + this.OnMessage_(e, d); + }); + } - const levelUpSpawner = new entity.Entity(); - levelUpSpawner.AddComponent(new level_up_component.LevelUpComponentSpawner({ - camera: this.camera_, - scene: this.scene_, - })); - this.entityManager_.Add(levelUpSpawner, 'level-up-spawner'); + OnChat_(txt) { + this.socket_.emit('chat.msg', txt); } - _OnWindowResize() { + OnMessage_(e, d) { + if (e == 'world.player') { + this.playerID_ = d.id; + const e = new PlayerEntity({ + scene: this.scene_, + camera: this.camera_, + socket: this.socket_ + }); + e.CreateFromDesc(d.desc); + e.UpdateTransform(d.transform); + this.entities_[d.id] = e; + console.log('entering world: ' + d.id); + } else if (e == 'world.update') { + const updates = d; + const alive = {}; + + alive[this.playerID_] = this.entities_[this.playerID_]; + + for (let u of updates) { + if ('desc' in u) { + const e = new NetworkEntity({scene: this.scene_}); + e.CreateFromDesc(u.desc, u.transform); + this.entities_[u.id] = e; + } else { + this.entities_[u.id].UpdateTransform(u.transform); + } + + alive[u.id] = this.entities_[u.id]; + } + + const dead = []; + for (let k in this.entities_) { + if (!(k in alive)) { + dead.push(this.entities_[k]); + } + } + + this.entities_ = alive; + + for (let i = 0; i < dead.length; ++i) { + dead[i].Destroy(); + } + } else if (e == 'chat.message') { + this.chatbox_.AddMessage(d); + } + } + + OnWindowResize_() { this.camera_.aspect = window.innerWidth / window.innerHeight; this.camera_.updateProjectionMatrix(); this.threejs_.setSize(window.innerWidth, window.innerHeight); @@ -141,24 +1102,21 @@ class CrappyMMOAttempt { RAF_() { requestAnimationFrame((t) => { - if (this.previousRAF_ === null) { + if (this.previousRAF_ == null) { this.previousRAF_ = t; } + this.Update_((t - this.previousRAF_) * 0.001); this.threejs_.render(this.scene_, this.camera_); - this.Step_(t - this.previousRAF_); this.previousRAF_ = t; - - setTimeout(() => { - this.RAF_(); - }, 1); + this.RAF_(); }); } - Step_(timeElapsed) { - const timeElapsedS = Math.min(1.0 / 30.0, timeElapsed * 0.001); - - this.entityManager_.Update(timeElapsedS); + Update_(timeElapsed) { + for (let k in this.entities_) { + this.entities_[k].Update(timeElapsed); + } } } @@ -166,5 +1124,5 @@ class CrappyMMOAttempt { let _APP = null; window.addEventListener('DOMContentLoaded', () => { - _APP = new CrappyMMOAttempt(); + _APP = new BasicMMODemo(); }); diff --git a/client/src/main.ts b/client/src/main.ts new file mode 100644 index 00000000..d7803d0d --- /dev/null +++ b/client/src/main.ts @@ -0,0 +1,170 @@ +import {GUI} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/libs/dat.gui.module.js'; + +import {entity_manager} from './entity-manager.js'; +import {entity} from './entity.js'; +import {ui_controller} from './ui-controller.js'; +import {level_up_component} from './level-up-component.js'; +import {network_controller} from './network-controller.js'; +import {scenery_controller} from './scenery-controller.js'; +import {load_controller} from './load-controller.js'; +import {spawners} from './spawners.js'; +import {terrain} from './terrain.js'; +import {inventory_controller} from './inventory-controller.js'; + +import {spatial_hash_grid} from '/shared/spatial-hash-grid.mjs'; +import {defs} from '/shared/defs.mjs'; +import {threejs_component} from './threejs_component.js'; + + + +class CrappyMMOAttempt { + constructor() { + this._Initialize(); + } + + _Initialize() { + this.entityManager_ = new entity_manager.EntityManager(); + + document.getElementById('login-ui').style.visibility = 'visible'; + document.getElementById('login-button').onclick = () => { + this.OnGameStarted_(); + }; + } + + OnGameStarted_() { + this.CreateGUI_(); + + this.grid_ = new spatial_hash_grid.SpatialHashGrid( + [[-1000, -1000], [1000, 1000]], [100, 100]); + + this.LoadControllers_(); + this.LoadPlayer_(); + + this.previousRAF_ = null; + this.RAF_(); + } + + CreateGUI_() { + this._guiParams = { + general: { + }, + }; + this._gui = new GUI(); + + const generalRollup = this._gui.addFolder('General'); + this._gui.close(); + } + + LoadControllers_() { + const threejs = new entity.Entity(); + threejs.AddComponent(new threejs_component.ThreeJSController()); + this.entityManager_.Add(threejs); + + // Hack + this.scene_ = threejs.GetComponent('ThreeJSController').scene_; + this.camera_ = threejs.GetComponent('ThreeJSController').camera_; + this.threejs_ = threejs.GetComponent('ThreeJSController').threejs_; + + const ui = new entity.Entity(); + ui.AddComponent(new ui_controller.UIController()); + this.entityManager_.Add(ui, 'ui'); + + const network = new entity.Entity(); + network.AddComponent(new network_controller.NetworkController()); + this.entityManager_.Add(network, 'network'); + + const t = new entity.Entity(); + t.AddComponent(new terrain.TerrainChunkManager({ + scene: this.scene_, + target: 'player', + gui: this._gui, + guiParams: this._guiParams, + threejs: this.threejs_, + })); + this.entityManager_.Add(t, 'terrain'); + + const l = new entity.Entity(); + l.AddComponent(new load_controller.LoadController()); + this.entityManager_.Add(l, 'loader'); + + const scenery = new entity.Entity(); + scenery.AddComponent(new scenery_controller.SceneryController({ + scene: this.scene_, + grid: this.grid_, + })); + this.entityManager_.Add(scenery, 'scenery'); + + const spawner = new entity.Entity(); + spawner.AddComponent(new spawners.PlayerSpawner({ + grid: this.grid_, + scene: this.scene_, + camera: this.camera_, + })); + spawner.AddComponent(new spawners.NetworkEntitySpawner({ + grid: this.grid_, + scene: this.scene_, + camera: this.camera_, + })); + this.entityManager_.Add(spawner, 'spawners'); + + + const database = new entity.Entity(); + database.AddComponent(new inventory_controller.InventoryDatabaseController()); + this.entityManager_.Add(database, 'database'); + + // HACK + for (let k in defs.WEAPONS_DATA) { + database.GetComponent('InventoryDatabaseController').AddItem( + k, defs.WEAPONS_DATA[k]); + } + } + + LoadPlayer_() { + const params = { + camera: this.camera_, + scene: this.scene_, + }; + + const levelUpSpawner = new entity.Entity(); + levelUpSpawner.AddComponent(new level_up_component.LevelUpComponentSpawner({ + camera: this.camera_, + scene: this.scene_, + })); + this.entityManager_.Add(levelUpSpawner, 'level-up-spawner'); + } + + _OnWindowResize() { + this.camera_.aspect = window.innerWidth / window.innerHeight; + this.camera_.updateProjectionMatrix(); + this.threejs_.setSize(window.innerWidth, window.innerHeight); + } + + RAF_() { + requestAnimationFrame((t) => { + if (this.previousRAF_ === null) { + this.previousRAF_ = t; + } + + this.threejs_.render(this.scene_, this.camera_); + this.Step_(t - this.previousRAF_); + this.previousRAF_ = t; + + setTimeout(() => { + this.RAF_(); + }, 1); + }); + } + + Step_(timeElapsed) { + const timeElapsedS = Math.min(1.0 / 30.0, timeElapsed * 0.001); + + this.entityManager_.Update(timeElapsedS); + } +} + + +let _APP = null; + +window.addEventListener('DOMContentLoaded', () => { + _APP = new CrappyMMOAttempt(); +}); diff --git a/client/src/network-controller.js b/client/src/network-controller.ts similarity index 100% rename from client/src/network-controller.js rename to client/src/network-controller.ts diff --git a/client/src/network-entity-controller.js b/client/src/network-entity-controller.ts similarity index 100% rename from client/src/network-entity-controller.js rename to client/src/network-entity-controller.ts diff --git a/client/src/network-player-controller.js b/client/src/network-player-controller.ts similarity index 100% rename from client/src/network-player-controller.js rename to client/src/network-player-controller.ts diff --git a/client/src/npc-entity.js b/client/src/npc-entity.ts similarity index 100% rename from client/src/npc-entity.js rename to client/src/npc-entity.ts diff --git a/client/src/particle-system.js b/client/src/particle-system.ts similarity index 100% rename from client/src/particle-system.js rename to client/src/particle-system.ts diff --git a/client/src/player-entity.js b/client/src/player-entity.ts similarity index 100% rename from client/src/player-entity.js rename to client/src/player-entity.ts diff --git a/client/src/player-input.js b/client/src/player-input.ts similarity index 100% rename from client/src/player-input.js rename to client/src/player-input.ts diff --git a/client/src/player-state.js b/client/src/player-state.ts similarity index 100% rename from client/src/player-state.js rename to client/src/player-state.ts diff --git a/client/src/quadtree.js b/client/src/quadtree.ts similarity index 100% rename from client/src/quadtree.js rename to client/src/quadtree.ts diff --git a/client/src/quest-component.js b/client/src/quest-component.ts similarity index 100% rename from client/src/quest-component.js rename to client/src/quest-component.ts diff --git a/client/src/render-component.js b/client/src/render-component.ts similarity index 100% rename from client/src/render-component.js rename to client/src/render-component.ts diff --git a/client/src/scenery-controller.js b/client/src/scenery-controller.ts similarity index 100% rename from client/src/scenery-controller.js rename to client/src/scenery-controller.ts diff --git a/client/src/sorceror-effect.js b/client/src/sorceror-effect.ts similarity index 100% rename from client/src/sorceror-effect.js rename to client/src/sorceror-effect.ts diff --git a/client/src/spatial-grid-controller.js b/client/src/spatial-grid-controller.ts similarity index 100% rename from client/src/spatial-grid-controller.js rename to client/src/spatial-grid-controller.ts diff --git a/client/src/spawners.js b/client/src/spawners.ts similarity index 100% rename from client/src/spawners.js rename to client/src/spawners.ts diff --git a/client/src/terrain-builder-threaded-worker.js b/client/src/terrain-builder-threaded-worker.ts similarity index 100% rename from client/src/terrain-builder-threaded-worker.js rename to client/src/terrain-builder-threaded-worker.ts diff --git a/client/src/terrain-builder-threaded.js b/client/src/terrain-builder-threaded.ts similarity index 100% rename from client/src/terrain-builder-threaded.js rename to client/src/terrain-builder-threaded.ts diff --git a/client/src/terrain-builder.js b/client/src/terrain-builder.ts similarity index 100% rename from client/src/terrain-builder.js rename to client/src/terrain-builder.ts diff --git a/client/src/terrain-chunk.js b/client/src/terrain-chunk.ts similarity index 100% rename from client/src/terrain-chunk.js rename to client/src/terrain-chunk.ts diff --git a/client/src/terrain-shader.js b/client/src/terrain-shader.ts similarity index 100% rename from client/src/terrain-shader.js rename to client/src/terrain-shader.ts diff --git a/client/src/terrain.js b/client/src/terrain.ts similarity index 100% rename from client/src/terrain.js rename to client/src/terrain.ts diff --git a/client/src/test.js b/client/src/test.ts similarity index 100% rename from client/src/test.js rename to client/src/test.ts diff --git a/client/src/texture-splatter.js b/client/src/texture-splatter.ts similarity index 100% rename from client/src/texture-splatter.js rename to client/src/texture-splatter.ts diff --git a/client/src/textures.js b/client/src/textures.ts similarity index 100% rename from client/src/textures.js rename to client/src/textures.ts diff --git a/client/src/third-person-camera.js b/client/src/third-person-camera.ts similarity index 100% rename from client/src/third-person-camera.js rename to client/src/third-person-camera.ts diff --git a/client/src/threejs_component.js b/client/src/thre.ts_component.ts similarity index 100% rename from client/src/threejs_component.js rename to client/src/thre.ts_component.ts diff --git a/client/src/ui-controller.js b/client/src/ui-controller.ts similarity index 100% rename from client/src/ui-controller.js rename to client/src/ui-controller.ts diff --git a/client/src/utils.js b/client/src/utils.ts similarity index 100% rename from client/src/utils.js rename to client/src/utils.ts diff --git a/client/base.css b/client/styles/base.css similarity index 100% rename from client/base.css rename to client/styles/base.css diff --git a/client/tsconfig.json b/client/tsconfig.json new file mode 100644 index 00000000..25bd89d4 --- /dev/null +++ b/client/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.packages.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist" + }, + "include": ["./src/*.ts"], + "exclude": ["./dist", "node_modules"] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 00000000..dd0a4e04 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "private": true, + "workspaces": [ + "client", + "server", + "shared" + ], + "dependencies": { + "typescript": "^4.2.3" + }, + "scripts": { + "server": "yarn workspace server", + "client": "yarn workspace client", + "shared": "yarn workspace shared", + "start:server:dev": "yarn server start:dev", + "start:client:dev": "yarn client start:dev", + "start:shared:dev": "yarn shared start:dev" + } +} \ No newline at end of file diff --git a/server/index.mjs b/server/index.mjs deleted file mode 100644 index 08206047..00000000 --- a/server/index.mjs +++ /dev/null @@ -1,101 +0,0 @@ - -// const http = require('http'); -// const server = http.createServer(); -// const io = require('socket.io')(server, -// { -// cors: { -// origin: "*" -// } -// } -// ); - - -import * as http from 'http'; -import * as socket_io from 'socket.io'; - -import {world_server} from './src/world-server.mjs'; - - -function Main() { - const port = process.env.PORT || 3000; - - const server = http.createServer(); - const io = new socket_io.Server(server, { - cors: { - origin: '*' - } - }); - - server.listen(port, () => { - console.log('listening on: *', port); - }); - - const _WORLD = new world_server.WorldServer(io); - _WORLD.Run(); -} - - -Main(); - - - - - - - - - - - - - - - -// app.all("/socket.io/*", function(req, res, next) { -// res.header("Access-Control-Allow-Origin", "*"); -// res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With"); -// res.header("Access-Control-Allow-Methods", "GET, PUT, POST"); -// return next(); -// }); - -// class Client { -// constructor(socket) { -// this.socket_ = socket; -// this.SetupSocket_(); -// } - -// SetupSocket_() { -// this.socket_.on('user-connected', () => { -// console.log('socket.id: ' + socket.id); -// // users.push({id: socket.id}) -// // io.emit('user-connected', socket.id) -// }); -// this.socket_.on('disconnect', () => { -// // const index = getIndex(socket.id) -// // users.splice(1, index) -// // io.emit('user-disconnected', socket.id) -// }); -// } -// }; - - -// class WorldServer { -// constructor() { -// this.SetupIO_(); -// } - -// SetupIO_() { -// io.on('connection', socket => { -// this.clients_[socket.id] = new Client(socket); -// }); -// } -// }; - - -// class World { -// constructor() { -// this.server_ = new WorldServer(); -// } -// }; - -// const _WORLD = new World(); \ No newline at end of file diff --git a/server/package.json b/server/package.json new file mode 100644 index 00000000..9705ead4 --- /dev/null +++ b/server/package.json @@ -0,0 +1,20 @@ +{ + "name": "server", + "version": "0.0.1", + "dependencies": { + "http": "^0.0.1-security", + "shared": "0.0.1", + "socket.io": "^4.0.0", + "typescript": "^4.2.3" + }, + "devDependencies": { + "cross-env": "^5.0.5", + "nodemon": "^2.0.7", + "tsc-watch": "^4.2.9" + }, + "scripts": { + "build": "tsc --build", + "start:dev":"tsc-watch --onSuccess 'node ./dist/index.js'", + "start": "node ./dist/index.js" + } +} \ No newline at end of file diff --git a/server/src/index.ts b/server/src/index.ts new file mode 100644 index 00000000..8992bd35 --- /dev/null +++ b/server/src/index.ts @@ -0,0 +1,27 @@ +import {test} from 'shared'; +import * as http from 'http'; +import * as socket_io from 'socket.io'; + +import {world_server} from './scripts/world-server'; + + +function Main() { + const port = process.env.PORT || 3000; + + const server = http.createServer(); + const io = new socket_io.Server(server, { + cors: { + origin: '*' + } + }); + + server.listen(port, () => { + console.log(`listening on: ${port} : ${test}`); + }); + + const _WORLD = new world_server.WorldServer(io); + _WORLD.Run(); +} + + +Main(); diff --git a/server/src/login-queue.mjs b/server/src/login-queue.mjs deleted file mode 100644 index 9e91646b..00000000 --- a/server/src/login-queue.mjs +++ /dev/null @@ -1,130 +0,0 @@ -export const login_queue = (() => { - - class FiniteStateMachine { - constructor(onEvent) { - this.currentState_ = null; - this.onEvent_ = onEvent; - } - - get State() { - return this.currentState_; - } - - Broadcast(evt) { - this.onEvent_(evt); - } - - OnMessage(evt, data) { - return this.currentState_.OnMessage(evt, data); - } - - SetState(state) { - const prevState = this.currentState_; - - if (prevState) { - prevState.OnExit(); - } - - this.currentState_ = state; - this.currentState_.parent_ = this; - state.OnEnter(prevState); - } - }; - - - class State { - constructor() {} - - Broadcast(evt) { - this.parent_.Broadcast(evt); - } - - OnEnter() { - } - - OnMessage() { - } - - OnExit() { - } - }; - - - class Login_Await extends State { - constructor() { - super(); - this.params_ = {}; - } - - OnMessage(evt, data) { - if (evt != 'login.commit') { - return false; - } - - this.params_.accountName = data; - this.parent_.SetState(new Login_Confirm(this.params_)); - - return true; - } - }; - - - class Login_Confirm extends State { - constructor(params) { - super(); - this.params_ = {...params}; - } - - OnEnter() { - console.log('login confirmed: ' + this.params_.accountName); - this.Broadcast({topic: 'login.complete', params: this.params_}); - } - - OnMessage() { - return true; - } - }; - - - class LoginClient { - constructor(client, onLogin) { - this.onLogin_ = onLogin; - - client.onMessage = (e, d) => this.OnMessage_(e, d); - - this.fsm_ = new FiniteStateMachine((e) => { this.OnEvent_(e); }); - this.fsm_.SetState(new Login_Await()); - } - - OnEvent_(evt) { - this.onLogin_(evt.params); - } - - OnMessage_(topic, data) { - return this.fsm_.OnMessage(topic, data); - } - }; - - - class LoginQueue { - constructor(onLogin) { - this.clients_ = {}; - this.onLogin_ = onLogin; - } - - Add(client) { - this.clients_[client.ID] = new LoginClient( - client, (e) => { this.OnLogin_(client, e); }); - } - - OnLogin_(client, params) { - delete this.clients_[client.ID]; - - this.onLogin_(client, params); - } - }; - - return { - LoginQueue: LoginQueue, - }; -})(); \ No newline at end of file diff --git a/server/src/scripts/login-queue.ts b/server/src/scripts/login-queue.ts new file mode 100644 index 00000000..6b34395c --- /dev/null +++ b/server/src/scripts/login-queue.ts @@ -0,0 +1,162 @@ +export const login_queue = (() => { + + class FiniteStateMachine { + #currentState: State; + #onEvent: (evt: any, data?: any) => any; + + + constructor(onEvent) { + this.#currentState = null; + this.#onEvent = onEvent; + } + + get State() { + return this.#currentState; + } + + Broadcast(evt) { + this.#onEvent(evt); + } + + OnMessage(evt, data) { + return this.#currentState.OnMessage(evt, data); + } + + SetState(state) { + const prevState = this.#currentState; + + if (prevState) { + prevState.OnExit(); + } + + this.#currentState = state; + this.#currentState.setParent(this); + state.OnEnter(prevState); + } + }; + + + class State { + #parent: any; + #params: { + accountName?: string + }; + constructor() {} + + Broadcast(evt) { + this.#parent.Broadcast(evt); + } + + setParent(stateMachine: FiniteStateMachine) { + this.#parent = stateMachine; + } + + getParent() { + return this.#parent; + } + + setParams(newParams) { + this.#params = newParams; + } + + getParams() { + return this.#params; + } + + OnEnter() { + } + + OnMessage(evt, data) { + } + + OnExit() { + } + }; + + + class Login_Await extends State { + #params: { + accountName?: string + }; + constructor() { + super(); + this.setParams({}); + } + + OnMessage(evt, data) { + if (evt != 'login.commit') { + return false; + } + + this.#params.accountName = data; + this.getParent().SetState(new Login_Confirm(this.#params)); + + return true; + } + }; + + + class Login_Confirm extends State { + constructor(params) { + super(); + this.setParams({...params}); + } + + OnEnter() { + console.log('login confirmed: ' + this.getParams().accountName); + this.Broadcast({topic: 'login.complete', params: this.getParams()}); + } + + OnMessage() { + return true; + } + }; + + + class LoginClient { + #onLogin: (any) => any; + #fsm: FiniteStateMachine; + + constructor(client, onLogin) { + this.#onLogin = onLogin; + + client.onMessage = (e, d) => this.OnMessage_(e, d); + + this.#fsm = new FiniteStateMachine((e) => { this.OnEvent(e); }); + this.#fsm.SetState(new Login_Await()); + } + + OnEvent(evt) { + this.#onLogin?.(evt.params); + } + + OnMessage_(topic, data) { + return this.#fsm.OnMessage(topic, data); + } + }; + + + class LoginQueue { + #clients: any; + + constructor(onLogin) { + this.#clients = {}; + this.OnLogin = onLogin; + } + + Add(client) { + this.#clients[client.ID] = new LoginClient( + client, (e) => { this.OnLogin(client, e); }); + } + + *OnLogin(client, params) { + delete this.#clients[client.ID]; + + this.OnLogin(client, params); + } + }; + + return { + LoginQueue: LoginQueue, + }; +})(); \ No newline at end of file diff --git a/server/src/world-client.mjs b/server/src/scripts/world-client.ts similarity index 100% rename from server/src/world-client.mjs rename to server/src/scripts/world-client.ts diff --git a/server/src/world-entity.mjs b/server/src/scripts/world-entity.ts similarity index 100% rename from server/src/world-entity.mjs rename to server/src/scripts/world-entity.ts diff --git a/server/src/world-manager.mjs b/server/src/scripts/world-manager.ts similarity index 100% rename from server/src/world-manager.mjs rename to server/src/scripts/world-manager.ts diff --git a/server/src/world-server.mjs b/server/src/scripts/world-server.ts similarity index 100% rename from server/src/world-server.mjs rename to server/src/scripts/world-server.ts diff --git a/server/tsconfig.json b/server/tsconfig.json new file mode 100644 index 00000000..692edb0a --- /dev/null +++ b/server/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.packages.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist" + }, + "include": ["./src/*.ts"], + "exclude": ["./dist", "node_modules"], + "references": [{"path": "../shared"}] +} \ No newline at end of file diff --git a/shared/package.json b/shared/package.json new file mode 100644 index 00000000..3daf9629 --- /dev/null +++ b/shared/package.json @@ -0,0 +1,11 @@ +{ + "name": "shared", + "version": "0.0.1", + "devDependencies": { + "cross-env": "^5.0.5", + "nodemon": "^2.0.7", + "tsc-watch": "^4.2.9", + "typescript": "^4.2.3" + }, + "main": "dist/index.js" +} diff --git a/client/shared/defs.mjs b/shared/src/defs.ts similarity index 100% rename from client/shared/defs.mjs rename to shared/src/defs.ts diff --git a/shared/src/index.ts b/shared/src/index.ts new file mode 100644 index 00000000..93206f90 --- /dev/null +++ b/shared/src/index.ts @@ -0,0 +1,3 @@ +const test = "asdf"; + +export {test}; \ No newline at end of file diff --git a/client/shared/math.mjs b/shared/src/math.ts similarity index 100% rename from client/shared/math.mjs rename to shared/src/math.ts diff --git a/client/shared/noise.mjs b/shared/src/noise.ts similarity index 95% rename from client/shared/noise.mjs rename to shared/src/noise.ts index 044a0e81..369a08f6 100644 --- a/client/shared/noise.mjs +++ b/shared/src/noise.ts @@ -1,4 +1,4 @@ -import {simplex} from './simplex-noise.mjs'; +import {simplex} from './simplex-noise'; export const noise = (function() { diff --git a/client/shared/simplex-noise.mjs b/shared/src/simplex-noise.ts similarity index 100% rename from client/shared/simplex-noise.mjs rename to shared/src/simplex-noise.ts diff --git a/client/shared/spatial-hash-grid.mjs b/shared/src/spatial-hash-grid.ts similarity index 100% rename from client/shared/spatial-hash-grid.mjs rename to shared/src/spatial-hash-grid.ts diff --git a/client/shared/spline.mjs b/shared/src/spline.ts similarity index 100% rename from client/shared/spline.mjs rename to shared/src/spline.ts diff --git a/client/shared/terrain-constants.mjs b/shared/src/terrain-constants.ts similarity index 100% rename from client/shared/terrain-constants.mjs rename to shared/src/terrain-constants.ts diff --git a/client/shared/terrain-height.mjs b/shared/src/terrain-height.ts similarity index 100% rename from client/shared/terrain-height.mjs rename to shared/src/terrain-height.ts diff --git a/shared/tsconfig.json b/shared/tsconfig.json new file mode 100644 index 00000000..7c6c4b9f --- /dev/null +++ b/shared/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../tsconfig.packages.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "composite": true, + "rootDir": "src", + "outDir": "dist" + }, + "include": [ + "src/*.ts" + ], + "exclude": [ + "dist", + "node_modules" + ] +} \ No newline at end of file diff --git a/shared/tsconfig.tsbuildinfo b/shared/tsconfig.tsbuildinfo new file mode 100644 index 00000000..444ecb01 --- /dev/null +++ b/shared/tsconfig.tsbuildinfo @@ -0,0 +1,1823 @@ +{ + "program": { + "fileInfos": { + "../node_modules/typescript/lib/lib.d.ts": { + "version": "2dc8c927c9c162a773c6bb3cdc4f3286c23f10eedc67414028f9cb5951610f60", + "signature": "2dc8c927c9c162a773c6bb3cdc4f3286c23f10eedc67414028f9cb5951610f60", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "signature": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.dom.d.ts": { + "version": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "signature": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts": { + "version": "7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481", + "signature": "7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.scripthost.d.ts": { + "version": "097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd", + "signature": "097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "affectsGlobalScope": true + }, + "./src/defs.ts": { + "version": "ee2d0e3ac538531896f0109b38a9f73451ab1b4ef41051a2934325aa03bd7114", + "signature": "e5634ecbed55390c8de45614b72913b60c105e65cc685d863fc53f751d2093d8", + "affectsGlobalScope": false + }, + "./src/index.ts": { + "version": "9301bb02e2f6d6c92b3867a5d736934b520fbe1654e12ab9f56c48213192026d", + "signature": "ffca81ea3c17cb22c60c5782fc065001c8129c5005a68cceef9220d139374831", + "affectsGlobalScope": false + }, + "./src/math.ts": { + "version": "16c14b29971a1b3340d07dcd3b8eb0902613b8b2af18e9870ae49917dcfa6e27", + "signature": "44d6689d60be8e48f26bf724c4ac258fdb62114ca7f6d347156bf4746d166152", + "affectsGlobalScope": false + }, + "./src/simplex-noise.ts": { + "version": "2e0e03491a4340612aa8813a5d0e3d4b37a7ffd0793e65a3ecc299bddf15a2db", + "signature": "8d940f5dce4f103d14f5dd1aa43c9b6dca97f14dc334ebfe25bd3252e1b2c825", + "affectsGlobalScope": false + }, + "./src/noise.ts": { + "version": "18837a0f7abcec1884d931ff1680cffaf365ecbde8d437f8a4afaef63f0d9193", + "signature": "8ffb576e6d53dabe6161ab9e91d6f2d55a74d49da2b1175fdbae53e8fe12d598", + "affectsGlobalScope": false + }, + "./src/spatial-hash-grid.ts": { + "version": "5eca1343f93d27e4ca08866b8eedb0daa1189762b817f33b9a7e0599483b1517", + "signature": "053107de23d742790865911c5043891500f8b99367673fe363a8bbf5d92bfacb", + "affectsGlobalScope": false + }, + "./src/spline.ts": { + "version": "e2a62babf00fec7b1a79ece81e4baa86240a60258699ca9fa87737ae5db14c83", + "signature": "4d13815593233635ebaaeec6c7ad3cd69d167ccb30a2e997667b1060a18bddb8", + "affectsGlobalScope": false + }, + "./src/terrain-constants.ts": { + "version": "42e780b7c57dbd3d98114116ba0be4d744a5c2998f5327aace70a98588c38cb2", + "signature": "3e22cf9c55dee32622e2202d5016811b431b22ab75bec17fa48329681cd8d59c", + "affectsGlobalScope": false + }, + "./src/terrain-height.ts": { + "version": "16c6f556852dcf90de0394a49e9de4a0724f1b55ee1e5f7f15114ff8981cf587", + "signature": "e5ee9b45c5b949470b79df1599520472f09838f8febacebfba239b695d081848", + "affectsGlobalScope": false + }, + "../node_modules/@types/component-emitter/index.d.ts": { + "version": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "signature": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "affectsGlobalScope": false + }, + "../node_modules/@types/cookie/index.d.ts": { + "version": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "signature": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "affectsGlobalScope": false + }, + "../node_modules/@types/cors/index.d.ts": { + "version": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "signature": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/globals.d.ts": { + "version": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "signature": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/async_hooks.d.ts": { + "version": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "signature": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/buffer.d.ts": { + "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/child_process.d.ts": { + "version": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "signature": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/cluster.d.ts": { + "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/console.d.ts": { + "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/constants.d.ts": { + "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/crypto.d.ts": { + "version": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "signature": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/dgram.d.ts": { + "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/dns.d.ts": { + "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/domain.d.ts": { + "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/events.d.ts": { + "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/fs.d.ts": { + "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/fs/promises.d.ts": { + "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/http.d.ts": { + "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/http2.d.ts": { + "version": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "signature": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/https.d.ts": { + "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/inspector.d.ts": { + "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/module.d.ts": { + "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/net.d.ts": { + "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/os.d.ts": { + "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/path.d.ts": { + "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/perf_hooks.d.ts": { + "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/process.d.ts": { + "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/punycode.d.ts": { + "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/querystring.d.ts": { + "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/readline.d.ts": { + "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/repl.d.ts": { + "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/stream.d.ts": { + "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/string_decoder.d.ts": { + "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/timers.d.ts": { + "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/tls.d.ts": { + "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/trace_events.d.ts": { + "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/tty.d.ts": { + "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/url.d.ts": { + "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/util.d.ts": { + "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/v8.d.ts": { + "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/vm.d.ts": { + "version": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "signature": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/worker_threads.d.ts": { + "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/zlib.d.ts": { + "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/wasi.d.ts": { + "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/ts3.6/base.d.ts": { + "version": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "signature": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/assert.d.ts": { + "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/base.d.ts": { + "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/index.d.ts": { + "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "affectsGlobalScope": false + } + }, + "options": { + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "composite": true, + "rootDir": "./src", + "outDir": "./dist", + "configFilePath": "./tsconfig.json" + }, + "referencedMap": { + "../node_modules/@types/cors/index.d.ts": [ + "../node_modules/@types/node/http.d.ts" + ], + "../node_modules/@types/node/assert.d.ts": [ + "../node_modules/@types/node/assert.d.ts" + ], + "../node_modules/@types/node/async_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../node_modules/@types/node/buffer.d.ts": [ + "../node_modules/@types/node/buffer.d.ts" + ], + "../node_modules/@types/node/child_process.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/cluster.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/console.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/constants.d.ts": [ + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/crypto.d.ts": [ + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/dgram.d.ts": [ + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/dns.d.ts": [ + "../node_modules/@types/node/dns.d.ts" + ], + "../node_modules/@types/node/domain.d.ts": [ + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/events.d.ts": [ + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/fs.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/fs/promises.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts" + ], + "../node_modules/@types/node/http.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/http2.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/https.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/index.d.ts": [ + "../node_modules/@types/node/base.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/inspector.d.ts" + ], + "../node_modules/@types/node/module.d.ts": [ + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/net.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/os.d.ts": [ + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/path.d.ts": [ + "../node_modules/@types/node/path.d.ts" + ], + "../node_modules/@types/node/perf_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts" + ], + "../node_modules/@types/node/process.d.ts": [ + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/punycode.d.ts": [ + "../node_modules/@types/node/punycode.d.ts" + ], + "../node_modules/@types/node/querystring.d.ts": [ + "../node_modules/@types/node/querystring.d.ts" + ], + "../node_modules/@types/node/readline.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/readline.d.ts" + ], + "../node_modules/@types/node/repl.d.ts": [ + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/stream.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/string_decoder.d.ts": [ + "../node_modules/@types/node/string_decoder.d.ts" + ], + "../node_modules/@types/node/timers.d.ts": [ + "../node_modules/@types/node/timers.d.ts" + ], + "../node_modules/@types/node/tls.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tls.d.ts" + ], + "../node_modules/@types/node/trace_events.d.ts": [ + "../node_modules/@types/node/trace_events.d.ts" + ], + "../node_modules/@types/node/ts3.6/base.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "../node_modules/@types/node/tty.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/url.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/util.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/v8.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/v8.d.ts" + ], + "../node_modules/@types/node/vm.d.ts": [ + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/wasi.d.ts": [ + "../node_modules/@types/node/wasi.d.ts" + ], + "../node_modules/@types/node/worker_threads.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts" + ], + "../node_modules/@types/node/zlib.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "./src/noise.ts": [ + "./src/simplex-noise.ts" + ] + }, + "exportedModulesMap": { + "../node_modules/@types/cors/index.d.ts": [ + "../node_modules/@types/node/http.d.ts" + ], + "../node_modules/@types/node/assert.d.ts": [ + "../node_modules/@types/node/assert.d.ts" + ], + "../node_modules/@types/node/async_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../node_modules/@types/node/buffer.d.ts": [ + "../node_modules/@types/node/buffer.d.ts" + ], + "../node_modules/@types/node/child_process.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/cluster.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/console.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/constants.d.ts": [ + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/crypto.d.ts": [ + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/dgram.d.ts": [ + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/dns.d.ts": [ + "../node_modules/@types/node/dns.d.ts" + ], + "../node_modules/@types/node/domain.d.ts": [ + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/events.d.ts": [ + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/fs.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/fs/promises.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts" + ], + "../node_modules/@types/node/http.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/http2.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/https.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/index.d.ts": [ + "../node_modules/@types/node/base.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/inspector.d.ts" + ], + "../node_modules/@types/node/module.d.ts": [ + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/net.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/os.d.ts": [ + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/path.d.ts": [ + "../node_modules/@types/node/path.d.ts" + ], + "../node_modules/@types/node/perf_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts" + ], + "../node_modules/@types/node/process.d.ts": [ + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/punycode.d.ts": [ + "../node_modules/@types/node/punycode.d.ts" + ], + "../node_modules/@types/node/querystring.d.ts": [ + "../node_modules/@types/node/querystring.d.ts" + ], + "../node_modules/@types/node/readline.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/readline.d.ts" + ], + "../node_modules/@types/node/repl.d.ts": [ + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/stream.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/string_decoder.d.ts": [ + "../node_modules/@types/node/string_decoder.d.ts" + ], + "../node_modules/@types/node/timers.d.ts": [ + "../node_modules/@types/node/timers.d.ts" + ], + "../node_modules/@types/node/tls.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tls.d.ts" + ], + "../node_modules/@types/node/trace_events.d.ts": [ + "../node_modules/@types/node/trace_events.d.ts" + ], + "../node_modules/@types/node/ts3.6/base.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "../node_modules/@types/node/tty.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/url.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/util.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/v8.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/v8.d.ts" + ], + "../node_modules/@types/node/vm.d.ts": [ + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/wasi.d.ts": [ + "../node_modules/@types/node/wasi.d.ts" + ], + "../node_modules/@types/node/worker_threads.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts" + ], + "../node_modules/@types/node/zlib.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../node_modules/@types/component-emitter/index.d.ts", + "../node_modules/@types/cookie/index.d.ts", + "../node_modules/@types/cors/index.d.ts", + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts", + "../node_modules/typescript/lib/lib.d.ts", + "../node_modules/typescript/lib/lib.dom.d.ts", + "../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../node_modules/typescript/lib/lib.es2015.d.ts", + "../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../node_modules/typescript/lib/lib.es2016.d.ts", + "../node_modules/typescript/lib/lib.es2017.d.ts", + "../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../node_modules/typescript/lib/lib.es2018.d.ts", + "../node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../node_modules/typescript/lib/lib.es5.d.ts", + "../node_modules/typescript/lib/lib.esnext.intl.d.ts", + "../node_modules/typescript/lib/lib.scripthost.d.ts", + "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts", + "./src/defs.ts", + "./src/index.ts", + "./src/math.ts", + [ + "./src/noise.ts", + [ + { + "file": "./src/noise.ts", + "start": 142, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 212, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_noise' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 251, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 322, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 370, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 411, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 452, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 496, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_noise' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 640, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 909, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 1012, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + }, + { + "file": "./src/noise.ts", + "start": 1043, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." + } + ] + ], + [ + "./src/simplex-noise.ts", + [ + { + "file": "./src/simplex-noise.ts", + "start": 1893, + "length": 12, + "messageText": "Expected 0 arguments, but got 1.", + "category": 1, + "code": 2554 + } + ] + ], + [ + "./src/spatial-hash-grid.ts", + [ + { + "file": "./src/spatial-hash-grid.ts", + "start": 21, + "length": 12, + "messageText": "Cannot find module './math.mjs' or its corresponding type declarations.", + "category": 1, + "code": 2307 + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 196, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 273, + "length": 11, + "code": 2339, + "category": 1, + "messageText": "Property '_dimensions' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 311, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 341, + "length": 9, + "code": 2339, + "category": 1, + "messageText": "Property '_queryIds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 444, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 479, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 500, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 563, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 598, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 619, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 683, + "length": 11, + "code": 2339, + "category": 1, + "messageText": "Property '_dimensions' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 748, + "length": 11, + "code": 2339, + "category": 1, + "messageText": "Property '_dimensions' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 1941, + "length": 9, + "code": 2339, + "category": 1, + "messageText": "Property '_queryIds' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 2097, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 3035, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 3069, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 3103, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 3162, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." + }, + { + "file": "./src/spatial-hash-grid.ts", + "start": 3866, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." + } + ] + ], + [ + "./src/spline.ts", + [ + { + "file": "./src/spline.ts", + "start": 102, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 127, + "length": 5, + "code": 2339, + "category": 1, + "messageText": "Property '_lerp' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 180, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 272, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 312, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 455, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 515, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 587, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 630, + "length": 5, + "code": 2339, + "category": 1, + "messageText": "Property '_lerp' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 657, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 696, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 718, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 750, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 771, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 802, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 823, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." + }, + { + "file": "./src/spline.ts", + "start": 911, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 936, + "length": 5, + "code": 2339, + "category": 1, + "messageText": "Property '_lerp' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 989, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1081, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1121, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1226, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1298, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1341, + "length": 5, + "code": 2339, + "category": 1, + "messageText": "Property '_lerp' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1368, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1407, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1429, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1461, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + }, + { + "file": "./src/spline.ts", + "start": 1482, + "length": 7, + "code": 2339, + "category": 1, + "messageText": "Property '_points' does not exist on type '_LinearSpline'." + } + ] + ], + "./src/terrain-constants.ts", + [ + "./src/terrain-height.ts", + [ + { + "file": "./src/terrain-height.ts", + "start": 33, + "length": 25, + "messageText": "Cannot find module './terrain-constants.mjs' or its corresponding type declarations.", + "category": 1, + "code": 2307 + }, + { + "file": "./src/terrain-height.ts", + "start": 80, + "length": 13, + "messageText": "Cannot find module './noise.mjs' or its corresponding type declarations.", + "category": 1, + "code": 2307 + }, + { + "file": "./src/terrain-height.ts", + "start": 195, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property 'noise_' does not exist on type 'HeightGenerator'." + }, + { + "file": "./src/terrain-height.ts", + "start": 298, + "length": 6, + "code": 2339, + "category": 1, + "messageText": "Property 'noise_' does not exist on type 'HeightGenerator'." + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "../node_modules/@types/component-emitter/index.d.ts", + 1 + ], + [ + "../node_modules/@types/cookie/index.d.ts", + 1 + ], + [ + "../node_modules/@types/cors/index.d.ts", + 1 + ], + [ + "../node_modules/@types/node/assert.d.ts", + 1 + ], + [ + "../node_modules/@types/node/async_hooks.d.ts", + 1 + ], + [ + "../node_modules/@types/node/base.d.ts", + 1 + ], + [ + "../node_modules/@types/node/buffer.d.ts", + 1 + ], + [ + "../node_modules/@types/node/child_process.d.ts", + 1 + ], + [ + "../node_modules/@types/node/cluster.d.ts", + 1 + ], + [ + "../node_modules/@types/node/console.d.ts", + 1 + ], + [ + "../node_modules/@types/node/constants.d.ts", + 1 + ], + [ + "../node_modules/@types/node/crypto.d.ts", + 1 + ], + [ + "../node_modules/@types/node/dgram.d.ts", + 1 + ], + [ + "../node_modules/@types/node/dns.d.ts", + 1 + ], + [ + "../node_modules/@types/node/domain.d.ts", + 1 + ], + [ + "../node_modules/@types/node/events.d.ts", + 1 + ], + [ + "../node_modules/@types/node/fs.d.ts", + 1 + ], + [ + "../node_modules/@types/node/fs/promises.d.ts", + 1 + ], + [ + "../node_modules/@types/node/globals.d.ts", + 1 + ], + [ + "../node_modules/@types/node/globals.global.d.ts", + 1 + ], + [ + "../node_modules/@types/node/http.d.ts", + 1 + ], + [ + "../node_modules/@types/node/http2.d.ts", + 1 + ], + [ + "../node_modules/@types/node/https.d.ts", + 1 + ], + [ + "../node_modules/@types/node/index.d.ts", + 1 + ], + [ + "../node_modules/@types/node/inspector.d.ts", + 1 + ], + [ + "../node_modules/@types/node/module.d.ts", + 1 + ], + [ + "../node_modules/@types/node/net.d.ts", + 1 + ], + [ + "../node_modules/@types/node/os.d.ts", + 1 + ], + [ + "../node_modules/@types/node/path.d.ts", + 1 + ], + [ + "../node_modules/@types/node/perf_hooks.d.ts", + 1 + ], + [ + "../node_modules/@types/node/process.d.ts", + 1 + ], + [ + "../node_modules/@types/node/punycode.d.ts", + 1 + ], + [ + "../node_modules/@types/node/querystring.d.ts", + 1 + ], + [ + "../node_modules/@types/node/readline.d.ts", + 1 + ], + [ + "../node_modules/@types/node/repl.d.ts", + 1 + ], + [ + "../node_modules/@types/node/stream.d.ts", + 1 + ], + [ + "../node_modules/@types/node/string_decoder.d.ts", + 1 + ], + [ + "../node_modules/@types/node/timers.d.ts", + 1 + ], + [ + "../node_modules/@types/node/tls.d.ts", + 1 + ], + [ + "../node_modules/@types/node/trace_events.d.ts", + 1 + ], + [ + "../node_modules/@types/node/ts3.6/base.d.ts", + 1 + ], + [ + "../node_modules/@types/node/tty.d.ts", + 1 + ], + [ + "../node_modules/@types/node/url.d.ts", + 1 + ], + [ + "../node_modules/@types/node/util.d.ts", + 1 + ], + [ + "../node_modules/@types/node/v8.d.ts", + 1 + ], + [ + "../node_modules/@types/node/vm.d.ts", + 1 + ], + [ + "../node_modules/@types/node/wasi.d.ts", + 1 + ], + [ + "../node_modules/@types/node/worker_threads.d.ts", + 1 + ], + [ + "../node_modules/@types/node/zlib.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2015.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2016.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2017.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2018.d.ts", + 1 + ], + [ + "./src/defs.ts", + 1 + ], + [ + "./src/index.ts", + 1 + ], + [ + "./src/math.ts", + 1 + ], + [ + "./src/noise.ts", + 1 + ], + [ + "./src/simplex-noise.ts", + 1 + ], + [ + "./src/spatial-hash-grid.ts", + 1 + ], + [ + "./src/spline.ts", + 1 + ], + [ + "./src/terrain-constants.ts", + 1 + ], + [ + "./src/terrain-height.ts", + 1 + ] + ] + }, + "version": "4.2.3" +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..6ccedb1c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "ES6", + "module": "ES6", + "lib": [ + "ESNext" + ], + /* Strict Type-Checking Options */ + "strict": true, + /* Module Resolution Options */ + "moduleResolution": "node", + "esModuleInterop": true, + /* Advanced Options */ + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true + } +} \ No newline at end of file diff --git a/tsconfig.packages.json b/tsconfig.packages.json new file mode 100644 index 00000000..e69de29b diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..af047f3b --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1117 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/component-emitter@^1.2.10": + version "1.2.10" + resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" + integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== + +"@types/cookie@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.0.tgz#14f854c0f93d326e39da6e3b6f34f7d37513d108" + integrity sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg== + +"@types/cors@^2.8.8": + version "2.8.10" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" + integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== + +"@types/node@>=10.0.0": + version "14.14.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" + integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.2.2: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +cookie@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cross-env@^5.0.5: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" + integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== + dependencies: + cross-spawn "^6.0.5" + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@~4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +engine.io-parser@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" + integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg== + dependencies: + base64-arraybuffer "0.1.4" + +engine.io@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-5.0.0.tgz#470dc94a8a4907fa4d2cd1fa6611426afcee61bf" + integrity sha512-BATIdDV3H1SrE9/u2BAotvsmjJg0t1P4+vGedImSs1lkFAtQdvk4Ev1y4LDiPF7BPWgXWEG+NDY+nLvW3UrMWw== + dependencies: + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~4.0.0" + ws "~7.4.2" + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + dependencies: + ini "1.3.7" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http@^0.0.1-security: + version "0.0.1-security" + resolved "https://registry.yarnpkg.com/http/-/http-0.0.1-security.tgz#3aac09129d12dc2747bbce4157afde20ad1f7995" + integrity sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= + +mime-db@1.46.0: + version "1.46.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" + integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== + +mime-types@~2.1.24: + version "2.1.29" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" + integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + dependencies: + mime-db "1.46.0" + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-cleanup@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" + integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= + +nodemon@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" + integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.3" + update-notifier "^4.1.0" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +ps-tree@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + +pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@^5.5.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +socket.io-adapter@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz#43af9157c4609e74b8addc6867873ac7eb48fda2" + integrity sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg== + +socket.io-parser@~4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" + integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== + dependencies: + "@types/component-emitter" "^1.2.10" + component-emitter "~1.3.0" + debug "~4.3.1" + +socket.io@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.0.0.tgz#ee484a95dc6a38698491aaf63b6ec1f3ceeac0a8" + integrity sha512-/c1riZMV/4yz7KEpaMhDQbwhJDIoO55whXaRKgyEBQrLU9zUHXo9rzeTMvTOqwL9mbKfHKdrXcMoCeQ/1YtMsg== + dependencies: + "@types/cookie" "^0.4.0" + "@types/cors" "^2.8.8" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "~2.0.0" + debug "~4.3.1" + engine.io "~5.0.0" + socket.io-adapter "~2.2.0" + socket.io-parser "~4.0.3" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + dependencies: + through "2" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= + dependencies: + duplexer "~0.1.1" + +string-argv@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.1.2.tgz#c5b7bc03fb2b11983ba3a72333dd0559e77e4738" + integrity sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA== + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tsc-watch@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.2.9.tgz#d93fc74233ca4ef7ee6b12d08c0fe6aca3e19044" + integrity sha512-DlTaoDs74+KUpyWr7dCGhuscAUKCz6CiFduBN7R9RbLJSSN1moWdwoCLASE7+zLgGvV5AwXfYDiEMAsPGaO+Vw== + dependencies: + cross-spawn "^7.0.3" + node-cleanup "^2.1.2" + ps-tree "^1.2.0" + string-argv "^0.1.1" + strip-ansi "^6.0.0" + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" + integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== + +undefsafe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +vary@^1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@~7.4.2: + version "7.4.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" + integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== From c5e01dab58fabbdbe5a574b9865ef6f4c3853136 Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Sun, 28 Mar 2021 15:32:50 -0400 Subject: [PATCH 02/13] finished typing login-queue.ts --- server/src/scripts/login-queue.ts | 9 +++++---- tsconfig.packages.json | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/server/src/scripts/login-queue.ts b/server/src/scripts/login-queue.ts index 6b34395c..9279e12f 100644 --- a/server/src/scripts/login-queue.ts +++ b/server/src/scripts/login-queue.ts @@ -135,13 +135,14 @@ export const login_queue = (() => { } }; - + // onLogin, OnLogin is confusing. Rename once I know the purpose. class LoginQueue { #clients: any; - + #onLogin: any; + constructor(onLogin) { this.#clients = {}; - this.OnLogin = onLogin; + this.#onLogin = onLogin; } Add(client) { @@ -152,7 +153,7 @@ export const login_queue = (() => { *OnLogin(client, params) { delete this.#clients[client.ID]; - this.OnLogin(client, params); + this.#onLogin(client, params); } }; diff --git a/tsconfig.packages.json b/tsconfig.packages.json index e69de29b..cf5d844e 100644 --- a/tsconfig.packages.json +++ b/tsconfig.packages.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "ES6", + "module": "ESNEXT", + "lib": [ + "ESNext" + ], + /* Strict Type-Checking Options */ + "strict": false, + /* Module Resolution Options */ + "moduleResolution": "node", + "esModuleInterop": true, + /* Advanced Options */ + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true + } + } \ No newline at end of file From f7d73b7fe1a7fdb5de01bf6e1d126909d4123958 Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Sun, 28 Mar 2021 15:56:58 -0400 Subject: [PATCH 03/13] types login-queue and world-clients --- server/package.json | 5 +- server/src/scripts/world-client.ts | 122 ++++++++++++++++----------- shared/tsconfig.tsbuildinfo | 130 ++++++++++++++++++++++++----- yarn.lock | 5 ++ 4 files changed, 189 insertions(+), 73 deletions(-) diff --git a/server/package.json b/server/package.json index 9705ead4..26c8bb89 100644 --- a/server/package.json +++ b/server/package.json @@ -2,6 +2,7 @@ "name": "server", "version": "0.0.1", "dependencies": { + "gl-matrix": "^3.3.0", "http": "^0.0.1-security", "shared": "0.0.1", "socket.io": "^4.0.0", @@ -14,7 +15,7 @@ }, "scripts": { "build": "tsc --build", - "start:dev":"tsc-watch --onSuccess 'node ./dist/index.js'", + "start:dev": "tsc-watch --onSuccess 'node ./dist/index.js'", "start": "node ./dist/index.js" } -} \ No newline at end of file +} diff --git a/server/src/scripts/world-client.ts b/server/src/scripts/world-client.ts index 543e526b..c6cd48d3 100644 --- a/server/src/scripts/world-client.ts +++ b/server/src/scripts/world-client.ts @@ -6,31 +6,41 @@ export const world_client = (() => { const _TIMEOUT = 600.0; class WorldClient { + entity: any; + client: any; + #timeout: number; + entityCache: any = {}; + terrain_: any; + onDeath_: any; + fsm_: any; + deathTimer_: number; + timeout_: number; + constructor(client, entity) { - this.entity_ = entity; + this.entity = entity; // Hack - this.entity_.onEvent_ = (t, d) => this.OnEntityEvent_(t, d); + this.entity.onEvent_ = (t, d) => this.OnEntityEvent_(t, d); - this.client_ = client; - this.client_.onMessage = (e, d) => this.OnMessage_(e, d); - this.client_.Send('world.player', this.entity_ .CreatePlayerPacket_()); - this.client_.Send('world.stats', this.entity_ .CreateStatsPacket_()); + this.client = client; + this.client.onMessage = (e, d) => this.OnMessage_(e, d); + this.client.Send('world.player', this.entity .CreatePlayerPacket_()); + this.client.Send('world.stats', this.entity .CreateStatsPacket_()); - this.timeout_ = _TIMEOUT; + this.#timeout = _TIMEOUT; - this.entityCache_ = {}; + this.entityCache = {}; // Hack entity.parent_ = this; } Destroy() { - this.client_.Disconnect(); - this.client_ = null; + this.client.Disconnect(); + this.client = null; - this.entity_.Destroy(); - this.entity_ = null; + this.entity.Destroy(); + this.entity = null; } OnDeath() {} @@ -42,10 +52,10 @@ export const world_client = (() => { } OnMessage_(evt, data) { - this.timeout_ = _TIMEOUT; + this.#timeout = _TIMEOUT; if (evt == 'world.update') { - this.entity_.UpdateTransform(data); + this.entity.UpdateTransform(data); return true; } @@ -55,7 +65,7 @@ export const world_client = (() => { } if (evt == 'action.attack') { - this.entity_.OnActionAttack(); + this.entity.OnActionAttack(); return true; } @@ -70,19 +80,19 @@ export const world_client = (() => { OnDamageEvent_(_) {} OnInventoryChanged_(inventory) { - this.entity_.UpdateInventory(inventory); + this.entity.UpdateInventory(inventory); - // Todo: Merge this into entityCache_ path. - const nearby = this.entity_.FindNear(50, true); + // Todo: Merge this into entityCache path. + const nearby = this.entity.FindNear(50, true); for (let n of nearby) { - n.parent_.client_.Send('world.inventory', [this.entity_.ID, inventory]); + n.parent_.client.Send('world.inventory', [this.entity.ID, inventory]); } } OnChatMessage_(message) { const chatMessage = { - name: this.entity_.accountInfo_.name, + name: this.entity.accountInfo_.name, text: message, }; @@ -90,16 +100,16 @@ export const world_client = (() => { } BroadcastChat(chatMessage) { - const nearby = this.entity_.FindNear(50, true); + const nearby = this.entity.FindNear(50, true); for (let i = 0; i < nearby.length; ++i) { const n = nearby[i]; - n.parent_.client_.Send('chat.message', chatMessage); + n.parent_.client.Send('chat.message', chatMessage); } } get IsDead() { - return this.timeout_ <= 0.0; + return this.#timeout <= 0.0; } OnUpdate_(timeElapsed) {} @@ -111,9 +121,9 @@ export const world_client = (() => { } Update(timeElapsed) { - this.timeout_ -= timeElapsed; + this.#timeout -= timeElapsed; - this.entity_.Update(timeElapsed); + this.entity.Update(timeElapsed); this.OnUpdate_(timeElapsed); } @@ -121,8 +131,11 @@ export const world_client = (() => { class WorldNetworkClient extends WorldClient { + entity: any; + entityCache: any; constructor(client, entity) { super(client, entity); + this.entity } OnUpdate_(timeElapsed) { @@ -130,15 +143,15 @@ export const world_client = (() => { OnUpdateClientState_() { const _Filter = (e) => { - return e.ID != this.entity_.ID; + return e.ID != this.entity.ID; }; - const nearby = this.entity_.FindNear(500).filter(e => _Filter(e)); + const nearby = this.entity.FindNear(500).filter(e => _Filter(e)); const updates = [{ - id: this.entity_.ID, - stats: this.entity_.CreateStatsPacket_(), - events: this.entity_.CreateEventsPacket_(), + id: this.entity.ID, + stats: this.entity.CreateStatsPacket_(), + events: this.entity.CreateEventsPacket_(), }]; const newCache_ = {}; @@ -150,9 +163,10 @@ export const world_client = (() => { transform: n.CreateTransformPacket_(), stats: n.CreateStatsPacket_(), events: n.CreateEventsPacket_(), + desc: null, }; - if (!(n.ID in this.entityCache_)) { + if (!(n.ID in this.entityCache)) { cur.desc = n.GetDescription(); } @@ -160,17 +174,20 @@ export const world_client = (() => { updates.push(cur); } - this.entityCache_ = newCache_; + this.entityCache = newCache_; - this.client_.Send('world.update', updates); + this.client.Send('world.update', updates); } }; class AIStateMachine { + currentState_: any; + entity: any; + terrain_: any; constructor(entity, terrain) { this.currentState_ = null; - this.entity_ = entity; + this.entity = entity; this.terrain_ = terrain; } @@ -186,7 +203,7 @@ export const world_client = (() => { this.currentState_ = state; this.currentState_.parent_ = this; - this.currentState_.entity_ = this.entity_; + this.currentState_.entity = this.entity; this.currentState_.terrain_ = this.terrain_; state.Enter(prevState); } @@ -199,6 +216,11 @@ export const world_client = (() => { }; class AIState { + timer_: number; + entity: any; + parent_: any; + target_: any; + terrain_: any; constructor() {} Exit() {} Enter() {} @@ -206,7 +228,7 @@ export const world_client = (() => { } class AIState_JustSitThere extends AIState { - constructor() { + constructor(target?:any) { super(); this.timer_ = 0.0; @@ -216,7 +238,7 @@ export const world_client = (() => { const _IsPlayer = (e) => { return !e.isAI; }; - const nearby = this.entity_.FindNear(50.0).filter(e => e.Health > 0).filter(_IsPlayer); + const nearby = this.entity.FindNear(50.0).filter(e => e.Health > 0).filter(_IsPlayer); if (nearby.length > 0) { this.parent_.SetState(new AIState_FollowToAttack(nearby[0])); @@ -225,7 +247,7 @@ export const world_client = (() => { Update(timeElapsed) { this.timer_ += timeElapsed; - this.entity_.SetState('idle'); + this.entity.SetState('idle'); if (this.timer_ > 5.0) { this.UpdateLogic_(); @@ -241,29 +263,29 @@ export const world_client = (() => { } UpdateMovement_(timeElapsed) { - this.entity_.state_ = 'walk'; + this.entity.state_ = 'walk'; const direction = vec3.create(); const forward = vec3.fromValues(0, 0, 1); - vec3.sub(direction, this.target_.position_, this.entity_.position_); + vec3.sub(direction, this.target_.position_, this.entity.position_); direction[1] = 0.0; vec3.normalize(direction, direction); - quat.rotationTo(this.entity_.rotation_, forward, direction); + quat.rotationTo(this.entity.rotation_, forward, direction); const movement = vec3.clone(direction); vec3.scale(movement, movement, timeElapsed * 10.0); - vec3.add(this.entity_.position_, this.entity_.position_, movement); + vec3.add(this.entity.position_, this.entity.position_, movement); - this.entity_.position_[1] = this.terrain_.Get(...this.entity_.position_)[0]; - this.entity_.UpdateGridClient_(); + this.entity.position_[1] = this.terrain_.Get(...this.entity.position_)[0]; + this.entity.UpdateGridClient_(); - const distance = vec3.distance(this.entity_.position_, this.target_.position_); + const distance = vec3.distance(this.entity.position_, this.target_.position_); if (distance < 10.0) { - this.entity_.OnActionAttack(); + this.entity.OnActionAttack(); this.parent_.SetState(new AIState_WaitAttackDone(this.target_)); } else if (distance > 100.0) { this.parent_.SetState(new AIState_JustSitThere()); @@ -288,8 +310,8 @@ export const world_client = (() => { } Update(_) { - this.entity_.state_ = 'attack'; - if (this.entity_.action_) { + this.entity.state_ = 'attack'; + if (this.entity.action_) { return; } @@ -312,7 +334,7 @@ export const world_client = (() => { this.terrain_ = terrain; this.onDeath_ = onDeath; // Haha sorry - this.entity_.isAI = true; + this.entity.isAI = true; this.fsm_ = new AIStateMachine(entity, this.terrain_); this.fsm_.SetState(new AIState_JustSitThere()); @@ -334,7 +356,7 @@ export const world_client = (() => { // Never times out this.timeout_ = 1000.0; - if (this.entity_.Health > 0) { + if (this.entity.Health > 0) { this.fsm_.Update(timeElapsed); } else { this.deathTimer_ += timeElapsed; diff --git a/shared/tsconfig.tsbuildinfo b/shared/tsconfig.tsbuildinfo index 444ecb01..a762ef94 100644 --- a/shared/tsconfig.tsbuildinfo +++ b/shared/tsconfig.tsbuildinfo @@ -1,11 +1,6 @@ { "program": { "fileInfos": { - "../node_modules/typescript/lib/lib.d.ts": { - "version": "2dc8c927c9c162a773c6bb3cdc4f3286c23f10eedc67414028f9cb5951610f60", - "signature": "2dc8c927c9c162a773c6bb3cdc4f3286c23f10eedc67414028f9cb5951610f60", - "affectsGlobalScope": false - }, "../node_modules/typescript/lib/lib.es5.d.ts": { "version": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", "signature": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", @@ -31,20 +26,20 @@ "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.dom.d.ts": { - "version": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", - "signature": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", - "affectsGlobalScope": true + "../node_modules/typescript/lib/lib.es2019.d.ts": { + "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts": { - "version": "7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481", - "signature": "7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481", - "affectsGlobalScope": true + "../node_modules/typescript/lib/lib.es2020.d.ts": { + "version": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "signature": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.scripthost.d.ts": { - "version": "097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd", - "signature": "097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd", - "affectsGlobalScope": true + "../node_modules/typescript/lib/lib.esnext.d.ts": { + "version": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "signature": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "affectsGlobalScope": false }, "../node_modules/typescript/lib/lib.es2015.core.d.ts": { "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", @@ -146,16 +141,76 @@ "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", "affectsGlobalScope": true }, + "../node_modules/typescript/lib/lib.es2019.array.d.ts": { + "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.object.d.ts": { + "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.string.d.ts": { + "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { + "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "affectsGlobalScope": true + }, "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", "affectsGlobalScope": true }, + "../node_modules/typescript/lib/lib.es2020.promise.d.ts": { + "version": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "signature": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts": { + "version": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", + "signature": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.string.d.ts": { + "version": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "signature": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": { + "version": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "signature": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.intl.d.ts": { + "version": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", + "signature": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", + "affectsGlobalScope": true + }, "../node_modules/typescript/lib/lib.esnext.intl.d.ts": { "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", "affectsGlobalScope": true }, + "../node_modules/typescript/lib/lib.esnext.string.d.ts": { + "version": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "signature": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.promise.d.ts": { + "version": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "signature": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.weakref.d.ts": { + "version": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", + "signature": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", + "affectsGlobalScope": true + }, "./src/defs.ts": { "version": "ee2d0e3ac538531896f0109b38a9f73451ab1b4ef41051a2934325aa03bd7114", "signature": "e5634ecbed55390c8de45614b72913b60c105e65cc685d863fc53f751d2093d8", @@ -448,6 +503,16 @@ } }, "options": { + "target": 2, + "module": 99, + "lib": [ + "lib.esnext.d.ts" + ], + "strict": false, + "moduleResolution": 2, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "declaration": true, "declarationMap": true, "sourceMap": true, @@ -975,8 +1040,6 @@ "../node_modules/@types/node/wasi.d.ts", "../node_modules/@types/node/worker_threads.d.ts", "../node_modules/@types/node/zlib.d.ts", - "../node_modules/typescript/lib/lib.d.ts", - "../node_modules/typescript/lib/lib.dom.d.ts", "../node_modules/typescript/lib/lib.es2015.collection.d.ts", "../node_modules/typescript/lib/lib.es2015.core.d.ts", "../node_modules/typescript/lib/lib.es2015.d.ts", @@ -1001,11 +1064,24 @@ "../node_modules/typescript/lib/lib.es2018.intl.d.ts", "../node_modules/typescript/lib/lib.es2018.promise.d.ts", "../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../node_modules/typescript/lib/lib.es2019.array.d.ts", + "../node_modules/typescript/lib/lib.es2019.d.ts", + "../node_modules/typescript/lib/lib.es2019.object.d.ts", + "../node_modules/typescript/lib/lib.es2019.string.d.ts", + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts", "../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../node_modules/typescript/lib/lib.es2020.d.ts", + "../node_modules/typescript/lib/lib.es2020.intl.d.ts", + "../node_modules/typescript/lib/lib.es2020.promise.d.ts", + "../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts", + "../node_modules/typescript/lib/lib.es2020.string.d.ts", + "../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts", "../node_modules/typescript/lib/lib.es5.d.ts", + "../node_modules/typescript/lib/lib.esnext.d.ts", "../node_modules/typescript/lib/lib.esnext.intl.d.ts", - "../node_modules/typescript/lib/lib.scripthost.d.ts", - "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts", + "../node_modules/typescript/lib/lib.esnext.promise.d.ts", + "../node_modules/typescript/lib/lib.esnext.string.d.ts", + "../node_modules/typescript/lib/lib.esnext.weakref.d.ts", "./src/defs.ts", "./src/index.ts", "./src/math.ts", @@ -1781,6 +1857,18 @@ "../node_modules/typescript/lib/lib.es2018.d.ts", 1 ], + [ + "../node_modules/typescript/lib/lib.es2019.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2020.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.esnext.d.ts", + 1 + ], [ "./src/defs.ts", 1 diff --git a/yarn.lock b/yarn.lock index af047f3b..8fe3c2b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -406,6 +406,11 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +gl-matrix@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" + integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== + glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" From e604709a33474b4c8c97624e398fea2fdb4ebc8f Mon Sep 17 00:00:00 2001 From: Jeremy Stover Date: Sun, 28 Mar 2021 16:04:27 -0400 Subject: [PATCH 04/13] Update README.md --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4afe1dc3..cba86fb3 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,12 @@ ## How to Work on This :ox: - _Only tested this with node v15.11.0. YMMV_ - Clone the repository -- run `yarn` from the root folder. The Yarn workspace settings will handle installing the packages for client and server. -- run `yarn start:dev` -- Ensure a browser is open to localhost:3000 (Maybe. See below) - - If 3000 is taken unavailable, on most systems, you can run `PORT={NEW_PORT | 4444 | 1337} yarn start{:dev}` - - Example `PORT=1337 yarn start` +- *From the root folder* +- run `yarn`. The Yarn workspace settings will handle installing the packages for client and server. +- run `yarn server start:dev` +- Ensure a browser is open to localhost:3000 _(Maybe. See below)_ + - If 3000 is taken unavailable, on most systems, you can run `PORT={NEW_PORT | 4444 | 1337} yarn client start{:dev}` + - Example `PORT=1337 yarn client start` - This should set the server to auto restart on changes. - The client will need to be manually refreshed, if you want it to display any changes. That's by design. Noone wants to relog every time they make a change. @@ -19,4 +20,4 @@ https://yarnpkg.com/ Put some really good documentation on what they are here.

- \ No newline at end of file + From 837146ee4321121a278a5c868e75d4cf30beff40 Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Sun, 28 Mar 2021 22:34:10 -0400 Subject: [PATCH 05/13] types client index --- client/package.json | 2 + client/src/{main.js => index.ts} | 336 ++- client/tsconfig.json | 4 +- server/src/scripts/world-entity.ts | 85 +- shared/src/FBXLoader.ts | 4205 ++++++++++++++++++++++++++++ shared/src/OrbitControls.ts | 1219 ++++++++ shared/src/constants.ts | 23 + shared/tsconfig.json | 3 +- yarn.lock | 62 +- 9 files changed, 5794 insertions(+), 145 deletions(-) rename client/src/{main.js => index.ts} (73%) create mode 100644 shared/src/FBXLoader.ts create mode 100644 shared/src/OrbitControls.ts create mode 100644 shared/src/constants.ts diff --git a/client/package.json b/client/package.json index 867c9e93..3e6c3feb 100644 --- a/client/package.json +++ b/client/package.json @@ -7,6 +7,8 @@ "tsc-watch": "^4.2.9" }, "dependencies": { + "socket.io-client": "^4.0.0", + "three": "^0.124", "typescript": "^4.2.3" } } diff --git a/client/src/main.js b/client/src/index.ts similarity index 73% rename from client/src/main.js rename to client/src/index.ts index b08d2c6f..2045cd3d 100644 --- a/client/src/main.js +++ b/client/src/index.ts @@ -1,15 +1,17 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {OrbitControls} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/controls/OrbitControls.js'; -import {FBXLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/FBXLoader.js'; +// Not sure why latest three.js package is missing these. Might be making a huge mistake updating. lol +import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; -import 'https://cdn.jsdelivr.net/npm/socket.io-client@3.1.0/dist/socket.io.js'; +import { io, Socket } from 'socket.io-client'; +import { STATE_TYPES } from 'shared/src/constants'; const _CHARACTER_MODELS = { zombie: { base: 'mremireh_o_desbiens.fbx', - path: './resources/characters/zombie/', + path: '../resources/characters/zombie/', animations: { idle: 'idle.fbx', walk: 'walk.fbx', @@ -20,7 +22,7 @@ const _CHARACTER_MODELS = { }, guard: { base: 'castle_guard_01.fbx', - path: './resources/characters/guard/', + path: '../resources/characters/guard/', animations: { idle: 'Sword And Shield Idle.fbx', walk: 'Sword And Shield Walk.fbx', @@ -33,6 +35,11 @@ const _CHARACTER_MODELS = { class FloatingName { + params_: any; + element_: HTMLCanvasElement; + context2d_: CanvasRenderingContext2D; + sprite_: THREE.Sprite; + constructor(params) { this.params_ = params; this.Init_(); @@ -61,7 +68,7 @@ class FloatingName { const map = new THREE.CanvasTexture(this.context2d_.canvas); this.sprite_ = new THREE.Sprite( - new THREE.SpriteMaterial({map: map, color: 0xffffff})); + new THREE.SpriteMaterial({ map: map, color: 0xffffff })); this.sprite_.scale.set(20, 10, 1) this.sprite_.position.y += modelData.nameOffset; this.params_.parent.add(this.sprite_); @@ -70,10 +77,15 @@ class FloatingName { class OurLoadingManager { + loader_: any; + files_: Set; + onLoad: () => void; + + constructor(loader) { this.loader_ = loader; this.files_ = new Set(); - this.onLoad = () => {}; + this.onLoad = () => { }; } load(file, cb) { @@ -92,6 +104,8 @@ class OurLoadingManager { class BasicCharacterControllerProxy { + animations_: any; + constructor(animations) { this.animations_ = animations; } @@ -103,6 +117,14 @@ class BasicCharacterControllerProxy { class AnimatedMesh { + params_: any; + group_: any; + target_: any; + animations_: any; + mixer_: any; + onLoad: () => void; + manager_: OurLoadingManager; + constructor(params) { this.params_ = params; this.group_ = new THREE.Group(); @@ -110,7 +132,7 @@ class AnimatedMesh { this.target_ = null; this.animations_ = {}; this.mixer_ = null; - this.onLoad = () => {}; + this.onLoad = () => { }; this.Load_(); } @@ -138,7 +160,8 @@ class AnimatedMesh { Load_() { const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; - const loader = new FBXLoader(); + // kadajett. Had to add param null. expected "manager" + const loader = new FBXLoader(null); loader.setPath(modelData.path); loader.load(modelData.base, (fbx) => { fbx.scale.setScalar(0.1); @@ -154,7 +177,7 @@ class AnimatedMesh { const _OnLoad = (animName, anim) => { const clip = anim.animations[0]; const action = this.mixer_.clipAction(clip); - + this.animations_[animName] = { clip: clip, action: action, @@ -164,22 +187,22 @@ class AnimatedMesh { // LoadingManager seems to be broken when you attempt to load multiple // resources multiple times, only first onLoad is called. // So roll our own. - const loader = new FBXLoader(); + const loader = new FBXLoader(null); loader.setPath(modelData.path); this.manager_ = new OurLoadingManager(loader); this.manager_.load( - modelData.animations.idle, - (a) => { _OnLoad('idle', a); }); + modelData.animations.idle, + (a) => { _OnLoad(STATE_TYPES.IDLE, a); }); this.manager_.load( - modelData.animations.walk, - (a) => { _OnLoad('walk', a); }); + modelData.animations.walk, + (a) => { _OnLoad(STATE_TYPES.WALK, a); }); this.manager_.load( - modelData.animations.run, - (a) => { _OnLoad('run', a); }); + modelData.animations.run, + (a) => { _OnLoad(STATE_TYPES.RUN, a); }); this.manager_.load( - modelData.animations.dance, - (a) => { _OnLoad('dance', a); }); + modelData.animations.dance, + (a) => { _OnLoad(STATE_TYPES.DANCE, a); }); this.manager_.onLoad = () => { this.onLoad(); }; @@ -195,6 +218,18 @@ class AnimatedMesh { class BasicCharacterController { + params_: any; + decceleration_: THREE.Vector3; + acceleration_: THREE.Vector3; + velocity_: THREE.Vector3; + position_: THREE.Vector3; + quaternion_: THREE.Quaternion; + loaded_: boolean; + _input: BasicCharacterControllerInput; + target_: AnimatedMesh; + stateMachine_: CharacterFSM; + _keys: [] + constructor(params) { this._Init(params); } @@ -211,15 +246,15 @@ class BasicCharacterController { this._input = new BasicCharacterControllerInput(); this.target_ = new AnimatedMesh({ - scene: params.scene, - desc: params.desc, + scene: params.scene, + desc: params.desc, }); this.target_.onLoad = () => { this.loaded_ = true; - this.stateMachine_.SetState('idle'); + this.stateMachine_.SetState(STATE_TYPES.IDLE); } this.stateMachine_ = new CharacterFSM( - new BasicCharacterControllerProxy(this.target_.animations_)); + new BasicCharacterControllerProxy(this.target_.animations_)); } get IsLoaded() { @@ -243,9 +278,9 @@ class BasicCharacterController { CreateTransformPacket() { return [ - this.stateMachine_.currentState_.Name, - this.position_.toArray(), - this.quaternion_.toArray(), + this.stateMachine_.currentState_.Name, + this.position_.toArray(), + this.quaternion_.toArray(), ]; } @@ -258,13 +293,13 @@ class BasicCharacterController { const velocity = this.velocity_; const frameDecceleration = new THREE.Vector3( - velocity.x * this.decceleration_.x, - velocity.y * this.decceleration_.y, - velocity.z * this.decceleration_.z + velocity.x * this.decceleration_.x, + velocity.y * this.decceleration_.y, + velocity.z * this.decceleration_.z ); frameDecceleration.multiplyScalar(timeInSeconds); frameDecceleration.z = Math.sign(frameDecceleration.z) * Math.min( - Math.abs(frameDecceleration.z), Math.abs(velocity.z)); + Math.abs(frameDecceleration.z), Math.abs(velocity.z)); velocity.add(frameDecceleration); @@ -278,7 +313,7 @@ class BasicCharacterController { acc.multiplyScalar(2.0); } - if (this.stateMachine_.currentState_.Name == 'dance') { + if (this.stateMachine_.currentState_.Name == STATE_TYPES.DANCE) { acc.multiplyScalar(0.0); } @@ -325,9 +360,27 @@ class BasicCharacterController { } }; +interface IKeys { + forward: boolean, + backward: boolean, + left: boolean, + right: boolean, + space: boolean, + shift: boolean, +} + +interface ICustomKeyboardEvent extends KeyboardEvent { + currentTarget: HTMLElement & { + activeElement: HTMLElement + } + keyCode: number +} + class BasicCharacterControllerInput { + _keys: IKeys; + constructor() { - this._Init(); + this._Init(); } _Init() { @@ -339,12 +392,14 @@ class BasicCharacterControllerInput { space: false, shift: false, }; - document.addEventListener('keydown', (e) => this.OnKeyDown_(e), false); + document.addEventListener('keydown', (e) => this.OnKeyDown_(e as ICustomKeyboardEvent), false); document.addEventListener('keyup', (e) => this._onKeyUp(e), false); } - OnKeyDown_(event) { - if (event.currentTarget.activeElement != document.body) { + // extract this typedef into a shared interface + OnKeyDown_(event: ICustomKeyboardEvent) { + const activeElement = event?.currentTarget?.activeElement; + if (activeElement != document.body) { return; } switch (event.keyCode) { @@ -373,7 +428,7 @@ class BasicCharacterControllerInput { if (event.currentTarget.activeElement != document.body) { return; } - switch(event.keyCode) { + switch (event.keyCode) { case 87: // w this._keys.forward = false; break; @@ -398,6 +453,9 @@ class BasicCharacterControllerInput { class FiniteStateMachine { + currentState_: any; + _states: any; + constructor() { this._states = {}; this.currentState_ = null; @@ -409,7 +467,7 @@ class FiniteStateMachine { SetState(name) { const prevState = this.currentState_; - + if (prevState) { if (prevState.Name == name) { return; @@ -432,6 +490,8 @@ class FiniteStateMachine { class CharacterFSM extends FiniteStateMachine { + _proxy: any; + constructor(proxy) { super(); this._proxy = proxy; @@ -439,26 +499,30 @@ class CharacterFSM extends FiniteStateMachine { } _Init() { - this._AddState('idle', IdleState); - this._AddState('walk', WalkState); - this._AddState('run', RunState); - this._AddState('dance', DanceState); + this._AddState(STATE_TYPES.IDLE, IdleState); + this._AddState(STATE_TYPES.WALK, WalkState); + this._AddState(STATE_TYPES.RUN, RunState); + this._AddState(STATE_TYPES.DANCE, DanceState); } }; class State { + _parent: any; constructor(parent) { this._parent = parent; } - Enter() {} - Exit() {} - Update() {} + Enter(_) { } + Exit() { } + Update(a, b) { } }; class DanceState extends State { + _FinishedCallback: () => void; + _CleanupCallback: any; + constructor(parent) { super(parent); @@ -468,18 +532,18 @@ class DanceState extends State { } get Name() { - return 'dance'; + return STATE_TYPES.DANCE; } Enter(prevState) { - const curAction = this._parent._proxy.animations_['dance'].action; + const curAction = this._parent._proxy.animations_[STATE_TYPES.DANCE].action; const mixer = curAction.getMixer(); mixer.addEventListener('finished', this._FinishedCallback); if (prevState) { const prevAction = this._parent._proxy.animations_[prevState.Name].action; - curAction.reset(); + curAction.reset(); curAction.setLoop(THREE.LoopOnce, 1); curAction.clampWhenFinished = true; curAction.crossFadeFrom(prevAction, 0.2, true); @@ -491,12 +555,12 @@ class DanceState extends State { _Finished() { this._Cleanup(); - this._parent.SetState('idle'); + this._parent.SetState(STATE_TYPES.IDLE); } _Cleanup() { - const action = this._parent._proxy.animations_['dance'].action; - + const action = this._parent._proxy.animations_[STATE_TYPES.DANCE].action; + action.getMixer().removeEventListener('finished', this._CleanupCallback); } @@ -515,17 +579,17 @@ class WalkState extends State { } get Name() { - return 'walk'; + return STATE_TYPES.WALK; } Enter(prevState) { - const curAction = this._parent._proxy.animations_['walk'].action; + const curAction = this._parent._proxy.animations_[STATE_TYPES.WALK].action; if (prevState) { const prevAction = this._parent._proxy.animations_[prevState.Name].action; curAction.enabled = true; - if (prevState.Name == 'run') { + if (prevState.Name == STATE_TYPES.RUN) { const ratio = curAction.getClip().duration / prevAction.getClip().duration; curAction.time = prevAction.time * ratio; } else { @@ -551,12 +615,12 @@ class WalkState extends State { if (input._keys.forward || input._keys.backward) { if (input._keys.shift) { - this._parent.SetState('run'); + this._parent.SetState(STATE_TYPES.RUN); } return; } - this._parent.SetState('idle'); + this._parent.SetState(STATE_TYPES.IDLE); } }; @@ -567,17 +631,17 @@ class RunState extends State { } get Name() { - return 'run'; + return STATE_TYPES.RUN; } Enter(prevState) { - const curAction = this._parent._proxy.animations_['run'].action; + const curAction = this._parent._proxy.animations_[STATE_TYPES.RUN].action; if (prevState) { const prevAction = this._parent._proxy.animations_[prevState.Name].action; curAction.enabled = true; - if (prevState.Name == 'walk') { + if (prevState.Name == STATE_TYPES.WALK) { const ratio = curAction.getClip().duration / prevAction.getClip().duration; curAction.time = prevAction.time * ratio; } else { @@ -603,12 +667,12 @@ class RunState extends State { if (input._keys.forward || input._keys.backward) { if (!input._keys.shift) { - this._parent.SetState('walk'); + this._parent.SetState(STATE_TYPES.WALK); } return; } - this._parent.SetState('idle'); + this._parent.SetState(STATE_TYPES.IDLE); } }; @@ -619,11 +683,11 @@ class IdleState extends State { } get Name() { - return 'idle'; + return STATE_TYPES.IDLE; } Enter(prevState) { - const idleAction = this._parent._proxy.animations_['idle'].action; + const idleAction = this._parent._proxy.animations_[STATE_TYPES.IDLE].action; if (prevState) { const prevAction = this._parent._proxy.animations_[prevState.Name].action; idleAction.time = 0.0; @@ -645,15 +709,20 @@ class IdleState extends State { return; } if (input._keys.forward || input._keys.backward) { - this._parent.SetState('walk'); + this._parent.SetState(STATE_TYPES.WALK); } else if (input._keys.space) { - this._parent.SetState('dance'); + this._parent.SetState(STATE_TYPES.DANCE); } } }; class ThirdPersonCamera { + params_: any; + _camera: any; + _currentPosition: THREE.Vector3; + _currentLookat: THREE.Vector3; + constructor(params) { this.params_ = params; this._camera = params.camera; @@ -694,6 +763,11 @@ class ThirdPersonCamera { class PlayerEntity { + params_: any; + controls_: BasicCharacterController; + thirdPersonCamera_: ThirdPersonCamera; + updateTimer_: number; + constructor(params) { this.params_ = params; this.Init_(); @@ -723,8 +797,8 @@ class PlayerEntity { const p = data[1]; const q = data[2]; this.controls_.SetTransform( - new THREE.Vector3(...p), - new THREE.Quaternion(...q) + new THREE.Vector3(...p), + new THREE.Quaternion(...q) ); } @@ -748,14 +822,20 @@ class PlayerEntity { class NetworkCharacterController { + name_: any; + target_: any; + params_: any; + stateMachine_: CharacterFSM; + + constructor(params) { this._Init(params); } Destroy() { - this.name_.Destroy(); + this.name_?.Destroy?.(); this.name_ = null; - this.target_.Destroy(); + this.target_?.Destroy?.(); this.target_ = null; } @@ -763,18 +843,18 @@ class NetworkCharacterController { this.params_ = params; this.target_ = new AnimatedMesh({ - scene: params.scene, - desc: params.desc, + scene: params.scene, + desc: params.desc, }); this.target_.onLoad = () => { this.stateMachine_ = new CharacterFSM( - new BasicCharacterControllerProxy(this.target_.animations_)); - this.stateMachine_.SetState('idle'); + new BasicCharacterControllerProxy(this.target_.animations_)); + this.stateMachine_.SetState(STATE_TYPES.IDLE); } this.name_ = new FloatingName({ - parent: this.target_.group_, - desc: params.desc, + parent: this.target_.group_, + desc: params.desc, }); } @@ -803,8 +883,18 @@ class NetworkCharacterController { } }; +interface ITransformUpdate { + time: number, + transform: [] +} class NetworkEntity { + params_: any; + transformUpdates_: ITransformUpdate[]; + lastFrame_: any; + targetFrame_: any; + controller_: any; + constructor(params) { this.params_ = params; this.transformUpdates_ = []; @@ -814,7 +904,7 @@ class NetworkEntity { } Destroy() { - this.controller_.Destroy(); + this.controller_?.Destroy?.(); } Init_() { @@ -822,16 +912,16 @@ class NetworkEntity { CreateFromDesc(desc, transform) { this.controller_ = new NetworkCharacterController({ - scene: this.params_.scene, - desc: desc, + scene: this.params_.scene, + desc: desc, }); this.controller_.position.set(...transform[1]); this.controller_.quaternion.set(...transform[2]); - this.targetFrame_ = {time: 0.1, transform: transform}; -} + this.targetFrame_ = { time: 0.1, transform: transform }; + } UpdateTransform(data) { - this.transformUpdates_.push({time: 0.1, transform: data}); + this.transformUpdates_.push({ time: 0.1, transform: data }); } Update(timeElapsed) { @@ -840,7 +930,7 @@ class NetworkEntity { this.ApplyLCT_(timeElapsed); } - ApplyLCT_(timeElapsed) { + ApplyLCT_(timeElapsed) { if (this.transformUpdates_.length == 0) { return; } @@ -850,7 +940,7 @@ class NetworkEntity { } while (this.transformUpdates_.length > 0 && - this.transformUpdates_[0].time <= 0.0) { + this.transformUpdates_[0].time <= 0.0) { this.lastFrame_ = { transform: [ this.targetFrame_.transform[0], @@ -880,16 +970,20 @@ class NetworkEntity { class Chatbox { + params_: any; + element_: HTMLInputElement; + OnChat: (msg) => void; + constructor(params) { this.params_ = params; - this.OnChat = () => {}; - this.Init_(); + this.OnChat = () => { }; + this.Init_(); } Init_() { - this.element_ = document.getElementById('chat-input'); + this.element_ = document.getElementById('chat-input') as HTMLInputElement; this.element_.addEventListener( - 'keydown', (e) => this.OnKeyDown_(e), false); + 'keydown', (e) => this.OnKeyDown_(e), false); } OnKeyDown_(evt) { @@ -914,6 +1008,16 @@ class Chatbox { class BasicMMODemo { + threejs_: THREE.WebGLRenderer; + camera_: THREE.PerspectiveCamera; + scene_: THREE.Scene; + entities_: any; + chatbox_: Chatbox; + previousRAF_: any; + socket_: Socket; + playerID_: string; + + constructor() { this._Initialize(); } @@ -930,7 +1034,7 @@ class BasicMMODemo { this.threejs_.setSize(window.innerWidth, window.innerHeight); document.getElementById('container').appendChild( - this.threejs_.domElement); + this.threejs_.domElement); window.addEventListener('resize', () => { this.OnWindowResize_(); @@ -962,8 +1066,8 @@ class BasicMMODemo { light.shadow.camera.bottom = -100; this.scene_.add(light); - light = new THREE.AmbientLight(0x101010); - this.scene_.add(light); + let light2 = new THREE.AmbientLight(0x101010); + this.scene_.add(light2); const controls = new OrbitControls( this.camera_, this.threejs_.domElement); @@ -972,21 +1076,21 @@ class BasicMMODemo { const loader = new THREE.CubeTextureLoader(); const texture = loader.load([ - './resources/posx.jpg', - './resources/negx.jpg', - './resources/posy.jpg', - './resources/negy.jpg', - './resources/posz.jpg', - './resources/negz.jpg', + '../resources/posx.jpg', + '../resources/negx.jpg', + '../resources/posy.jpg', + '../resources/negy.jpg', + '../resources/posz.jpg', + '../resources/negz.jpg', ]); texture.encoding = THREE.sRGBEncoding; this.scene_.background = texture; const plane = new THREE.Mesh( - new THREE.PlaneGeometry(100, 100, 10, 10), - new THREE.MeshStandardMaterial({ - color: 0x808080, - })); + new THREE.PlaneGeometry(100, 100, 10, 10), + new THREE.MeshStandardMaterial({ + color: 0x808080, + })); plane.castShadow = false; plane.receiveShadow = true; plane.rotation.x = -Math.PI / 2; @@ -996,7 +1100,7 @@ class BasicMMODemo { this.entities_ = {}; - this.chatbox_ = new Chatbox(); + this.chatbox_ = new Chatbox(null); this.chatbox_.OnChat = (txt) => { this.OnChat_(txt); }; this.previousRAF_ = null; @@ -1005,27 +1109,27 @@ class BasicMMODemo { GenerateRandomName_() { const names1 = [ - 'Aspiring', 'Nameless', 'Cautionary', 'Excited', - 'Modest', 'Maniacal', 'Caffeinated', 'Sleepy', - 'Passionate', 'Masochistic', 'Aging', 'Pedantic', - 'Talkative', + 'Aspiring', 'Nameless', 'Cautionary', 'Excited', + 'Modest', 'Maniacal', 'Caffeinated', 'Sleepy', + 'Passionate', 'Masochistic', 'Aging', 'Pedantic', + 'Talkative', ]; const names2 = [ - 'Coder', 'Mute', 'Giraffe', 'Snowman', - 'Machinist', 'Fondler', 'Typist', - 'Noodler', 'Arborist', 'Peeper', 'Ghost', + 'Coder', 'Mute', 'Giraffe', 'Snowman', + 'Machinist', 'Fondler', 'Typist', + 'Noodler', 'Arborist', 'Peeper', 'Ghost', ]; const n1 = names1[ - Math.floor(Math.random() * names1.length)]; + Math.floor(Math.random() * names1.length)]; const n2 = names2[ - Math.floor(Math.random() * names2.length)]; + Math.floor(Math.random() * names2.length)]; return n1 + ' ' + n2; } SetupSocket_() { this.socket_ = io('ws://localhost:3000', { - reconnection: false, - transports: ['websocket'], + reconnection: false, + transports: ['websocket'], }); this.socket_.on("connect", () => { @@ -1051,9 +1155,9 @@ class BasicMMODemo { if (e == 'world.player') { this.playerID_ = d.id; const e = new PlayerEntity({ - scene: this.scene_, - camera: this.camera_, - socket: this.socket_ + scene: this.scene_, + camera: this.camera_, + socket: this.socket_ }); e.CreateFromDesc(d.desc); e.UpdateTransform(d.transform); @@ -1067,7 +1171,7 @@ class BasicMMODemo { for (let u of updates) { if ('desc' in u) { - const e = new NetworkEntity({scene: this.scene_}); + const e = new NetworkEntity({ scene: this.scene_ }); e.CreateFromDesc(u.desc, u.transform); this.entities_[u.id] = e; } else { diff --git a/client/tsconfig.json b/client/tsconfig.json index 25bd89d4..2e0e5d9e 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -2,7 +2,9 @@ "extends": "../tsconfig.packages.json", "compilerOptions": { "rootDir": "src", - "outDir": "dist" + "outDir": "dist", + "target": "ES6", + "lib": ["ESNext", "dom"] }, "include": ["./src/*.ts"], "exclude": ["./dist", "node_modules"] diff --git a/server/src/scripts/world-entity.ts b/server/src/scripts/world-entity.ts index 8cfa85a0..24b30046 100644 --- a/server/src/scripts/world-entity.ts +++ b/server/src/scripts/world-entity.ts @@ -1,36 +1,61 @@ import {quat, vec3} from 'gl-matrix'; -import {defs} from '../../client/shared/defs.mjs'; +import {defs} from 'shared/src/defs'; +import {STATE_TYPES, EVENT_TYPES, ATTACK_TYPES} from 'shared/src/constants' export const world_entity = (() => { class Action_Attack { + #onAction: any; + #time: number; + #cooldown: number; + #timeElapsed: number; + constructor(time, cooldown, onAction) { - this.onAction_ = onAction; - this.time_ = time; - this.cooldown_ = cooldown; - this.timeElapsed_ = 0.0; + this.#onAction = onAction; + this.#time = time; + this.#cooldown = cooldown; + this.#timeElapsed = 0.0; } get Finished() { - return this.timeElapsed_ > this.cooldown_; + return this.#timeElapsed > this.#cooldown; } Update(timeElapsed) { - const oldTimeElapsed = this.timeElapsed_; - this.timeElapsed_ += timeElapsed; - if (this.timeElapsed_ > this.time_ && - oldTimeElapsed <= this.time_) { - this.onAction_(); + const oldTimeElapsed = this.#timeElapsed; + this.#timeElapsed += timeElapsed; + if (this.#timeElapsed > this.#time && + oldTimeElapsed <= this.#time) { + this.#onAction(); } } }; class WorldEntity { + id_: string; + state_: string; + position_: vec3; + rotation_: quat; + accountInfo_: { + name: string; + } + characterDefinition_: any; + characterInfo_: { + class: any; + inventory: any; + }; + stats_: any; + events_: any[]; + grid_: any; + gridClient_: any; + updateTimer_: number; + action_: any; + constructor(params) { this.id_ = params.id; - this.state_ = 'idle'; + this.state_ = STATE_TYPES.IDLE; this.position_ = vec3.clone(params.position); this.rotation_ = quat.clone(params.rotation); @@ -102,13 +127,19 @@ export const world_entity = (() => { ]; } - UpdateTransform(transformData) { + UpdateTransform(transformData: [string, vec3, quat] ) { + const newState = transformData[0]; + const [vecX, vecY, vecZ] = transformData[1]; + const [quatX, quatY, quatZ, quatW] = transformData[2] + if (this.stats_.health <= 0) { - this.SetState('death'); + this.SetState(STATE_TYPES.DEATH); } + this.state_ = transformData[0] - this.position_ = vec3.fromValues(...transformData[1]); - this.rotation_ = quat.fromValues(...transformData[2]); + + this.position_ = vec3.fromValues(vecX, vecY, vecZ); + this.rotation_ = quat.fromValues(quatX, quatY, quatZ, quatW); this.UpdateGridClient_(); } @@ -170,7 +201,7 @@ export const world_entity = (() => { console.log('attacking: ' + target.accountInfo_.name); - if (this.characterDefinition_.attack.type == 'melee') { + if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { damage = (this.stats_.strength / 5.0); const equipped = this.characterInfo_.inventory['inventory-equip-1']; @@ -189,32 +220,36 @@ export const world_entity = (() => { target.OnDamage(this, damage); - this.onEvent_('attack.damage', {target: target, damage: damage}); + this.onEvent_(EVENT_TYPES.ATTACK_DAMAGE, {target: target, damage: damage}); } } + + onEvent_(eventType: string, data) { + console.error("This is the fake error Jeremy put in to see if this undefined onEvent_ function was ever called.") + } OnDamage(attacker, damage) { this.stats_.health -= damage; this.stats_.health = Math.max(0.0, this.stats_.health); this.events_.push({ - type: 'attack', + type: EVENT_TYPES.ATTACK, target: this.ID, attacker: attacker.ID, amount: damage }); if (this.stats_.health <= 0) { - this.SetState('death'); + this.SetState(STATE_TYPES.DEATH); } } SetState(s) { - if (this.state_ != 'death') { + if (this.state_ != STATE_TYPES.DEATH) { this.state_ = s; } } - FindNear(radius, includeSelf) { + FindNear(radius, includeSelf?: boolean) { let nearby = this.grid_.FindNear( [this.position_[0], this.position_[2]], [radius, radius]).map(c => c.entity); @@ -234,8 +269,8 @@ export const world_entity = (() => { UpdateActions_(timeElapsed) { if (!this.action_) { // Hack, again, should move this all through events - if (this.state_ == 'attack') { - this.SetState('idle'); + if (this.state_ == STATE_TYPES.ATTACK) { + this.SetState(STATE_TYPES.IDLE); } return; } @@ -243,7 +278,7 @@ export const world_entity = (() => { this.action_.Update(timeElapsed); if (this.action_.Finished) { this.action_ = null; - this.SetState('idle'); + this.SetState(STATE_TYPES.IDLE); } } }; diff --git a/shared/src/FBXLoader.ts b/shared/src/FBXLoader.ts new file mode 100644 index 00000000..830dff83 --- /dev/null +++ b/shared/src/FBXLoader.ts @@ -0,0 +1,4205 @@ +import { + AmbientLight, + AnimationClip, + Bone, + BufferAttribute, + BufferGeometry, + ClampToEdgeWrapping, + Color, + DirectionalLight, + EquirectangularReflectionMapping, + Euler, + FileLoader, + Float32BufferAttribute, + Group, + Line, + LineBasicMaterial, + Loader, + LoaderUtils, + MathUtils, + Matrix3, + Matrix4, + Mesh, + MeshLambertMaterial, + MeshPhongMaterial, + NumberKeyframeTrack, + Object3D, + OrthographicCamera, + PerspectiveCamera, + PointLight, + PropertyBinding, + Quaternion, + QuaternionKeyframeTrack, + RepeatWrapping, + Skeleton, + SkinnedMesh, + SpotLight, + Texture, + TextureLoader, + Uint16BufferAttribute, + Vector3, + Vector4, + VectorKeyframeTrack, + sRGBEncoding +} from '../../../build/three.module.js'; +import { Inflate } from '../libs/inflate.module.min.js'; +import { NURBSCurve } from '../curves/NURBSCurve.js'; + +/** + * Loader loads FBX file and generates Group representing FBX scene. + * Requires FBX file to be >= 7.0 and in ASCII or >= 6400 in Binary format + * Versions lower than this may load but will probably have errors + * + * Needs Support: + * Morph normals / blend shape normals + * + * FBX format references: + * https://wiki.blender.org/index.php/User:Mont29/Foundation/FBX_File_Structure + * http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference) + * + * Binary format specification: + * https://code.blender.org/2013/08/fbx-binary-file-format-specification/ + */ + + +var FBXLoader = ( function () { + + var fbxTree; + var connections; + var sceneGraph; + + function FBXLoader( manager ) { + + Loader.call( this, manager ); + + } + + FBXLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: FBXLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path; + + var loader = new FileLoader( this.manager ); + loader.setPath( scope.path ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + + loader.load( url, function ( buffer ) { + + try { + + onLoad( scope.parse( buffer, path ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( FBXBuffer, path ) { + + if ( isFbxFormatBinary( FBXBuffer ) ) { + + fbxTree = new BinaryParser().parse( FBXBuffer ); + + } else { + + var FBXText = convertArrayBufferToString( FBXBuffer ); + + if ( ! isFbxFormatASCII( FBXText ) ) { + + throw new Error( 'THREE.FBXLoader: Unknown format.' ); + + } + + if ( getFbxVersion( FBXText ) < 7000 ) { + + throw new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + getFbxVersion( FBXText ) ); + + } + + fbxTree = new TextParser().parse( FBXText ); + + } + + // console.log( fbxTree ); + + var textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin ); + + return new FBXTreeParser( textureLoader, this.manager ).parse( fbxTree ); + + } + + } ); + + // Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group + function FBXTreeParser( textureLoader, manager ) { + + this.textureLoader = textureLoader; + this.manager = manager; + + } + + FBXTreeParser.prototype = { + + constructor: FBXTreeParser, + + parse: function () { + + connections = this.parseConnections(); + + var images = this.parseImages(); + var textures = this.parseTextures( images ); + var materials = this.parseMaterials( textures ); + var deformers = this.parseDeformers(); + var geometryMap = new GeometryParser().parse( deformers ); + + this.parseScene( deformers, geometryMap, materials ); + + return sceneGraph; + + }, + + // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry ) + // and details the connection type + parseConnections: function () { + + var connectionMap = new Map(); + + if ( 'Connections' in fbxTree ) { + + var rawConnections = fbxTree.Connections.connections; + + rawConnections.forEach( function ( rawConnection ) { + + var fromID = rawConnection[ 0 ]; + var toID = rawConnection[ 1 ]; + var relationship = rawConnection[ 2 ]; + + if ( ! connectionMap.has( fromID ) ) { + + connectionMap.set( fromID, { + parents: [], + children: [] + } ); + + } + + var parentRelationship = { ID: toID, relationship: relationship }; + connectionMap.get( fromID ).parents.push( parentRelationship ); + + if ( ! connectionMap.has( toID ) ) { + + connectionMap.set( toID, { + parents: [], + children: [] + } ); + + } + + var childRelationship = { ID: fromID, relationship: relationship }; + connectionMap.get( toID ).children.push( childRelationship ); + + } ); + + } + + return connectionMap; + + }, + + // Parse FBXTree.Objects.Video for embedded image data + // These images are connected to textures in FBXTree.Objects.Textures + // via FBXTree.Connections. + parseImages: function () { + + var images = {}; + var blobs = {}; + + if ( 'Video' in fbxTree.Objects ) { + + var videoNodes = fbxTree.Objects.Video; + + for ( var nodeID in videoNodes ) { + + var videoNode = videoNodes[ nodeID ]; + + var id = parseInt( nodeID ); + + images[ id ] = videoNode.RelativeFilename || videoNode.Filename; + + // raw image data is in videoNode.Content + if ( 'Content' in videoNode ) { + + var arrayBufferContent = ( videoNode.Content instanceof ArrayBuffer ) && ( videoNode.Content.byteLength > 0 ); + var base64Content = ( typeof videoNode.Content === 'string' ) && ( videoNode.Content !== '' ); + + if ( arrayBufferContent || base64Content ) { + + var image = this.parseImage( videoNodes[ nodeID ] ); + + blobs[ videoNode.RelativeFilename || videoNode.Filename ] = image; + + } + + } + + } + + } + + for ( var id in images ) { + + var filename = images[ id ]; + + if ( blobs[ filename ] !== undefined ) images[ id ] = blobs[ filename ]; + else images[ id ] = images[ id ].split( '\\' ).pop(); + + } + + return images; + + }, + + // Parse embedded image data in FBXTree.Video.Content + parseImage: function ( videoNode ) { + + var content = videoNode.Content; + var fileName = videoNode.RelativeFilename || videoNode.Filename; + var extension = fileName.slice( fileName.lastIndexOf( '.' ) + 1 ).toLowerCase(); + + var type; + + switch ( extension ) { + + case 'bmp': + + type = 'image/bmp'; + break; + + case 'jpg': + case 'jpeg': + + type = 'image/jpeg'; + break; + + case 'png': + + type = 'image/png'; + break; + + case 'tif': + + type = 'image/tiff'; + break; + + case 'tga': + + if ( this.manager.getHandler( '.tga' ) === null ) { + + console.warn( 'FBXLoader: TGA loader not found, skipping ', fileName ); + + } + + type = 'image/tga'; + break; + + default: + + console.warn( 'FBXLoader: Image type "' + extension + '" is not supported.' ); + return; + + } + + if ( typeof content === 'string' ) { // ASCII format + + return 'data:' + type + ';base64,' + content; + + } else { // Binary Format + + var array = new Uint8Array( content ); + return window.URL.createObjectURL( new Blob( [ array ], { type: type } ) ); + + } + + }, + + // Parse nodes in FBXTree.Objects.Texture + // These contain details such as UV scaling, cropping, rotation etc and are connected + // to images in FBXTree.Objects.Video + parseTextures: function ( images ) { + + var textureMap = new Map(); + + if ( 'Texture' in fbxTree.Objects ) { + + var textureNodes = fbxTree.Objects.Texture; + for ( var nodeID in textureNodes ) { + + var texture = this.parseTexture( textureNodes[ nodeID ], images ); + textureMap.set( parseInt( nodeID ), texture ); + + } + + } + + return textureMap; + + }, + + // Parse individual node in FBXTree.Objects.Texture + parseTexture: function ( textureNode, images ) { + + var texture = this.loadTexture( textureNode, images ); + + texture.ID = textureNode.id; + + texture.name = textureNode.attrName; + + var wrapModeU = textureNode.WrapModeU; + var wrapModeV = textureNode.WrapModeV; + + var valueU = wrapModeU !== undefined ? wrapModeU.value : 0; + var valueV = wrapModeV !== undefined ? wrapModeV.value : 0; + + // http://download.autodesk.com/us/fbx/SDKdocs/FBX_SDK_Help/files/fbxsdkref/class_k_fbx_texture.html#889640e63e2e681259ea81061b85143a + // 0: repeat(default), 1: clamp + + texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping; + texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping; + + if ( 'Scaling' in textureNode ) { + + var values = textureNode.Scaling.value; + + texture.repeat.x = values[ 0 ]; + texture.repeat.y = values[ 1 ]; + + } + + return texture; + + }, + + // load a texture specified as a blob or data URI, or via an external URL using TextureLoader + loadTexture: function ( textureNode, images ) { + + var fileName; + + var currentPath = this.textureLoader.path; + + var children = connections.get( textureNode.id ).children; + + if ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) { + + fileName = images[ children[ 0 ].ID ]; + + if ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) { + + this.textureLoader.setPath( undefined ); + + } + + } + + var texture; + + var extension = textureNode.FileName.slice( - 3 ).toLowerCase(); + + if ( extension === 'tga' ) { + + var loader = this.manager.getHandler( '.tga' ); + + if ( loader === null ) { + + console.warn( 'FBXLoader: TGA loader not found, creating placeholder texture for', textureNode.RelativeFilename ); + texture = new Texture(); + + } else { + + texture = loader.load( fileName ); + + } + + } else if ( extension === 'psd' ) { + + console.warn( 'FBXLoader: PSD textures are not supported, creating placeholder texture for', textureNode.RelativeFilename ); + texture = new Texture(); + + } else { + + texture = this.textureLoader.load( fileName ); + + } + + this.textureLoader.setPath( currentPath ); + + return texture; + + }, + + // Parse nodes in FBXTree.Objects.Material + parseMaterials: function ( textureMap ) { + + var materialMap = new Map(); + + if ( 'Material' in fbxTree.Objects ) { + + var materialNodes = fbxTree.Objects.Material; + + for ( var nodeID in materialNodes ) { + + var material = this.parseMaterial( materialNodes[ nodeID ], textureMap ); + + if ( material !== null ) materialMap.set( parseInt( nodeID ), material ); + + } + + } + + return materialMap; + + }, + + // Parse single node in FBXTree.Objects.Material + // Materials are connected to texture maps in FBXTree.Objects.Textures + // FBX format currently only supports Lambert and Phong shading models + parseMaterial: function ( materialNode, textureMap ) { + + var ID = materialNode.id; + var name = materialNode.attrName; + var type = materialNode.ShadingModel; + + // Case where FBX wraps shading model in property object. + if ( typeof type === 'object' ) { + + type = type.value; + + } + + // Ignore unused materials which don't have any connections. + if ( ! connections.has( ID ) ) return null; + + var parameters = this.parseParameters( materialNode, textureMap, ID ); + + var material; + + switch ( type.toLowerCase() ) { + + case 'phong': + material = new MeshPhongMaterial(); + break; + case 'lambert': + material = new MeshLambertMaterial(); + break; + default: + console.warn( 'THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.', type ); + material = new MeshPhongMaterial(); + break; + + } + + material.setValues( parameters ); + material.name = name; + + return material; + + }, + + // Parse FBX material and return parameters suitable for a three.js material + // Also parse the texture map and return any textures associated with the material + parseParameters: function ( materialNode, textureMap, ID ) { + + var parameters = {}; + + if ( materialNode.BumpFactor ) { + + parameters.bumpScale = materialNode.BumpFactor.value; + + } + + if ( materialNode.Diffuse ) { + + parameters.color = new Color().fromArray( materialNode.Diffuse.value ); + + } else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) { + + // The blender exporter exports diffuse here instead of in materialNode.Diffuse + parameters.color = new Color().fromArray( materialNode.DiffuseColor.value ); + + } + + if ( materialNode.DisplacementFactor ) { + + parameters.displacementScale = materialNode.DisplacementFactor.value; + + } + + if ( materialNode.Emissive ) { + + parameters.emissive = new Color().fromArray( materialNode.Emissive.value ); + + } else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) { + + // The blender exporter exports emissive color here instead of in materialNode.Emissive + parameters.emissive = new Color().fromArray( materialNode.EmissiveColor.value ); + + } + + if ( materialNode.EmissiveFactor ) { + + parameters.emissiveIntensity = parseFloat( materialNode.EmissiveFactor.value ); + + } + + if ( materialNode.Opacity ) { + + parameters.opacity = parseFloat( materialNode.Opacity.value ); + + } + + if ( parameters.opacity < 1.0 ) { + + parameters.transparent = true; + + } + + if ( materialNode.ReflectionFactor ) { + + parameters.reflectivity = materialNode.ReflectionFactor.value; + + } + + if ( materialNode.Shininess ) { + + parameters.shininess = materialNode.Shininess.value; + + } + + if ( materialNode.Specular ) { + + parameters.specular = new Color().fromArray( materialNode.Specular.value ); + + } else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) { + + // The blender exporter exports specular color here instead of in materialNode.Specular + parameters.specular = new Color().fromArray( materialNode.SpecularColor.value ); + + } + + var scope = this; + connections.get( ID ).children.forEach( function ( child ) { + + var type = child.relationship; + + switch ( type ) { + + case 'Bump': + parameters.bumpMap = scope.getTexture( textureMap, child.ID ); + break; + + case 'Maya|TEX_ao_map': + parameters.aoMap = scope.getTexture( textureMap, child.ID ); + break; + + case 'DiffuseColor': + case 'Maya|TEX_color_map': + parameters.map = scope.getTexture( textureMap, child.ID ); + parameters.map.encoding = sRGBEncoding; + break; + + case 'DisplacementColor': + parameters.displacementMap = scope.getTexture( textureMap, child.ID ); + break; + + case 'EmissiveColor': + parameters.emissiveMap = scope.getTexture( textureMap, child.ID ); + parameters.emissiveMap.encoding = sRGBEncoding; + break; + + case 'NormalMap': + case 'Maya|TEX_normal_map': + parameters.normalMap = scope.getTexture( textureMap, child.ID ); + break; + + case 'ReflectionColor': + parameters.envMap = scope.getTexture( textureMap, child.ID ); + parameters.envMap.mapping = EquirectangularReflectionMapping; + parameters.envMap.encoding = sRGBEncoding; + break; + + case 'SpecularColor': + parameters.specularMap = scope.getTexture( textureMap, child.ID ); + parameters.specularMap.encoding = sRGBEncoding; + break; + + case 'TransparentColor': + case 'TransparencyFactor': + parameters.alphaMap = scope.getTexture( textureMap, child.ID ); + parameters.transparent = true; + break; + + case 'AmbientColor': + case 'ShininessExponent': // AKA glossiness map + case 'SpecularFactor': // AKA specularLevel + case 'VectorDisplacementColor': // NOTE: Seems to be a copy of DisplacementColor + default: + console.warn( 'THREE.FBXLoader: %s map is not supported in three.js, skipping texture.', type ); + break; + + } + + } ); + + return parameters; + + }, + + // get a texture from the textureMap for use by a material. + getTexture: function ( textureMap, id ) { + + // if the texture is a layered texture, just use the first layer and issue a warning + if ( 'LayeredTexture' in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture ) { + + console.warn( 'THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.' ); + id = connections.get( id ).children[ 0 ].ID; + + } + + return textureMap.get( id ); + + }, + + // Parse nodes in FBXTree.Objects.Deformer + // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here + // Generates map of Skeleton-like objects for use later when generating and binding skeletons. + parseDeformers: function () { + + var skeletons = {}; + var morphTargets = {}; + + if ( 'Deformer' in fbxTree.Objects ) { + + var DeformerNodes = fbxTree.Objects.Deformer; + + for ( var nodeID in DeformerNodes ) { + + var deformerNode = DeformerNodes[ nodeID ]; + + var relationships = connections.get( parseInt( nodeID ) ); + + if ( deformerNode.attrType === 'Skin' ) { + + var skeleton = this.parseSkeleton( relationships, DeformerNodes ); + skeleton.ID = nodeID; + + if ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: skeleton attached to more than one geometry is not supported.' ); + skeleton.geometryID = relationships.parents[ 0 ].ID; + + skeletons[ nodeID ] = skeleton; + + } else if ( deformerNode.attrType === 'BlendShape' ) { + + var morphTarget = { + id: nodeID, + }; + + morphTarget.rawTargets = this.parseMorphTargets( relationships, DeformerNodes ); + morphTarget.id = nodeID; + + if ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: morph target attached to more than one geometry is not supported.' ); + + morphTargets[ nodeID ] = morphTarget; + + } + + } + + } + + return { + + skeletons: skeletons, + morphTargets: morphTargets, + + }; + + }, + + // Parse single nodes in FBXTree.Objects.Deformer + // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster' + // Each skin node represents a skeleton and each cluster node represents a bone + parseSkeleton: function ( relationships, deformerNodes ) { + + var rawBones = []; + + relationships.children.forEach( function ( child ) { + + var boneNode = deformerNodes[ child.ID ]; + + if ( boneNode.attrType !== 'Cluster' ) return; + + var rawBone = { + + ID: child.ID, + indices: [], + weights: [], + transformLink: new Matrix4().fromArray( boneNode.TransformLink.a ), + // transform: new Matrix4().fromArray( boneNode.Transform.a ), + // linkMode: boneNode.Mode, + + }; + + if ( 'Indexes' in boneNode ) { + + rawBone.indices = boneNode.Indexes.a; + rawBone.weights = boneNode.Weights.a; + + } + + rawBones.push( rawBone ); + + } ); + + return { + + rawBones: rawBones, + bones: [] + + }; + + }, + + // The top level morph deformer node has type "BlendShape" and sub nodes have type "BlendShapeChannel" + parseMorphTargets: function ( relationships, deformerNodes ) { + + var rawMorphTargets = []; + + for ( var i = 0; i < relationships.children.length; i ++ ) { + + var child = relationships.children[ i ]; + + var morphTargetNode = deformerNodes[ child.ID ]; + + var rawMorphTarget = { + + name: morphTargetNode.attrName, + initialWeight: morphTargetNode.DeformPercent, + id: morphTargetNode.id, + fullWeights: morphTargetNode.FullWeights.a + + }; + + if ( morphTargetNode.attrType !== 'BlendShapeChannel' ) return; + + rawMorphTarget.geoID = connections.get( parseInt( child.ID ) ).children.filter( function ( child ) { + + return child.relationship === undefined; + + } )[ 0 ].ID; + + rawMorphTargets.push( rawMorphTarget ); + + } + + return rawMorphTargets; + + }, + + // create the main Group() to be returned by the loader + parseScene: function ( deformers, geometryMap, materialMap ) { + + sceneGraph = new Group(); + + var modelMap = this.parseModels( deformers.skeletons, geometryMap, materialMap ); + + var modelNodes = fbxTree.Objects.Model; + + var scope = this; + modelMap.forEach( function ( model ) { + + var modelNode = modelNodes[ model.ID ]; + scope.setLookAtProperties( model, modelNode ); + + var parentConnections = connections.get( model.ID ).parents; + + parentConnections.forEach( function ( connection ) { + + var parent = modelMap.get( connection.ID ); + if ( parent !== undefined ) parent.add( model ); + + } ); + + if ( model.parent === null ) { + + sceneGraph.add( model ); + + } + + + } ); + + this.bindSkeleton( deformers.skeletons, geometryMap, modelMap ); + + this.createAmbientLight(); + + this.setupMorphMaterials(); + + sceneGraph.traverse( function ( node ) { + + if ( node.userData.transformData ) { + + if ( node.parent ) node.userData.transformData.parentMatrixWorld = node.parent.matrix; + + var transform = generateTransform( node.userData.transformData ); + + node.applyMatrix4( transform ); + + } + + } ); + + var animations = new AnimationParser().parse(); + + // if all the models where already combined in a single group, just return that + if ( sceneGraph.children.length === 1 && sceneGraph.children[ 0 ].isGroup ) { + + sceneGraph.children[ 0 ].animations = animations; + sceneGraph = sceneGraph.children[ 0 ]; + + } + + sceneGraph.animations = animations; + + }, + + // parse nodes in FBXTree.Objects.Model + parseModels: function ( skeletons, geometryMap, materialMap ) { + + var modelMap = new Map(); + var modelNodes = fbxTree.Objects.Model; + + for ( var nodeID in modelNodes ) { + + var id = parseInt( nodeID ); + var node = modelNodes[ nodeID ]; + var relationships = connections.get( id ); + + var model = this.buildSkeleton( relationships, skeletons, id, node.attrName ); + + if ( ! model ) { + + switch ( node.attrType ) { + + case 'Camera': + model = this.createCamera( relationships ); + break; + case 'Light': + model = this.createLight( relationships ); + break; + case 'Mesh': + model = this.createMesh( relationships, geometryMap, materialMap ); + break; + case 'NurbsCurve': + model = this.createCurve( relationships, geometryMap ); + break; + case 'LimbNode': + case 'Root': + model = new Bone(); + break; + case 'Null': + default: + model = new Group(); + break; + + } + + model.name = node.attrName ? PropertyBinding.sanitizeNodeName( node.attrName ) : ''; + + model.ID = id; + + } + + this.getTransformData( model, node ); + modelMap.set( id, model ); + + } + + return modelMap; + + }, + + buildSkeleton: function ( relationships, skeletons, id, name ) { + + var bone = null; + + relationships.parents.forEach( function ( parent ) { + + for ( var ID in skeletons ) { + + var skeleton = skeletons[ ID ]; + + skeleton.rawBones.forEach( function ( rawBone, i ) { + + if ( rawBone.ID === parent.ID ) { + + var subBone = bone; + bone = new Bone(); + + bone.matrixWorld.copy( rawBone.transformLink ); + + // set name and id here - otherwise in cases where "subBone" is created it will not have a name / id + + bone.name = name ? PropertyBinding.sanitizeNodeName( name ) : ''; + bone.ID = id; + + skeleton.bones[ i ] = bone; + + // In cases where a bone is shared between multiple meshes + // duplicate the bone here and and it as a child of the first bone + if ( subBone !== null ) { + + bone.add( subBone ); + + } + + } + + } ); + + } + + } ); + + return bone; + + }, + + // create a PerspectiveCamera or OrthographicCamera + createCamera: function ( relationships ) { + + var model; + var cameraAttribute; + + relationships.children.forEach( function ( child ) { + + var attr = fbxTree.Objects.NodeAttribute[ child.ID ]; + + if ( attr !== undefined ) { + + cameraAttribute = attr; + + } + + } ); + + if ( cameraAttribute === undefined ) { + + model = new Object3D(); + + } else { + + var type = 0; + if ( cameraAttribute.CameraProjectionType !== undefined && cameraAttribute.CameraProjectionType.value === 1 ) { + + type = 1; + + } + + var nearClippingPlane = 1; + if ( cameraAttribute.NearPlane !== undefined ) { + + nearClippingPlane = cameraAttribute.NearPlane.value / 1000; + + } + + var farClippingPlane = 1000; + if ( cameraAttribute.FarPlane !== undefined ) { + + farClippingPlane = cameraAttribute.FarPlane.value / 1000; + + } + + + var width = window.innerWidth; + var height = window.innerHeight; + + if ( cameraAttribute.AspectWidth !== undefined && cameraAttribute.AspectHeight !== undefined ) { + + width = cameraAttribute.AspectWidth.value; + height = cameraAttribute.AspectHeight.value; + + } + + var aspect = width / height; + + var fov = 45; + if ( cameraAttribute.FieldOfView !== undefined ) { + + fov = cameraAttribute.FieldOfView.value; + + } + + var focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null; + + switch ( type ) { + + case 0: // Perspective + model = new PerspectiveCamera( fov, aspect, nearClippingPlane, farClippingPlane ); + if ( focalLength !== null ) model.setFocalLength( focalLength ); + break; + + case 1: // Orthographic + model = new OrthographicCamera( - width / 2, width / 2, height / 2, - height / 2, nearClippingPlane, farClippingPlane ); + break; + + default: + console.warn( 'THREE.FBXLoader: Unknown camera type ' + type + '.' ); + model = new Object3D(); + break; + + } + + } + + return model; + + }, + + // Create a DirectionalLight, PointLight or SpotLight + createLight: function ( relationships ) { + + var model; + var lightAttribute; + + relationships.children.forEach( function ( child ) { + + var attr = fbxTree.Objects.NodeAttribute[ child.ID ]; + + if ( attr !== undefined ) { + + lightAttribute = attr; + + } + + } ); + + if ( lightAttribute === undefined ) { + + model = new Object3D(); + + } else { + + var type; + + // LightType can be undefined for Point lights + if ( lightAttribute.LightType === undefined ) { + + type = 0; + + } else { + + type = lightAttribute.LightType.value; + + } + + var color = 0xffffff; + + if ( lightAttribute.Color !== undefined ) { + + color = new Color().fromArray( lightAttribute.Color.value ); + + } + + var intensity = ( lightAttribute.Intensity === undefined ) ? 1 : lightAttribute.Intensity.value / 100; + + // light disabled + if ( lightAttribute.CastLightOnObject !== undefined && lightAttribute.CastLightOnObject.value === 0 ) { + + intensity = 0; + + } + + var distance = 0; + if ( lightAttribute.FarAttenuationEnd !== undefined ) { + + if ( lightAttribute.EnableFarAttenuation !== undefined && lightAttribute.EnableFarAttenuation.value === 0 ) { + + distance = 0; + + } else { + + distance = lightAttribute.FarAttenuationEnd.value; + + } + + } + + // TODO: could this be calculated linearly from FarAttenuationStart to FarAttenuationEnd? + var decay = 1; + + switch ( type ) { + + case 0: // Point + model = new PointLight( color, intensity, distance, decay ); + break; + + case 1: // Directional + model = new DirectionalLight( color, intensity ); + break; + + case 2: // Spot + var angle = Math.PI / 3; + + if ( lightAttribute.InnerAngle !== undefined ) { + + angle = MathUtils.degToRad( lightAttribute.InnerAngle.value ); + + } + + var penumbra = 0; + if ( lightAttribute.OuterAngle !== undefined ) { + + // TODO: this is not correct - FBX calculates outer and inner angle in degrees + // with OuterAngle > InnerAngle && OuterAngle <= Math.PI + // while three.js uses a penumbra between (0, 1) to attenuate the inner angle + penumbra = MathUtils.degToRad( lightAttribute.OuterAngle.value ); + penumbra = Math.max( penumbra, 1 ); + + } + + model = new SpotLight( color, intensity, distance, angle, penumbra, decay ); + break; + + default: + console.warn( 'THREE.FBXLoader: Unknown light type ' + lightAttribute.LightType.value + ', defaulting to a PointLight.' ); + model = new PointLight( color, intensity ); + break; + + } + + if ( lightAttribute.CastShadows !== undefined && lightAttribute.CastShadows.value === 1 ) { + + model.castShadow = true; + + } + + } + + return model; + + }, + + createMesh: function ( relationships, geometryMap, materialMap ) { + + var model; + var geometry = null; + var material = null; + var materials = []; + + // get geometry and materials(s) from connections + relationships.children.forEach( function ( child ) { + + if ( geometryMap.has( child.ID ) ) { + + geometry = geometryMap.get( child.ID ); + + } + + if ( materialMap.has( child.ID ) ) { + + materials.push( materialMap.get( child.ID ) ); + + } + + } ); + + if ( materials.length > 1 ) { + + material = materials; + + } else if ( materials.length > 0 ) { + + material = materials[ 0 ]; + + } else { + + material = new MeshPhongMaterial( { color: 0xcccccc } ); + materials.push( material ); + + } + + if ( 'color' in geometry.attributes ) { + + materials.forEach( function ( material ) { + + material.vertexColors = true; + + } ); + + } + + if ( geometry.FBX_Deformer ) { + + materials.forEach( function ( material ) { + + material.skinning = true; + + } ); + + model = new SkinnedMesh( geometry, material ); + model.normalizeSkinWeights(); + + } else { + + model = new Mesh( geometry, material ); + + } + + return model; + + }, + + createCurve: function ( relationships, geometryMap ) { + + var geometry = relationships.children.reduce( function ( geo, child ) { + + if ( geometryMap.has( child.ID ) ) geo = geometryMap.get( child.ID ); + + return geo; + + }, null ); + + // FBX does not list materials for Nurbs lines, so we'll just put our own in here. + var material = new LineBasicMaterial( { color: 0x3300ff, linewidth: 1 } ); + return new Line( geometry, material ); + + }, + + // parse the model node for transform data + getTransformData: function ( model, modelNode ) { + + var transformData = {}; + + if ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value ); + + if ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value ); + else transformData.eulerOrder = 'ZYX'; + + if ( 'Lcl_Translation' in modelNode ) transformData.translation = modelNode.Lcl_Translation.value; + + if ( 'PreRotation' in modelNode ) transformData.preRotation = modelNode.PreRotation.value; + if ( 'Lcl_Rotation' in modelNode ) transformData.rotation = modelNode.Lcl_Rotation.value; + if ( 'PostRotation' in modelNode ) transformData.postRotation = modelNode.PostRotation.value; + + if ( 'Lcl_Scaling' in modelNode ) transformData.scale = modelNode.Lcl_Scaling.value; + + if ( 'ScalingOffset' in modelNode ) transformData.scalingOffset = modelNode.ScalingOffset.value; + if ( 'ScalingPivot' in modelNode ) transformData.scalingPivot = modelNode.ScalingPivot.value; + + if ( 'RotationOffset' in modelNode ) transformData.rotationOffset = modelNode.RotationOffset.value; + if ( 'RotationPivot' in modelNode ) transformData.rotationPivot = modelNode.RotationPivot.value; + + model.userData.transformData = transformData; + + }, + + setLookAtProperties: function ( model, modelNode ) { + + if ( 'LookAtProperty' in modelNode ) { + + var children = connections.get( model.ID ).children; + + children.forEach( function ( child ) { + + if ( child.relationship === 'LookAtProperty' ) { + + var lookAtTarget = fbxTree.Objects.Model[ child.ID ]; + + if ( 'Lcl_Translation' in lookAtTarget ) { + + var pos = lookAtTarget.Lcl_Translation.value; + + // DirectionalLight, SpotLight + if ( model.target !== undefined ) { + + model.target.position.fromArray( pos ); + sceneGraph.add( model.target ); + + } else { // Cameras and other Object3Ds + + model.lookAt( new Vector3().fromArray( pos ) ); + + } + + } + + } + + } ); + + } + + }, + + bindSkeleton: function ( skeletons, geometryMap, modelMap ) { + + var bindMatrices = this.parsePoseNodes(); + + for ( var ID in skeletons ) { + + var skeleton = skeletons[ ID ]; + + var parents = connections.get( parseInt( skeleton.ID ) ).parents; + + parents.forEach( function ( parent ) { + + if ( geometryMap.has( parent.ID ) ) { + + var geoID = parent.ID; + var geoRelationships = connections.get( geoID ); + + geoRelationships.parents.forEach( function ( geoConnParent ) { + + if ( modelMap.has( geoConnParent.ID ) ) { + + var model = modelMap.get( geoConnParent.ID ); + + model.bind( new Skeleton( skeleton.bones ), bindMatrices[ geoConnParent.ID ] ); + + } + + } ); + + } + + } ); + + } + + }, + + parsePoseNodes: function () { + + var bindMatrices = {}; + + if ( 'Pose' in fbxTree.Objects ) { + + var BindPoseNode = fbxTree.Objects.Pose; + + for ( var nodeID in BindPoseNode ) { + + if ( BindPoseNode[ nodeID ].attrType === 'BindPose' ) { + + var poseNodes = BindPoseNode[ nodeID ].PoseNode; + + if ( Array.isArray( poseNodes ) ) { + + poseNodes.forEach( function ( poseNode ) { + + bindMatrices[ poseNode.Node ] = new Matrix4().fromArray( poseNode.Matrix.a ); + + } ); + + } else { + + bindMatrices[ poseNodes.Node ] = new Matrix4().fromArray( poseNodes.Matrix.a ); + + } + + } + + } + + } + + return bindMatrices; + + }, + + // Parse ambient color in FBXTree.GlobalSettings - if it's not set to black (default), create an ambient light + createAmbientLight: function () { + + if ( 'GlobalSettings' in fbxTree && 'AmbientColor' in fbxTree.GlobalSettings ) { + + var ambientColor = fbxTree.GlobalSettings.AmbientColor.value; + var r = ambientColor[ 0 ]; + var g = ambientColor[ 1 ]; + var b = ambientColor[ 2 ]; + + if ( r !== 0 || g !== 0 || b !== 0 ) { + + var color = new Color( r, g, b ); + sceneGraph.add( new AmbientLight( color, 1 ) ); + + } + + } + + }, + + setupMorphMaterials: function () { + + var scope = this; + sceneGraph.traverse( function ( child ) { + + if ( child.isMesh ) { + + if ( child.geometry.morphAttributes.position && child.geometry.morphAttributes.position.length ) { + + if ( Array.isArray( child.material ) ) { + + child.material.forEach( function ( material, i ) { + + scope.setupMorphMaterial( child, material, i ); + + } ); + + } else { + + scope.setupMorphMaterial( child, child.material ); + + } + + } + + } + + } ); + + }, + + setupMorphMaterial: function ( child, material, index ) { + + var uuid = child.uuid; + var matUuid = material.uuid; + + // if a geometry has morph targets, it cannot share the material with other geometries + var sharedMat = false; + + sceneGraph.traverse( function ( node ) { + + if ( node.isMesh ) { + + if ( Array.isArray( node.material ) ) { + + node.material.forEach( function ( mat ) { + + if ( mat.uuid === matUuid && node.uuid !== uuid ) sharedMat = true; + + } ); + + } else if ( node.material.uuid === matUuid && node.uuid !== uuid ) sharedMat = true; + + } + + } ); + + if ( sharedMat === true ) { + + var clonedMat = material.clone(); + clonedMat.morphTargets = true; + + if ( index === undefined ) child.material = clonedMat; + else child.material[ index ] = clonedMat; + + } else material.morphTargets = true; + + } + + }; + + // parse Geometry data from FBXTree and return map of BufferGeometries + function GeometryParser() {} + + GeometryParser.prototype = { + + constructor: GeometryParser, + + // Parse nodes in FBXTree.Objects.Geometry + parse: function ( deformers ) { + + var geometryMap = new Map(); + + if ( 'Geometry' in fbxTree.Objects ) { + + var geoNodes = fbxTree.Objects.Geometry; + + for ( var nodeID in geoNodes ) { + + var relationships = connections.get( parseInt( nodeID ) ); + var geo = this.parseGeometry( relationships, geoNodes[ nodeID ], deformers ); + + geometryMap.set( parseInt( nodeID ), geo ); + + } + + } + + return geometryMap; + + }, + + // Parse single node in FBXTree.Objects.Geometry + parseGeometry: function ( relationships, geoNode, deformers ) { + + switch ( geoNode.attrType ) { + + case 'Mesh': + return this.parseMeshGeometry( relationships, geoNode, deformers ); + break; + + case 'NurbsCurve': + return this.parseNurbsGeometry( geoNode ); + break; + + } + + }, + + + // Parse single node mesh geometry in FBXTree.Objects.Geometry + parseMeshGeometry: function ( relationships, geoNode, deformers ) { + + var skeletons = deformers.skeletons; + var morphTargets = []; + + var modelNodes = relationships.parents.map( function ( parent ) { + + return fbxTree.Objects.Model[ parent.ID ]; + + } ); + + // don't create geometry if it is not associated with any models + if ( modelNodes.length === 0 ) return; + + var skeleton = relationships.children.reduce( function ( skeleton, child ) { + + if ( skeletons[ child.ID ] !== undefined ) skeleton = skeletons[ child.ID ]; + + return skeleton; + + }, null ); + + relationships.children.forEach( function ( child ) { + + if ( deformers.morphTargets[ child.ID ] !== undefined ) { + + morphTargets.push( deformers.morphTargets[ child.ID ] ); + + } + + } ); + + // Assume one model and get the preRotation from that + // if there is more than one model associated with the geometry this may cause problems + var modelNode = modelNodes[ 0 ]; + + var transformData = {}; + + if ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value ); + if ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value ); + + if ( 'GeometricTranslation' in modelNode ) transformData.translation = modelNode.GeometricTranslation.value; + if ( 'GeometricRotation' in modelNode ) transformData.rotation = modelNode.GeometricRotation.value; + if ( 'GeometricScaling' in modelNode ) transformData.scale = modelNode.GeometricScaling.value; + + var transform = generateTransform( transformData ); + + return this.genGeometry( geoNode, skeleton, morphTargets, transform ); + + }, + + // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry + genGeometry: function ( geoNode, skeleton, morphTargets, preTransform ) { + + var geo = new BufferGeometry(); + if ( geoNode.attrName ) geo.name = geoNode.attrName; + + var geoInfo = this.parseGeoNode( geoNode, skeleton ); + var buffers = this.genBuffers( geoInfo ); + + var positionAttribute = new Float32BufferAttribute( buffers.vertex, 3 ); + + positionAttribute.applyMatrix4( preTransform ); + + geo.setAttribute( 'position', positionAttribute ); + + if ( buffers.colors.length > 0 ) { + + geo.setAttribute( 'color', new Float32BufferAttribute( buffers.colors, 3 ) ); + + } + + if ( skeleton ) { + + geo.setAttribute( 'skinIndex', new Uint16BufferAttribute( buffers.weightsIndices, 4 ) ); + + geo.setAttribute( 'skinWeight', new Float32BufferAttribute( buffers.vertexWeights, 4 ) ); + + // used later to bind the skeleton to the model + geo.FBX_Deformer = skeleton; + + } + + if ( buffers.normal.length > 0 ) { + + var normalMatrix = new Matrix3().getNormalMatrix( preTransform ); + + var normalAttribute = new Float32BufferAttribute( buffers.normal, 3 ); + normalAttribute.applyNormalMatrix( normalMatrix ); + + geo.setAttribute( 'normal', normalAttribute ); + + } + + buffers.uvs.forEach( function ( uvBuffer, i ) { + + // subsequent uv buffers are called 'uv1', 'uv2', ... + var name = 'uv' + ( i + 1 ).toString(); + + // the first uv buffer is just called 'uv' + if ( i === 0 ) { + + name = 'uv'; + + } + + geo.setAttribute( name, new Float32BufferAttribute( buffers.uvs[ i ], 2 ) ); + + } ); + + if ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) { + + // Convert the material indices of each vertex into rendering groups on the geometry. + var prevMaterialIndex = buffers.materialIndex[ 0 ]; + var startIndex = 0; + + buffers.materialIndex.forEach( function ( currentIndex, i ) { + + if ( currentIndex !== prevMaterialIndex ) { + + geo.addGroup( startIndex, i - startIndex, prevMaterialIndex ); + + prevMaterialIndex = currentIndex; + startIndex = i; + + } + + } ); + + // the loop above doesn't add the last group, do that here. + if ( geo.groups.length > 0 ) { + + var lastGroup = geo.groups[ geo.groups.length - 1 ]; + var lastIndex = lastGroup.start + lastGroup.count; + + if ( lastIndex !== buffers.materialIndex.length ) { + + geo.addGroup( lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex ); + + } + + } + + // case where there are multiple materials but the whole geometry is only + // using one of them + if ( geo.groups.length === 0 ) { + + geo.addGroup( 0, buffers.materialIndex.length, buffers.materialIndex[ 0 ] ); + + } + + } + + this.addMorphTargets( geo, geoNode, morphTargets, preTransform ); + + return geo; + + }, + + parseGeoNode: function ( geoNode, skeleton ) { + + var geoInfo = {}; + + geoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : []; + geoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : []; + + if ( geoNode.LayerElementColor ) { + + geoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] ); + + } + + if ( geoNode.LayerElementMaterial ) { + + geoInfo.material = this.parseMaterialIndices( geoNode.LayerElementMaterial[ 0 ] ); + + } + + if ( geoNode.LayerElementNormal ) { + + geoInfo.normal = this.parseNormals( geoNode.LayerElementNormal[ 0 ] ); + + } + + if ( geoNode.LayerElementUV ) { + + geoInfo.uv = []; + + var i = 0; + while ( geoNode.LayerElementUV[ i ] ) { + + if ( geoNode.LayerElementUV[ i ].UV ) { + + geoInfo.uv.push( this.parseUVs( geoNode.LayerElementUV[ i ] ) ); + + } + + i ++; + + } + + } + + geoInfo.weightTable = {}; + + if ( skeleton !== null ) { + + geoInfo.skeleton = skeleton; + + skeleton.rawBones.forEach( function ( rawBone, i ) { + + // loop over the bone's vertex indices and weights + rawBone.indices.forEach( function ( index, j ) { + + if ( geoInfo.weightTable[ index ] === undefined ) geoInfo.weightTable[ index ] = []; + + geoInfo.weightTable[ index ].push( { + + id: i, + weight: rawBone.weights[ j ], + + } ); + + } ); + + } ); + + } + + return geoInfo; + + }, + + genBuffers: function ( geoInfo ) { + + var buffers = { + vertex: [], + normal: [], + colors: [], + uvs: [], + materialIndex: [], + vertexWeights: [], + weightsIndices: [], + }; + + var polygonIndex = 0; + var faceLength = 0; + var displayedWeightsWarning = false; + + // these will hold data for a single face + var facePositionIndexes = []; + var faceNormals = []; + var faceColors = []; + var faceUVs = []; + var faceWeights = []; + var faceWeightIndices = []; + + var scope = this; + geoInfo.vertexIndices.forEach( function ( vertexIndex, polygonVertexIndex ) { + + var endOfFace = false; + + // Face index and vertex index arrays are combined in a single array + // A cube with quad faces looks like this: + // PolygonVertexIndex: *24 { + // a: 0, 1, 3, -3, 2, 3, 5, -5, 4, 5, 7, -7, 6, 7, 1, -1, 1, 7, 5, -4, 6, 0, 2, -5 + // } + // Negative numbers mark the end of a face - first face here is 0, 1, 3, -3 + // to find index of last vertex bit shift the index: ^ - 1 + if ( vertexIndex < 0 ) { + + vertexIndex = vertexIndex ^ - 1; // equivalent to ( x * -1 ) - 1 + endOfFace = true; + + } + + var weightIndices = []; + var weights = []; + + facePositionIndexes.push( vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2 ); + + if ( geoInfo.color ) { + + var data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color ); + + faceColors.push( data[ 0 ], data[ 1 ], data[ 2 ] ); + + } + + if ( geoInfo.skeleton ) { + + if ( geoInfo.weightTable[ vertexIndex ] !== undefined ) { + + geoInfo.weightTable[ vertexIndex ].forEach( function ( wt ) { + + weights.push( wt.weight ); + weightIndices.push( wt.id ); + + } ); + + + } + + if ( weights.length > 4 ) { + + if ( ! displayedWeightsWarning ) { + + console.warn( 'THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.' ); + displayedWeightsWarning = true; + + } + + var wIndex = [ 0, 0, 0, 0 ]; + var Weight = [ 0, 0, 0, 0 ]; + + weights.forEach( function ( weight, weightIndex ) { + + var currentWeight = weight; + var currentIndex = weightIndices[ weightIndex ]; + + Weight.forEach( function ( comparedWeight, comparedWeightIndex, comparedWeightArray ) { + + if ( currentWeight > comparedWeight ) { + + comparedWeightArray[ comparedWeightIndex ] = currentWeight; + currentWeight = comparedWeight; + + var tmp = wIndex[ comparedWeightIndex ]; + wIndex[ comparedWeightIndex ] = currentIndex; + currentIndex = tmp; + + } + + } ); + + } ); + + weightIndices = wIndex; + weights = Weight; + + } + + // if the weight array is shorter than 4 pad with 0s + while ( weights.length < 4 ) { + + weights.push( 0 ); + weightIndices.push( 0 ); + + } + + for ( var i = 0; i < 4; ++ i ) { + + faceWeights.push( weights[ i ] ); + faceWeightIndices.push( weightIndices[ i ] ); + + } + + } + + if ( geoInfo.normal ) { + + var data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal ); + + faceNormals.push( data[ 0 ], data[ 1 ], data[ 2 ] ); + + } + + if ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) { + + var materialIndex = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material )[ 0 ]; + + } + + if ( geoInfo.uv ) { + + geoInfo.uv.forEach( function ( uv, i ) { + + var data = getData( polygonVertexIndex, polygonIndex, vertexIndex, uv ); + + if ( faceUVs[ i ] === undefined ) { + + faceUVs[ i ] = []; + + } + + faceUVs[ i ].push( data[ 0 ] ); + faceUVs[ i ].push( data[ 1 ] ); + + } ); + + } + + faceLength ++; + + if ( endOfFace ) { + + scope.genFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ); + + polygonIndex ++; + faceLength = 0; + + // reset arrays for the next face + facePositionIndexes = []; + faceNormals = []; + faceColors = []; + faceUVs = []; + faceWeights = []; + faceWeightIndices = []; + + } + + } ); + + return buffers; + + }, + + // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris + genFace: function ( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ) { + + for ( var i = 2; i < faceLength; i ++ ) { + + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 0 ] ] ); + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 1 ] ] ); + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 2 ] ] ); + + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 ] ] ); + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 + 1 ] ] ); + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 + 2 ] ] ); + + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 ] ] ); + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 + 1 ] ] ); + buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 + 2 ] ] ); + + if ( geoInfo.skeleton ) { + + buffers.vertexWeights.push( faceWeights[ 0 ] ); + buffers.vertexWeights.push( faceWeights[ 1 ] ); + buffers.vertexWeights.push( faceWeights[ 2 ] ); + buffers.vertexWeights.push( faceWeights[ 3 ] ); + + buffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 ] ); + buffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 1 ] ); + buffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 2 ] ); + buffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 3 ] ); + + buffers.vertexWeights.push( faceWeights[ i * 4 ] ); + buffers.vertexWeights.push( faceWeights[ i * 4 + 1 ] ); + buffers.vertexWeights.push( faceWeights[ i * 4 + 2 ] ); + buffers.vertexWeights.push( faceWeights[ i * 4 + 3 ] ); + + buffers.weightsIndices.push( faceWeightIndices[ 0 ] ); + buffers.weightsIndices.push( faceWeightIndices[ 1 ] ); + buffers.weightsIndices.push( faceWeightIndices[ 2 ] ); + buffers.weightsIndices.push( faceWeightIndices[ 3 ] ); + + buffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 ] ); + buffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 1 ] ); + buffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 2 ] ); + buffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 3 ] ); + + buffers.weightsIndices.push( faceWeightIndices[ i * 4 ] ); + buffers.weightsIndices.push( faceWeightIndices[ i * 4 + 1 ] ); + buffers.weightsIndices.push( faceWeightIndices[ i * 4 + 2 ] ); + buffers.weightsIndices.push( faceWeightIndices[ i * 4 + 3 ] ); + + } + + if ( geoInfo.color ) { + + buffers.colors.push( faceColors[ 0 ] ); + buffers.colors.push( faceColors[ 1 ] ); + buffers.colors.push( faceColors[ 2 ] ); + + buffers.colors.push( faceColors[ ( i - 1 ) * 3 ] ); + buffers.colors.push( faceColors[ ( i - 1 ) * 3 + 1 ] ); + buffers.colors.push( faceColors[ ( i - 1 ) * 3 + 2 ] ); + + buffers.colors.push( faceColors[ i * 3 ] ); + buffers.colors.push( faceColors[ i * 3 + 1 ] ); + buffers.colors.push( faceColors[ i * 3 + 2 ] ); + + } + + if ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) { + + buffers.materialIndex.push( materialIndex ); + buffers.materialIndex.push( materialIndex ); + buffers.materialIndex.push( materialIndex ); + + } + + if ( geoInfo.normal ) { + + buffers.normal.push( faceNormals[ 0 ] ); + buffers.normal.push( faceNormals[ 1 ] ); + buffers.normal.push( faceNormals[ 2 ] ); + + buffers.normal.push( faceNormals[ ( i - 1 ) * 3 ] ); + buffers.normal.push( faceNormals[ ( i - 1 ) * 3 + 1 ] ); + buffers.normal.push( faceNormals[ ( i - 1 ) * 3 + 2 ] ); + + buffers.normal.push( faceNormals[ i * 3 ] ); + buffers.normal.push( faceNormals[ i * 3 + 1 ] ); + buffers.normal.push( faceNormals[ i * 3 + 2 ] ); + + } + + if ( geoInfo.uv ) { + + geoInfo.uv.forEach( function ( uv, j ) { + + if ( buffers.uvs[ j ] === undefined ) buffers.uvs[ j ] = []; + + buffers.uvs[ j ].push( faceUVs[ j ][ 0 ] ); + buffers.uvs[ j ].push( faceUVs[ j ][ 1 ] ); + + buffers.uvs[ j ].push( faceUVs[ j ][ ( i - 1 ) * 2 ] ); + buffers.uvs[ j ].push( faceUVs[ j ][ ( i - 1 ) * 2 + 1 ] ); + + buffers.uvs[ j ].push( faceUVs[ j ][ i * 2 ] ); + buffers.uvs[ j ].push( faceUVs[ j ][ i * 2 + 1 ] ); + + } ); + + } + + } + + }, + + addMorphTargets: function ( parentGeo, parentGeoNode, morphTargets, preTransform ) { + + if ( morphTargets.length === 0 ) return; + + parentGeo.morphTargetsRelative = true; + + parentGeo.morphAttributes.position = []; + // parentGeo.morphAttributes.normal = []; // not implemented + + var scope = this; + morphTargets.forEach( function ( morphTarget ) { + + morphTarget.rawTargets.forEach( function ( rawTarget ) { + + var morphGeoNode = fbxTree.Objects.Geometry[ rawTarget.geoID ]; + + if ( morphGeoNode !== undefined ) { + + scope.genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name ); + + } + + } ); + + } ); + + }, + + // a morph geometry node is similar to a standard node, and the node is also contained + // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal + // and a special attribute Index defining which vertices of the original geometry are affected + // Normal and position attributes only have data for the vertices that are affected by the morph + genMorphGeometry: function ( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) { + + var vertexIndices = ( parentGeoNode.PolygonVertexIndex !== undefined ) ? parentGeoNode.PolygonVertexIndex.a : []; + + var morphPositionsSparse = ( morphGeoNode.Vertices !== undefined ) ? morphGeoNode.Vertices.a : []; + var indices = ( morphGeoNode.Indexes !== undefined ) ? morphGeoNode.Indexes.a : []; + + var length = parentGeo.attributes.position.count * 3; + var morphPositions = new Float32Array( length ); + + for ( var i = 0; i < indices.length; i ++ ) { + + var morphIndex = indices[ i ] * 3; + + morphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ]; + morphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ]; + morphPositions[ morphIndex + 2 ] = morphPositionsSparse[ i * 3 + 2 ]; + + } + + // TODO: add morph normal support + var morphGeoInfo = { + vertexIndices: vertexIndices, + vertexPositions: morphPositions, + + }; + + var morphBuffers = this.genBuffers( morphGeoInfo ); + + var positionAttribute = new Float32BufferAttribute( morphBuffers.vertex, 3 ); + positionAttribute.name = name || morphGeoNode.attrName; + + positionAttribute.applyMatrix4( preTransform ); + + parentGeo.morphAttributes.position.push( positionAttribute ); + + }, + + // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists + parseNormals: function ( NormalNode ) { + + var mappingType = NormalNode.MappingInformationType; + var referenceType = NormalNode.ReferenceInformationType; + var buffer = NormalNode.Normals.a; + var indexBuffer = []; + if ( referenceType === 'IndexToDirect' ) { + + if ( 'NormalIndex' in NormalNode ) { + + indexBuffer = NormalNode.NormalIndex.a; + + } else if ( 'NormalsIndex' in NormalNode ) { + + indexBuffer = NormalNode.NormalsIndex.a; + + } + + } + + return { + dataSize: 3, + buffer: buffer, + indices: indexBuffer, + mappingType: mappingType, + referenceType: referenceType + }; + + }, + + // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists + parseUVs: function ( UVNode ) { + + var mappingType = UVNode.MappingInformationType; + var referenceType = UVNode.ReferenceInformationType; + var buffer = UVNode.UV.a; + var indexBuffer = []; + if ( referenceType === 'IndexToDirect' ) { + + indexBuffer = UVNode.UVIndex.a; + + } + + return { + dataSize: 2, + buffer: buffer, + indices: indexBuffer, + mappingType: mappingType, + referenceType: referenceType + }; + + }, + + // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists + parseVertexColors: function ( ColorNode ) { + + var mappingType = ColorNode.MappingInformationType; + var referenceType = ColorNode.ReferenceInformationType; + var buffer = ColorNode.Colors.a; + var indexBuffer = []; + if ( referenceType === 'IndexToDirect' ) { + + indexBuffer = ColorNode.ColorIndex.a; + + } + + return { + dataSize: 4, + buffer: buffer, + indices: indexBuffer, + mappingType: mappingType, + referenceType: referenceType + }; + + }, + + // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists + parseMaterialIndices: function ( MaterialNode ) { + + var mappingType = MaterialNode.MappingInformationType; + var referenceType = MaterialNode.ReferenceInformationType; + + if ( mappingType === 'NoMappingInformation' ) { + + return { + dataSize: 1, + buffer: [ 0 ], + indices: [ 0 ], + mappingType: 'AllSame', + referenceType: referenceType + }; + + } + + var materialIndexBuffer = MaterialNode.Materials.a; + + // Since materials are stored as indices, there's a bit of a mismatch between FBX and what + // we expect.So we create an intermediate buffer that points to the index in the buffer, + // for conforming with the other functions we've written for other data. + var materialIndices = []; + + for ( var i = 0; i < materialIndexBuffer.length; ++ i ) { + + materialIndices.push( i ); + + } + + return { + dataSize: 1, + buffer: materialIndexBuffer, + indices: materialIndices, + mappingType: mappingType, + referenceType: referenceType + }; + + }, + + // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry + parseNurbsGeometry: function ( geoNode ) { + + if ( NURBSCurve === undefined ) { + + console.error( 'THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry.' ); + return new BufferGeometry(); + + } + + var order = parseInt( geoNode.Order ); + + if ( isNaN( order ) ) { + + console.error( 'THREE.FBXLoader: Invalid Order %s given for geometry ID: %s', geoNode.Order, geoNode.id ); + return new BufferGeometry(); + + } + + var degree = order - 1; + + var knots = geoNode.KnotVector.a; + var controlPoints = []; + var pointsValues = geoNode.Points.a; + + for ( var i = 0, l = pointsValues.length; i < l; i += 4 ) { + + controlPoints.push( new Vector4().fromArray( pointsValues, i ) ); + + } + + var startKnot, endKnot; + + if ( geoNode.Form === 'Closed' ) { + + controlPoints.push( controlPoints[ 0 ] ); + + } else if ( geoNode.Form === 'Periodic' ) { + + startKnot = degree; + endKnot = knots.length - 1 - startKnot; + + for ( var i = 0; i < degree; ++ i ) { + + controlPoints.push( controlPoints[ i ] ); + + } + + } + + var curve = new NURBSCurve( degree, knots, controlPoints, startKnot, endKnot ); + var vertices = curve.getPoints( controlPoints.length * 7 ); + + var positions = new Float32Array( vertices.length * 3 ); + + vertices.forEach( function ( vertex, i ) { + + vertex.toArray( positions, i * 3 ); + + } ); + + var geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) ); + + return geometry; + + }, + + }; + + // parse animation data from FBXTree + function AnimationParser() {} + + AnimationParser.prototype = { + + constructor: AnimationParser, + + // take raw animation clips and turn them into three.js animation clips + parse: function () { + + var animationClips = []; + + var rawClips = this.parseClips(); + + if ( rawClips !== undefined ) { + + for ( var key in rawClips ) { + + var rawClip = rawClips[ key ]; + + var clip = this.addClip( rawClip ); + + animationClips.push( clip ); + + } + + } + + return animationClips; + + }, + + parseClips: function () { + + // since the actual transformation data is stored in FBXTree.Objects.AnimationCurve, + // if this is undefined we can safely assume there are no animations + if ( fbxTree.Objects.AnimationCurve === undefined ) return undefined; + + var curveNodesMap = this.parseAnimationCurveNodes(); + + this.parseAnimationCurves( curveNodesMap ); + + var layersMap = this.parseAnimationLayers( curveNodesMap ); + var rawClips = this.parseAnimStacks( layersMap ); + + return rawClips; + + }, + + // parse nodes in FBXTree.Objects.AnimationCurveNode + // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation ) + // and is referenced by an AnimationLayer + parseAnimationCurveNodes: function () { + + var rawCurveNodes = fbxTree.Objects.AnimationCurveNode; + + var curveNodesMap = new Map(); + + for ( var nodeID in rawCurveNodes ) { + + var rawCurveNode = rawCurveNodes[ nodeID ]; + + if ( rawCurveNode.attrName.match( /S|R|T|DeformPercent/ ) !== null ) { + + var curveNode = { + + id: rawCurveNode.id, + attr: rawCurveNode.attrName, + curves: {}, + + }; + + curveNodesMap.set( curveNode.id, curveNode ); + + } + + } + + return curveNodesMap; + + }, + + // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to + // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated + // axis ( e.g. times and values of x rotation) + parseAnimationCurves: function ( curveNodesMap ) { + + var rawCurves = fbxTree.Objects.AnimationCurve; + + // TODO: Many values are identical up to roundoff error, but won't be optimised + // e.g. position times: [0, 0.4, 0. 8] + // position values: [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.235384487103147e-7, 93.67520904541016, -0.9982695579528809] + // clearly, this should be optimised to + // times: [0], positions [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809] + // this shows up in nearly every FBX file, and generally time array is length > 100 + + for ( var nodeID in rawCurves ) { + + var animationCurve = { + + id: rawCurves[ nodeID ].id, + times: rawCurves[ nodeID ].KeyTime.a.map( convertFBXTimeToSeconds ), + values: rawCurves[ nodeID ].KeyValueFloat.a, + + }; + + var relationships = connections.get( animationCurve.id ); + + if ( relationships !== undefined ) { + + var animationCurveID = relationships.parents[ 0 ].ID; + var animationCurveRelationship = relationships.parents[ 0 ].relationship; + + if ( animationCurveRelationship.match( /X/ ) ) { + + curveNodesMap.get( animationCurveID ).curves[ 'x' ] = animationCurve; + + } else if ( animationCurveRelationship.match( /Y/ ) ) { + + curveNodesMap.get( animationCurveID ).curves[ 'y' ] = animationCurve; + + } else if ( animationCurveRelationship.match( /Z/ ) ) { + + curveNodesMap.get( animationCurveID ).curves[ 'z' ] = animationCurve; + + } else if ( animationCurveRelationship.match( /d|DeformPercent/ ) && curveNodesMap.has( animationCurveID ) ) { + + curveNodesMap.get( animationCurveID ).curves[ 'morph' ] = animationCurve; + + } + + } + + } + + }, + + // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references + // to various AnimationCurveNodes and is referenced by an AnimationStack node + // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack + parseAnimationLayers: function ( curveNodesMap ) { + + var rawLayers = fbxTree.Objects.AnimationLayer; + + var layersMap = new Map(); + + for ( var nodeID in rawLayers ) { + + var layerCurveNodes = []; + + var connection = connections.get( parseInt( nodeID ) ); + + if ( connection !== undefined ) { + + // all the animationCurveNodes used in the layer + var children = connection.children; + + children.forEach( function ( child, i ) { + + if ( curveNodesMap.has( child.ID ) ) { + + var curveNode = curveNodesMap.get( child.ID ); + + // check that the curves are defined for at least one axis, otherwise ignore the curveNode + if ( curveNode.curves.x !== undefined || curveNode.curves.y !== undefined || curveNode.curves.z !== undefined ) { + + if ( layerCurveNodes[ i ] === undefined ) { + + var modelID = connections.get( child.ID ).parents.filter( function ( parent ) { + + return parent.relationship !== undefined; + + } )[ 0 ].ID; + + if ( modelID !== undefined ) { + + var rawModel = fbxTree.Objects.Model[ modelID.toString() ]; + + if ( rawModel === undefined ) { + + console.warn( 'THREE.FBXLoader: Encountered a unused curve.', child ); + return; + + } + + var node = { + + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '', + ID: rawModel.id, + initialPosition: [ 0, 0, 0 ], + initialRotation: [ 0, 0, 0 ], + initialScale: [ 1, 1, 1 ], + + }; + + sceneGraph.traverse( function ( child ) { + + if ( child.ID === rawModel.id ) { + + node.transform = child.matrix; + + if ( child.userData.transformData ) node.eulerOrder = child.userData.transformData.eulerOrder; + + } + + } ); + + if ( ! node.transform ) node.transform = new Matrix4(); + + // if the animated model is pre rotated, we'll have to apply the pre rotations to every + // animation value as well + if ( 'PreRotation' in rawModel ) node.preRotation = rawModel.PreRotation.value; + if ( 'PostRotation' in rawModel ) node.postRotation = rawModel.PostRotation.value; + + layerCurveNodes[ i ] = node; + + } + + } + + if ( layerCurveNodes[ i ] ) layerCurveNodes[ i ][ curveNode.attr ] = curveNode; + + } else if ( curveNode.curves.morph !== undefined ) { + + if ( layerCurveNodes[ i ] === undefined ) { + + var deformerID = connections.get( child.ID ).parents.filter( function ( parent ) { + + return parent.relationship !== undefined; + + } )[ 0 ].ID; + + var morpherID = connections.get( deformerID ).parents[ 0 ].ID; + var geoID = connections.get( morpherID ).parents[ 0 ].ID; + + // assuming geometry is not used in more than one model + var modelID = connections.get( geoID ).parents[ 0 ].ID; + + var rawModel = fbxTree.Objects.Model[ modelID ]; + + var node = { + + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '', + morphName: fbxTree.Objects.Deformer[ deformerID ].attrName, + + }; + + layerCurveNodes[ i ] = node; + + } + + layerCurveNodes[ i ][ curveNode.attr ] = curveNode; + + } + + } + + } ); + + layersMap.set( parseInt( nodeID ), layerCurveNodes ); + + } + + } + + return layersMap; + + }, + + // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation + // hierarchy. Each Stack node will be used to create a AnimationClip + parseAnimStacks: function ( layersMap ) { + + var rawStacks = fbxTree.Objects.AnimationStack; + + // connect the stacks (clips) up to the layers + var rawClips = {}; + + for ( var nodeID in rawStacks ) { + + var children = connections.get( parseInt( nodeID ) ).children; + + if ( children.length > 1 ) { + + // it seems like stacks will always be associated with a single layer. But just in case there are files + // where there are multiple layers per stack, we'll display a warning + console.warn( 'THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.' ); + + } + + var layer = layersMap.get( children[ 0 ].ID ); + + rawClips[ nodeID ] = { + + name: rawStacks[ nodeID ].attrName, + layer: layer, + + }; + + } + + return rawClips; + + }, + + addClip: function ( rawClip ) { + + var tracks = []; + + var scope = this; + rawClip.layer.forEach( function ( rawTracks ) { + + tracks = tracks.concat( scope.generateTracks( rawTracks ) ); + + } ); + + return new AnimationClip( rawClip.name, - 1, tracks ); + + }, + + generateTracks: function ( rawTracks ) { + + var tracks = []; + + var initialPosition = new Vector3(); + var initialRotation = new Quaternion(); + var initialScale = new Vector3(); + + if ( rawTracks.transform ) rawTracks.transform.decompose( initialPosition, initialRotation, initialScale ); + + initialPosition = initialPosition.toArray(); + initialRotation = new Euler().setFromQuaternion( initialRotation, rawTracks.eulerOrder ).toArray(); + initialScale = initialScale.toArray(); + + if ( rawTracks.T !== undefined && Object.keys( rawTracks.T.curves ).length > 0 ) { + + var positionTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.T.curves, initialPosition, 'position' ); + if ( positionTrack !== undefined ) tracks.push( positionTrack ); + + } + + if ( rawTracks.R !== undefined && Object.keys( rawTracks.R.curves ).length > 0 ) { + + var rotationTrack = this.generateRotationTrack( rawTracks.modelName, rawTracks.R.curves, initialRotation, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder ); + if ( rotationTrack !== undefined ) tracks.push( rotationTrack ); + + } + + if ( rawTracks.S !== undefined && Object.keys( rawTracks.S.curves ).length > 0 ) { + + var scaleTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.S.curves, initialScale, 'scale' ); + if ( scaleTrack !== undefined ) tracks.push( scaleTrack ); + + } + + if ( rawTracks.DeformPercent !== undefined ) { + + var morphTrack = this.generateMorphTrack( rawTracks ); + if ( morphTrack !== undefined ) tracks.push( morphTrack ); + + } + + return tracks; + + }, + + generateVectorTrack: function ( modelName, curves, initialValue, type ) { + + var times = this.getTimesForAllAxes( curves ); + var values = this.getKeyframeTrackValues( times, curves, initialValue ); + + return new VectorKeyframeTrack( modelName + '.' + type, times, values ); + + }, + + generateRotationTrack: function ( modelName, curves, initialValue, preRotation, postRotation, eulerOrder ) { + + if ( curves.x !== undefined ) { + + this.interpolateRotations( curves.x ); + curves.x.values = curves.x.values.map( MathUtils.degToRad ); + + } + + if ( curves.y !== undefined ) { + + this.interpolateRotations( curves.y ); + curves.y.values = curves.y.values.map( MathUtils.degToRad ); + + } + + if ( curves.z !== undefined ) { + + this.interpolateRotations( curves.z ); + curves.z.values = curves.z.values.map( MathUtils.degToRad ); + + } + + var times = this.getTimesForAllAxes( curves ); + var values = this.getKeyframeTrackValues( times, curves, initialValue ); + + if ( preRotation !== undefined ) { + + preRotation = preRotation.map( MathUtils.degToRad ); + preRotation.push( eulerOrder ); + + preRotation = new Euler().fromArray( preRotation ); + preRotation = new Quaternion().setFromEuler( preRotation ); + + } + + if ( postRotation !== undefined ) { + + postRotation = postRotation.map( MathUtils.degToRad ); + postRotation.push( eulerOrder ); + + postRotation = new Euler().fromArray( postRotation ); + postRotation = new Quaternion().setFromEuler( postRotation ).invert(); + + } + + var quaternion = new Quaternion(); + var euler = new Euler(); + + var quaternionValues = []; + + for ( var i = 0; i < values.length; i += 3 ) { + + euler.set( values[ i ], values[ i + 1 ], values[ i + 2 ], eulerOrder ); + + quaternion.setFromEuler( euler ); + + if ( preRotation !== undefined ) quaternion.premultiply( preRotation ); + if ( postRotation !== undefined ) quaternion.multiply( postRotation ); + + quaternion.toArray( quaternionValues, ( i / 3 ) * 4 ); + + } + + return new QuaternionKeyframeTrack( modelName + '.quaternion', times, quaternionValues ); + + }, + + generateMorphTrack: function ( rawTracks ) { + + var curves = rawTracks.DeformPercent.curves.morph; + var values = curves.values.map( function ( val ) { + + return val / 100; + + } ); + + var morphNum = sceneGraph.getObjectByName( rawTracks.modelName ).morphTargetDictionary[ rawTracks.morphName ]; + + return new NumberKeyframeTrack( rawTracks.modelName + '.morphTargetInfluences[' + morphNum + ']', curves.times, values ); + + }, + + // For all animated objects, times are defined separately for each axis + // Here we'll combine the times into one sorted array without duplicates + getTimesForAllAxes: function ( curves ) { + + var times = []; + + // first join together the times for each axis, if defined + if ( curves.x !== undefined ) times = times.concat( curves.x.times ); + if ( curves.y !== undefined ) times = times.concat( curves.y.times ); + if ( curves.z !== undefined ) times = times.concat( curves.z.times ); + + // then sort them + times = times.sort( function ( a, b ) { + + return a - b; + + } ); + + // and remove duplicates + if ( times.length > 1 ) { + + var targetIndex = 1; + var lastValue = times[ 0 ]; + for ( var i = 1; i < times.length; i ++ ) { + + var currentValue = times[ i ]; + if ( currentValue !== lastValue ) { + + times[ targetIndex ] = currentValue; + lastValue = currentValue; + targetIndex ++; + + } + + } + + times = times.slice( 0, targetIndex ); + + } + + return times; + + }, + + getKeyframeTrackValues: function ( times, curves, initialValue ) { + + var prevValue = initialValue; + + var values = []; + + var xIndex = - 1; + var yIndex = - 1; + var zIndex = - 1; + + times.forEach( function ( time ) { + + if ( curves.x ) xIndex = curves.x.times.indexOf( time ); + if ( curves.y ) yIndex = curves.y.times.indexOf( time ); + if ( curves.z ) zIndex = curves.z.times.indexOf( time ); + + // if there is an x value defined for this frame, use that + if ( xIndex !== - 1 ) { + + var xValue = curves.x.values[ xIndex ]; + values.push( xValue ); + prevValue[ 0 ] = xValue; + + } else { + + // otherwise use the x value from the previous frame + values.push( prevValue[ 0 ] ); + + } + + if ( yIndex !== - 1 ) { + + var yValue = curves.y.values[ yIndex ]; + values.push( yValue ); + prevValue[ 1 ] = yValue; + + } else { + + values.push( prevValue[ 1 ] ); + + } + + if ( zIndex !== - 1 ) { + + var zValue = curves.z.values[ zIndex ]; + values.push( zValue ); + prevValue[ 2 ] = zValue; + + } else { + + values.push( prevValue[ 2 ] ); + + } + + } ); + + return values; + + }, + + // Rotations are defined as Euler angles which can have values of any size + // These will be converted to quaternions which don't support values greater than + // PI, so we'll interpolate large rotations + interpolateRotations: function ( curve ) { + + for ( var i = 1; i < curve.values.length; i ++ ) { + + var initialValue = curve.values[ i - 1 ]; + var valuesSpan = curve.values[ i ] - initialValue; + + var absoluteSpan = Math.abs( valuesSpan ); + + if ( absoluteSpan >= 180 ) { + + var numSubIntervals = absoluteSpan / 180; + + var step = valuesSpan / numSubIntervals; + var nextValue = initialValue + step; + + var initialTime = curve.times[ i - 1 ]; + var timeSpan = curve.times[ i ] - initialTime; + var interval = timeSpan / numSubIntervals; + var nextTime = initialTime + interval; + + var interpolatedTimes = []; + var interpolatedValues = []; + + while ( nextTime < curve.times[ i ] ) { + + interpolatedTimes.push( nextTime ); + nextTime += interval; + + interpolatedValues.push( nextValue ); + nextValue += step; + + } + + curve.times = inject( curve.times, i, interpolatedTimes ); + curve.values = inject( curve.values, i, interpolatedValues ); + + } + + } + + }, + + }; + + // parse an FBX file in ASCII format + function TextParser() {} + + TextParser.prototype = { + + constructor: TextParser, + + getPrevNode: function () { + + return this.nodeStack[ this.currentIndent - 2 ]; + + }, + + getCurrentNode: function () { + + return this.nodeStack[ this.currentIndent - 1 ]; + + }, + + getCurrentProp: function () { + + return this.currentProp; + + }, + + pushStack: function ( node ) { + + this.nodeStack.push( node ); + this.currentIndent += 1; + + }, + + popStack: function () { + + this.nodeStack.pop(); + this.currentIndent -= 1; + + }, + + setCurrentProp: function ( val, name ) { + + this.currentProp = val; + this.currentPropName = name; + + }, + + parse: function ( text ) { + + this.currentIndent = 0; + + this.allNodes = new FBXTree(); + this.nodeStack = []; + this.currentProp = []; + this.currentPropName = ''; + + var scope = this; + + var split = text.split( /[\r\n]+/ ); + + split.forEach( function ( line, i ) { + + var matchComment = line.match( /^[\s\t]*;/ ); + var matchEmpty = line.match( /^[\s\t]*$/ ); + + if ( matchComment || matchEmpty ) return; + + var matchBeginning = line.match( '^\\t{' + scope.currentIndent + '}(\\w+):(.*){', '' ); + var matchProperty = line.match( '^\\t{' + ( scope.currentIndent ) + '}(\\w+):[\\s\\t\\r\\n](.*)' ); + var matchEnd = line.match( '^\\t{' + ( scope.currentIndent - 1 ) + '}}' ); + + if ( matchBeginning ) { + + scope.parseNodeBegin( line, matchBeginning ); + + } else if ( matchProperty ) { + + scope.parseNodeProperty( line, matchProperty, split[ ++ i ] ); + + } else if ( matchEnd ) { + + scope.popStack(); + + } else if ( line.match( /^[^\s\t}]/ ) ) { + + // large arrays are split over multiple lines terminated with a ',' character + // if this is encountered the line needs to be joined to the previous line + scope.parseNodePropertyContinued( line ); + + } + + } ); + + return this.allNodes; + + }, + + parseNodeBegin: function ( line, property ) { + + var nodeName = property[ 1 ].trim().replace( /^"/, '' ).replace( /"$/, '' ); + + var nodeAttrs = property[ 2 ].split( ',' ).map( function ( attr ) { + + return attr.trim().replace( /^"/, '' ).replace( /"$/, '' ); + + } ); + + var node = { name: nodeName }; + var attrs = this.parseNodeAttr( nodeAttrs ); + + var currentNode = this.getCurrentNode(); + + // a top node + if ( this.currentIndent === 0 ) { + + this.allNodes.add( nodeName, node ); + + } else { // a subnode + + // if the subnode already exists, append it + if ( nodeName in currentNode ) { + + // special case Pose needs PoseNodes as an array + if ( nodeName === 'PoseNode' ) { + + currentNode.PoseNode.push( node ); + + } else if ( currentNode[ nodeName ].id !== undefined ) { + + currentNode[ nodeName ] = {}; + currentNode[ nodeName ][ currentNode[ nodeName ].id ] = currentNode[ nodeName ]; + + } + + if ( attrs.id !== '' ) currentNode[ nodeName ][ attrs.id ] = node; + + } else if ( typeof attrs.id === 'number' ) { + + currentNode[ nodeName ] = {}; + currentNode[ nodeName ][ attrs.id ] = node; + + } else if ( nodeName !== 'Properties70' ) { + + if ( nodeName === 'PoseNode' ) currentNode[ nodeName ] = [ node ]; + else currentNode[ nodeName ] = node; + + } + + } + + if ( typeof attrs.id === 'number' ) node.id = attrs.id; + if ( attrs.name !== '' ) node.attrName = attrs.name; + if ( attrs.type !== '' ) node.attrType = attrs.type; + + this.pushStack( node ); + + }, + + parseNodeAttr: function ( attrs ) { + + var id = attrs[ 0 ]; + + if ( attrs[ 0 ] !== '' ) { + + id = parseInt( attrs[ 0 ] ); + + if ( isNaN( id ) ) { + + id = attrs[ 0 ]; + + } + + } + + var name = '', type = ''; + + if ( attrs.length > 1 ) { + + name = attrs[ 1 ].replace( /^(\w+)::/, '' ); + type = attrs[ 2 ]; + + } + + return { id: id, name: name, type: type }; + + }, + + parseNodeProperty: function ( line, property, contentLine ) { + + var propName = property[ 1 ].replace( /^"/, '' ).replace( /"$/, '' ).trim(); + var propValue = property[ 2 ].replace( /^"/, '' ).replace( /"$/, '' ).trim(); + + // for special case: base64 image data follows "Content: ," line + // Content: , + // "/9j/4RDaRXhpZgAATU0A..." + if ( propName === 'Content' && propValue === ',' ) { + + propValue = contentLine.replace( /"/g, '' ).replace( /,$/, '' ).trim(); + + } + + var currentNode = this.getCurrentNode(); + var parentName = currentNode.name; + + if ( parentName === 'Properties70' ) { + + this.parseNodeSpecialProperty( line, propName, propValue ); + return; + + } + + // Connections + if ( propName === 'C' ) { + + var connProps = propValue.split( ',' ).slice( 1 ); + var from = parseInt( connProps[ 0 ] ); + var to = parseInt( connProps[ 1 ] ); + + var rest = propValue.split( ',' ).slice( 3 ); + + rest = rest.map( function ( elem ) { + + return elem.trim().replace( /^"/, '' ); + + } ); + + propName = 'connections'; + propValue = [ from, to ]; + append( propValue, rest ); + + if ( currentNode[ propName ] === undefined ) { + + currentNode[ propName ] = []; + + } + + } + + // Node + if ( propName === 'Node' ) currentNode.id = propValue; + + // connections + if ( propName in currentNode && Array.isArray( currentNode[ propName ] ) ) { + + currentNode[ propName ].push( propValue ); + + } else { + + if ( propName !== 'a' ) currentNode[ propName ] = propValue; + else currentNode.a = propValue; + + } + + this.setCurrentProp( currentNode, propName ); + + // convert string to array, unless it ends in ',' in which case more will be added to it + if ( propName === 'a' && propValue.slice( - 1 ) !== ',' ) { + + currentNode.a = parseNumberArray( propValue ); + + } + + }, + + parseNodePropertyContinued: function ( line ) { + + var currentNode = this.getCurrentNode(); + + currentNode.a += line; + + // if the line doesn't end in ',' we have reached the end of the property value + // so convert the string to an array + if ( line.slice( - 1 ) !== ',' ) { + + currentNode.a = parseNumberArray( currentNode.a ); + + } + + }, + + // parse "Property70" + parseNodeSpecialProperty: function ( line, propName, propValue ) { + + // split this + // P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1 + // into array like below + // ["Lcl Scaling", "Lcl Scaling", "", "A", "1,1,1" ] + var props = propValue.split( '",' ).map( function ( prop ) { + + return prop.trim().replace( /^\"/, '' ).replace( /\s/, '_' ); + + } ); + + var innerPropName = props[ 0 ]; + var innerPropType1 = props[ 1 ]; + var innerPropType2 = props[ 2 ]; + var innerPropFlag = props[ 3 ]; + var innerPropValue = props[ 4 ]; + + // cast values where needed, otherwise leave as strings + switch ( innerPropType1 ) { + + case 'int': + case 'enum': + case 'bool': + case 'ULongLong': + case 'double': + case 'Number': + case 'FieldOfView': + innerPropValue = parseFloat( innerPropValue ); + break; + + case 'Color': + case 'ColorRGB': + case 'Vector3D': + case 'Lcl_Translation': + case 'Lcl_Rotation': + case 'Lcl_Scaling': + innerPropValue = parseNumberArray( innerPropValue ); + break; + + } + + // CAUTION: these props must append to parent's parent + this.getPrevNode()[ innerPropName ] = { + + 'type': innerPropType1, + 'type2': innerPropType2, + 'flag': innerPropFlag, + 'value': innerPropValue + + }; + + this.setCurrentProp( this.getPrevNode(), innerPropName ); + + }, + + }; + + // Parse an FBX file in Binary format + function BinaryParser() {} + + BinaryParser.prototype = { + + constructor: BinaryParser, + + parse: function ( buffer ) { + + var reader = new BinaryReader( buffer ); + reader.skip( 23 ); // skip magic 23 bytes + + var version = reader.getUint32(); + + if ( version < 6400 ) { + + throw new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + version ); + + } + + var allNodes = new FBXTree(); + + while ( ! this.endOfContent( reader ) ) { + + var node = this.parseNode( reader, version ); + if ( node !== null ) allNodes.add( node.name, node ); + + } + + return allNodes; + + }, + + // Check if reader has reached the end of content. + endOfContent: function ( reader ) { + + // footer size: 160bytes + 16-byte alignment padding + // - 16bytes: magic + // - padding til 16-byte alignment (at least 1byte?) + // (seems like some exporters embed fixed 15 or 16bytes?) + // - 4bytes: magic + // - 4bytes: version + // - 120bytes: zero + // - 16bytes: magic + if ( reader.size() % 16 === 0 ) { + + return ( ( reader.getOffset() + 160 + 16 ) & ~ 0xf ) >= reader.size(); + + } else { + + return reader.getOffset() + 160 + 16 >= reader.size(); + + } + + }, + + // recursively parse nodes until the end of the file is reached + parseNode: function ( reader, version ) { + + var node = {}; + + // The first three data sizes depends on version. + var endOffset = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); + var numProperties = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); + + ( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); // the returned propertyListLen is not used + + var nameLen = reader.getUint8(); + var name = reader.getString( nameLen ); + + // Regards this node as NULL-record if endOffset is zero + if ( endOffset === 0 ) return null; + + var propertyList = []; + + for ( var i = 0; i < numProperties; i ++ ) { + + propertyList.push( this.parseProperty( reader ) ); + + } + + // Regards the first three elements in propertyList as id, attrName, and attrType + var id = propertyList.length > 0 ? propertyList[ 0 ] : ''; + var attrName = propertyList.length > 1 ? propertyList[ 1 ] : ''; + var attrType = propertyList.length > 2 ? propertyList[ 2 ] : ''; + + // check if this node represents just a single property + // like (name, 0) set or (name2, [0, 1, 2]) set of {name: 0, name2: [0, 1, 2]} + node.singleProperty = ( numProperties === 1 && reader.getOffset() === endOffset ) ? true : false; + + while ( endOffset > reader.getOffset() ) { + + var subNode = this.parseNode( reader, version ); + + if ( subNode !== null ) this.parseSubNode( name, node, subNode ); + + } + + node.propertyList = propertyList; // raw property list used by parent + + if ( typeof id === 'number' ) node.id = id; + if ( attrName !== '' ) node.attrName = attrName; + if ( attrType !== '' ) node.attrType = attrType; + if ( name !== '' ) node.name = name; + + return node; + + }, + + parseSubNode: function ( name, node, subNode ) { + + // special case: child node is single property + if ( subNode.singleProperty === true ) { + + var value = subNode.propertyList[ 0 ]; + + if ( Array.isArray( value ) ) { + + node[ subNode.name ] = subNode; + + subNode.a = value; + + } else { + + node[ subNode.name ] = value; + + } + + } else if ( name === 'Connections' && subNode.name === 'C' ) { + + var array = []; + + subNode.propertyList.forEach( function ( property, i ) { + + // first Connection is FBX type (OO, OP, etc.). We'll discard these + if ( i !== 0 ) array.push( property ); + + } ); + + if ( node.connections === undefined ) { + + node.connections = []; + + } + + node.connections.push( array ); + + } else if ( subNode.name === 'Properties70' ) { + + var keys = Object.keys( subNode ); + + keys.forEach( function ( key ) { + + node[ key ] = subNode[ key ]; + + } ); + + } else if ( name === 'Properties70' && subNode.name === 'P' ) { + + var innerPropName = subNode.propertyList[ 0 ]; + var innerPropType1 = subNode.propertyList[ 1 ]; + var innerPropType2 = subNode.propertyList[ 2 ]; + var innerPropFlag = subNode.propertyList[ 3 ]; + var innerPropValue; + + if ( innerPropName.indexOf( 'Lcl ' ) === 0 ) innerPropName = innerPropName.replace( 'Lcl ', 'Lcl_' ); + if ( innerPropType1.indexOf( 'Lcl ' ) === 0 ) innerPropType1 = innerPropType1.replace( 'Lcl ', 'Lcl_' ); + + if ( innerPropType1 === 'Color' || innerPropType1 === 'ColorRGB' || innerPropType1 === 'Vector' || innerPropType1 === 'Vector3D' || innerPropType1.indexOf( 'Lcl_' ) === 0 ) { + + innerPropValue = [ + subNode.propertyList[ 4 ], + subNode.propertyList[ 5 ], + subNode.propertyList[ 6 ] + ]; + + } else { + + innerPropValue = subNode.propertyList[ 4 ]; + + } + + // this will be copied to parent, see above + node[ innerPropName ] = { + + 'type': innerPropType1, + 'type2': innerPropType2, + 'flag': innerPropFlag, + 'value': innerPropValue + + }; + + } else if ( node[ subNode.name ] === undefined ) { + + if ( typeof subNode.id === 'number' ) { + + node[ subNode.name ] = {}; + node[ subNode.name ][ subNode.id ] = subNode; + + } else { + + node[ subNode.name ] = subNode; + + } + + } else { + + if ( subNode.name === 'PoseNode' ) { + + if ( ! Array.isArray( node[ subNode.name ] ) ) { + + node[ subNode.name ] = [ node[ subNode.name ] ]; + + } + + node[ subNode.name ].push( subNode ); + + } else if ( node[ subNode.name ][ subNode.id ] === undefined ) { + + node[ subNode.name ][ subNode.id ] = subNode; + + } + + } + + }, + + parseProperty: function ( reader ) { + + var type = reader.getString( 1 ); + + switch ( type ) { + + case 'C': + return reader.getBoolean(); + + case 'D': + return reader.getFloat64(); + + case 'F': + return reader.getFloat32(); + + case 'I': + return reader.getInt32(); + + case 'L': + return reader.getInt64(); + + case 'R': + var length = reader.getUint32(); + return reader.getArrayBuffer( length ); + + case 'S': + var length = reader.getUint32(); + return reader.getString( length ); + + case 'Y': + return reader.getInt16(); + + case 'b': + case 'c': + case 'd': + case 'f': + case 'i': + case 'l': + + var arrayLength = reader.getUint32(); + var encoding = reader.getUint32(); // 0: non-compressed, 1: compressed + var compressedLength = reader.getUint32(); + + if ( encoding === 0 ) { + + switch ( type ) { + + case 'b': + case 'c': + return reader.getBooleanArray( arrayLength ); + + case 'd': + return reader.getFloat64Array( arrayLength ); + + case 'f': + return reader.getFloat32Array( arrayLength ); + + case 'i': + return reader.getInt32Array( arrayLength ); + + case 'l': + return reader.getInt64Array( arrayLength ); + + } + + } + + if ( typeof Inflate === 'undefined' ) { + + console.error( 'THREE.FBXLoader: External library Inflate.min.js required, obtain or import from https://github.com/imaya/zlib.js' ); + + } + + var inflate = new Inflate( new Uint8Array( reader.getArrayBuffer( compressedLength ) ) ); // eslint-disable-line no-undef + var reader2 = new BinaryReader( inflate.decompress().buffer ); + + switch ( type ) { + + case 'b': + case 'c': + return reader2.getBooleanArray( arrayLength ); + + case 'd': + return reader2.getFloat64Array( arrayLength ); + + case 'f': + return reader2.getFloat32Array( arrayLength ); + + case 'i': + return reader2.getInt32Array( arrayLength ); + + case 'l': + return reader2.getInt64Array( arrayLength ); + + } + + default: + throw new Error( 'THREE.FBXLoader: Unknown property type ' + type ); + + } + + } + + }; + + function BinaryReader( buffer, littleEndian ) { + + this.dv = new DataView( buffer ); + this.offset = 0; + this.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true; + + } + + BinaryReader.prototype = { + + constructor: BinaryReader, + + getOffset: function () { + + return this.offset; + + }, + + size: function () { + + return this.dv.buffer.byteLength; + + }, + + skip: function ( length ) { + + this.offset += length; + + }, + + // seems like true/false representation depends on exporter. + // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54) + // then sees LSB. + getBoolean: function () { + + return ( this.getUint8() & 1 ) === 1; + + }, + + getBooleanArray: function ( size ) { + + var a = []; + + for ( var i = 0; i < size; i ++ ) { + + a.push( this.getBoolean() ); + + } + + return a; + + }, + + getUint8: function () { + + var value = this.dv.getUint8( this.offset ); + this.offset += 1; + return value; + + }, + + getInt16: function () { + + var value = this.dv.getInt16( this.offset, this.littleEndian ); + this.offset += 2; + return value; + + }, + + getInt32: function () { + + var value = this.dv.getInt32( this.offset, this.littleEndian ); + this.offset += 4; + return value; + + }, + + getInt32Array: function ( size ) { + + var a = []; + + for ( var i = 0; i < size; i ++ ) { + + a.push( this.getInt32() ); + + } + + return a; + + }, + + getUint32: function () { + + var value = this.dv.getUint32( this.offset, this.littleEndian ); + this.offset += 4; + return value; + + }, + + // JavaScript doesn't support 64-bit integer so calculate this here + // 1 << 32 will return 1 so using multiply operation instead here. + // There's a possibility that this method returns wrong value if the value + // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER. + // TODO: safely handle 64-bit integer + getInt64: function () { + + var low, high; + + if ( this.littleEndian ) { + + low = this.getUint32(); + high = this.getUint32(); + + } else { + + high = this.getUint32(); + low = this.getUint32(); + + } + + // calculate negative value + if ( high & 0x80000000 ) { + + high = ~ high & 0xFFFFFFFF; + low = ~ low & 0xFFFFFFFF; + + if ( low === 0xFFFFFFFF ) high = ( high + 1 ) & 0xFFFFFFFF; + + low = ( low + 1 ) & 0xFFFFFFFF; + + return - ( high * 0x100000000 + low ); + + } + + return high * 0x100000000 + low; + + }, + + getInt64Array: function ( size ) { + + var a = []; + + for ( var i = 0; i < size; i ++ ) { + + a.push( this.getInt64() ); + + } + + return a; + + }, + + // Note: see getInt64() comment + getUint64: function () { + + var low, high; + + if ( this.littleEndian ) { + + low = this.getUint32(); + high = this.getUint32(); + + } else { + + high = this.getUint32(); + low = this.getUint32(); + + } + + return high * 0x100000000 + low; + + }, + + getFloat32: function () { + + var value = this.dv.getFloat32( this.offset, this.littleEndian ); + this.offset += 4; + return value; + + }, + + getFloat32Array: function ( size ) { + + var a = []; + + for ( var i = 0; i < size; i ++ ) { + + a.push( this.getFloat32() ); + + } + + return a; + + }, + + getFloat64: function () { + + var value = this.dv.getFloat64( this.offset, this.littleEndian ); + this.offset += 8; + return value; + + }, + + getFloat64Array: function ( size ) { + + var a = []; + + for ( var i = 0; i < size; i ++ ) { + + a.push( this.getFloat64() ); + + } + + return a; + + }, + + getArrayBuffer: function ( size ) { + + var value = this.dv.buffer.slice( this.offset, this.offset + size ); + this.offset += size; + return value; + + }, + + getString: function ( size ) { + + // note: safari 9 doesn't support Uint8Array.indexOf; create intermediate array instead + var a = []; + + for ( var i = 0; i < size; i ++ ) { + + a[ i ] = this.getUint8(); + + } + + var nullByte = a.indexOf( 0 ); + if ( nullByte >= 0 ) a = a.slice( 0, nullByte ); + + return LoaderUtils.decodeText( new Uint8Array( a ) ); + + } + + }; + + // FBXTree holds a representation of the FBX data, returned by the TextParser ( FBX ASCII format) + // and BinaryParser( FBX Binary format) + function FBXTree() {} + + FBXTree.prototype = { + + constructor: FBXTree, + + add: function ( key, val ) { + + this[ key ] = val; + + }, + + }; + + // ************** UTILITY FUNCTIONS ************** + + function isFbxFormatBinary( buffer ) { + + var CORRECT = 'Kaydara FBX Binary \0'; + + return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString( buffer, 0, CORRECT.length ); + + } + + function isFbxFormatASCII( text ) { + + var CORRECT = [ 'K', 'a', 'y', 'd', 'a', 'r', 'a', '\\', 'F', 'B', 'X', '\\', 'B', 'i', 'n', 'a', 'r', 'y', '\\', '\\' ]; + + var cursor = 0; + + function read( offset ) { + + var result = text[ offset - 1 ]; + text = text.slice( cursor + offset ); + cursor ++; + return result; + + } + + for ( var i = 0; i < CORRECT.length; ++ i ) { + + var num = read( 1 ); + if ( num === CORRECT[ i ] ) { + + return false; + + } + + } + + return true; + + } + + function getFbxVersion( text ) { + + var versionRegExp = /FBXVersion: (\d+)/; + var match = text.match( versionRegExp ); + + if ( match ) { + + var version = parseInt( match[ 1 ] ); + return version; + + } + + throw new Error( 'THREE.FBXLoader: Cannot find the version number for the file given.' ); + + } + + // Converts FBX ticks into real time seconds. + function convertFBXTimeToSeconds( time ) { + + return time / 46186158000; + + } + + var dataArray = []; + + // extracts the data from the correct position in the FBX array based on indexing type + function getData( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) { + + var index; + + switch ( infoObject.mappingType ) { + + case 'ByPolygonVertex' : + index = polygonVertexIndex; + break; + case 'ByPolygon' : + index = polygonIndex; + break; + case 'ByVertice' : + index = vertexIndex; + break; + case 'AllSame' : + index = infoObject.indices[ 0 ]; + break; + default : + console.warn( 'THREE.FBXLoader: unknown attribute mapping type ' + infoObject.mappingType ); + + } + + if ( infoObject.referenceType === 'IndexToDirect' ) index = infoObject.indices[ index ]; + + var from = index * infoObject.dataSize; + var to = from + infoObject.dataSize; + + return slice( dataArray, infoObject.buffer, from, to ); + + } + + var tempEuler = new Euler(); + var tempVec = new Vector3(); + + // generate transformation from FBX transform data + // ref: https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm + // ref: http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/index.html?url=cpp_ref/_transformations_2main_8cxx-example.html,topicNumber=cpp_ref__transformations_2main_8cxx_example_htmlfc10a1e1-b18d-4e72-9dc0-70d0f1959f5e + function generateTransform( transformData ) { + + var lTranslationM = new Matrix4(); + var lPreRotationM = new Matrix4(); + var lRotationM = new Matrix4(); + var lPostRotationM = new Matrix4(); + + var lScalingM = new Matrix4(); + var lScalingPivotM = new Matrix4(); + var lScalingOffsetM = new Matrix4(); + var lRotationOffsetM = new Matrix4(); + var lRotationPivotM = new Matrix4(); + + var lParentGX = new Matrix4(); + var lGlobalT = new Matrix4(); + + var inheritType = ( transformData.inheritType ) ? transformData.inheritType : 0; + + if ( transformData.translation ) lTranslationM.setPosition( tempVec.fromArray( transformData.translation ) ); + + if ( transformData.preRotation ) { + + var array = transformData.preRotation.map( MathUtils.degToRad ); + array.push( transformData.eulerOrder ); + lPreRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) ); + + } + + if ( transformData.rotation ) { + + var array = transformData.rotation.map( MathUtils.degToRad ); + array.push( transformData.eulerOrder ); + lRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) ); + + } + + if ( transformData.postRotation ) { + + var array = transformData.postRotation.map( MathUtils.degToRad ); + array.push( transformData.eulerOrder ); + lPostRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) ); + + } + + if ( transformData.scale ) lScalingM.scale( tempVec.fromArray( transformData.scale ) ); + + // Pivots and offsets + if ( transformData.scalingOffset ) lScalingOffsetM.setPosition( tempVec.fromArray( transformData.scalingOffset ) ); + if ( transformData.scalingPivot ) lScalingPivotM.setPosition( tempVec.fromArray( transformData.scalingPivot ) ); + if ( transformData.rotationOffset ) lRotationOffsetM.setPosition( tempVec.fromArray( transformData.rotationOffset ) ); + if ( transformData.rotationPivot ) lRotationPivotM.setPosition( tempVec.fromArray( transformData.rotationPivot ) ); + + // parent transform + if ( transformData.parentMatrixWorld ) lParentGX = transformData.parentMatrixWorld; + + // Global Rotation + var lLRM = lPreRotationM.multiply( lRotationM ).multiply( lPostRotationM ); + var lParentGRM = new Matrix4(); + lParentGX.extractRotation( lParentGRM ); + + // Global Shear*Scaling + var lParentTM = new Matrix4(); + lParentTM.copyPosition( lParentGX ); + + var lParentGSM = new Matrix4(); + lParentGSM.copy( lParentGRM ).invert().multiply( lParentGX ); + + var lGlobalRS = new Matrix4(); + + if ( inheritType === 0 ) { + + lGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lScalingM ); + + } else if ( inheritType === 1 ) { + + lGlobalRS.copy( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lScalingM ); + + } else { + + var lParentLSM_inv = new Matrix4(); + lParentLSM_inv.copy( lScalingM ).invert(); + var lParentGSM_noLocal = new Matrix4().multiply( lParentGSM ).multiply( lParentLSM_inv ); + + lGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lScalingM ); + + } + + var lRotationPivotM_inv = new Matrix4(); + lRotationPivotM_inv.copy( lRotationPivotM ).invert(); + var lScalingPivotM_inv = new Matrix4(); + lScalingPivotM_inv.copy( lScalingPivotM ).invert(); + // Calculate the local transform matrix + var lTransform = new Matrix4(); + lTransform.copy( lTranslationM ).multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv ); + + var lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform ); + + var lGlobalTranslation = new Matrix4().copy( lParentGX ).multiply( lLocalTWithAllPivotAndOffsetInfo ); + lGlobalT.copyPosition( lGlobalTranslation ); + + lTransform = new Matrix4().multiply( lGlobalT ).multiply( lGlobalRS ); + + return lTransform; + + } + + // Returns the three.js intrinsic Euler order corresponding to FBX extrinsic Euler order + // ref: http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_euler_html + function getEulerOrder( order ) { + + order = order || 0; + + var enums = [ + 'ZYX', // -> XYZ extrinsic + 'YZX', // -> XZY extrinsic + 'XZY', // -> YZX extrinsic + 'ZXY', // -> YXZ extrinsic + 'YXZ', // -> ZXY extrinsic + 'XYZ', // -> ZYX extrinsic + //'SphericXYZ', // not possible to support + ]; + + if ( order === 6 ) { + + console.warn( 'THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.' ); + return enums[ 0 ]; + + } + + return enums[ order ]; + + } + + // Parses comma separated list of numbers and returns them an array. + // Used internally by the TextParser + function parseNumberArray( value ) { + + var array = value.split( ',' ).map( function ( val ) { + + return parseFloat( val ); + + } ); + + return array; + + } + + function convertArrayBufferToString( buffer, from, to ) { + + if ( from === undefined ) from = 0; + if ( to === undefined ) to = buffer.byteLength; + + return LoaderUtils.decodeText( new Uint8Array( buffer, from, to ) ); + + } + + function append( a, b ) { + + for ( var i = 0, j = a.length, l = b.length; i < l; i ++, j ++ ) { + + a[ j ] = b[ i ]; + + } + + } + + function slice( a, b, from, to ) { + + for ( var i = from, j = 0; i < to; i ++, j ++ ) { + + a[ j ] = b[ i ]; + + } + + return a; + + } + + // inject array a2 into array a1 at index + function inject( a1, index, a2 ) { + + return a1.slice( 0, index ).concat( a2 ).concat( a1.slice( index ) ); + + } + + return FBXLoader; + +} )(); + +export { FBXLoader }; \ No newline at end of file diff --git a/shared/src/OrbitControls.ts b/shared/src/OrbitControls.ts new file mode 100644 index 00000000..44f13371 --- /dev/null +++ b/shared/src/OrbitControls.ts @@ -0,0 +1,1219 @@ +import { + EventDispatcher, + MOUSE, + Quaternion, + Spherical, + TOUCH, + Vector2, + Vector3 +} from '../../../build/three.module.js'; + +// This set of controls performs orbiting, dollying (zooming), and panning. +// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). +// +// Orbit - left mouse / touch: one-finger move +// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish +// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move + +var OrbitControls = function ( object, domElement ) { + + if ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter "domElement" is now mandatory.' ); + if ( domElement === document ) console.error( 'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' ); + + this.object = object; + this.domElement = domElement; + + // Set to false to disable this control + this.enabled = true; + + // "target" sets the location of focus, where the object orbits around + this.target = new Vector3(); + + // How far you can dolly in and out ( PerspectiveCamera only ) + this.minDistance = 0; + this.maxDistance = Infinity; + + // How far you can zoom in and out ( OrthographicCamera only ) + this.minZoom = 0; + this.maxZoom = Infinity; + + // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI; // radians + + // How far you can orbit horizontally, upper and lower limits. + // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI ) + this.minAzimuthAngle = - Infinity; // radians + this.maxAzimuthAngle = Infinity; // radians + + // Set to true to enable damping (inertia) + // If damping is enabled, you must call controls.update() in your animation loop + this.enableDamping = false; + this.dampingFactor = 0.05; + + // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. + // Set to false to disable zooming + this.enableZoom = true; + this.zoomSpeed = 1.0; + + // Set to false to disable rotating + this.enableRotate = true; + this.rotateSpeed = 1.0; + + // Set to false to disable panning + this.enablePan = true; + this.panSpeed = 1.0; + this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up + this.keyPanSpeed = 7.0; // pixels moved per arrow key push + + // Set to true to automatically rotate around the target + // If auto-rotate is enabled, you must call controls.update() in your animation loop + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + + // Set to false to disable use of the keys + this.enableKeys = true; + + // The four arrow keys + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + + // Mouse buttons + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; + + // Touch fingers + this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }; + + // for reset + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + + // + // public methods + // + + this.getPolarAngle = function () { + + return spherical.phi; + + }; + + this.getAzimuthalAngle = function () { + + return spherical.theta; + + }; + + this.saveState = function () { + + scope.target0.copy( scope.target ); + scope.position0.copy( scope.object.position ); + scope.zoom0 = scope.object.zoom; + + }; + + this.reset = function () { + + scope.target.copy( scope.target0 ); + scope.object.position.copy( scope.position0 ); + scope.object.zoom = scope.zoom0; + + scope.object.updateProjectionMatrix(); + scope.dispatchEvent( changeEvent ); + + scope.update(); + + state = STATE.NONE; + + }; + + // this method is exposed, but perhaps it would be better if we can make it private... + this.update = function () { + + var offset = new Vector3(); + + // so camera.up is the orbit axis + var quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) ); + var quatInverse = quat.clone().invert(); + + var lastPosition = new Vector3(); + var lastQuaternion = new Quaternion(); + + var twoPI = 2 * Math.PI; + + return function update() { + + var position = scope.object.position; + + offset.copy( position ).sub( scope.target ); + + // rotate offset to "y-axis-is-up" space + offset.applyQuaternion( quat ); + + // angle from z-axis around y-axis + spherical.setFromVector3( offset ); + + if ( scope.autoRotate && state === STATE.NONE ) { + + rotateLeft( getAutoRotationAngle() ); + + } + + if ( scope.enableDamping ) { + + spherical.theta += sphericalDelta.theta * scope.dampingFactor; + spherical.phi += sphericalDelta.phi * scope.dampingFactor; + + } else { + + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + + } + + // restrict theta to be between desired limits + + var min = scope.minAzimuthAngle; + var max = scope.maxAzimuthAngle; + + if ( isFinite( min ) && isFinite( max ) ) { + + if ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI; + + if ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI; + + if ( min <= max ) { + + spherical.theta = Math.max( min, Math.min( max, spherical.theta ) ); + + } else { + + spherical.theta = ( spherical.theta > ( min + max ) / 2 ) ? + Math.max( min, spherical.theta ) : + Math.min( max, spherical.theta ); + + } + + } + + // restrict phi to be between desired limits + spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) ); + + spherical.makeSafe(); + + + spherical.radius *= scale; + + // restrict radius to be between desired limits + spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) ); + + // move target to panned location + + if ( scope.enableDamping === true ) { + + scope.target.addScaledVector( panOffset, scope.dampingFactor ); + + } else { + + scope.target.add( panOffset ); + + } + + offset.setFromSpherical( spherical ); + + // rotate offset back to "camera-up-vector-is-up" space + offset.applyQuaternion( quatInverse ); + + position.copy( scope.target ).add( offset ); + + scope.object.lookAt( scope.target ); + + if ( scope.enableDamping === true ) { + + sphericalDelta.theta *= ( 1 - scope.dampingFactor ); + sphericalDelta.phi *= ( 1 - scope.dampingFactor ); + + panOffset.multiplyScalar( 1 - scope.dampingFactor ); + + } else { + + sphericalDelta.set( 0, 0, 0 ); + + panOffset.set( 0, 0, 0 ); + + } + + scale = 1; + + // update condition is: + // min(camera displacement, camera rotation in radians)^2 > EPS + // using small-angle approximation cos(x/2) = 1 - x^2 / 8 + + if ( zoomChanged || + lastPosition.distanceToSquared( scope.object.position ) > EPS || + 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) { + + scope.dispatchEvent( changeEvent ); + + lastPosition.copy( scope.object.position ); + lastQuaternion.copy( scope.object.quaternion ); + zoomChanged = false; + + return true; + + } + + return false; + + }; + + }(); + + this.dispose = function () { + + scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false ); + + scope.domElement.removeEventListener( 'pointerdown', onPointerDown, false ); + scope.domElement.removeEventListener( 'wheel', onMouseWheel, false ); + + scope.domElement.removeEventListener( 'touchstart', onTouchStart, false ); + scope.domElement.removeEventListener( 'touchend', onTouchEnd, false ); + scope.domElement.removeEventListener( 'touchmove', onTouchMove, false ); + + scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false ); + scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false ); + + scope.domElement.removeEventListener( 'keydown', onKeyDown, false ); + + //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? + + }; + + // + // internals + // + + var scope = this; + + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; + + var STATE = { + NONE: - 1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + + var state = STATE.NONE; + + var EPS = 0.000001; + + // current position in spherical coordinates + var spherical = new Spherical(); + var sphericalDelta = new Spherical(); + + var scale = 1; + var panOffset = new Vector3(); + var zoomChanged = false; + + var rotateStart = new Vector2(); + var rotateEnd = new Vector2(); + var rotateDelta = new Vector2(); + + var panStart = new Vector2(); + var panEnd = new Vector2(); + var panDelta = new Vector2(); + + var dollyStart = new Vector2(); + var dollyEnd = new Vector2(); + var dollyDelta = new Vector2(); + + function getAutoRotationAngle() { + + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + + } + + function getZoomScale() { + + return Math.pow( 0.95, scope.zoomSpeed ); + + } + + function rotateLeft( angle ) { + + sphericalDelta.theta -= angle; + + } + + function rotateUp( angle ) { + + sphericalDelta.phi -= angle; + + } + + var panLeft = function () { + + var v = new Vector3(); + + return function panLeft( distance, objectMatrix ) { + + v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix + v.multiplyScalar( - distance ); + + panOffset.add( v ); + + }; + + }(); + + var panUp = function () { + + var v = new Vector3(); + + return function panUp( distance, objectMatrix ) { + + if ( scope.screenSpacePanning === true ) { + + v.setFromMatrixColumn( objectMatrix, 1 ); + + } else { + + v.setFromMatrixColumn( objectMatrix, 0 ); + v.crossVectors( scope.object.up, v ); + + } + + v.multiplyScalar( distance ); + + panOffset.add( v ); + + }; + + }(); + + // deltaX and deltaY are in pixels; right and down are positive + var pan = function () { + + var offset = new Vector3(); + + return function pan( deltaX, deltaY ) { + + var element = scope.domElement; + + if ( scope.object.isPerspectiveCamera ) { + + // perspective + var position = scope.object.position; + offset.copy( position ).sub( scope.target ); + var targetDistance = offset.length(); + + // half of the fov is center to top of screen + targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 ); + + // we use only clientHeight here so aspect ratio does not distort speed + panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix ); + panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix ); + + } else if ( scope.object.isOrthographicCamera ) { + + // orthographic + panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix ); + panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix ); + + } else { + + // camera neither orthographic nor perspective + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' ); + scope.enablePan = false; + + } + + }; + + }(); + + function dollyOut( dollyScale ) { + + if ( scope.object.isPerspectiveCamera ) { + + scale /= dollyScale; + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + function dollyIn( dollyScale ) { + + if ( scope.object.isPerspectiveCamera ) { + + scale *= dollyScale; + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + // + // event callbacks - update the object state + // + + function handleMouseDownRotate( event ) { + + rotateStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownDolly( event ) { + + dollyStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownPan( event ) { + + panStart.set( event.clientX, event.clientY ); + + } + + function handleMouseMoveRotate( event ) { + + rotateEnd.set( event.clientX, event.clientY ); + + rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed ); + + var element = scope.domElement; + + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height + + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight ); + + rotateStart.copy( rotateEnd ); + + scope.update(); + + } + + function handleMouseMoveDolly( event ) { + + dollyEnd.set( event.clientX, event.clientY ); + + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + dollyOut( getZoomScale() ); + + } else if ( dollyDelta.y < 0 ) { + + dollyIn( getZoomScale() ); + + } + + dollyStart.copy( dollyEnd ); + + scope.update(); + + } + + function handleMouseMovePan( event ) { + + panEnd.set( event.clientX, event.clientY ); + + panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed ); + + pan( panDelta.x, panDelta.y ); + + panStart.copy( panEnd ); + + scope.update(); + + } + + function handleMouseUp( /*event*/ ) { + + // no-op + + } + + function handleMouseWheel( event ) { + + if ( event.deltaY < 0 ) { + + dollyIn( getZoomScale() ); + + } else if ( event.deltaY > 0 ) { + + dollyOut( getZoomScale() ); + + } + + scope.update(); + + } + + function handleKeyDown( event ) { + + var needsUpdate = false; + + switch ( event.keyCode ) { + + case scope.keys.UP: + pan( 0, scope.keyPanSpeed ); + needsUpdate = true; + break; + + case scope.keys.BOTTOM: + pan( 0, - scope.keyPanSpeed ); + needsUpdate = true; + break; + + case scope.keys.LEFT: + pan( scope.keyPanSpeed, 0 ); + needsUpdate = true; + break; + + case scope.keys.RIGHT: + pan( - scope.keyPanSpeed, 0 ); + needsUpdate = true; + break; + + } + + if ( needsUpdate ) { + + // prevent the browser from scrolling on cursor keys + event.preventDefault(); + + scope.update(); + + } + + + } + + function handleTouchStartRotate( event ) { + + if ( event.touches.length == 1 ) { + + rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + + rotateStart.set( x, y ); + + } + + } + + function handleTouchStartPan( event ) { + + if ( event.touches.length == 1 ) { + + panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + + panStart.set( x, y ); + + } + + } + + function handleTouchStartDolly( event ) { + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyStart.set( 0, distance ); + + } + + function handleTouchStartDollyPan( event ) { + + if ( scope.enableZoom ) handleTouchStartDolly( event ); + + if ( scope.enablePan ) handleTouchStartPan( event ); + + } + + function handleTouchStartDollyRotate( event ) { + + if ( scope.enableZoom ) handleTouchStartDolly( event ); + + if ( scope.enableRotate ) handleTouchStartRotate( event ); + + } + + function handleTouchMoveRotate( event ) { + + if ( event.touches.length == 1 ) { + + rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + + rotateEnd.set( x, y ); + + } + + rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed ); + + var element = scope.domElement; + + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height + + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight ); + + rotateStart.copy( rotateEnd ); + + } + + function handleTouchMovePan( event ) { + + if ( event.touches.length == 1 ) { + + panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + + panEnd.set( x, y ); + + } + + panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed ); + + pan( panDelta.x, panDelta.y ); + + panStart.copy( panEnd ); + + } + + function handleTouchMoveDolly( event ) { + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyEnd.set( 0, distance ); + + dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) ); + + dollyOut( dollyDelta.y ); + + dollyStart.copy( dollyEnd ); + + } + + function handleTouchMoveDollyPan( event ) { + + if ( scope.enableZoom ) handleTouchMoveDolly( event ); + + if ( scope.enablePan ) handleTouchMovePan( event ); + + } + + function handleTouchMoveDollyRotate( event ) { + + if ( scope.enableZoom ) handleTouchMoveDolly( event ); + + if ( scope.enableRotate ) handleTouchMoveRotate( event ); + + } + + function handleTouchEnd( /*event*/ ) { + + // no-op + + } + + // + // event handlers - FSM: listen for events and reset state + // + + function onPointerDown( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseDown( event ); + break; + + // TODO touch + + } + + } + + function onPointerMove( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseMove( event ); + break; + + // TODO touch + + } + + } + + function onPointerUp( event ) { + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseUp( event ); + break; + + // TODO touch + + } + + } + + function onMouseDown( event ) { + + // Prevent the browser from scrolling. + event.preventDefault(); + + // Manually set the focus since calling preventDefault above + // prevents the browser from setting it automatically. + + scope.domElement.focus ? scope.domElement.focus() : window.focus(); + + var mouseAction; + + switch ( event.button ) { + + case 0: + + mouseAction = scope.mouseButtons.LEFT; + break; + + case 1: + + mouseAction = scope.mouseButtons.MIDDLE; + break; + + case 2: + + mouseAction = scope.mouseButtons.RIGHT; + break; + + default: + + mouseAction = - 1; + + } + + switch ( mouseAction ) { + + case MOUSE.DOLLY: + + if ( scope.enableZoom === false ) return; + + handleMouseDownDolly( event ); + + state = STATE.DOLLY; + + break; + + case MOUSE.ROTATE: + + if ( event.ctrlKey || event.metaKey || event.shiftKey ) { + + if ( scope.enablePan === false ) return; + + handleMouseDownPan( event ); + + state = STATE.PAN; + + } else { + + if ( scope.enableRotate === false ) return; + + handleMouseDownRotate( event ); + + state = STATE.ROTATE; + + } + + break; + + case MOUSE.PAN: + + if ( event.ctrlKey || event.metaKey || event.shiftKey ) { + + if ( scope.enableRotate === false ) return; + + handleMouseDownRotate( event ); + + state = STATE.ROTATE; + + } else { + + if ( scope.enablePan === false ) return; + + handleMouseDownPan( event ); + + state = STATE.PAN; + + } + + break; + + default: + + state = STATE.NONE; + + } + + if ( state !== STATE.NONE ) { + + scope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false ); + scope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false ); + + scope.dispatchEvent( startEvent ); + + } + + } + + function onMouseMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + switch ( state ) { + + case STATE.ROTATE: + + if ( scope.enableRotate === false ) return; + + handleMouseMoveRotate( event ); + + break; + + case STATE.DOLLY: + + if ( scope.enableZoom === false ) return; + + handleMouseMoveDolly( event ); + + break; + + case STATE.PAN: + + if ( scope.enablePan === false ) return; + + handleMouseMovePan( event ); + + break; + + } + + } + + function onMouseUp( event ) { + + scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false ); + scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false ); + + if ( scope.enabled === false ) return; + + handleMouseUp( event ); + + scope.dispatchEvent( endEvent ); + + state = STATE.NONE; + + } + + function onMouseWheel( event ) { + + if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return; + + event.preventDefault(); + event.stopPropagation(); + + scope.dispatchEvent( startEvent ); + + handleMouseWheel( event ); + + scope.dispatchEvent( endEvent ); + + } + + function onKeyDown( event ) { + + if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return; + + handleKeyDown( event ); + + } + + function onTouchStart( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); // prevent scrolling + + switch ( event.touches.length ) { + + case 1: + + switch ( scope.touches.ONE ) { + + case TOUCH.ROTATE: + + if ( scope.enableRotate === false ) return; + + handleTouchStartRotate( event ); + + state = STATE.TOUCH_ROTATE; + + break; + + case TOUCH.PAN: + + if ( scope.enablePan === false ) return; + + handleTouchStartPan( event ); + + state = STATE.TOUCH_PAN; + + break; + + default: + + state = STATE.NONE; + + } + + break; + + case 2: + + switch ( scope.touches.TWO ) { + + case TOUCH.DOLLY_PAN: + + if ( scope.enableZoom === false && scope.enablePan === false ) return; + + handleTouchStartDollyPan( event ); + + state = STATE.TOUCH_DOLLY_PAN; + + break; + + case TOUCH.DOLLY_ROTATE: + + if ( scope.enableZoom === false && scope.enableRotate === false ) return; + + handleTouchStartDollyRotate( event ); + + state = STATE.TOUCH_DOLLY_ROTATE; + + break; + + default: + + state = STATE.NONE; + + } + + break; + + default: + + state = STATE.NONE; + + } + + if ( state !== STATE.NONE ) { + + scope.dispatchEvent( startEvent ); + + } + + } + + function onTouchMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); // prevent scrolling + event.stopPropagation(); + + switch ( state ) { + + case STATE.TOUCH_ROTATE: + + if ( scope.enableRotate === false ) return; + + handleTouchMoveRotate( event ); + + scope.update(); + + break; + + case STATE.TOUCH_PAN: + + if ( scope.enablePan === false ) return; + + handleTouchMovePan( event ); + + scope.update(); + + break; + + case STATE.TOUCH_DOLLY_PAN: + + if ( scope.enableZoom === false && scope.enablePan === false ) return; + + handleTouchMoveDollyPan( event ); + + scope.update(); + + break; + + case STATE.TOUCH_DOLLY_ROTATE: + + if ( scope.enableZoom === false && scope.enableRotate === false ) return; + + handleTouchMoveDollyRotate( event ); + + scope.update(); + + break; + + default: + + state = STATE.NONE; + + } + + } + + function onTouchEnd( event ) { + + if ( scope.enabled === false ) return; + + handleTouchEnd( event ); + + scope.dispatchEvent( endEvent ); + + state = STATE.NONE; + + } + + function onContextMenu( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + } + + // + + scope.domElement.addEventListener( 'contextmenu', onContextMenu, false ); + + scope.domElement.addEventListener( 'pointerdown', onPointerDown, false ); + scope.domElement.addEventListener( 'wheel', onMouseWheel, false ); + + scope.domElement.addEventListener( 'touchstart', onTouchStart, false ); + scope.domElement.addEventListener( 'touchend', onTouchEnd, false ); + scope.domElement.addEventListener( 'touchmove', onTouchMove, false ); + + scope.domElement.addEventListener( 'keydown', onKeyDown, false ); + + // force an update at start + + this.update(); + +}; + +OrbitControls.prototype = Object.create( EventDispatcher.prototype ); +OrbitControls.prototype.constructor = OrbitControls; + + +// This set of controls performs orbiting, dollying (zooming), and panning. +// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). +// This is very similar to OrbitControls, another set of touch behavior +// +// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate +// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish +// Pan - left mouse, or arrow keys / touch: one-finger move + +var MapControls = function ( object, domElement ) { + + OrbitControls.call( this, object, domElement ); + + this.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up + + this.mouseButtons.LEFT = MOUSE.PAN; + this.mouseButtons.RIGHT = MOUSE.ROTATE; + + this.touches.ONE = TOUCH.PAN; + this.touches.TWO = TOUCH.DOLLY_ROTATE; + +}; + +MapControls.prototype = Object.create( EventDispatcher.prototype ); +MapControls.prototype.constructor = MapControls; + +export { OrbitControls, MapControls }; \ No newline at end of file diff --git a/shared/src/constants.ts b/shared/src/constants.ts new file mode 100644 index 00000000..4ea8d56a --- /dev/null +++ b/shared/src/constants.ts @@ -0,0 +1,23 @@ +enum STATE_TYPES { + DEATH = 'death', + IDLE = 'idle', + ATTACK = 'attack', + WALK = 'walk', + RUN = 'run', + DANCE = 'dance', +} + +enum EVENT_TYPES { + ATTACK_DAMAGE = 'attack.damage', + ATTACK = 'attack' +} + +enum ATTACK_TYPES { + MELEE = 'melee' +} + +export { + STATE_TYPES, + EVENT_TYPES, + ATTACK_TYPES +} \ No newline at end of file diff --git a/shared/tsconfig.json b/shared/tsconfig.json index 7c6c4b9f..9bc46265 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -6,7 +6,8 @@ "sourceMap": true, "composite": true, "rootDir": "src", - "outDir": "dist" + "outDir": "dist", + "lib": ["dom"] }, "include": [ "src/*.ts" diff --git a/yarn.lock b/yarn.lock index 8fe3c2b3..fead8228 100644 --- a/yarn.lock +++ b/yarn.lock @@ -79,6 +79,11 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +backo2@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -337,7 +342,22 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -engine.io-parser@~4.0.0: +engine.io-client@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.0.0.tgz#65733887c8999d280e1dd7f241779a2c66e9559e" + integrity sha512-e6GK0Fqvq45Nu/j7YdIVqXtDPvlsggAcfml3QiEiGdJ1qeh7IQU6knxSN3+yy9BmbnXtIfjo1hK4MFyHKdc9mQ== + dependencies: + base64-arraybuffer "0.1.4" + component-emitter "~1.3.0" + debug "~4.3.1" + engine.io-parser "~4.0.1" + has-cors "1.1.0" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~7.4.2" + yeast "0.1.2" + +engine.io-parser@~4.0.0, engine.io-parser@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg== @@ -447,6 +467,11 @@ graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -736,6 +761,16 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" +parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== + +parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== + path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -879,7 +914,20 @@ socket.io-adapter@~2.2.0: resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz#43af9157c4609e74b8addc6867873ac7eb48fda2" integrity sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg== -socket.io-parser@~4.0.3: +socket.io-client@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.0.0.tgz#643cc25e5b5bbe37be75ecd317156a3335bb495a" + integrity sha512-27yQxmXJAEYF19Ygyl8FPJ0if0wegpSmkIIbrWJeI7n7ST1JyH8bbD5v3fjjGY5cfCanACJ3dARUAyiVFNrlTQ== + dependencies: + "@types/component-emitter" "^1.2.10" + backo2 "~1.0.2" + component-emitter "~1.3.0" + debug "~4.3.1" + engine.io-client "~5.0.0" + parseuri "0.0.6" + socket.io-parser "~4.0.4" + +socket.io-parser@~4.0.3, socket.io-parser@~4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== @@ -978,6 +1026,11 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== +three@^0.124: + version "0.124.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.124.0.tgz#14ab1a26ba6c56e51190e1b55695cd3c1e69ea55" + integrity sha512-ROXp1Ly7YyF+jC910DQyAWj++Qlw2lQv0qwYLNQwdDbjk4bsOXAfGO92wYTMPNei1GMJUmCxSxc3MjGBTS09Rg== + through@2, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -1120,3 +1173,8 @@ xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= From a220204e560c4a94e5db2e1dc17d3d53725121e7 Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Mon, 29 Mar 2021 13:23:55 -0400 Subject: [PATCH 06/13] success building server --- client/src/entity-manager.ts | 88 - server/dist/index.js | 19 + server/dist/scripts/login-queue.js | 136 + server/dist/scripts/world-client.js | 290 ++ server/dist/scripts/world-entity.js | 242 ++ server/dist/scripts/world-manager.js | 142 + server/dist/scripts/world-server.js | 77 + server/src/index.ts | 4 +- server/src/scripts/login-queue.ts | 122 +- server/src/scripts/world-client.ts | 576 +-- server/src/scripts/world-entity.ts | 520 +-- server/src/scripts/world-manager.ts | 334 +- server/src/scripts/world-server.ts | 175 +- shared/dist/OrbitControls.d.ts | 4 + shared/dist/OrbitControls.d.ts.map | 1 + shared/dist/OrbitControls.js | 751 ++++ shared/dist/OrbitControls.js.map | 1 + shared/dist/constants.d.ts | 26 + shared/dist/constants.d.ts.map | 1 + shared/dist/constants.js | 29 + shared/dist/constants.js.map | 1 + shared/dist/defs.d.ts | 145 + shared/dist/defs.d.ts.map | 1 + shared/dist/defs.js | 147 + shared/dist/defs.js.map | 1 + shared/dist/entity-manager.d.ts | 14 + shared/dist/entity-manager.d.ts.map | 1 + shared/dist/entity-manager.js | 64 + shared/dist/entity-manager.js.map | 1 + shared/dist/globaltypes.d.ts | 15 + shared/dist/globaltypes.d.ts.map | 1 + shared/dist/globaltypes.js | 2 + shared/dist/globaltypes.js.map | 1 + shared/dist/index.d.ts | 3 + shared/dist/index.d.ts.map | 1 + shared/dist/index.js | 3 + shared/dist/index.js.map | 1 + shared/dist/math.d.ts | 12 + shared/dist/math.d.ts.map | 1 + shared/dist/math.js | 35 + shared/dist/math.js.map | 1 + shared/dist/noise.d.ts | 9 + shared/dist/noise.d.ts.map | 1 + shared/dist/noise.js | 32 + shared/dist/noise.js.map | 1 + shared/dist/simplex-noise.d.ts | 7 + shared/dist/simplex-noise.d.ts.map | 1 + shared/dist/simplex-noise.js | 483 +++ shared/dist/simplex-noise.js.map | 1 + shared/dist/spatial-hash-grid.d.ts | 24 + shared/dist/spatial-hash-grid.d.ts.map | 1 + shared/dist/spatial-hash-grid.js | 119 + shared/dist/spatial-hash-grid.js.map | 1 + shared/dist/spline.d.ts | 16 + shared/dist/spline.d.ts.map | 1 + shared/dist/spline.js | 51 + shared/dist/spline.js.map | 1 + shared/dist/terrain-constants.d.ts | 16 + shared/dist/terrain-constants.d.ts.map | 1 + shared/dist/terrain-constants.js | 19 + shared/dist/terrain-constants.js.map | 1 + shared/dist/terrain-height.d.ts | 8 + shared/dist/terrain-height.d.ts.map | 1 + shared/dist/terrain-height.js | 13 + shared/dist/terrain-height.js.map | 1 + shared/src/FBXLoader.ts | 4205 ------------------ shared/src/OrbitControls.ts | 6 +- shared/src/constants.ts | 15 +- shared/src/defs.ts | 301 +- shared/src/entity-manager.ts | 84 + shared/src/globaltypes.ts | 20 + shared/src/noise.ts | 78 +- shared/src/simplex-noise.ts | 11 +- shared/src/spatial-hash-grid.ts | 285 +- shared/src/spline.ts | 16 +- shared/src/terrain-constants.ts | 53 +- shared/src/terrain-height.ts | 31 +- shared/tsconfig.tsbuildinfo | 5463 +++++++++++++++++++----- 78 files changed, 8824 insertions(+), 6542 deletions(-) delete mode 100644 client/src/entity-manager.ts create mode 100644 server/dist/index.js create mode 100644 server/dist/scripts/login-queue.js create mode 100644 server/dist/scripts/world-client.js create mode 100644 server/dist/scripts/world-entity.js create mode 100644 server/dist/scripts/world-manager.js create mode 100644 server/dist/scripts/world-server.js create mode 100644 shared/dist/OrbitControls.d.ts create mode 100644 shared/dist/OrbitControls.d.ts.map create mode 100644 shared/dist/OrbitControls.js create mode 100644 shared/dist/OrbitControls.js.map create mode 100644 shared/dist/constants.d.ts create mode 100644 shared/dist/constants.d.ts.map create mode 100644 shared/dist/constants.js create mode 100644 shared/dist/constants.js.map create mode 100644 shared/dist/defs.d.ts create mode 100644 shared/dist/defs.d.ts.map create mode 100644 shared/dist/defs.js create mode 100644 shared/dist/defs.js.map create mode 100644 shared/dist/entity-manager.d.ts create mode 100644 shared/dist/entity-manager.d.ts.map create mode 100644 shared/dist/entity-manager.js create mode 100644 shared/dist/entity-manager.js.map create mode 100644 shared/dist/globaltypes.d.ts create mode 100644 shared/dist/globaltypes.d.ts.map create mode 100644 shared/dist/globaltypes.js create mode 100644 shared/dist/globaltypes.js.map create mode 100644 shared/dist/index.d.ts create mode 100644 shared/dist/index.d.ts.map create mode 100644 shared/dist/index.js create mode 100644 shared/dist/index.js.map create mode 100644 shared/dist/math.d.ts create mode 100644 shared/dist/math.d.ts.map create mode 100644 shared/dist/math.js create mode 100644 shared/dist/math.js.map create mode 100644 shared/dist/noise.d.ts create mode 100644 shared/dist/noise.d.ts.map create mode 100644 shared/dist/noise.js create mode 100644 shared/dist/noise.js.map create mode 100644 shared/dist/simplex-noise.d.ts create mode 100644 shared/dist/simplex-noise.d.ts.map create mode 100644 shared/dist/simplex-noise.js create mode 100644 shared/dist/simplex-noise.js.map create mode 100644 shared/dist/spatial-hash-grid.d.ts create mode 100644 shared/dist/spatial-hash-grid.d.ts.map create mode 100644 shared/dist/spatial-hash-grid.js create mode 100644 shared/dist/spatial-hash-grid.js.map create mode 100644 shared/dist/spline.d.ts create mode 100644 shared/dist/spline.d.ts.map create mode 100644 shared/dist/spline.js create mode 100644 shared/dist/spline.js.map create mode 100644 shared/dist/terrain-constants.d.ts create mode 100644 shared/dist/terrain-constants.d.ts.map create mode 100644 shared/dist/terrain-constants.js create mode 100644 shared/dist/terrain-constants.js.map create mode 100644 shared/dist/terrain-height.d.ts create mode 100644 shared/dist/terrain-height.d.ts.map create mode 100644 shared/dist/terrain-height.js create mode 100644 shared/dist/terrain-height.js.map delete mode 100644 shared/src/FBXLoader.ts create mode 100644 shared/src/entity-manager.ts create mode 100644 shared/src/globaltypes.ts diff --git a/client/src/entity-manager.ts b/client/src/entity-manager.ts deleted file mode 100644 index 92dad5f7..00000000 --- a/client/src/entity-manager.ts +++ /dev/null @@ -1,88 +0,0 @@ - - -export const entity_manager = (() => { - - class EntityManager { - constructor() { - this._ids = 0; - this._entitiesMap = {}; - this._entities = []; - } - - _GenerateName() { - this._ids += 1; - - return '__name__' + this._ids; - } - - Get(n) { - return this._entitiesMap[n]; - } - - Filter(cb) { - return this._entities.filter(cb); - } - - Add(e, n) { - if (!n) { - n = this._GenerateName(); - } - - this._entitiesMap[n] = e; - this._entities.push(e); - - e.SetParent(this); - e.SetName(n); - e.InitEntity(); - } - - SetActive(e, b) { - const i = this._entities.indexOf(e); - - if (!b) { - if (i < 0) { - return; - } - - this._entities.splice(i, 1); - } else { - if (i >= 0) { - return; - } - - this._entities.push(e); - } - } - - Update(timeElapsed) { - const dead = []; - const alive = []; - for (let i = 0; i < this._entities.length; ++i) { - const e = this._entities[i]; - - e.Update(timeElapsed); - - if (e.dead_) { - dead.push(e); - } else { - alive.push(e); - } - } - - for (let i = 0; i < dead.length; ++i) { - const e = dead[i]; - - delete this._entitiesMap[e.Name]; - - e.Destroy(); - } - - this._entities = alive; - } - } - - return { - EntityManager: EntityManager - }; - -})(); \ No newline at end of file diff --git a/server/dist/index.js b/server/dist/index.js new file mode 100644 index 00000000..d240c1bd --- /dev/null +++ b/server/dist/index.js @@ -0,0 +1,19 @@ +import { test } from 'shared'; +import * as http from 'http'; +import * as socket_io from 'socket.io'; +import { WorldServer } from './scripts/world-server'; +function Main() { + const port = process.env.PORT || 3000; + const server = http.createServer(); + const io = new socket_io.Server(server, { + cors: { + origin: '*' + } + }); + server.listen(port, () => { + console.log(`listening on: ${port} : ${test}`); + }); + const _WORLD = new WorldServer(io); + _WORLD.Run(); +} +Main(); diff --git a/server/dist/scripts/login-queue.js b/server/dist/scripts/login-queue.js new file mode 100644 index 00000000..84634f35 --- /dev/null +++ b/server/dist/scripts/login-queue.js @@ -0,0 +1,136 @@ +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +}; +var _parent, _onLogin, _fsm, _clients, _onLogin_1; +import { EVENT_TYPES } from "shared/src/constants"; +class FiniteStateMachine { + constructor(onEvent) { + this._currentState = new State({}); + this.onEvent = onEvent; + } + get currentState() { + return this._currentState; + } + Broadcast(evt) { + this.onEvent(evt); + } + OnMessage(evt, data) { + var _a, _b; + return (_b = (_a = this._currentState) === null || _a === void 0 ? void 0 : _a.OnMessage) === null || _b === void 0 ? void 0 : _b.call(_a, evt, data); + } + SetState(state) { + const prevState = this._currentState; + if (prevState) { + prevState.OnExit(); + } + this._currentState = state; + this._currentState.setParent(this); + state.OnEnter(prevState); + } +} +; +class State { + constructor(params) { + _parent.set(this, void 0); + this.params = params; + } + Broadcast(evt) { + __classPrivateFieldGet(this, _parent).Broadcast(evt); + } + setParent(stateMachine) { + __classPrivateFieldSet(this, _parent, stateMachine); + } + getParent() { + return __classPrivateFieldGet(this, _parent); + } + setParams(newParams) { + this.params = newParams; + } + getParams() { + return this.params; + } + OnEnter(state) { + } + OnMessage(evt, data) { + } + OnExit() { + } +} +_parent = new WeakMap(); +; +class Login_Await extends State { + constructor(params) { + super(params); + } + OnMessage(evt, data) { + if (evt != EVENT_TYPES.LOGIN_COMMIT) { + return false; + } + this.params.accountName = data; + this.getParent().SetState(new Login_Confirm(this.params)); + return true; + } +} +; +class Login_Confirm extends State { + constructor(params) { + super(params); + this.setParams(Object.assign({}, params)); + } + OnEnter() { + console.log('login confirmed: ' + this.getParams().accountName); + this.Broadcast({ topic: EVENT_TYPES.LOGIN_COMMIT, params: this.getParams() }); + } + OnMessage() { + return true; + } +} +; +class LoginClient { + constructor(client, onLogin) { + _onLogin.set(this, void 0); + _fsm.set(this, void 0); + __classPrivateFieldSet(this, _onLogin, onLogin); + client.onMessage = (e, d) => this.OnMessage_(e, d); + __classPrivateFieldSet(this, _fsm, new FiniteStateMachine((e) => { this.OnEvent(e); })); + __classPrivateFieldGet(this, _fsm).SetState(new Login_Await({})); + } + OnEvent(evt) { + var _a; + (_a = __classPrivateFieldGet(this, _onLogin)) === null || _a === void 0 ? void 0 : _a.call(this, evt.params); + } + OnMessage_(topic, data) { + return __classPrivateFieldGet(this, _fsm).OnMessage(topic, data); + } +} +_onLogin = new WeakMap(), _fsm = new WeakMap(); +; +// onLogin, OnLogin is confusing. Rename once I know the purpose. +class LoginQueue { + constructor(onLogin) { + _clients.set(this, void 0); + _onLogin_1.set(this, void 0); + __classPrivateFieldSet(this, _clients, {}); + __classPrivateFieldSet(this, _onLogin_1, onLogin); + } + Add(client) { + __classPrivateFieldGet(this, _clients)[client.ID] = new LoginClient(client, (e) => { this.OnLogin(client, e); }); + } + *OnLogin(client, params) { + delete __classPrivateFieldGet(this, _clients)[client.ID]; + __classPrivateFieldGet(this, _onLogin_1).call(this, client, params); + } +} +_clients = new WeakMap(), _onLogin_1 = new WeakMap(); +; +export { LoginQueue }; diff --git a/server/dist/scripts/world-client.js b/server/dist/scripts/world-client.js new file mode 100644 index 00000000..f22d5c41 --- /dev/null +++ b/server/dist/scripts/world-client.js @@ -0,0 +1,290 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _timeout; +import { quat, vec3 } from 'gl-matrix'; +import { _TIMEOUT, EVENT_TYPES } from 'shared/src/constants'; +import { SocketWrapper } from './world-server'; +class WorldClient { + constructor(client, entity) { + _timeout.set(this, void 0); + this.entityCache = {}; + this.entity = entity; + // Hack + this.entity.onEvent_ = (t, d) => this.OnEntityEvent_(t, d); + this.client = client; + this.client.onMessage = (e, d) => this.OnMessage_(e, d); + this.client.Send(EVENT_TYPES.WORLD_PLAYER, this.entity.CreatePlayerPacket_()); + this.client.Send(EVENT_TYPES.WORLD_STATS, this.entity.CreateStatsPacket_()); + __classPrivateFieldSet(this, _timeout, _TIMEOUT); + this.entityCache = {}; + // Hack + entity.parent_ = this; + } + Destroy() { + this.client.Disconnect(); + this.client = null; + this.entity.Destroy(); + this.entity = null; + } + OnDeath() { } + OnEntityEvent_(t, d) { + if (t == EVENT_TYPES.ATTACK_DAMAGE) { + this.OnDamageEvent_(d); + } + } + OnMessage_(evt, data) { + __classPrivateFieldSet(this, _timeout, _TIMEOUT); + if (evt == EVENT_TYPES.WORLD_UPDATE) { + this.entity.UpdateTransform(data); + return true; + } + if (evt == EVENT_TYPES.CHAT_MSG) { + this.OnChatMessage_(data); + return true; + } + if (evt == EVENT_TYPES.ACTION_ATTACK) { + this.entity.OnActionAttack(); + return true; + } + if (evt == EVENT_TYPES.WORLD_INVENTORY) { + this.OnInventoryChanged_(data); + return true; + } + return false; + } + OnDamageEvent_(_) { } + OnInventoryChanged_(inventory) { + this.entity.UpdateInventory(inventory); + // Todo: Merge this into entityCache path. + const nearby = this.entity.FindNear(50, true); + for (let n of nearby) { + n.parent_.client.Send(EVENT_TYPES.WORLD_INVENTORY, [this.entity.ID, inventory]); + } + } + OnChatMessage_(message) { + const chatMessage = { + name: this.entity.accountInfo_.name, + text: message, + }; + this.BroadcastChat(chatMessage); + } + BroadcastChat(chatMessage) { + const nearby = this.entity.FindNear(50, true); + for (let i = 0; i < nearby.length; ++i) { + const n = nearby[i]; + // This is different from chat.msg? + n.parent_.client.Send(EVENT_TYPES.CHAT_MESSAGE, chatMessage); + } + } + get IsDead() { + return __classPrivateFieldGet(this, _timeout) <= 0.0; + } + OnUpdate_(timeElapsed) { } + OnUpdateClientState_() { } + UpdateClientState_() { + this.OnUpdateClientState_(); + } + Update(timeElapsed) { + __classPrivateFieldSet(this, _timeout, __classPrivateFieldGet(this, _timeout) - timeElapsed); + this.entity.Update(timeElapsed); + this.OnUpdate_(timeElapsed); + } +} +_timeout = new WeakMap(); +; +class WorldNetworkClient extends WorldClient { + constructor(client, entity) { + super(client, entity); + this.entity; + } + OnUpdate_(timeElapsed) { + } + OnUpdateClientState_() { + const _Filter = (e) => { + return e.ID != this.entity.ID; + }; + const nearby = this.entity.FindNear(500).filter(e => _Filter(e)); + const updates = [{ + id: this.entity.ID, + stats: this.entity.CreateStatsPacket_(), + events: this.entity.CreateEventsPacket_(), + }]; + const newCache_ = {}; + for (let n of nearby) { + // We could easily trim this down based on what we know + // this client saw last. Maybe do it later. + const cur = { + id: n.ID, + transform: n.CreateTransformPacket_(), + stats: n.CreateStatsPacket_(), + events: n.CreateEventsPacket_(), + desc: null, + }; + if (!(n.ID in this.entityCache)) { + cur.desc = n.GetDescription(); + } + newCache_[n.ID] = cur; + updates.push(cur); + } + this.entityCache = newCache_; + this.client.Send(EVENT_TYPES.WORLD_UPDATE, updates); + } +} +; +class AIStateMachine { + constructor(entity, terrain) { + this.currentState_ = null; + this.entity = entity; + this.terrain_ = terrain; + } + SetState(state) { + const prevState = this.currentState_; + if (prevState) { + if (prevState.constructor.name == state.constructor.name) { + return; + } + prevState.Exit(); + } + this.currentState_ = state; + this.currentState_.parent_ = this; + this.currentState_.entity = this.entity; + this.currentState_.terrain_ = this.terrain_; + state.Enter(prevState); + } + Update(timeElapsed) { + if (this.currentState_) { + this.currentState_.Update(timeElapsed); + } + } +} +; +class AIState { + constructor() { } + Exit() { } + Enter() { } + Update(timeElapsed) { } +} +class AIState_JustSitThere extends AIState { + constructor(target) { + super(); + this.timer_ = 0.0; + } + UpdateLogic_() { + const _IsPlayer = (e) => { + return !e.isAI; + }; + const nearby = this.entity.FindNear(50.0).filter(e => e.Health > 0).filter(_IsPlayer); + if (nearby.length > 0) { + this.parent_.SetState(new AIState_FollowToAttack(nearby[0])); + } + } + Update(timeElapsed) { + this.timer_ += timeElapsed; + this.entity.SetState('idle'); + if (this.timer_ > 5.0) { + this.UpdateLogic_(); + this.timer_ = 0.0; + } + } +} +; +class AIState_FollowToAttack extends AIState { + constructor(target) { + super(); + this.target_ = target; + } + UpdateMovement_(timeElapsed) { + this.entity.state_ = 'walk'; + const direction = vec3.create(); + const forward = vec3.fromValues(0, 0, 1); + vec3.sub(direction, this.target_.position_, this.entity.position_); + direction[1] = 0.0; + vec3.normalize(direction, direction); + quat.rotationTo(this.entity.rotation_, forward, direction); + const movement = vec3.clone(direction); + vec3.scale(movement, movement, timeElapsed * 10.0); + vec3.add(this.entity.position_, this.entity.position_, movement); + this.entity.position_[1] = this.terrain_.Get(...this.entity.position_)[0]; + this.entity.UpdateGridClient_(); + const distance = vec3.distance(this.entity.position_, this.target_.position_); + if (distance < 10.0) { + this.entity.OnActionAttack(); + this.parent_.SetState(new AIState_WaitAttackDone(this.target_)); + } + else if (distance > 100.0) { + this.parent_.SetState(new AIState_JustSitThere()); + } + } + Update(timeElapsed) { + if (!this.target_.Valid || this.target_.Health == 0) { + this.parent_.SetState(new AIState_JustSitThere(this.target_)); + return; + } + this.UpdateMovement_(timeElapsed); + } +} +; +class AIState_WaitAttackDone extends AIState { + constructor(target) { + super(); + this.target_ = target; + } + Update(_) { + this.entity.state_ = 'attack'; + if (this.entity.action_) { + return; + } + this.parent_.SetState(new AIState_FollowToAttack(this.target_)); + } +} +; +class FakeClient extends SocketWrapper { + constructor() { + super(null); + } + Send(msg, data) { } + Disconnect() { } +} +; +class WorldAIClient extends WorldClient { + constructor(entity, terrain, onDeath) { + super(new FakeClient(), entity); + this.terrain_ = terrain; + this.onDeath_ = onDeath; + // Haha sorry + this.entity.isAI = true; + this.fsm_ = new AIStateMachine(entity, this.terrain_); + this.fsm_.SetState(new AIState_JustSitThere()); + this.deathTimer_ = 0.0; + } + get IsDead() { + return this.deathTimer_ >= 30.0; + } + OnDeath() { + this.onDeath_(); + } + OnUpdateClientState_() { } + OnUpdate_(timeElapsed) { + // Never times out + this.timeout_ = 1000.0; + if (this.entity.Health > 0) { + this.fsm_.Update(timeElapsed); + } + else { + this.deathTimer_ += timeElapsed; + } + } +} +; +export { WorldNetworkClient, WorldAIClient, WorldClient, }; diff --git a/server/dist/scripts/world-entity.js b/server/dist/scripts/world-entity.js new file mode 100644 index 00000000..3dbe207c --- /dev/null +++ b/server/dist/scripts/world-entity.js @@ -0,0 +1,242 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +}; +var _onAction, _time, _cooldown, _timeElapsed; +import { quat, vec3 } from 'gl-matrix'; +import { WEAPONS_DATA } from 'shared/src/defs'; +import { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES } from 'shared/src/constants'; +class Action_Attack { + constructor(time, cooldown, onAction) { + _onAction.set(this, void 0); + _time.set(this, void 0); + _cooldown.set(this, void 0); + _timeElapsed.set(this, void 0); + __classPrivateFieldSet(this, _onAction, onAction); + __classPrivateFieldSet(this, _time, time); + __classPrivateFieldSet(this, _cooldown, cooldown); + __classPrivateFieldSet(this, _timeElapsed, 0.0); + } + get Finished() { + return __classPrivateFieldGet(this, _timeElapsed) > __classPrivateFieldGet(this, _cooldown); + } + Update(timeElapsed) { + const oldTimeElapsed = __classPrivateFieldGet(this, _timeElapsed); + __classPrivateFieldSet(this, _timeElapsed, __classPrivateFieldGet(this, _timeElapsed) + timeElapsed); + if (__classPrivateFieldGet(this, _timeElapsed) > __classPrivateFieldGet(this, _time) && + oldTimeElapsed <= __classPrivateFieldGet(this, _time)) { + __classPrivateFieldGet(this, _onAction).call(this); + } + } +} +_onAction = new WeakMap(), _time = new WeakMap(), _cooldown = new WeakMap(), _timeElapsed = new WeakMap(); +; +// interface IWorldEntity { +// Destroy: () => void, +// ID: string, +// Valid: boolean, +// Health: number, +// GetDescription: () => any, +// CreatePlayerPacket_: () => any, +// CreateStatsPacket_: () => any, +// CreateEventsPacket_: () => any, +// CreateTransformPacket_: () => any, +// UpdateInventory: (inventory: []) => void, +// } +class WorldEntity { + constructor(params) { + this.id_ = params.id; + this.state_ = STATE_TYPES.IDLE; + this.position_ = vec3.clone(params.position); + this.rotation_ = quat.clone(params.rotation); + // HACK + this.accountInfo_ = { + name: params.account.accountName, + }; + this.characterDefinition_ = params.character.definition; + this.characterInfo_ = { + class: params.character.class, + inventory: Object.assign({}, this.characterDefinition_.inventory), + }; + this.stats_ = Object.assign({}, this.characterDefinition_.stats); + this.events_ = []; + this.grid_ = params.grid; + this.gridClient_ = this.grid_.NewClient([this.position_[0], this.position_[2]], [10, 10]); + this.gridClient_.entity = this; + this.updateTimer_ = 0.0; + this.action_ = null; + } + Destroy() { + this.grid_.Remove(this.gridClient_); + this.gridClient_ = null; + } + get ID() { + return this.id_; + } + get Valid() { + return this.gridClient_ != null; + } + get Health() { + return this.stats_.health; + } + GetDescription() { + return { + account: this.accountInfo_, + character: this.characterInfo_, + }; + } + CreatePlayerPacket_() { + return { + id: this.ID, + desc: this.GetDescription(), + transform: this.CreateTransformPacket_(), + }; + } + CreateStatsPacket_() { + return [this.ID, this.stats_]; + } + CreateEventsPacket_() { + return this.events_; + } + CreateTransformPacket_() { + return [ + this.state_, + [...this.position_], + [...this.rotation_], + ]; + } + UpdateTransform(transformData) { + const newState = transformData[0]; + const [vecX, vecY, vecZ] = transformData[1]; + const [quatX, quatY, quatZ, quatW] = transformData[2]; + if (this.stats_.health <= 0) { + this.SetState(STATE_TYPES.DEATH); + } + this.state_ = transformData[0]; + this.position_ = vec3.fromValues(vecX, vecY, vecZ); + this.rotation_ = quat.fromValues(quatX, quatY, quatZ, quatW); + this.UpdateGridClient_(); + } + UpdateGridClient_() { + this.gridClient_.position = [this.position_[0], this.position_[2]]; + this.grid_.UpdateClient(this.gridClient_); + } + UpdateInventory(inventory) { + this.characterInfo_.inventory = inventory; + } + OnActionAttack() { + if (this.action_) { + return; + } + this.action_ = new Action_Attack(this.characterDefinition_.attack.timing, this.characterDefinition_.attack.cooldown, () => { + this.OnActionAttack_Fired(); + }); + } + OnActionAttack_Fired() { + // wheee hardcoded :( + const nearby = this.FindNear(50.0); + const _Filter = (c) => { + if (c.Health == 0) { + return false; + } + const dist = vec3.distance(c.position_, this.position_); + return dist <= this.characterDefinition_.attack.range; + }; + const attackable = nearby.filter(_Filter); + for (let a of attackable) { + const target = a; + const dirToTarget = vec3.create(); + vec3.sub(dirToTarget, target.position_, this.position_); + vec3.normalize(dirToTarget, dirToTarget); + const forward = vec3.fromValues(0, 0, 1); + vec3.transformQuat(forward, forward, this.rotation_); + vec3.normalize(forward, forward); + const dot = vec3.dot(forward, dirToTarget); + if (dot < 0.9 || dot > 1.1) { + continue; + } + // Calculate damage, use equipped weapon + whatever, this will be bad. + let damage = 0; + console.log('attacking: ' + target.accountInfo_.name); + if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { + damage = (this.stats_.strength / 5.0); + // TS hack. Should move this definition up. + const equipped = this.characterInfo_.inventory['inventory-equip-1']; + const weaponsData = WEAPONS_DATA; + if (equipped) { + console.log(' equipped: ' + equipped); + const weapon = weaponsData[equipped]; + if (weapon) { + damage *= weapon.damage * 10; + } + } + } + else { + damage = (this.stats_.wisdomness / 10.0); + } + console.log(' damage: ' + damage); + target.OnDamage(this, damage); + this.onEvent_(EVENT_TYPES.ATTACK_DAMAGE, { target: target, damage: damage }); + } + } + onEvent_(eventType, data) { + console.error("This is the fake error Jeremy put in to see if this undefined onEvent_ function was ever called."); + } + OnDamage(attacker, damage) { + this.stats_.health -= damage; + this.stats_.health = Math.max(0.0, this.stats_.health); + this.events_.push({ + type: EVENT_TYPES.ATTACK, + target: this.ID, + attacker: attacker.ID, + amount: damage + }); + if (this.stats_.health <= 0) { + this.SetState(STATE_TYPES.DEATH); + } + } + // this seems wrong to me. TS doesn't have a typeof ENUM it seems. + SetState(s) { + if (this.state_ != STATE_TYPES.DEATH) { + this.state_ = s; + } + } + FindNear(radius, includeSelf) { + let nearby = this.grid_.FindNear([this.position_[0], this.position_[2]], [radius, radius]).map((c) => c.entity); + if (!includeSelf) { + const _Filter = (e) => { + return e.ID != this.ID; + }; + nearby = nearby.filter(_Filter); + } + return nearby; + } + Update(timeElapsed) { + this.UpdateActions_(timeElapsed); + } + UpdateActions_(timeElapsed) { + if (!this.action_) { + // Hack, again, should move this all through events + if (this.state_ == STATE_TYPES.ATTACK) { + this.SetState(STATE_TYPES.IDLE); + } + return; + } + this.action_.Update(timeElapsed); + if (this.action_.Finished) { + this.action_ = null; + this.SetState(STATE_TYPES.IDLE); + } + } +} +; +export { WorldEntity, Action_Attack }; diff --git a/server/dist/scripts/world-manager.js b/server/dist/scripts/world-manager.js new file mode 100644 index 00000000..ddf97528 --- /dev/null +++ b/server/dist/scripts/world-manager.js @@ -0,0 +1,142 @@ +import { quat, vec3 } from 'gl-matrix'; +import { WorldAIClient, WorldNetworkClient } from './world-client'; +import { WorldEntity } from './world-entity'; +import { SpatialHashGrid } from 'shared/src/spatial-hash-grid'; +import { HeightGenerator } from 'shared/src/terrain-height'; +import { CHARACTER_MODELS } from 'shared/src/defs'; +class MonsterSpawner { + constructor(params) { + this.parent_ = params.parent; + this.grid_ = this.parent_.grid_; + this.terrain_ = this.parent_.terrain_; + this.pos_ = params.pos; + this.pos_[1] = this.terrain_.Get(...params.pos)[0]; + this.params_ = params; + } + Spawn_() { + // Hack + const e = new WorldEntity({ + id: this.parent_.ids_++, + position: vec3.clone(this.pos_), + rotation: quat.fromValues(0, 0, 0, 1), + grid: this.grid_, + character: { + definition: CHARACTER_MODELS[this.params_.class], + class: this.params_.class, + }, + account: { accountName: CHARACTER_MODELS[this.params_.class].name }, + }); + const wc = new WorldAIClient(e, this.terrain_, () => { + this.entity_ = null; + console.log('entity gone, spawner making now one soon'); + }); + this.parent_.AddMonster(wc); + this.entity_ = wc; + } + Update(timeElapsed) { + if (!this.entity_) { + this.Spawn_(); + } + } +} +; +const _TICK_RATE = 0.1; +class WorldManager { + constructor(params) { + this.ids_ = 0; + this.entities_ = []; + this.grid_ = new SpatialHashGrid([[-4000, -4000], [4000, 4000]], [1000, 1000]); + this.terrain_ = new HeightGenerator(); + this.spawners_ = []; + this.tickTimer_ = 0.0; + // Hack + for (let x = -40; x <= 40; ++x) { + for (let z = -40; z <= 40; ++z) { + if (Math.random() < 0.1) { + const pos = vec3.fromValues(x * 75, 0, z * 75); + if (Math.random() < 0.1) { + this.spawners_.push(new MonsterSpawner({ + parent: this, pos: pos, class: 'warrok' + })); + } + else { + this.spawners_.push(new MonsterSpawner({ + parent: this, pos: pos, class: 'zombie' + })); + } + } + } + } + } + AddMonster(e) { + this.entities_.push(e); + } + Add(client, params) { + const models = ['sorceror', 'paladin']; + const randomClass = models[Math.floor(Math.random() * models.length)]; + // Hack + const e = new WorldEntity({ + id: this.ids_++, + position: vec3.fromValues(-60 + (Math.random() * 2 - 1) * 20, 0, (Math.random() * 2 - 1) * 20), + rotation: quat.fromValues(0, 0, 0, 1), + grid: this.grid_, + character: { + definition: CHARACTER_MODELS[randomClass], + class: randomClass, + }, + account: params, + }); + const wc = new WorldNetworkClient(client, e); + this.entities_.push(wc); + wc.BroadcastChat({ + name: '', + server: true, + text: '[' + params.accountName + ' has entered the game]' + }); + } + Update(timeElapsed) { + this.TickClientState_(timeElapsed); + this.UpdateEntities_(timeElapsed); + this.UpdateSpawners_(timeElapsed); + } + TickClientState_(timeElapsed) { + this.tickTimer_ += timeElapsed; + if (this.tickTimer_ < _TICK_RATE) { + return; + } + this.tickTimer_ = 0.0; + for (let i = 0; i < this.entities_.length; ++i) { + this.entities_[i].UpdateClientState_(); + } + for (let i = 0; i < this.entities_.length; ++i) { + this.entities_[i].entity_.events_ = []; + } + } + UpdateSpawners_(timeElapsed) { + for (let i = 0; i < this.spawners_.length; ++i) { + this.spawners_[i].Update(timeElapsed); + } + } + UpdateEntities_(timeElapsed) { + const dead = []; + const alive = []; + for (let i = 0; i < this.entities_.length; ++i) { + const e = this.entities_[i]; + e.Update(timeElapsed); + if (e.IsDead) { + console.log('killed it off'); + dead.push(e); + } + else { + alive.push(e); + } + } + this.entities_ = alive; + for (let d of dead) { + d.OnDeath(); + d.Destroy(); + } + } +} +; +export { WorldManager }; diff --git a/server/dist/scripts/world-server.js b/server/dist/scripts/world-server.js new file mode 100644 index 00000000..da9dfa34 --- /dev/null +++ b/server/dist/scripts/world-server.js @@ -0,0 +1,77 @@ +import { performance } from 'perf_hooks'; +import { WorldManager } from './world-manager'; +import { LoginQueue } from './login-queue'; +class SocketWrapper { + constructor(params) { + this.socket_ = params.socket; + this.onMessage = null; + this.dead_ = false; + this.SetupSocket_(); + } + get ID() { + return this.socket_.id; + } + get IsAlive() { + return !this.dead_; + } + SetupSocket_() { + this.socket_.on('user-connected', () => { + console.log('socket.id: ' + this.socket_.id); + }); + this.socket_.on('disconnect', () => { + console.log('Client disconnected.'); + this.dead_ = true; + }); + this.socket_.onAny((e, d) => { + try { + if (!this.onMessage(e, d)) { + console.log('Unknown command (' + e + '), disconnected.'); + this.Disconnect(); + } + } + catch (err) { + console.error(err); + this.Disconnect(); + } + }); + } + Disconnect() { + this.socket_.disconnect(true); + } + Send(msg, data) { + this.socket_.emit(msg, data); + } + onMessage(e, d) { return false; } +} +; +class WorldServer { + constructor(io) { + this.loginQueue_ = new LoginQueue((c, p) => { this.OnLogin_(c, p); }); + this.worldMgr_ = new WorldManager({ parent: this }); + this.SetupIO_(io); + } + SetupIO_(io) { + io.on('connection', socket => { + this.loginQueue_.Add(new SocketWrapper({ socket: socket })); + }); + } + OnLogin_(client, params) { + this.worldMgr_.Add(client, params); + } + Run() { + let t1 = performance.now(); + this.Schedule_(t1); + } + Schedule_(t1) { + setTimeout(() => { + let t2 = performance.now(); + this.Update_((t2 - t1) * 0.001); + this.Schedule_(t2); + }); + } + Update_(timeElapsed) { + this.worldMgr_.Update(timeElapsed); + } +} +; +export { WorldServer, SocketWrapper }; diff --git a/server/src/index.ts b/server/src/index.ts index 8992bd35..91290ad4 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -2,7 +2,7 @@ import {test} from 'shared'; import * as http from 'http'; import * as socket_io from 'socket.io'; -import {world_server} from './scripts/world-server'; +import {WorldServer} from './scripts/world-server'; function Main() { @@ -19,7 +19,7 @@ function Main() { console.log(`listening on: ${port} : ${test}`); }); - const _WORLD = new world_server.WorldServer(io); + const _WORLD = new WorldServer(io); _WORLD.Run(); } diff --git a/server/src/scripts/login-queue.ts b/server/src/scripts/login-queue.ts index 9279e12f..5cf46adb 100644 --- a/server/src/scripts/login-queue.ts +++ b/server/src/scripts/login-queue.ts @@ -1,36 +1,49 @@ -export const login_queue = (() => { - - class FiniteStateMachine { - #currentState: State; - #onEvent: (evt: any, data?: any) => any; +import { EVENT_TYPES, STATE_TYPES } from "shared/src/constants"; +import type {IOnMessageArgs, TEvt} from "shared/src/globaltypes"; + +interface IState {} + +interface IOnEvent { + (evt: string, data?: any): void +} + +interface IFiniteStateMachine { + _currentState: IState, + onEvent(evt: TEvt, data?: any): any; + Broadcast(evt: string): void, + OnMessage: IOnEvent +} + class FiniteStateMachine implements IFiniteStateMachine { + _currentState; + onEvent; - constructor(onEvent) { - this.#currentState = null; - this.#onEvent = onEvent; + constructor(onEvent: any) { + this._currentState = new State({}); + this.onEvent = onEvent; } - get State() { - return this.#currentState; + get currentState() { + return this._currentState; } - Broadcast(evt) { - this.#onEvent(evt); + Broadcast(evt: string) { + this.onEvent(evt); } - OnMessage(evt, data) { - return this.#currentState.OnMessage(evt, data); + OnMessage(evt: string, data?: any) { + return this._currentState?.OnMessage?.(evt, data); } - SetState(state) { - const prevState = this.#currentState; + SetState(state: State) { + const prevState = this._currentState; if (prevState) { prevState.OnExit(); } - this.#currentState = state; - this.#currentState.setParent(this); + this._currentState = state; + this._currentState.setParent(this); state.OnEnter(prevState); } }; @@ -38,12 +51,14 @@ export const login_queue = (() => { class State { #parent: any; - #params: { + params: { accountName?: string }; - constructor() {} + constructor(params: any) { + this.params = params; + } - Broadcast(evt) { + Broadcast(evt: {topic: EVENT_TYPES, params: any}) { this.#parent.Broadcast(evt); } @@ -55,41 +70,39 @@ export const login_queue = (() => { return this.#parent; } - setParams(newParams) { - this.#params = newParams; + setParams(newParams: any) { + this.params = newParams; } getParams() { - return this.#params; + return this.params; } - OnEnter() { + OnEnter(state?: State) { } - OnMessage(evt, data) { + OnMessage(evt: string, data: any) { } OnExit() { } }; - + interface ILoginParams { + accountName?: string + } class Login_Await extends State { - #params: { - accountName?: string - }; - constructor() { - super(); - this.setParams({}); + constructor(params: ILoginParams) { + super(params); } - OnMessage(evt, data) { - if (evt != 'login.commit') { + OnMessage(evt: string, data: any) { + if (evt != EVENT_TYPES.LOGIN_COMMIT) { return false; } - this.#params.accountName = data; - this.getParent().SetState(new Login_Confirm(this.#params)); + this.params.accountName = data; + this.getParent().SetState(new Login_Confirm(this.params)); return true; } @@ -97,14 +110,14 @@ export const login_queue = (() => { class Login_Confirm extends State { - constructor(params) { - super(); + constructor(params: any) { + super(params); this.setParams({...params}); } OnEnter() { console.log('login confirmed: ' + this.getParams().accountName); - this.Broadcast({topic: 'login.complete', params: this.getParams()}); + this.Broadcast({topic: EVENT_TYPES.LOGIN_COMMIT, params: this.getParams()}); } OnMessage() { @@ -112,52 +125,51 @@ export const login_queue = (() => { } }; - class LoginClient { - #onLogin: (any) => any; + #onLogin: (evt: string, data?: any) => any; #fsm: FiniteStateMachine; - constructor(client, onLogin) { + constructor(client: any, onLogin: (evt: string, data: any) => any) { this.#onLogin = onLogin; - client.onMessage = (e, d) => this.OnMessage_(e, d); + client.onMessage = (e: string, d: any) => this.OnMessage_(e, d); - this.#fsm = new FiniteStateMachine((e) => { this.OnEvent(e); }); - this.#fsm.SetState(new Login_Await()); + this.#fsm = new FiniteStateMachine((e: TEvt) => { this.OnEvent(e); }); + this.#fsm.SetState(new Login_Await({})); } - OnEvent(evt) { + OnEvent(evt: TEvt) { this.#onLogin?.(evt.params); } - OnMessage_(topic, data) { + OnMessage_(topic: string, data?: any) { return this.#fsm.OnMessage(topic, data); } }; + interface IClient { + ID: string + } // onLogin, OnLogin is confusing. Rename once I know the purpose. class LoginQueue { #clients: any; #onLogin: any; - constructor(onLogin) { + constructor(onLogin: any) { this.#clients = {}; this.#onLogin = onLogin; } - Add(client) { + Add(client: IClient) { this.#clients[client.ID] = new LoginClient( client, (e) => { this.OnLogin(client, e); }); } - *OnLogin(client, params) { + *OnLogin(client: IClient, params: any) { delete this.#clients[client.ID]; this.#onLogin(client, params); } }; - return { - LoginQueue: LoginQueue, - }; -})(); \ No newline at end of file + export {LoginQueue} \ No newline at end of file diff --git a/server/src/scripts/world-client.ts b/server/src/scripts/world-client.ts index c6cd48d3..eabc65cb 100644 --- a/server/src/scripts/world-client.ts +++ b/server/src/scripts/world-client.ts @@ -1,372 +1,372 @@ -import {quat, vec3} from 'gl-matrix'; - - -export const world_client = (() => { - - const _TIMEOUT = 600.0; +import { quat, vec3 } from 'gl-matrix'; +import { _TIMEOUT, EVENT_TYPES } from 'shared/src/constants'; +import type { WorldEntity } from './world-entity'; +import {SocketWrapper} from './world-server'; +import type {EntityManager} from 'shared/src/entity-manager' +class WorldClient { + entity: WorldEntity; + client: SocketWrapper; + #timeout: number; + entityCache: any = {}; + terrain_: any; + onDeath_: any; + fsm_: any; + deathTimer_!: number; + timeout_!: number; + + constructor(client: SocketWrapper, entity: WorldEntity) { + this.entity = entity; + + // Hack + this.entity.onEvent_ = (t: EVENT_TYPES, d?: any) => this.OnEntityEvent_(t, d); + + this.client = client; + this.client.onMessage = (e: EVENT_TYPES, d: any) => this.OnMessage_(e, d); + this.client.Send(EVENT_TYPES.WORLD_PLAYER, this.entity.CreatePlayerPacket_()); + this.client.Send(EVENT_TYPES.WORLD_STATS, this.entity.CreateStatsPacket_()); + + this.#timeout = _TIMEOUT; + + this.entityCache = {}; + + // Hack + entity.parent_ = this; + } - class WorldClient { - entity: any; - client: any; - #timeout: number; - entityCache: any = {}; - terrain_: any; - onDeath_: any; - fsm_: any; - deathTimer_: number; - timeout_: number; - - constructor(client, entity) { - this.entity = entity; + Destroy() { + this.client.Disconnect(); + this.client = null; - // Hack - this.entity.onEvent_ = (t, d) => this.OnEntityEvent_(t, d); + this.entity.Destroy(); + this.entity = null; + } - this.client = client; - this.client.onMessage = (e, d) => this.OnMessage_(e, d); - this.client.Send('world.player', this.entity .CreatePlayerPacket_()); - this.client.Send('world.stats', this.entity .CreateStatsPacket_()); + OnDeath() { } - this.#timeout = _TIMEOUT; + OnEntityEvent_(t: EVENT_TYPES, d: any) { + if (t == EVENT_TYPES.ATTACK_DAMAGE) { + this.OnDamageEvent_(d); + } + } - this.entityCache = {}; + OnMessage_(evt: EVENT_TYPES, data: any) { + this.#timeout = _TIMEOUT; - // Hack - entity.parent_ = this; + if (evt == EVENT_TYPES.WORLD_UPDATE) { + this.entity.UpdateTransform(data); + return true; } - Destroy() { - this.client.Disconnect(); - this.client = null; - - this.entity.Destroy(); - this.entity = null; + if (evt == EVENT_TYPES.CHAT_MSG) { + this.OnChatMessage_(data); + return true; } - OnDeath() {} + if (evt == EVENT_TYPES.ACTION_ATTACK) { + this.entity.OnActionAttack(); + return true; + } - OnEntityEvent_(t, d) { - if (t == 'attack.damage') { - this.OnDamageEvent_(d); - } + if (evt == EVENT_TYPES.WORLD_INVENTORY) { + this.OnInventoryChanged_(data); + return true; } - OnMessage_(evt, data) { - this.#timeout = _TIMEOUT; + return false; + } - if (evt == 'world.update') { - this.entity.UpdateTransform(data); - return true; - } - - if (evt == 'chat.msg') { - this.OnChatMessage_(data); - return true; - } - - if (evt == 'action.attack') { - this.entity.OnActionAttack(); - return true; - } - - if (evt == 'world.inventory') { - this.OnInventoryChanged_(data); - return true; - } - - return false; - } + OnDamageEvent_(_: any) { } - OnDamageEvent_(_) {} + OnInventoryChanged_(inventory: []) { + this.entity.UpdateInventory(inventory); - OnInventoryChanged_(inventory) { - this.entity.UpdateInventory(inventory); - - // Todo: Merge this into entityCache path. - const nearby = this.entity.FindNear(50, true); + // Todo: Merge this into entityCache path. + const nearby = this.entity.FindNear(50, true); - for (let n of nearby) { - n.parent_.client.Send('world.inventory', [this.entity.ID, inventory]); - } + for (let n of nearby) { + n.parent_.client.Send(EVENT_TYPES.WORLD_INVENTORY, [this.entity.ID, inventory]); } + } - OnChatMessage_(message) { - const chatMessage = { - name: this.entity.accountInfo_.name, - text: message, - }; + OnChatMessage_(message) { + const chatMessage = { + name: this.entity.accountInfo_.name, + text: message, + }; - this.BroadcastChat(chatMessage); - } + this.BroadcastChat(chatMessage); + } - BroadcastChat(chatMessage) { - const nearby = this.entity.FindNear(50, true); - - for (let i = 0; i < nearby.length; ++i) { - const n = nearby[i]; - n.parent_.client.Send('chat.message', chatMessage); - } - } + BroadcastChat(chatMessage) { + const nearby = this.entity.FindNear(50, true); - get IsDead() { - return this.#timeout <= 0.0; + for (let i = 0; i < nearby.length; ++i) { + const n = nearby[i]; + // This is different from chat.msg? + n.parent_.client.Send(EVENT_TYPES.CHAT_MESSAGE, chatMessage); } + } - OnUpdate_(timeElapsed) {} + get IsDead() { + return this.#timeout <= 0.0; + } - OnUpdateClientState_() {} + OnUpdate_(timeElapsed) { } - UpdateClientState_() { - this.OnUpdateClientState_(); - } + OnUpdateClientState_() { } - Update(timeElapsed) { - this.#timeout -= timeElapsed; + UpdateClientState_() { + this.OnUpdateClientState_(); + } - this.entity.Update(timeElapsed); + Update(timeElapsed) { + this.#timeout -= timeElapsed; - this.OnUpdate_(timeElapsed); - } - }; + this.entity.Update(timeElapsed); + this.OnUpdate_(timeElapsed); + } +}; - class WorldNetworkClient extends WorldClient { - entity: any; - entityCache: any; - constructor(client, entity) { - super(client, entity); - this.entity - } - OnUpdate_(timeElapsed) { - } +class WorldNetworkClient extends WorldClient { + entity: any; + entityCache: any; + constructor(client, entity) { + super(client, entity); + this.entity + } - OnUpdateClientState_() { - const _Filter = (e) => { - return e.ID != this.entity.ID; + OnUpdate_(timeElapsed) { + } + + OnUpdateClientState_() { + const _Filter = (e) => { + return e.ID != this.entity.ID; + }; + + const nearby = this.entity.FindNear(500).filter(e => _Filter(e)); + + const updates = [{ + id: this.entity.ID, + stats: this.entity.CreateStatsPacket_(), + events: this.entity.CreateEventsPacket_(), + }]; + const newCache_ = {}; + + for (let n of nearby) { + // We could easily trim this down based on what we know + // this client saw last. Maybe do it later. + const cur = { + id: n.ID, + transform: n.CreateTransformPacket_(), + stats: n.CreateStatsPacket_(), + events: n.CreateEventsPacket_(), + desc: null, }; - const nearby = this.entity.FindNear(500).filter(e => _Filter(e)); - - const updates = [{ - id: this.entity.ID, - stats: this.entity.CreateStatsPacket_(), - events: this.entity.CreateEventsPacket_(), - }]; - const newCache_ = {}; - - for (let n of nearby) { - // We could easily trim this down based on what we know - // this client saw last. Maybe do it later. - const cur = { - id: n.ID, - transform: n.CreateTransformPacket_(), - stats: n.CreateStatsPacket_(), - events: n.CreateEventsPacket_(), - desc: null, - }; - - if (!(n.ID in this.entityCache)) { - cur.desc = n.GetDescription(); - } - - newCache_[n.ID] = cur; - updates.push(cur); + if (!(n.ID in this.entityCache)) { + cur.desc = n.GetDescription(); } - this.entityCache = newCache_; - - this.client.Send('world.update', updates); + newCache_[n.ID] = cur; + updates.push(cur); } - }; + this.entityCache = newCache_; - class AIStateMachine { - currentState_: any; - entity: any; - terrain_: any; - constructor(entity, terrain) { - this.currentState_ = null; - this.entity = entity; - this.terrain_ = terrain; - } + this.client.Send(EVENT_TYPES.WORLD_UPDATE, updates); + } +}; - SetState(state) { - const prevState = this.currentState_; - - if (prevState) { - if (prevState.constructor.name == state.constructor.name) { - return; - } - prevState.Exit(); - } - this.currentState_ = state; - this.currentState_.parent_ = this; - this.currentState_.entity = this.entity; - this.currentState_.terrain_ = this.terrain_; - state.Enter(prevState); - } +class AIStateMachine { + currentState_: any; + entity: any; + terrain_: EntityManager; + constructor(entity: WorldEntity, terrain: EntityManager) { + this.currentState_ = null; + this.entity = entity; + this.terrain_ = terrain; + } + + SetState(state: any) { + const prevState = this.currentState_; - Update(timeElapsed) { - if (this.currentState_) { - this.currentState_.Update(timeElapsed); + if (prevState) { + if (prevState.constructor.name == state.constructor.name) { + return; } + prevState.Exit(); } - }; - - class AIState { - timer_: number; - entity: any; - parent_: any; - target_: any; - terrain_: any; - constructor() {} - Exit() {} - Enter() {} - Update(timeElapsed) {} - } - class AIState_JustSitThere extends AIState { - constructor(target?:any) { - super(); + this.currentState_ = state; + this.currentState_.parent_ = this; + this.currentState_.entity = this.entity; + this.currentState_.terrain_ = this.terrain_; + state.Enter(prevState); + } - this.timer_ = 0.0; + Update(timeElapsed: number) { + if (this.currentState_) { + this.currentState_.Update(timeElapsed); } + } +}; + +class AIState { + timer_!: number; + entity: any; + parent_: any; + target_: any; + terrain_: any; + constructor() { } + Exit() { } + Enter() { } + Update(timeElapsed: number) { } +} + +class AIState_JustSitThere extends AIState { + constructor(target?: any) { + super(); + + this.timer_ = 0.0; + } - UpdateLogic_() { - const _IsPlayer = (e) => { - return !e.isAI; - }; - const nearby = this.entity.FindNear(50.0).filter(e => e.Health > 0).filter(_IsPlayer); + UpdateLogic_() { + const _IsPlayer = (e) => { + return !e.isAI; + }; + const nearby = this.entity.FindNear(50.0).filter(e => e.Health > 0).filter(_IsPlayer); - if (nearby.length > 0) { - this.parent_.SetState(new AIState_FollowToAttack(nearby[0])); - } + if (nearby.length > 0) { + this.parent_.SetState(new AIState_FollowToAttack(nearby[0])); } + } - Update(timeElapsed) { - this.timer_ += timeElapsed; - this.entity.SetState('idle'); + Update(timeElapsed) { + this.timer_ += timeElapsed; + this.entity.SetState('idle'); - if (this.timer_ > 5.0) { - this.UpdateLogic_(); - this.timer_ = 0.0; - } + if (this.timer_ > 5.0) { + this.UpdateLogic_(); + this.timer_ = 0.0; } - }; + } +}; - class AIState_FollowToAttack extends AIState { - constructor(target) { - super(); - this.target_ = target; - } +class AIState_FollowToAttack extends AIState { + constructor(target) { + super(); + this.target_ = target; + } - UpdateMovement_(timeElapsed) { - this.entity.state_ = 'walk'; + UpdateMovement_(timeElapsed) { + this.entity.state_ = 'walk'; - const direction = vec3.create(); - const forward = vec3.fromValues(0, 0, 1); + const direction = vec3.create(); + const forward = vec3.fromValues(0, 0, 1); - vec3.sub(direction, this.target_.position_, this.entity.position_); - direction[1] = 0.0; + vec3.sub(direction, this.target_.position_, this.entity.position_); + direction[1] = 0.0; - vec3.normalize(direction, direction); - quat.rotationTo(this.entity.rotation_, forward, direction); + vec3.normalize(direction, direction); + quat.rotationTo(this.entity.rotation_, forward, direction); - const movement = vec3.clone(direction); - vec3.scale(movement, movement, timeElapsed * 10.0); + const movement = vec3.clone(direction); + vec3.scale(movement, movement, timeElapsed * 10.0); - vec3.add(this.entity.position_, this.entity.position_, movement); + vec3.add(this.entity.position_, this.entity.position_, movement); - this.entity.position_[1] = this.terrain_.Get(...this.entity.position_)[0]; - this.entity.UpdateGridClient_(); + this.entity.position_[1] = this.terrain_.Get(...this.entity.position_)[0]; + this.entity.UpdateGridClient_(); - const distance = vec3.distance(this.entity.position_, this.target_.position_); + const distance = vec3.distance(this.entity.position_, this.target_.position_); - if (distance < 10.0) { - this.entity.OnActionAttack(); - this.parent_.SetState(new AIState_WaitAttackDone(this.target_)); - } else if (distance > 100.0) { - this.parent_.SetState(new AIState_JustSitThere()); - } + if (distance < 10.0) { + this.entity.OnActionAttack(); + this.parent_.SetState(new AIState_WaitAttackDone(this.target_)); + } else if (distance > 100.0) { + this.parent_.SetState(new AIState_JustSitThere()); } + } - Update(timeElapsed) { - if (!this.target_.Valid || this.target_.Health == 0) { - this.parent_.SetState(new AIState_JustSitThere(this.target_)); - return; - } - - this.UpdateMovement_(timeElapsed); + Update(timeElapsed: number) { + if (!this.target_.Valid || this.target_.Health == 0) { + this.parent_.SetState(new AIState_JustSitThere(this.target_)); + return; } - }; + this.UpdateMovement_(timeElapsed); + } +}; - class AIState_WaitAttackDone extends AIState { - constructor(target) { - super(); - this.target_ = target; - } - Update(_) { - this.entity.state_ = 'attack'; - if (this.entity.action_) { - return; - } +class AIState_WaitAttackDone extends AIState { + constructor(target: WorldEntity) { + super(); + this.target_ = target; + } - this.parent_.SetState(new AIState_FollowToAttack(this.target_)); + Update(_) { + this.entity.state_ = 'attack'; + if (this.entity.action_) { + return; } - }; - - class FakeClient { - constructor() {} - - Send(msg, data) {} + this.parent_.SetState(new AIState_FollowToAttack(this.target_)); + } +}; - Disconnect() {} - }; - class WorldAIClient extends WorldClient { - constructor(entity, terrain, onDeath) { - super(new FakeClient(), entity); - this.terrain_ = terrain; - this.onDeath_ = onDeath; - // Haha sorry - this.entity.isAI = true; +class FakeClient extends SocketWrapper { + constructor() { + super(null) + } - this.fsm_ = new AIStateMachine(entity, this.terrain_); - this.fsm_.SetState(new AIState_JustSitThere()); + Send(msg, data) { } - this.deathTimer_ = 0.0; - } + Disconnect() { } +}; - get IsDead() { - return this.deathTimer_ >= 30.0; - } +class WorldAIClient extends WorldClient { + constructor(entity: WorldEntity, terrain: EntityManager, onDeath) { + super(new FakeClient(), entity); + this.terrain_ = terrain; + this.onDeath_ = onDeath; + // Haha sorry + this.entity.isAI = true; - OnDeath() { - this.onDeath_(); - } + this.fsm_ = new AIStateMachine(entity, this.terrain_); + this.fsm_.SetState(new AIState_JustSitThere()); - OnUpdateClientState_() {} + this.deathTimer_ = 0.0; + } - OnUpdate_(timeElapsed) { - // Never times out - this.timeout_ = 1000.0; + get IsDead() { + return this.deathTimer_ >= 30.0; + } - if (this.entity.Health > 0) { - this.fsm_.Update(timeElapsed); - } else { - this.deathTimer_ += timeElapsed; - } - } - }; + OnDeath() { + this.onDeath_(); + } + OnUpdateClientState_() { } + + OnUpdate_(timeElapsed: number) { + // Never times out + this.timeout_ = 1000.0; + + if (this.entity.Health > 0) { + this.fsm_.Update(timeElapsed); + } else { + this.deathTimer_ += timeElapsed; + } + } +}; - return { - WorldNetworkClient: WorldNetworkClient, - WorldAIClient: WorldAIClient, - }; -})(); \ No newline at end of file +export { + WorldNetworkClient, + WorldAIClient, + WorldClient, +} \ No newline at end of file diff --git a/server/src/scripts/world-entity.ts b/server/src/scripts/world-entity.ts index 24b30046..22ec86fd 100644 --- a/server/src/scripts/world-entity.ts +++ b/server/src/scripts/world-entity.ts @@ -1,290 +1,298 @@ -import {quat, vec3} from 'gl-matrix'; +import { quat, vec3 } from 'gl-matrix'; -import {defs} from 'shared/src/defs'; -import {STATE_TYPES, EVENT_TYPES, ATTACK_TYPES} from 'shared/src/constants' +import { WEAPONS_DATA } from 'shared/src/defs'; +import { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES } from 'shared/src/constants' +// import { IWorldEntity } from 'shared/src/globaltypes'; +import type {WorldClient} from "./world-client"; +class Action_Attack { + #onAction: any; + #time: number; + #cooldown: number; + #timeElapsed: number; -export const world_entity = (() => { + constructor(time: number, cooldown: number, onAction: () => void) { + this.#onAction = onAction; + this.#time = time; + this.#cooldown = cooldown; + this.#timeElapsed = 0.0; + } - class Action_Attack { - #onAction: any; - #time: number; - #cooldown: number; - #timeElapsed: number; + get Finished() { + return this.#timeElapsed > this.#cooldown; + } - constructor(time, cooldown, onAction) { - this.#onAction = onAction; - this.#time = time; - this.#cooldown = cooldown; - this.#timeElapsed = 0.0; + Update(timeElapsed: number) { + const oldTimeElapsed = this.#timeElapsed; + this.#timeElapsed += timeElapsed; + if (this.#timeElapsed > this.#time && + oldTimeElapsed <= this.#time) { + this.#onAction(); } - - get Finished() { - return this.#timeElapsed > this.#cooldown; - } - - Update(timeElapsed) { - const oldTimeElapsed = this.#timeElapsed; - this.#timeElapsed += timeElapsed; - if (this.#timeElapsed > this.#time && - oldTimeElapsed <= this.#time) { - this.#onAction(); - } - } - }; - - class WorldEntity { - id_: string; - state_: string; - position_: vec3; - rotation_: quat; - accountInfo_: { - name: string; - } - characterDefinition_: any; - characterInfo_: { - class: any; - inventory: any; + } +}; + +// interface IWorldEntity { +// Destroy: () => void, +// ID: string, +// Valid: boolean, +// Health: number, +// GetDescription: () => any, +// CreatePlayerPacket_: () => any, +// CreateStatsPacket_: () => any, +// CreateEventsPacket_: () => any, +// CreateTransformPacket_: () => any, +// UpdateInventory: (inventory: []) => void, +// } + +class WorldEntity { + id_; + state_; + position_; + rotation_; + accountInfo_: any; + characterDefinition_; + characterInfo_: any; + stats_: any; + events_: any; + grid_; + gridClient_; + updateTimer_; + action_: any; + parent_!: WorldClient; + isAI!: boolean; + + constructor(params: any) { + this.id_ = params.id; + this.state_ = STATE_TYPES.IDLE; + this.position_ = vec3.clone(params.position); + this.rotation_ = quat.clone(params.rotation); + + // HACK + this.accountInfo_ = { + name: params.account.accountName, }; - stats_: any; - events_: any[]; - grid_: any; - gridClient_: any; - updateTimer_: number; - action_: any; - - constructor(params) { - this.id_ = params.id; - this.state_ = STATE_TYPES.IDLE; - this.position_ = vec3.clone(params.position); - this.rotation_ = quat.clone(params.rotation); - - // HACK - this.accountInfo_ = { - name: params.account.accountName, - }; - this.characterDefinition_ = params.character.definition; - this.characterInfo_ = { - class: params.character.class, - inventory: {...this.characterDefinition_.inventory}, - }; - this.stats_ = {...this.characterDefinition_.stats}; - this.events_ = []; - this.grid_ = params.grid; - this.gridClient_ = this.grid_.NewClient( - [this.position_[0], this.position_[2]], [10, 10]); - this.gridClient_.entity = this; - - this.updateTimer_ = 0.0; - this.action_ = null; - } + this.characterDefinition_ = params.character.definition; + this.characterInfo_ = { + class: params.character.class, + inventory: { ...this.characterDefinition_.inventory }, + }; + this.stats_ = { ...this.characterDefinition_.stats }; + this.events_ = []; + this.grid_ = params.grid; + this.gridClient_ = this.grid_.NewClient( + [this.position_[0], this.position_[2]], [10, 10]); + this.gridClient_.entity = this; - Destroy() { - this.grid_.Remove(this.gridClient_); - this.gridClient_ = null; - } - - get ID() { - return this.id_; - } + this.updateTimer_ = 0.0; + this.action_ = null; + } - get Valid() { - return this.gridClient_ != null; - } - - get Health() { - return this.stats_.health; - } + Destroy() { + this.grid_.Remove(this.gridClient_); + this.gridClient_ = null; + } - GetDescription() { - return { - account: this.accountInfo_, - character: this.characterInfo_, - }; - } - - CreatePlayerPacket_() { - return { - id: this.ID, - desc: this.GetDescription(), - transform: this.CreateTransformPacket_(), - }; - } - - CreateStatsPacket_() { - return [this.ID, this.stats_]; - } - - CreateEventsPacket_() { - return this.events_; - } + get ID() { + return this.id_; + } - CreateTransformPacket_() { - return [ - this.state_, - [...this.position_], - [...this.rotation_], - ]; - } - - UpdateTransform(transformData: [string, vec3, quat] ) { - const newState = transformData[0]; - const [vecX, vecY, vecZ] = transformData[1]; - const [quatX, quatY, quatZ, quatW] = transformData[2] - - if (this.stats_.health <= 0) { - this.SetState(STATE_TYPES.DEATH); - } - - this.state_ = transformData[0] - - this.position_ = vec3.fromValues(vecX, vecY, vecZ); - this.rotation_ = quat.fromValues(quatX, quatY, quatZ, quatW); + get Valid() { + return this.gridClient_ != null; + } - this.UpdateGridClient_(); - } + get Health() { + return this.stats_.health; + } + + GetDescription() { + return { + account: this.accountInfo_, + character: this.characterInfo_, + }; + } + + CreatePlayerPacket_() { + return { + id: this.ID, + desc: this.GetDescription(), + transform: this.CreateTransformPacket_(), + }; + } - UpdateGridClient_() { - this.gridClient_.position = [this.position_[0], this.position_[2]]; - this.grid_.UpdateClient(this.gridClient_); + CreateStatsPacket_() { + return [this.ID, this.stats_]; + } + + CreateEventsPacket_() { + return this.events_; + } + + CreateTransformPacket_() { + return [ + this.state_, + [...this.position_], + [...this.rotation_], + ]; + } + + UpdateTransform(transformData: [STATE_TYPES, vec3, quat]) { + const newState = transformData[0]; + const [vecX, vecY, vecZ] = transformData[1]; + const [quatX, quatY, quatZ, quatW] = transformData[2] + + if (this.stats_.health <= 0) { + this.SetState(STATE_TYPES.DEATH); } - - UpdateInventory(inventory) { - this.characterInfo_.inventory = inventory; + + this.state_ = transformData[0] + + this.position_ = vec3.fromValues(vecX, vecY, vecZ); + this.rotation_ = quat.fromValues(quatX, quatY, quatZ, quatW); + + this.UpdateGridClient_(); + } + + UpdateGridClient_() { + this.gridClient_.position = [this.position_[0], this.position_[2]]; + this.grid_.UpdateClient(this.gridClient_); + } + + UpdateInventory(inventory: []) { + this.characterInfo_.inventory = inventory; + } + + OnActionAttack() { + if (this.action_) { + return; } - OnActionAttack() { - if (this.action_) { - return; - } - - this.action_ = new Action_Attack( - this.characterDefinition_.attack.timing, - this.characterDefinition_.attack.cooldown, - () => { + this.action_ = new Action_Attack( + this.characterDefinition_.attack.timing, + this.characterDefinition_.attack.cooldown, + () => { this.OnActionAttack_Fired(); }); - } - - OnActionAttack_Fired() { - // wheee hardcoded :( - const nearby = this.FindNear(50.0); - - const _Filter = (c) => { - if (c.Health == 0) { - return false; - } + } - const dist = vec3.distance(c.position_, this.position_); - return dist <= this.characterDefinition_.attack.range; - }; - - const attackable = nearby.filter(_Filter); - for (let a of attackable) { - const target = a; - - const dirToTarget = vec3.create(); - vec3.sub(dirToTarget, target.position_, this.position_); - vec3.normalize(dirToTarget, dirToTarget); - - const forward = vec3.fromValues(0, 0, 1); - vec3.transformQuat(forward, forward, this.rotation_); - vec3.normalize(forward, forward); - - const dot = vec3.dot(forward, dirToTarget); - if (dot < 0.9 || dot > 1.1) { - continue; - } + OnActionAttack_Fired() { + // wheee hardcoded :( + const nearby = this.FindNear(50.0); - // Calculate damage, use equipped weapon + whatever, this will be bad. - let damage = 0; - - console.log('attacking: ' + target.accountInfo_.name); - - if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { - damage = (this.stats_.strength / 5.0); - - const equipped = this.characterInfo_.inventory['inventory-equip-1']; - if (equipped) { - console.log(' equipped: ' + equipped); - const weapon = defs.WEAPONS_DATA[equipped]; - if (weapon) { - damage *= weapon.damage * 10; - } - } - } else { - damage = (this.stats_.wisdomness / 10.0); - } + const _Filter = (c: { Health: number, position_: vec3 }) => { + if (c.Health == 0) { + return false; + } + + const dist = vec3.distance(c.position_, this.position_); + return dist <= this.characterDefinition_.attack.range; + }; + + const attackable = nearby.filter(_Filter); + for (let a of attackable) { + const target = a; + + const dirToTarget = vec3.create(); + vec3.sub(dirToTarget, target.position_, this.position_); + vec3.normalize(dirToTarget, dirToTarget); - console.log(' damage: ' + damage); - - target.OnDamage(this, damage); - - this.onEvent_(EVENT_TYPES.ATTACK_DAMAGE, {target: target, damage: damage}); + const forward = vec3.fromValues(0, 0, 1); + vec3.transformQuat(forward, forward, this.rotation_); + vec3.normalize(forward, forward); + + const dot = vec3.dot(forward, dirToTarget); + if (dot < 0.9 || dot > 1.1) { + continue; } - } - onEvent_(eventType: string, data) { - console.error("This is the fake error Jeremy put in to see if this undefined onEvent_ function was ever called.") - } - - OnDamage(attacker, damage) { - this.stats_.health -= damage; - this.stats_.health = Math.max(0.0, this.stats_.health); - this.events_.push({ - type: EVENT_TYPES.ATTACK, - target: this.ID, - attacker: attacker.ID, - amount: damage - }); - - if (this.stats_.health <= 0) { - this.SetState(STATE_TYPES.DEATH); + // Calculate damage, use equipped weapon + whatever, this will be bad. + let damage = 0; + + console.log('attacking: ' + target.accountInfo_.name); + + if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { + damage = (this.stats_.strength / 5.0); + // TS hack. Should move this definition up. + const equipped = this.characterInfo_.inventory['inventory-equip-1'] as string; + const weaponsData = WEAPONS_DATA as { [key: string]: any }; + + if (equipped) { + console.log(' equipped: ' + equipped); + const weapon = weaponsData[equipped] as { damage: number }; + if (weapon) { + damage *= weapon.damage * 10; + } + } + } else { + damage = (this.stats_.wisdomness / 10.0); } + + console.log(' damage: ' + damage); + + target.OnDamage(this, damage); + + this.onEvent_(EVENT_TYPES.ATTACK_DAMAGE, { target: target, damage: damage }); } - - SetState(s) { - if (this.state_ != STATE_TYPES.DEATH) { - this.state_ = s; - } + } + + onEvent_(eventType: string, data: any) { + console.error("This is the fake error Jeremy put in to see if this undefined onEvent_ function was ever called.") + } + + OnDamage(attacker: WorldEntity, damage: number) { + this.stats_.health -= damage; + this.stats_.health = Math.max(0.0, this.stats_.health); + this.events_.push({ + type: EVENT_TYPES.ATTACK, + target: this.ID, + attacker: attacker.ID, + amount: damage + }); + + if (this.stats_.health <= 0) { + this.SetState(STATE_TYPES.DEATH); } + } - FindNear(radius, includeSelf?: boolean) { - let nearby = this.grid_.FindNear( - [this.position_[0], this.position_[2]], [radius, radius]).map(c => c.entity); - - if (!includeSelf) { - const _Filter = (e) => { - return e.ID != this.ID; - }; - nearby = nearby.filter(_Filter); - } - return nearby; + // this seems wrong to me. TS doesn't have a typeof ENUM it seems. + SetState(s: STATE_TYPES) { + if (this.state_ != STATE_TYPES.DEATH) { + this.state_ = s; } - - Update(timeElapsed) { - this.UpdateActions_(timeElapsed); + } + + FindNear(radius: number, includeSelf?: boolean) { + let nearby = this.grid_.FindNear( + [this.position_[0], this.position_[2]], [radius, radius]).map((c: any) => c.entity); + + if (!includeSelf) { + const _Filter = (e: WorldEntity) => { + return e.ID != this.ID; + }; + nearby = nearby.filter(_Filter); } - - UpdateActions_(timeElapsed) { - if (!this.action_) { - // Hack, again, should move this all through events - if (this.state_ == STATE_TYPES.ATTACK) { - this.SetState(STATE_TYPES.IDLE); - } - return; - } - - this.action_.Update(timeElapsed); - if (this.action_.Finished) { - this.action_ = null; + return nearby; + } + + Update(timeElapsed: number) { + this.UpdateActions_(timeElapsed); + } + + UpdateActions_(timeElapsed: number) { + if (!this.action_) { + // Hack, again, should move this all through events + if (this.state_ == STATE_TYPES.ATTACK) { this.SetState(STATE_TYPES.IDLE); } + return; } - }; + this.action_.Update(timeElapsed); + if (this.action_.Finished) { + this.action_ = null; + this.SetState(STATE_TYPES.IDLE); + } + } +}; - return { - WorldEntity: WorldEntity, - }; -})(); \ No newline at end of file +export { WorldEntity, Action_Attack }; \ No newline at end of file diff --git a/server/src/scripts/world-manager.ts b/server/src/scripts/world-manager.ts index 659555dd..5bb8f6e4 100644 --- a/server/src/scripts/world-manager.ts +++ b/server/src/scripts/world-manager.ts @@ -1,181 +1,189 @@ -import {quat, vec3} from 'gl-matrix'; - -import {world_client} from './world-client.mjs'; -import {world_entity} from './world-entity.mjs'; - -import {spatial_hash_grid} from '../../client/shared/spatial-hash-grid.mjs'; -import {terrain_height} from '../../client/shared/terrain-height.mjs'; -import {defs} from '../../client/shared/defs.mjs'; - - -export const world_manager = (() => { - - - class MonsterSpawner { - constructor(params) { - this.parent_ = params.parent; - this.grid_ = this.parent_.grid_; - this.terrain_ = this.parent_.terrain_; - this.pos_ = params.pos; - this.pos_[1] = this.terrain_.Get(...params.pos)[0]; - this.params_ = params; +import { quat, vec3 } from 'gl-matrix'; + +import { WorldAIClient, WorldNetworkClient } from './world-client'; +import { WorldEntity } from './world-entity'; + +import { SpatialHashGrid } from 'shared/src/spatial-hash-grid'; +import { HeightGenerator } from 'shared/src/terrain-height'; +import { CHARACTER_MODELS } from 'shared/src/defs'; + +class MonsterSpawner { + parent_: any; + grid_: any; + terrain_: any; + pos_: any; + params_: any; + entity_: any; + + constructor(params) { + this.parent_ = params.parent; + this.grid_ = this.parent_.grid_; + this.terrain_ = this.parent_.terrain_; + this.pos_ = params.pos; + this.pos_[1] = this.terrain_.Get(...params.pos)[0]; + this.params_ = params; + } + + Spawn_() { + // Hack + const e = new WorldEntity({ + id: this.parent_.ids_++, + position: vec3.clone(this.pos_), + rotation: quat.fromValues(0, 0, 0, 1), + grid: this.grid_, + character: { + definition: CHARACTER_MODELS[this.params_.class], + class: this.params_.class, + }, + account: { accountName: CHARACTER_MODELS[this.params_.class].name }, + }); + + const wc = new WorldAIClient(e, this.terrain_, () => { + this.entity_ = null; + console.log('entity gone, spawner making now one soon'); + }); + + this.parent_.AddMonster(wc); + + this.entity_ = wc; + } + + Update(timeElapsed) { + if (!this.entity_) { + this.Spawn_(); } - - Spawn_() { - // Hack - const e = new world_entity.WorldEntity({ - id: this.parent_.ids_++, - position: vec3.clone(this.pos_), - rotation: quat.fromValues(0, 0, 0, 1), - grid: this.grid_, - character: { - definition: defs.CHARACTER_MODELS[this.params_.class], - class: this.params_.class, - }, - account: {accountName: defs.CHARACTER_MODELS[this.params_.class].name}, - }); - - const wc = new world_client.WorldAIClient(e, this.terrain_, () => { - this.entity_ = null; - console.log('entity gone, spawner making now one soon'); - }); - - this.parent_.AddMonster(wc); - - this.entity_ = wc; - } - - Update(timeElapsed) { - if (!this.entity_) { - this.Spawn_(); - } - } - }; - - - const _TICK_RATE = 0.1; - - class WorldManager { - constructor() { - this.ids_ = 0; - this.entities_ = []; - this.grid_ = new spatial_hash_grid.SpatialHashGrid( - [[-4000, -4000], [4000, 4000]], [1000, 1000] - ); - - this.terrain_ = new terrain_height.HeightGenerator(); - - this.spawners_ = []; - this.tickTimer_ = 0.0; - - // Hack - for (let x = -40; x <= 40; ++x) { - for (let z = -40; z <= 40; ++z) { + } +}; + + +const _TICK_RATE = 0.1; + +class WorldManager { + ids_: number; + entities_: any[]; + grid_: any; + terrain_: any; + spawners_: any[]; + tickTimer_: number; + constructor(params) { + this.ids_ = 0; + this.entities_ = []; + this.grid_ = new SpatialHashGrid( + [[-4000, -4000], [4000, 4000]], [1000, 1000] + ); + + this.terrain_ = new HeightGenerator(); + + this.spawners_ = []; + this.tickTimer_ = 0.0; + + // Hack + for (let x = -40; x <= 40; ++x) { + for (let z = -40; z <= 40; ++z) { + if (Math.random() < 0.1) { + const pos = vec3.fromValues(x * 75, 0, z * 75); if (Math.random() < 0.1) { - const pos = vec3.fromValues(x * 75, 0, z * 75); - if (Math.random() < 0.1) { - this.spawners_.push(new MonsterSpawner({ - parent: this, pos: pos, class: 'warrok'})); - } else { - this.spawners_.push(new MonsterSpawner({ - parent: this, pos: pos, class: 'zombie'})); - } + this.spawners_.push(new MonsterSpawner({ + parent: this, pos: pos, class: 'warrok' + })); + } else { + this.spawners_.push(new MonsterSpawner({ + parent: this, pos: pos, class: 'zombie' + })); } } } } + } + + AddMonster(e) { + this.entities_.push(e); + } + + Add(client, params) { + const models = ['sorceror', 'paladin']; + const randomClass = models[ + Math.floor(Math.random() * models.length)]; + + // Hack + const e = new WorldEntity({ + id: this.ids_++, + position: vec3.fromValues( + -60 + (Math.random() * 2 - 1) * 20, + 0, + (Math.random() * 2 - 1) * 20), + rotation: quat.fromValues(0, 0, 0, 1), + grid: this.grid_, + character: { + definition: CHARACTER_MODELS[randomClass], + class: randomClass, + }, + account: params, + }); + + const wc = new WorldNetworkClient(client, e); + + this.entities_.push(wc); + + wc.BroadcastChat({ + name: '', + server: true, + text: '[' + params.accountName + ' has entered the game]' + }); + } + + Update(timeElapsed) { + this.TickClientState_(timeElapsed); + this.UpdateEntities_(timeElapsed); + this.UpdateSpawners_(timeElapsed); + } + + TickClientState_(timeElapsed) { + this.tickTimer_ += timeElapsed; + if (this.tickTimer_ < _TICK_RATE) { + return; + } - AddMonster(e) { - this.entities_.push(e); + this.tickTimer_ = 0.0; + + for (let i = 0; i < this.entities_.length; ++i) { + this.entities_[i].UpdateClientState_(); } - - Add(client, params) { - const models = ['sorceror', 'paladin']; - const randomClass = models[ - Math.floor(Math.random() * models.length)]; - - // Hack - const e = new world_entity.WorldEntity({ - id: this.ids_++, - position: vec3.fromValues( - -60 + (Math.random() * 2 - 1) * 20, - 0, - (Math.random() * 2 - 1) * 20), - rotation: quat.fromValues(0, 0, 0, 1), - grid: this.grid_, - character: { - definition: defs.CHARACTER_MODELS[randomClass], - class: randomClass, - }, - account: params, - }); - - const wc = new world_client.WorldNetworkClient(client, e); - - this.entities_.push(wc); - - wc.BroadcastChat({ - name: '', - server: true, - text: '[' + params.accountName + ' has entered the game]' - }); + for (let i = 0; i < this.entities_.length; ++i) { + this.entities_[i].entity_.events_ = []; } - - Update(timeElapsed) { - this.TickClientState_(timeElapsed); - this.UpdateEntities_(timeElapsed); - this.UpdateSpawners_(timeElapsed); + } + + UpdateSpawners_(timeElapsed) { + for (let i = 0; i < this.spawners_.length; ++i) { + this.spawners_[i].Update(timeElapsed); } + } - TickClientState_(timeElapsed) { - this.tickTimer_ += timeElapsed; - if (this.tickTimer_< _TICK_RATE) { - return; - } + UpdateEntities_(timeElapsed) { + const dead = []; + const alive = []; - this.tickTimer_ = 0.0; + for (let i = 0; i < this.entities_.length; ++i) { + const e = this.entities_[i]; - for (let i = 0; i < this.entities_.length; ++i) { - this.entities_[i].UpdateClientState_(); - } - for (let i = 0; i < this.entities_.length; ++i) { - this.entities_[i].entity_.events_ = []; - } - } + e.Update(timeElapsed); - UpdateSpawners_(timeElapsed) { - for (let i = 0; i < this.spawners_.length; ++i) { - this.spawners_[i].Update(timeElapsed); + if (e.IsDead) { + console.log('killed it off'); + dead.push(e); + } else { + alive.push(e); } } - - UpdateEntities_(timeElapsed) { - const dead = []; - const alive = []; - - for (let i = 0; i < this.entities_.length; ++i) { - const e = this.entities_[i]; - - e.Update(timeElapsed); - - if (e.IsDead) { - console.log('killed it off'); - dead.push(e); - } else { - alive.push(e); - } - } - - this.entities_ = alive; - for (let d of dead) { - d.OnDeath(); - d.Destroy(); - } + this.entities_ = alive; + + for (let d of dead) { + d.OnDeath(); + d.Destroy(); } - }; - - return { - WorldManager: WorldManager, - }; -})(); \ No newline at end of file + } +}; + +export { WorldManager } \ No newline at end of file diff --git a/server/src/scripts/world-server.ts b/server/src/scripts/world-server.ts index 6b0529b2..31041626 100644 --- a/server/src/scripts/world-server.ts +++ b/server/src/scripts/world-server.ts @@ -1,97 +1,100 @@ -import {performance} from 'perf_hooks'; +import { performance } from 'perf_hooks'; +import {EVENT_TYPES} from 'shared/src/constants' +import { WorldManager } from './world-manager'; +import { LoginQueue } from './login-queue'; -import {world_manager} from './world-manager.mjs'; -import {login_queue} from './login-queue.mjs'; +class SocketWrapper { + socket_: any; + dead_: boolean; + constructor(params) { + this.socket_ = params.socket; + this.onMessage = null; + this.dead_ = false; + this.SetupSocket_(); + } -export const world_server = (() => { + get ID() { + return this.socket_.id; + } + get IsAlive() { + return !this.dead_; + } - class SocketWrapper { - constructor(params) { - this.socket_ = params.socket; - this.onMessage = null; - this.dead_ = false; - this.SetupSocket_(); - } - - get ID() { - return this.socket_.id; - } - - get IsAlive() { - return !this.dead_; - } - - SetupSocket_() { - this.socket_.on('user-connected', () => { - console.log('socket.id: ' + socket.id); - }); - this.socket_.on('disconnect', () => { - console.log('Client disconnected.'); - this.dead_ = true; - }); - this.socket_.onAny((e, d) => { - try { - if (!this.onMessage(e, d)) { - console.log('Unknown command (' + e + '), disconnected.'); - this.Disconnect(); - } - } catch (err) { - console.error(err); + SetupSocket_() { + this.socket_.on('user-connected', () => { + console.log('socket.id: ' + this.socket_.id); + }); + this.socket_.on('disconnect', () => { + console.log('Client disconnected.'); + this.dead_ = true; + }); + this.socket_.onAny((e: EVENT_TYPES, d: any) => { + try { + if (!this.onMessage(e, d)) { + console.log('Unknown command (' + e + '), disconnected.'); this.Disconnect(); } - }); - } - - Disconnect() { - this.socket_.disconnect(true); - } - - Send(msg, data) { - this.socket_.emit(msg, data); - } - }; + } catch (err) { + console.error(err); + this.Disconnect(); + } + }); + } + Disconnect() { + this.socket_.disconnect(true); + } - class WorldServer { - constructor(io) { - this.loginQueue_ = new login_queue.LoginQueue( - (c, p) => { this.OnLogin_(c, p); }); + Send(msg: EVENT_TYPES, data) { + this.socket_.emit(msg, data); + } + onMessage(e: EVENT_TYPES, d: any) {return false} +}; - this.worldMgr_ = new world_manager.WorldManager({parent: this}); - this.SetupIO_(io); - } - - SetupIO_(io) { - io.on('connection', socket => { - this.loginQueue_.Add(new SocketWrapper({socket: socket})); - }); - } - - OnLogin_(client, params) { - this.worldMgr_.Add(client, params); - } - - Run() { - let t1 = performance.now(); - this.Schedule_(t1); - } - - Schedule_(t1) { - setTimeout(() => { - let t2 = performance.now(); - this.Update_((t2 - t1) * 0.001); - this.Schedule_(t2); - }); - } + +class WorldServer { + loginQueue_: LoginQueue; + worldMgr_: WorldManager; - Update_(timeElapsed) { - this.worldMgr_.Update(timeElapsed); - } - }; - - return { - WorldServer: WorldServer, - }; -})(); \ No newline at end of file + constructor(io) { + this.loginQueue_ = new LoginQueue( + (c, p) => { this.OnLogin_(c, p); }); + + this.worldMgr_ = new WorldManager({ parent: this }); + this.SetupIO_(io); + } + + SetupIO_(io) { + io.on('connection', socket => { + this.loginQueue_.Add(new SocketWrapper({ socket: socket })); + }); + } + + OnLogin_(client, params) { + this.worldMgr_.Add(client, params); + } + + Run() { + let t1 = performance.now(); + this.Schedule_(t1); + } + + Schedule_(t1) { + setTimeout(() => { + let t2 = performance.now(); + this.Update_((t2 - t1) * 0.001); + this.Schedule_(t2); + }); + } + + Update_(timeElapsed) { + this.worldMgr_.Update(timeElapsed); + } +}; + +export { + WorldServer, + SocketWrapper +} \ No newline at end of file diff --git a/shared/dist/OrbitControls.d.ts b/shared/dist/OrbitControls.d.ts new file mode 100644 index 00000000..a32f3200 --- /dev/null +++ b/shared/dist/OrbitControls.d.ts @@ -0,0 +1,4 @@ +declare var OrbitControls: (object: any, domElement: any) => void; +declare var MapControls: (object: any, domElement: any) => void; +export { OrbitControls, MapControls }; +//# sourceMappingURL=OrbitControls.d.ts.map \ No newline at end of file diff --git a/shared/dist/OrbitControls.d.ts.map b/shared/dist/OrbitControls.d.ts.map new file mode 100644 index 00000000..789423dc --- /dev/null +++ b/shared/dist/OrbitControls.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"OrbitControls.d.ts","sourceRoot":"","sources":["../src/OrbitControls.ts"],"names":[],"mappings":"AAiBA,QAAA,IAAI,aAAa,wCAkpChB,CAAC;AAcF,QAAA,IAAI,WAAW,wCAYd,CAAC;AAKF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC"} \ No newline at end of file diff --git a/shared/dist/OrbitControls.js b/shared/dist/OrbitControls.js new file mode 100644 index 00000000..b1fe3ec7 --- /dev/null +++ b/shared/dist/OrbitControls.js @@ -0,0 +1,751 @@ +import { EventDispatcher, MOUSE, Quaternion, Spherical, TOUCH, Vector2, Vector3 } from 'three'; +// This set of controls performs orbiting, dollying (zooming), and panning. +// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). +// +// Orbit - left mouse / touch: one-finger move +// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish +// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move +var OrbitControls = function (object, domElement) { + if (domElement === undefined) + console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.'); + if (domElement === document) + console.error('THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'); + this.object = object; + this.domElement = domElement; + // Set to false to disable this control + this.enabled = true; + // "target" sets the location of focus, where the object orbits around + this.target = new Vector3(); + // How far you can dolly in and out ( PerspectiveCamera only ) + this.minDistance = 0; + this.maxDistance = Infinity; + // How far you can zoom in and out ( OrthographicCamera only ) + this.minZoom = 0; + this.maxZoom = Infinity; + // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI; // radians + // How far you can orbit horizontally, upper and lower limits. + // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI ) + this.minAzimuthAngle = -Infinity; // radians + this.maxAzimuthAngle = Infinity; // radians + // Set to true to enable damping (inertia) + // If damping is enabled, you must call controls.update() in your animation loop + this.enableDamping = false; + this.dampingFactor = 0.05; + // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. + // Set to false to disable zooming + this.enableZoom = true; + this.zoomSpeed = 1.0; + // Set to false to disable rotating + this.enableRotate = true; + this.rotateSpeed = 1.0; + // Set to false to disable panning + this.enablePan = true; + this.panSpeed = 1.0; + this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up + this.keyPanSpeed = 7.0; // pixels moved per arrow key push + // Set to true to automatically rotate around the target + // If auto-rotate is enabled, you must call controls.update() in your animation loop + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + // Set to false to disable use of the keys + this.enableKeys = true; + // The four arrow keys + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + // Mouse buttons + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; + // Touch fingers + this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }; + // for reset + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + // + // public methods + // + this.getPolarAngle = function () { + return spherical.phi; + }; + this.getAzimuthalAngle = function () { + return spherical.theta; + }; + this.saveState = function () { + scope.target0.copy(scope.target); + scope.position0.copy(scope.object.position); + scope.zoom0 = scope.object.zoom; + }; + this.reset = function () { + scope.target.copy(scope.target0); + scope.object.position.copy(scope.position0); + scope.object.zoom = scope.zoom0; + scope.object.updateProjectionMatrix(); + scope.dispatchEvent(changeEvent); + scope.update(); + state = STATE.NONE; + }; + // this method is exposed, but perhaps it would be better if we can make it private... + this.update = function () { + var offset = new Vector3(); + // so camera.up is the orbit axis + var quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0)); + var quatInverse = quat.clone().invert(); + var lastPosition = new Vector3(); + var lastQuaternion = new Quaternion(); + var twoPI = 2 * Math.PI; + return function update() { + var position = scope.object.position; + offset.copy(position).sub(scope.target); + // rotate offset to "y-axis-is-up" space + offset.applyQuaternion(quat); + // angle from z-axis around y-axis + spherical.setFromVector3(offset); + if (scope.autoRotate && state === STATE.NONE) { + rotateLeft(getAutoRotationAngle()); + } + if (scope.enableDamping) { + spherical.theta += sphericalDelta.theta * scope.dampingFactor; + spherical.phi += sphericalDelta.phi * scope.dampingFactor; + } + else { + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + } + // restrict theta to be between desired limits + var min = scope.minAzimuthAngle; + var max = scope.maxAzimuthAngle; + if (isFinite(min) && isFinite(max)) { + if (min < -Math.PI) + min += twoPI; + else if (min > Math.PI) + min -= twoPI; + if (max < -Math.PI) + max += twoPI; + else if (max > Math.PI) + max -= twoPI; + if (min <= max) { + spherical.theta = Math.max(min, Math.min(max, spherical.theta)); + } + else { + spherical.theta = (spherical.theta > (min + max) / 2) ? + Math.max(min, spherical.theta) : + Math.min(max, spherical.theta); + } + } + // restrict phi to be between desired limits + spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); + spherical.makeSafe(); + spherical.radius *= scale; + // restrict radius to be between desired limits + spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius)); + // move target to panned location + if (scope.enableDamping === true) { + scope.target.addScaledVector(panOffset, scope.dampingFactor); + } + else { + scope.target.add(panOffset); + } + offset.setFromSpherical(spherical); + // rotate offset back to "camera-up-vector-is-up" space + offset.applyQuaternion(quatInverse); + position.copy(scope.target).add(offset); + scope.object.lookAt(scope.target); + if (scope.enableDamping === true) { + sphericalDelta.theta *= (1 - scope.dampingFactor); + sphericalDelta.phi *= (1 - scope.dampingFactor); + panOffset.multiplyScalar(1 - scope.dampingFactor); + } + else { + sphericalDelta.set(0, 0, 0); + panOffset.set(0, 0, 0); + } + scale = 1; + // update condition is: + // min(camera displacement, camera rotation in radians)^2 > EPS + // using small-angle approximation cos(x/2) = 1 - x^2 / 8 + if (zoomChanged || + lastPosition.distanceToSquared(scope.object.position) > EPS || + 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) { + scope.dispatchEvent(changeEvent); + lastPosition.copy(scope.object.position); + lastQuaternion.copy(scope.object.quaternion); + zoomChanged = false; + return true; + } + return false; + }; + }(); + this.dispose = function () { + scope.domElement.removeEventListener('contextmenu', onContextMenu, false); + scope.domElement.removeEventListener('pointerdown', onPointerDown, false); + scope.domElement.removeEventListener('wheel', onMouseWheel, false); + scope.domElement.removeEventListener('touchstart', onTouchStart, false); + scope.domElement.removeEventListener('touchend', onTouchEnd, false); + scope.domElement.removeEventListener('touchmove', onTouchMove, false); + scope.domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, false); + scope.domElement.ownerDocument.removeEventListener('pointerup', onPointerUp, false); + scope.domElement.removeEventListener('keydown', onKeyDown, false); + //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? + }; + // + // internals + // + var scope = this; + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; + var STATE = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + var state = STATE.NONE; + var EPS = 0.000001; + // current position in spherical coordinates + var spherical = new Spherical(); + var sphericalDelta = new Spherical(); + var scale = 1; + var panOffset = new Vector3(); + var zoomChanged = false; + var rotateStart = new Vector2(); + var rotateEnd = new Vector2(); + var rotateDelta = new Vector2(); + var panStart = new Vector2(); + var panEnd = new Vector2(); + var panDelta = new Vector2(); + var dollyStart = new Vector2(); + var dollyEnd = new Vector2(); + var dollyDelta = new Vector2(); + function getAutoRotationAngle() { + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + } + function getZoomScale() { + return Math.pow(0.95, scope.zoomSpeed); + } + function rotateLeft(angle) { + sphericalDelta.theta -= angle; + } + function rotateUp(angle) { + sphericalDelta.phi -= angle; + } + var panLeft = function () { + var v = new Vector3(); + return function panLeft(distance, objectMatrix) { + v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix + v.multiplyScalar(-distance); + panOffset.add(v); + }; + }(); + var panUp = function () { + var v = new Vector3(); + return function panUp(distance, objectMatrix) { + if (scope.screenSpacePanning === true) { + v.setFromMatrixColumn(objectMatrix, 1); + } + else { + v.setFromMatrixColumn(objectMatrix, 0); + v.crossVectors(scope.object.up, v); + } + v.multiplyScalar(distance); + panOffset.add(v); + }; + }(); + // deltaX and deltaY are in pixels; right and down are positive + var pan = function () { + var offset = new Vector3(); + return function pan(deltaX, deltaY) { + var element = scope.domElement; + if (scope.object.isPerspectiveCamera) { + // perspective + var position = scope.object.position; + offset.copy(position).sub(scope.target); + var targetDistance = offset.length(); + // half of the fov is center to top of screen + targetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0); + // we use only clientHeight here so aspect ratio does not distort speed + panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); + panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); + } + else if (scope.object.isOrthographicCamera) { + // orthographic + panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); + panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); + } + else { + // camera neither orthographic nor perspective + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.'); + scope.enablePan = false; + } + }; + }(); + function dollyOut(dollyScale) { + if (scope.object.isPerspectiveCamera) { + scale /= dollyScale; + } + else if (scope.object.isOrthographicCamera) { + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale)); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } + else { + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); + scope.enableZoom = false; + } + } + function dollyIn(dollyScale) { + if (scope.object.isPerspectiveCamera) { + scale *= dollyScale; + } + else if (scope.object.isOrthographicCamera) { + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale)); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } + else { + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); + scope.enableZoom = false; + } + } + // + // event callbacks - update the object state + // + function handleMouseDownRotate(event) { + rotateStart.set(event.clientX, event.clientY); + } + function handleMouseDownDolly(event) { + dollyStart.set(event.clientX, event.clientY); + } + function handleMouseDownPan(event) { + panStart.set(event.clientX, event.clientY); + } + function handleMouseMoveRotate(event) { + rotateEnd.set(event.clientX, event.clientY); + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + var element = scope.domElement; + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateStart.copy(rotateEnd); + scope.update(); + } + function handleMouseMoveDolly(event) { + dollyEnd.set(event.clientX, event.clientY); + dollyDelta.subVectors(dollyEnd, dollyStart); + if (dollyDelta.y > 0) { + dollyOut(getZoomScale()); + } + else if (dollyDelta.y < 0) { + dollyIn(getZoomScale()); + } + dollyStart.copy(dollyEnd); + scope.update(); + } + function handleMouseMovePan(event) { + panEnd.set(event.clientX, event.clientY); + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + scope.update(); + } + function handleMouseUp(e) { + // no-op + } + function handleMouseWheel(event) { + if (event.deltaY < 0) { + dollyIn(getZoomScale()); + } + else if (event.deltaY > 0) { + dollyOut(getZoomScale()); + } + scope.update(); + } + function handleKeyDown(event) { + var needsUpdate = false; + switch (event.keyCode) { + case scope.keys.UP: + pan(0, scope.keyPanSpeed); + needsUpdate = true; + break; + case scope.keys.BOTTOM: + pan(0, -scope.keyPanSpeed); + needsUpdate = true; + break; + case scope.keys.LEFT: + pan(scope.keyPanSpeed, 0); + needsUpdate = true; + break; + case scope.keys.RIGHT: + pan(-scope.keyPanSpeed, 0); + needsUpdate = true; + break; + } + if (needsUpdate) { + // prevent the browser from scrolling on cursor keys + event.preventDefault(); + scope.update(); + } + } + function handleTouchStartRotate(event) { + if (event.touches.length == 1) { + rotateStart.set(event.touches[0].pageX, event.touches[0].pageY); + } + else { + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + rotateStart.set(x, y); + } + } + function handleTouchStartPan(event) { + if (event.touches.length == 1) { + panStart.set(event.touches[0].pageX, event.touches[0].pageY); + } + else { + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + panStart.set(x, y); + } + } + function handleTouchStartDolly(event) { + var dx = event.touches[0].pageX - event.touches[1].pageX; + var dy = event.touches[0].pageY - event.touches[1].pageY; + var distance = Math.sqrt(dx * dx + dy * dy); + dollyStart.set(0, distance); + } + function handleTouchStartDollyPan(event) { + if (scope.enableZoom) + handleTouchStartDolly(event); + if (scope.enablePan) + handleTouchStartPan(event); + } + function handleTouchStartDollyRotate(event) { + if (scope.enableZoom) + handleTouchStartDolly(event); + if (scope.enableRotate) + handleTouchStartRotate(event); + } + function handleTouchMoveRotate(event) { + if (event.touches.length == 1) { + rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY); + } + else { + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + rotateEnd.set(x, y); + } + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + var element = scope.domElement; + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateStart.copy(rotateEnd); + } + function handleTouchMovePan(event) { + if (event.touches.length == 1) { + panEnd.set(event.touches[0].pageX, event.touches[0].pageY); + } + else { + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + panEnd.set(x, y); + } + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + } + function handleTouchMoveDolly(event) { + var dx = event.touches[0].pageX - event.touches[1].pageX; + var dy = event.touches[0].pageY - event.touches[1].pageY; + var distance = Math.sqrt(dx * dx + dy * dy); + dollyEnd.set(0, distance); + dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); + dollyOut(dollyDelta.y); + dollyStart.copy(dollyEnd); + } + function handleTouchMoveDollyPan(event) { + if (scope.enableZoom) + handleTouchMoveDolly(event); + if (scope.enablePan) + handleTouchMovePan(event); + } + function handleTouchMoveDollyRotate(event) { + if (scope.enableZoom) + handleTouchMoveDolly(event); + if (scope.enableRotate) + handleTouchMoveRotate(event); + } + function handleTouchEnd(e) { + // no-op + } + // + // event handlers - FSM: listen for events and reset state + // + function onPointerDown(event) { + if (scope.enabled === false) + return; + switch (event.pointerType) { + case 'mouse': + case 'pen': + onMouseDown(event); + break; + // TODO touch + } + } + function onPointerMove(event) { + if (scope.enabled === false) + return; + switch (event.pointerType) { + case 'mouse': + case 'pen': + onMouseMove(event); + break; + // TODO touch + } + } + function onPointerUp(event) { + switch (event.pointerType) { + case 'mouse': + case 'pen': + onMouseUp(event); + break; + // TODO touch + } + } + function onMouseDown(event) { + // Prevent the browser from scrolling. + event.preventDefault(); + // Manually set the focus since calling preventDefault above + // prevents the browser from setting it automatically. + scope.domElement.focus ? scope.domElement.focus() : window.focus(); + var mouseAction; + switch (event.button) { + case 0: + mouseAction = scope.mouseButtons.LEFT; + break; + case 1: + mouseAction = scope.mouseButtons.MIDDLE; + break; + case 2: + mouseAction = scope.mouseButtons.RIGHT; + break; + default: + mouseAction = -1; + } + switch (mouseAction) { + case MOUSE.DOLLY: + if (scope.enableZoom === false) + return; + handleMouseDownDolly(event); + state = STATE.DOLLY; + break; + case MOUSE.ROTATE: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enablePan === false) + return; + handleMouseDownPan(event); + state = STATE.PAN; + } + else { + if (scope.enableRotate === false) + return; + handleMouseDownRotate(event); + state = STATE.ROTATE; + } + break; + case MOUSE.PAN: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enableRotate === false) + return; + handleMouseDownRotate(event); + state = STATE.ROTATE; + } + else { + if (scope.enablePan === false) + return; + handleMouseDownPan(event); + state = STATE.PAN; + } + break; + default: + state = STATE.NONE; + } + if (state !== STATE.NONE) { + scope.domElement.ownerDocument.addEventListener('pointermove', onPointerMove, false); + scope.domElement.ownerDocument.addEventListener('pointerup', onPointerUp, false); + scope.dispatchEvent(startEvent); + } + } + function onMouseMove(event) { + if (scope.enabled === false) + return; + event.preventDefault(); + switch (state) { + case STATE.ROTATE: + if (scope.enableRotate === false) + return; + handleMouseMoveRotate(event); + break; + case STATE.DOLLY: + if (scope.enableZoom === false) + return; + handleMouseMoveDolly(event); + break; + case STATE.PAN: + if (scope.enablePan === false) + return; + handleMouseMovePan(event); + break; + } + } + function onMouseUp(event) { + scope.domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, false); + scope.domElement.ownerDocument.removeEventListener('pointerup', onPointerUp, false); + if (scope.enabled === false) + return; + handleMouseUp(event); + scope.dispatchEvent(endEvent); + state = STATE.NONE; + } + function onMouseWheel(event) { + if (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE)) + return; + event.preventDefault(); + event.stopPropagation(); + scope.dispatchEvent(startEvent); + handleMouseWheel(event); + scope.dispatchEvent(endEvent); + } + function onKeyDown(event) { + if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) + return; + handleKeyDown(event); + } + function onTouchStart(event) { + if (scope.enabled === false) + return; + event.preventDefault(); // prevent scrolling + switch (event.touches.length) { + case 1: + switch (scope.touches.ONE) { + case TOUCH.ROTATE: + if (scope.enableRotate === false) + return; + handleTouchStartRotate(event); + state = STATE.TOUCH_ROTATE; + break; + case TOUCH.PAN: + if (scope.enablePan === false) + return; + handleTouchStartPan(event); + state = STATE.TOUCH_PAN; + break; + default: + state = STATE.NONE; + } + break; + case 2: + switch (scope.touches.TWO) { + case TOUCH.DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) + return; + handleTouchStartDollyPan(event); + state = STATE.TOUCH_DOLLY_PAN; + break; + case TOUCH.DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) + return; + handleTouchStartDollyRotate(event); + state = STATE.TOUCH_DOLLY_ROTATE; + break; + default: + state = STATE.NONE; + } + break; + default: + state = STATE.NONE; + } + if (state !== STATE.NONE) { + scope.dispatchEvent(startEvent); + } + } + function onTouchMove(event) { + if (scope.enabled === false) + return; + event.preventDefault(); // prevent scrolling + event.stopPropagation(); + switch (state) { + case STATE.TOUCH_ROTATE: + if (scope.enableRotate === false) + return; + handleTouchMoveRotate(event); + scope.update(); + break; + case STATE.TOUCH_PAN: + if (scope.enablePan === false) + return; + handleTouchMovePan(event); + scope.update(); + break; + case STATE.TOUCH_DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) + return; + handleTouchMoveDollyPan(event); + scope.update(); + break; + case STATE.TOUCH_DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) + return; + handleTouchMoveDollyRotate(event); + scope.update(); + break; + default: + state = STATE.NONE; + } + } + function onTouchEnd(event) { + if (scope.enabled === false) + return; + handleTouchEnd(event); + scope.dispatchEvent(endEvent); + state = STATE.NONE; + } + function onContextMenu(event) { + if (scope.enabled === false) + return; + event.preventDefault(); + } + // + scope.domElement.addEventListener('contextmenu', onContextMenu, false); + scope.domElement.addEventListener('pointerdown', onPointerDown, false); + scope.domElement.addEventListener('wheel', onMouseWheel, false); + scope.domElement.addEventListener('touchstart', onTouchStart, false); + scope.domElement.addEventListener('touchend', onTouchEnd, false); + scope.domElement.addEventListener('touchmove', onTouchMove, false); + scope.domElement.addEventListener('keydown', onKeyDown, false); + // force an update at start + this.update(); +}; +OrbitControls.prototype = Object.create(EventDispatcher.prototype); +OrbitControls.prototype.constructor = OrbitControls; +// This set of controls performs orbiting, dollying (zooming), and panning. +// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). +// This is very similar to OrbitControls, another set of touch behavior +// +// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate +// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish +// Pan - left mouse, or arrow keys / touch: one-finger move +var MapControls = function (object, domElement) { + OrbitControls.call(this, object, domElement); + this.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up + this.mouseButtons.LEFT = MOUSE.PAN; + this.mouseButtons.RIGHT = MOUSE.ROTATE; + this.touches.ONE = TOUCH.PAN; + this.touches.TWO = TOUCH.DOLLY_ROTATE; +}; +MapControls.prototype = Object.create(EventDispatcher.prototype); +MapControls.prototype.constructor = MapControls; +export { OrbitControls, MapControls }; +//# sourceMappingURL=OrbitControls.js.map \ No newline at end of file diff --git a/shared/dist/OrbitControls.js.map b/shared/dist/OrbitControls.js.map new file mode 100644 index 00000000..14a9d13b --- /dev/null +++ b/shared/dist/OrbitControls.js.map @@ -0,0 +1 @@ +{"version":3,"file":"OrbitControls.js","sourceRoot":"","sources":["../src/OrbitControls.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/constants.d.ts b/shared/dist/constants.d.ts new file mode 100644 index 00000000..3f3d953b --- /dev/null +++ b/shared/dist/constants.d.ts @@ -0,0 +1,26 @@ +declare enum STATE_TYPES { + DEATH = "death", + IDLE = "idle", + ATTACK = "attack", + WALK = "walk", + RUN = "run", + DANCE = "dance" +} +declare enum EVENT_TYPES { + ACTION_ATTACK = "action.attack", + ATTACK = "attack", + ATTACK_DAMAGE = "attack.damage", + CHAT_MSG = "chat.msg", + CHAT_MESSAGE = "chat.message", + LOGIN_COMMIT = "login.commit", + WORLD_INVENTORY = "world.inventory", + WORLD_UPDATE = "world.update", + WORLD_PLAYER = "world.player", + WORLD_STATS = "world.stats" +} +declare enum ATTACK_TYPES { + MELEE = "melee" +} +declare const _TIMEOUT: number; +export { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, _TIMEOUT }; +//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/shared/dist/constants.d.ts.map b/shared/dist/constants.d.ts.map new file mode 100644 index 00000000..398886c2 --- /dev/null +++ b/shared/dist/constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,aAAK,WAAW;IACZ,KAAK,UAAU;IACf,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;CAClB;AAED,aAAK,WAAW;IACZ,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;CAC9B;AAED,aAAK,YAAY;IACb,KAAK,UAAU;CAClB;AAED,QAAA,MAAM,QAAQ,EAAC,MAAc,CAAC;AAE9B,OAAO,EACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACX,CAAA"} \ No newline at end of file diff --git a/shared/dist/constants.js b/shared/dist/constants.js new file mode 100644 index 00000000..df741d06 --- /dev/null +++ b/shared/dist/constants.js @@ -0,0 +1,29 @@ +var STATE_TYPES; +(function (STATE_TYPES) { + STATE_TYPES["DEATH"] = "death"; + STATE_TYPES["IDLE"] = "idle"; + STATE_TYPES["ATTACK"] = "attack"; + STATE_TYPES["WALK"] = "walk"; + STATE_TYPES["RUN"] = "run"; + STATE_TYPES["DANCE"] = "dance"; +})(STATE_TYPES || (STATE_TYPES = {})); +var EVENT_TYPES; +(function (EVENT_TYPES) { + EVENT_TYPES["ACTION_ATTACK"] = "action.attack"; + EVENT_TYPES["ATTACK"] = "attack"; + EVENT_TYPES["ATTACK_DAMAGE"] = "attack.damage"; + EVENT_TYPES["CHAT_MSG"] = "chat.msg"; + EVENT_TYPES["CHAT_MESSAGE"] = "chat.message"; + EVENT_TYPES["LOGIN_COMMIT"] = "login.commit"; + EVENT_TYPES["WORLD_INVENTORY"] = "world.inventory"; + EVENT_TYPES["WORLD_UPDATE"] = "world.update"; + EVENT_TYPES["WORLD_PLAYER"] = "world.player"; + EVENT_TYPES["WORLD_STATS"] = "world.stats"; +})(EVENT_TYPES || (EVENT_TYPES = {})); +var ATTACK_TYPES; +(function (ATTACK_TYPES) { + ATTACK_TYPES["MELEE"] = "melee"; +})(ATTACK_TYPES || (ATTACK_TYPES = {})); +const _TIMEOUT = 600.0; +export { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, _TIMEOUT }; +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/shared/dist/constants.js.map b/shared/dist/constants.js.map new file mode 100644 index 00000000..abee4c86 --- /dev/null +++ b/shared/dist/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,IAAK,WAOJ;AAPD,WAAK,WAAW;IACZ,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,0BAAW,CAAA;IACX,8BAAe,CAAA;AACnB,CAAC,EAPI,WAAW,KAAX,WAAW,QAOf;AAED,IAAK,WAWJ;AAXD,WAAK,WAAW;IACZ,8CAA+B,CAAA;IAC/B,gCAAiB,CAAA;IACjB,8CAA+B,CAAA;IAC/B,oCAAqB,CAAA;IACrB,4CAA6B,CAAA;IAC7B,4CAA6B,CAAA;IAC7B,kDAAmC,CAAA;IACnC,4CAA6B,CAAA;IAC7B,4CAA6B,CAAA;IAC7B,0CAA2B,CAAA;AAC/B,CAAC,EAXI,WAAW,KAAX,WAAW,QAWf;AAED,IAAK,YAEJ;AAFD,WAAK,YAAY;IACb,+BAAe,CAAA;AACnB,CAAC,EAFI,YAAY,KAAZ,YAAY,QAEhB;AAED,MAAM,QAAQ,GAAU,KAAK,CAAC;AAE9B,OAAO,EACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACX,CAAA"} \ No newline at end of file diff --git a/shared/dist/defs.d.ts b/shared/dist/defs.d.ts new file mode 100644 index 00000000..8db8898b --- /dev/null +++ b/shared/dist/defs.d.ts @@ -0,0 +1,145 @@ +declare const CHARACTER_MODELS: { + paladin: { + base: string; + path: string; + anchors: { + rightHand: string; + }; + nameOffset: number; + attack: { + timing: number; + cooldown: number; + type: string; + range: number; + }; + scale: number; + inventory: { + 'inventory-1': string; + 'inventory-2': string; + 'inventory-equip-1': string; + }; + stats: { + health: number; + maxHealth: number; + strength: number; + wisdomness: number; + benchpress: number; + curl: number; + experience: number; + level: number; + }; + name: string; + }; + sorceror: { + base: string; + path: string; + anchors: { + rightHand: string; + }; + nameOffset: number; + attack: { + timing: number; + cooldown: number; + type: string; + range: number; + }; + scale: number; + inventory: {}; + stats: { + health: number; + maxHealth: number; + strength: number; + wisdomness: number; + benchpress: number; + curl: number; + experience: number; + level: number; + }; + name: string; + }; + warrok: { + base: string; + path: string; + anchors: { + rightHand: string; + }; + nameOffset: number; + attack: { + timing: number; + cooldown: number; + type: string; + range: number; + }; + scale: number; + inventory: {}; + stats: { + health: number; + maxHealth: number; + strength: number; + wisdomness: number; + benchpress: number; + curl: number; + experience: number; + level: number; + }; + name: string; + }; + zombie: { + base: string; + path: string; + anchors: { + rightHand: string; + }; + nameOffset: number; + attack: { + timing: number; + cooldown: number; + type: string; + range: number; + }; + scale: number; + inventory: {}; + stats: { + health: number; + maxHealth: number; + strength: number; + wisdomness: number; + benchpress: number; + curl: number; + experience: number; + level: number; + }; + name: string; + }; +}; +declare const WEAPONS_DATA: { + 'weapon.axe1': { + type: string; + damage: number; + renderParams: { + name: string; + scale: number; + icon: string; + }; + }; + 'weapon.sword1': { + type: string; + damage: number; + renderParams: { + name: string; + scale: number; + icon: string; + }; + }; + 'weapon.hammer1': { + type: string; + damage: number; + renderParams: { + name: string; + scale: number; + icon: string; + }; + }; +}; +export { CHARACTER_MODELS, WEAPONS_DATA }; +//# sourceMappingURL=defs.d.ts.map \ No newline at end of file diff --git a/shared/dist/defs.d.ts.map b/shared/dist/defs.d.ts.map new file mode 100644 index 00000000..9cb916f1 --- /dev/null +++ b/shared/dist/defs.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"defs.d.ts","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":"AAuJA,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoB,CAAC;AAC3C,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAgB,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/defs.js b/shared/dist/defs.js new file mode 100644 index 00000000..826bf3eb --- /dev/null +++ b/shared/dist/defs.js @@ -0,0 +1,147 @@ +const _CHARACTER_MODELS = { + paladin: { + base: 'paladin.glb', + path: './resources/characters/', + anchors: { + rightHand: 'RightHandIndex1', + }, + nameOffset: 11, + attack: { + timing: 0.35, + cooldown: 1.0, + type: 'melee', + range: 10, + }, + scale: 6.0, + inventory: { + 'inventory-1': 'weapon.axe1', + 'inventory-2': 'weapon.hammer1', + 'inventory-equip-1': 'weapon.sword1', + }, + stats: { + health: 200, + maxHealth: 200, + strength: 50, + wisdomness: 5, + benchpress: 20, + curl: 100, + experience: 0, + level: 1, + }, + name: 'Paladin', + }, + sorceror: { + base: 'sorceror.glb', + path: './resources/characters/', + anchors: { + rightHand: 'RightHandIndex1', + }, + nameOffset: 10, + attack: { + timing: 1.0, + cooldown: 1.5, + type: 'magic', + range: 40, + }, + scale: 4.0, + inventory: {}, + stats: { + health: 100, + maxHealth: 100, + strength: 10, + wisdomness: 200, + benchpress: 3, + curl: 17, + experience: 0, + level: 1, + }, + name: 'Sorceror', + }, + warrok: { + base: 'warrok.glb', + path: './resources/characters/', + anchors: { + rightHand: 'RightHandIndex1', + }, + nameOffset: 16, + attack: { + timing: 1.5, + cooldown: 2.6, + type: 'melee', + range: 15, + }, + scale: 8.0, + inventory: {}, + stats: { + health: 1000, + maxHealth: 1000, + strength: 200, + wisdomness: 4, + benchpress: 3, + curl: 200, + experience: 0, + level: 1, + }, + name: 'Monster Guy', + }, + zombie: { + base: 'zombie-guy.glb', + path: './resources/characters/', + anchors: { + rightHand: 'RightHandIndex1', + }, + nameOffset: 8, + attack: { + timing: 1.0, + cooldown: 3.0, + type: 'melee', + range: 10, + }, + scale: 4.0, + inventory: {}, + stats: { + health: 20, + maxHealth: 50, + strength: 25, + wisdomness: 4, + benchpress: 3, + curl: 20, + experience: 0, + level: 1, + }, + name: 'Zombie', + }, +}; +const _WEAPONS_DATA = { + 'weapon.axe1': { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Axe', + scale: 0.125, + icon: 'war-axe-64.png', + }, + }, + 'weapon.sword1': { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Sword', + scale: 0.125, + icon: 'pointy-sword-64.png', + }, + }, + 'weapon.hammer1': { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Hammer_Small', + scale: 0.125, + icon: 'hammer-64.png', + }, + }, +}; +const CHARACTER_MODELS = _CHARACTER_MODELS; +const WEAPONS_DATA = _WEAPONS_DATA; +export { CHARACTER_MODELS, WEAPONS_DATA }; +//# sourceMappingURL=defs.js.map \ No newline at end of file diff --git a/shared/dist/defs.js.map b/shared/dist/defs.js.map new file mode 100644 index 00000000..1a831650 --- /dev/null +++ b/shared/dist/defs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/entity-manager.d.ts b/shared/dist/entity-manager.d.ts new file mode 100644 index 00000000..648147c7 --- /dev/null +++ b/shared/dist/entity-manager.d.ts @@ -0,0 +1,14 @@ +declare class EntityManager { + _ids: number; + _entitiesMap: {}; + _entities: any[]; + constructor(); + _GenerateName(): string; + Get(n: any): any; + Filter(cb: any): any[]; + Add(e: any, n: any): void; + SetActive(e: any, b: any): void; + Update(timeElapsed: any): void; +} +export { EntityManager }; +//# sourceMappingURL=entity-manager.d.ts.map \ No newline at end of file diff --git a/shared/dist/entity-manager.d.ts.map b/shared/dist/entity-manager.d.ts.map new file mode 100644 index 00000000..3a54875e --- /dev/null +++ b/shared/dist/entity-manager.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,EAAE,CAAC;IACjB,SAAS,EAAE,GAAG,EAAE,CAAC;;IAQjB,aAAa;IAMb,GAAG,CAAC,CAAC,KAAA;IAIL,MAAM,CAAC,EAAE,KAAA;IAIT,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAaR,SAAS,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAkBd,MAAM,CAAC,WAAW,KAAA;CAyBnB;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/entity-manager.js b/shared/dist/entity-manager.js new file mode 100644 index 00000000..864da439 --- /dev/null +++ b/shared/dist/entity-manager.js @@ -0,0 +1,64 @@ +class EntityManager { + constructor() { + this._ids = 0; + this._entitiesMap = {}; + this._entities = []; + } + _GenerateName() { + this._ids += 1; + return '__name__' + this._ids; + } + Get(n) { + return this._entitiesMap[n]; + } + Filter(cb) { + return this._entities.filter(cb); + } + Add(e, n) { + if (!n) { + n = this._GenerateName(); + } + this._entitiesMap[n] = e; + this._entities.push(e); + e.SetParent(this); + e.SetName(n); + e.InitEntity(); + } + SetActive(e, b) { + const i = this._entities.indexOf(e); + if (!b) { + if (i < 0) { + return; + } + this._entities.splice(i, 1); + } + else { + if (i >= 0) { + return; + } + this._entities.push(e); + } + } + Update(timeElapsed) { + const dead = []; + const alive = []; + for (let i = 0; i < this._entities.length; ++i) { + const e = this._entities[i]; + e.Update(timeElapsed); + if (e.dead_) { + dead.push(e); + } + else { + alive.push(e); + } + } + for (let i = 0; i < dead.length; ++i) { + const e = dead[i]; + delete this._entitiesMap[e.Name]; + e.Destroy(); + } + this._entities = alive; + } +} +export { EntityManager }; +//# sourceMappingURL=entity-manager.js.map \ No newline at end of file diff --git a/shared/dist/entity-manager.js.map b/shared/dist/entity-manager.js.map new file mode 100644 index 00000000..ed593fef --- /dev/null +++ b/shared/dist/entity-manager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"entity-manager.js","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa;IAKjB;QACE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAEf,OAAO,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,EAAE;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,CAAC,EAAE,CAAC;QACN,IAAI,CAAC,CAAC,EAAE;YACN,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;SAC1B;QAED,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEvB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,UAAU,EAAE,CAAC;IACjB,CAAC;IAED,SAAS,CAAC,CAAC,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,CAAC,EAAE;YACN,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,EAAE;gBACV,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;IACH,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAE5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,KAAK,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACd;iBAAM;gBACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACf;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEjC,CAAC,CAAC,OAAO,EAAE,CAAC;SACb;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;CACF;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/globaltypes.d.ts b/shared/dist/globaltypes.d.ts new file mode 100644 index 00000000..5ce113d0 --- /dev/null +++ b/shared/dist/globaltypes.d.ts @@ -0,0 +1,15 @@ +import { EVENT_TYPES } from "./constants"; +interface IOnMessageArgs { + (evt: TEvt, params: { + accountName?: string; + }): void; +} +/** + * shared event type + */ +declare type TEvt = { + topic: EVENT_TYPES; + params: any; +}; +export type { IOnMessageArgs, TEvt, }; +//# sourceMappingURL=globaltypes.d.ts.map \ No newline at end of file diff --git a/shared/dist/globaltypes.d.ts.map b/shared/dist/globaltypes.d.ts.map new file mode 100644 index 00000000..e08b8baf --- /dev/null +++ b/shared/dist/globaltypes.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"globaltypes.d.ts","sourceRoot":"","sources":["../src/globaltypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,UAAU,cAAc;IACpB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAA;CACX;AAGD;;GAEG;AACH,aAAK,IAAI,GAAG;IACR,KAAK,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAClC,CAAA;AAED,YAAY,EACR,cAAc,EACd,IAAI,GACP,CAAC"} \ No newline at end of file diff --git a/shared/dist/globaltypes.js b/shared/dist/globaltypes.js new file mode 100644 index 00000000..1dbc950a --- /dev/null +++ b/shared/dist/globaltypes.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=globaltypes.js.map \ No newline at end of file diff --git a/shared/dist/globaltypes.js.map b/shared/dist/globaltypes.js.map new file mode 100644 index 00000000..7aad7e03 --- /dev/null +++ b/shared/dist/globaltypes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"globaltypes.js","sourceRoot":"","sources":["../src/globaltypes.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/shared/dist/index.d.ts b/shared/dist/index.d.ts new file mode 100644 index 00000000..08279ec3 --- /dev/null +++ b/shared/dist/index.d.ts @@ -0,0 +1,3 @@ +declare const test = "asdf"; +export { test }; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/shared/dist/index.d.ts.map b/shared/dist/index.d.ts.map new file mode 100644 index 00000000..5757b8e0 --- /dev/null +++ b/shared/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,IAAI,SAAS,CAAC;AAEpB,OAAO,EAAC,IAAI,EAAC,CAAC"} \ No newline at end of file diff --git a/shared/dist/index.js b/shared/dist/index.js new file mode 100644 index 00000000..3a37feb2 --- /dev/null +++ b/shared/dist/index.js @@ -0,0 +1,3 @@ +const test = "asdf"; +export { test }; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/shared/dist/index.js.map b/shared/dist/index.js.map new file mode 100644 index 00000000..cb23b658 --- /dev/null +++ b/shared/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,MAAM,CAAC;AAEpB,OAAO,EAAC,IAAI,EAAC,CAAC"} \ No newline at end of file diff --git a/shared/dist/math.d.ts b/shared/dist/math.d.ts new file mode 100644 index 00000000..a6794dd3 --- /dev/null +++ b/shared/dist/math.d.ts @@ -0,0 +1,12 @@ +export declare const math: { + rand_range: (a: any, b: any) => any; + rand_normalish: () => number; + rand_int: (a: any, b: any) => number; + lerp: (x: any, a: any, b: any) => any; + smoothstep: (x: any, a: any, b: any) => any; + smootherstep: (x: any, a: any, b: any) => any; + clamp: (x: any, a: any, b: any) => number; + sat: (x: any) => number; + in_range: (x: any, a: any, b: any) => boolean; +}; +//# sourceMappingURL=math.d.ts.map \ No newline at end of file diff --git a/shared/dist/math.d.ts.map b/shared/dist/math.d.ts.map new file mode 100644 index 00000000..e699b750 --- /dev/null +++ b/shared/dist/math.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;CAyCb,CAAC"} \ No newline at end of file diff --git a/shared/dist/math.js b/shared/dist/math.js new file mode 100644 index 00000000..19cb8e27 --- /dev/null +++ b/shared/dist/math.js @@ -0,0 +1,35 @@ +export const math = (function () { + return { + rand_range: function (a, b) { + return Math.random() * (b - a) + a; + }, + rand_normalish: function () { + const r = Math.random() + Math.random() + Math.random() + Math.random(); + return (r / 4.0) * 2.0 - 1; + }, + rand_int: function (a, b) { + return Math.round(Math.random() * (b - a) + a); + }, + lerp: function (x, a, b) { + return x * (b - a) + a; + }, + smoothstep: function (x, a, b) { + x = x * x * (3.0 - 2.0 * x); + return x * (b - a) + a; + }, + smootherstep: function (x, a, b) { + x = x * x * x * (x * (x * 6 - 15) + 10); + return x * (b - a) + a; + }, + clamp: function (x, a, b) { + return Math.min(Math.max(x, a), b); + }, + sat: function (x) { + return Math.min(Math.max(x, 0.0), 1.0); + }, + in_range: (x, a, b) => { + return x >= a && x <= b; + }, + }; +})(); +//# sourceMappingURL=math.js.map \ No newline at end of file diff --git a/shared/dist/math.js.map b/shared/dist/math.js.map new file mode 100644 index 00000000..ff2f034d --- /dev/null +++ b/shared/dist/math.js.map @@ -0,0 +1 @@ +{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;IACnB,OAAO;QACL,UAAU,EAAE,UAAS,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,cAAc,EAAE;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,QAAQ,EAAE,UAAS,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,EAAE,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,UAAU,EAAE,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,YAAY,EAAE,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,EAAE,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,GAAG,EAAE,UAAS,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC"} \ No newline at end of file diff --git a/shared/dist/noise.d.ts b/shared/dist/noise.d.ts new file mode 100644 index 00000000..60309423 --- /dev/null +++ b/shared/dist/noise.d.ts @@ -0,0 +1,9 @@ +declare class Noise { + _params: any; + _noise: any; + constructor(params: any); + _Init(): void; + Get(x: any, y: any, z: any): number; +} +export { Noise }; +//# sourceMappingURL=noise.d.ts.map \ No newline at end of file diff --git a/shared/dist/noise.d.ts.map b/shared/dist/noise.d.ts.map new file mode 100644 index 00000000..f3824484 --- /dev/null +++ b/shared/dist/noise.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AACA,cAAM,KAAK;IACT,OAAO,EAAE,GAAG,CAAC;IAGb,MAAM,EAAE,GAAG,CAAC;gBAEA,MAAM,KAAA;IAKlB,KAAK;IAIL,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,CAAC,KAAA;CAwBZ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/noise.js b/shared/dist/noise.js new file mode 100644 index 00000000..b9f8b920 --- /dev/null +++ b/shared/dist/noise.js @@ -0,0 +1,32 @@ +import { SimplexNoise } from './simplex-noise'; +class Noise { + constructor(params) { + this._params = params; + this._Init(); + } + _Init() { + this._noise = new SimplexNoise(this._params.seed); + } + Get(x, y, z) { + const G = Math.pow(2.0, (-this._params.persistence)); + const xs = x / this._params.scale; + const ys = y / this._params.scale; + const zs = z / this._params.scale; + const noiseFunc = this._noise; + let amplitude = 1.0; + let frequency = 1.0; + let normalization = 0; + let total = 0; + for (let o = 0; o < this._params.octaves; o++) { + const noiseValue = noiseFunc.noise3D(xs * frequency, ys * frequency, zs * frequency) * 0.5 + 0.5; + total += noiseValue * amplitude; + normalization += amplitude; + amplitude *= G; + frequency *= this._params.lacunarity; + } + total /= normalization; + return Math.pow(total, this._params.exponentiation) * this._params.height; + } +} +export { Noise }; +//# sourceMappingURL=noise.js.map \ No newline at end of file diff --git a/shared/dist/noise.js.map b/shared/dist/noise.js.map new file mode 100644 index 00000000..f1da74c4 --- /dev/null +++ b/shared/dist/noise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"noise.js","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,MAAM,KAAK;IAMT,YAAY,MAAM;QAChB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,SAAA,GAAG,EAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA,CAAC;QAC7C,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAE9B,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAClC,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YAE9D,KAAK,IAAI,UAAU,GAAG,SAAS,CAAC;YAChC,aAAa,IAAI,SAAS,CAAC;YAC3B,SAAS,IAAI,CAAC,CAAC;YACf,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SACtC;QACD,KAAK,IAAI,aAAa,CAAC;QACvB,OAAO,IAAI,CAAC,GAAG,CACb,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9D,CAAC;CACF;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/simplex-noise.d.ts b/shared/dist/simplex-noise.d.ts new file mode 100644 index 00000000..cae26ba2 --- /dev/null +++ b/shared/dist/simplex-noise.d.ts @@ -0,0 +1,7 @@ +declare function SimplexNoise(randomOrSeed: any): void; +declare namespace SimplexNoise { + var _buildPermutationTable: typeof buildPermutationTable; +} +declare function buildPermutationTable(random: any): Uint8Array; +export { SimplexNoise }; +//# sourceMappingURL=simplex-noise.d.ts.map \ No newline at end of file diff --git a/shared/dist/simplex-noise.d.ts.map b/shared/dist/simplex-noise.d.ts.map new file mode 100644 index 00000000..64dc327f --- /dev/null +++ b/shared/dist/simplex-noise.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"simplex-noise.d.ts","sourceRoot":"","sources":["../src/simplex-noise.ts"],"names":[],"mappings":"AA0CE,iBAAS,YAAY,CAAC,YAAY,KAAA,QAkBjC;kBAlBQ,YAAY;;;AAkWrB,iBAAS,qBAAqB,CAAC,MAAM,KAAA,cAapC;AAkED,OAAO,EAAC,YAAY,EAAC,CAAA"} \ No newline at end of file diff --git a/shared/dist/simplex-noise.js b/shared/dist/simplex-noise.js new file mode 100644 index 00000000..c72b8a90 --- /dev/null +++ b/shared/dist/simplex-noise.js @@ -0,0 +1,483 @@ +'use strict'; +/* + * A fast javascript implementation of simplex noise by Jonas Wagner + +Based on a speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. +Which is based on example code by Stefan Gustavson (stegu@itn.liu.se). +With Optimisations by Peter Eastman (peastman@drizzle.stanford.edu). +Better rank ordering method by Stefan Gustavson in 2012. + + + Copyright (c) 2018 Jonas Wagner + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ +// (function() { +var F2 = 0.5 * (Math.sqrt(3.0) - 1.0); +var G2 = (3.0 - Math.sqrt(3.0)) / 6.0; +var F3 = 1.0 / 3.0; +var G3 = 1.0 / 6.0; +var F4 = (Math.sqrt(5.0) - 1.0) / 4.0; +var G4 = (5.0 - Math.sqrt(5.0)) / 20.0; +function SimplexNoise(randomOrSeed) { + var random; + if (typeof randomOrSeed == 'function') { + random = randomOrSeed; + } + else if (randomOrSeed) { + random = alea(randomOrSeed); + } + else { + random = Math.random; + } + this.p = buildPermutationTable(random); + this.perm = new Uint8Array(512); + this.permMod12 = new Uint8Array(512); + for (var i = 0; i < 512; i++) { + this.perm[i] = this.p[i & 255]; + this.permMod12[i] = this.perm[i] % 12; + } +} +SimplexNoise.prototype = { + grad3: new Float32Array([1, 1, 0, + -1, 1, 0, + 1, -1, 0, + -1, -1, 0, + 1, 0, 1, + -1, 0, 1, + 1, 0, -1, + -1, 0, -1, + 0, 1, 1, + 0, -1, 1, + 0, 1, -1, + 0, -1, -1]), + grad4: new Float32Array([0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, + 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, + 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, 0, -1, -1, + -1, 0, 1, 1, -1, 0, 1, -1, -1, 0, -1, 1, -1, 0, -1, -1, + 1, 1, 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1, + -1, 1, 0, 1, -1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, -1, + 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0, + -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0]), + noise2D: function (xin, yin) { + var permMod12 = this.permMod12; + var perm = this.perm; + var grad3 = this.grad3; + var n0 = 0; // Noise contributions from the three corners + var n1 = 0; + var n2 = 0; + // Skew the input space to determine which simplex cell we're in + var s = (xin + yin) * F2; // Hairy factor for 2D + var i = Math.floor(xin + s); + var j = Math.floor(yin + s); + var t = (i + j) * G2; + var X0 = i - t; // Unskew the cell origin back to (x,y) space + var Y0 = j - t; + var x0 = xin - X0; // The x,y distances from the cell origin + var y0 = yin - Y0; + // For the 2D case, the simplex shape is an equilateral triangle. + // Determine which simplex we are in. + var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords + if (x0 > y0) { + i1 = 1; + j1 = 0; + } // lower triangle, XY order: (0,0)->(1,0)->(1,1) + else { + i1 = 0; + j1 = 1; + } // upper triangle, YX order: (0,0)->(0,1)->(1,1) + // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and + // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where + // c = (3-sqrt(3))/6 + var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords + var y1 = y0 - j1 + G2; + var x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords + var y2 = y0 - 1.0 + 2.0 * G2; + // Work out the hashed gradient indices of the three simplex corners + var ii = i & 255; + var jj = j & 255; + // Calculate the contribution from the three corners + var t0 = 0.5 - x0 * x0 - y0 * y0; + if (t0 >= 0) { + var gi0 = permMod12[ii + perm[jj]] * 3; + t0 *= t0; + n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0); // (x,y) of grad3 used for 2D gradient + } + var t1 = 0.5 - x1 * x1 - y1 * y1; + if (t1 >= 0) { + var gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3; + t1 *= t1; + n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1); + } + var t2 = 0.5 - x2 * x2 - y2 * y2; + if (t2 >= 0) { + var gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3; + t2 *= t2; + n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2); + } + // Add contributions from each corner to get the final noise value. + // The result is scaled to return values in the interval [-1,1]. + return 70.0 * (n0 + n1 + n2); + }, + // 3D simplex noise + noise3D: function (xin, yin, zin) { + var permMod12 = this.permMod12; + var perm = this.perm; + var grad3 = this.grad3; + var n0, n1, n2, n3; // Noise contributions from the four corners + // Skew the input space to determine which simplex cell we're in + var s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D + var i = Math.floor(xin + s); + var j = Math.floor(yin + s); + var k = Math.floor(zin + s); + var t = (i + j + k) * G3; + var X0 = i - t; // Unskew the cell origin back to (x,y,z) space + var Y0 = j - t; + var Z0 = k - t; + var x0 = xin - X0; // The x,y,z distances from the cell origin + var y0 = yin - Y0; + var z0 = zin - Z0; + // For the 3D case, the simplex shape is a slightly irregular tetrahedron. + // Determine which simplex we are in. + var i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords + var i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords + if (x0 >= y0) { + if (y0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 1; + k2 = 0; + } // X Y Z order + else if (x0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 0; + k2 = 1; + } // X Z Y order + else { + i1 = 0; + j1 = 0; + k1 = 1; + i2 = 1; + j2 = 0; + k2 = 1; + } // Z X Y order + } + else { // x0 y0) + rankx++; + else + ranky++; + if (x0 > z0) + rankx++; + else + rankz++; + if (x0 > w0) + rankx++; + else + rankw++; + if (y0 > z0) + ranky++; + else + rankz++; + if (y0 > w0) + ranky++; + else + rankw++; + if (z0 > w0) + rankz++; + else + rankw++; + var i1, j1, k1, l1; // The integer offsets for the second simplex corner + var i2, j2, k2, l2; // The integer offsets for the third simplex corner + var i3, j3, k3, l3; // The integer offsets for the fourth simplex corner + // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. + // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0; + j1 = ranky >= 3 ? 1 : 0; + k1 = rankz >= 3 ? 1 : 0; + l1 = rankw >= 3 ? 1 : 0; + // Rank 2 denotes the second largest coordinate. + i2 = rankx >= 2 ? 1 : 0; + j2 = ranky >= 2 ? 1 : 0; + k2 = rankz >= 2 ? 1 : 0; + l2 = rankw >= 2 ? 1 : 0; + // Rank 1 denotes the second smallest coordinate. + i3 = rankx >= 1 ? 1 : 0; + j3 = ranky >= 1 ? 1 : 0; + k3 = rankz >= 1 ? 1 : 0; + l3 = rankw >= 1 ? 1 : 0; + // The fifth corner has all coordinate offsets = 1, so no need to compute that. + var x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords + var y1 = y0 - j1 + G4; + var z1 = z0 - k1 + G4; + var w1 = w0 - l1 + G4; + var x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords + var y2 = y0 - j2 + 2.0 * G4; + var z2 = z0 - k2 + 2.0 * G4; + var w2 = w0 - l2 + 2.0 * G4; + var x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords + var y3 = y0 - j3 + 3.0 * G4; + var z3 = z0 - k3 + 3.0 * G4; + var w3 = w0 - l3 + 3.0 * G4; + var x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords + var y4 = y0 - 1.0 + 4.0 * G4; + var z4 = z0 - 1.0 + 4.0 * G4; + var w4 = w0 - 1.0 + 4.0 * G4; + // Work out the hashed gradient indices of the five simplex corners + var ii = i & 255; + var jj = j & 255; + var kk = k & 255; + var ll = l & 255; + // Calculate the contribution from the five corners + var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; + if (t0 < 0) + n0 = 0.0; + else { + var gi0 = (perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32) * 4; + t0 *= t0; + n0 = t0 * t0 * (grad4[gi0] * x0 + grad4[gi0 + 1] * y0 + grad4[gi0 + 2] * z0 + grad4[gi0 + 3] * w0); + } + var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; + if (t1 < 0) + n1 = 0.0; + else { + var gi1 = (perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32) * 4; + t1 *= t1; + n1 = t1 * t1 * (grad4[gi1] * x1 + grad4[gi1 + 1] * y1 + grad4[gi1 + 2] * z1 + grad4[gi1 + 3] * w1); + } + var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; + if (t2 < 0) + n2 = 0.0; + else { + var gi2 = (perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32) * 4; + t2 *= t2; + n2 = t2 * t2 * (grad4[gi2] * x2 + grad4[gi2 + 1] * y2 + grad4[gi2 + 2] * z2 + grad4[gi2 + 3] * w2); + } + var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; + if (t3 < 0) + n3 = 0.0; + else { + var gi3 = (perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32) * 4; + t3 *= t3; + n3 = t3 * t3 * (grad4[gi3] * x3 + grad4[gi3 + 1] * y3 + grad4[gi3 + 2] * z3 + grad4[gi3 + 3] * w3); + } + var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; + if (t4 < 0) + n4 = 0.0; + else { + var gi4 = (perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32) * 4; + t4 *= t4; + n4 = t4 * t4 * (grad4[gi4] * x4 + grad4[gi4 + 1] * y4 + grad4[gi4 + 2] * z4 + grad4[gi4 + 3] * w4); + } + // Sum up and scale the result to cover the range [-1,1] + return 27.0 * (n0 + n1 + n2 + n3 + n4); + } +}; +function buildPermutationTable(random) { + var i; + var p = new Uint8Array(256); + for (i = 0; i < 256; i++) { + p[i] = i; + } + for (i = 0; i < 255; i++) { + var r = i + ~~(random() * (256 - i)); + var aux = p[i]; + p[i] = p[r]; + p[r] = aux; + } + return p; +} +SimplexNoise._buildPermutationTable = buildPermutationTable; +function alea(input) { + // Johannes Baagøe , 2010 + var s0 = 0; + var s1 = 0; + var s2 = 0; + var c = 1; + var mash = masher(); + s0 = mash(' '); + s1 = mash(' '); + s2 = mash(' '); + for (var i = 0; i < arguments.length; i++) { + s0 -= mash(arguments[i]); + if (s0 < 0) { + s0 += 1; + } + s1 -= mash(arguments[i]); + if (s1 < 0) { + s1 += 1; + } + s2 -= mash(arguments[i]); + if (s2 < 0) { + s2 += 1; + } + } + mash = null; + return function () { + var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32 + s0 = s1; + s1 = s2; + return s2 = t - (c = t | 0); + }; +} +function masher() { + var n = 0xefc8249d; + return function (data) { + data = data.toString(); + for (var i = 0; i < data.length; i++) { + n += data.charCodeAt(i); + var h = 0.02519603282416938 * n; + n = h >>> 0; + h -= n; + h *= n; + n = h >>> 0; + h -= n; + n += h * 0x100000000; // 2^32 + } + return (n >>> 0) * 2.3283064365386963e-10; // 2^-32 + }; +} +// // amd +// if (typeof define !== 'undefined' && define.amd) define(function() {return SimplexNoise;}); +// // common js +// if (typeof exports !== 'undefined') exports.SimplexNoise = SimplexNoise; +// // browser +// else if (typeof window !== 'undefined') window.SimplexNoise = SimplexNoise; +// // nodejs +// if (typeof module !== 'undefined') { +// module.exports = SimplexNoise; +// } +export { SimplexNoise }; +//# sourceMappingURL=simplex-noise.js.map \ No newline at end of file diff --git a/shared/dist/simplex-noise.js.map b/shared/dist/simplex-noise.js.map new file mode 100644 index 00000000..3db5b6ff --- /dev/null +++ b/shared/dist/simplex-noise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"simplex-noise.js","sourceRoot":"","sources":["../src/simplex-noise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/spatial-hash-grid.d.ts b/shared/dist/spatial-hash-grid.d.ts new file mode 100644 index 00000000..30ab20f1 --- /dev/null +++ b/shared/dist/spatial-hash-grid.d.ts @@ -0,0 +1,24 @@ +declare class SpatialHashGrid { + _cells: any[][]; + _dimensions: any; + _bounds: any; + _queryIds: number; + constructor(bounds: any, dimensions: any); + _GetCellIndex(position: any): number[]; + NewClient(position: any, dimensions: any): { + position: any; + dimensions: any; + _cells: { + min: any; + max: any; + nodes: any; + }; + _queryId: number; + }; + UpdateClient(client: any): void; + FindNear(position: any, bounds: any): any[]; + _Insert(client: any): void; + Remove(client: any): void; +} +export { SpatialHashGrid }; +//# sourceMappingURL=spatial-hash-grid.d.ts.map \ No newline at end of file diff --git a/shared/dist/spatial-hash-grid.d.ts.map b/shared/dist/spatial-hash-grid.d.ts.map new file mode 100644 index 00000000..2632657e --- /dev/null +++ b/shared/dist/spatial-hash-grid.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"spatial-hash-grid.d.ts","sourceRoot":"","sources":["../src/spatial-hash-grid.ts"],"names":[],"mappings":"AAEA,cAAM,eAAe;IACnB,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;gBACN,MAAM,KAAA,EAAE,UAAU,KAAA;IAQ9B,aAAa,CAAC,QAAQ,KAAA;IAYtB,SAAS,CAAC,QAAQ,KAAA,EAAE,UAAU,KAAA;;;;;;;;;;IAiB9B,YAAY,CAAC,MAAM,KAAA;IAkBnB,QAAQ,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA;IA4BzB,OAAO,CAAC,MAAM,KAAA;IAqCd,MAAM,CAAC,MAAM,KAAA;CA2Bd;AACD,OAAO,EAAE,eAAe,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/spatial-hash-grid.js b/shared/dist/spatial-hash-grid.js new file mode 100644 index 00000000..7d43c42a --- /dev/null +++ b/shared/dist/spatial-hash-grid.js @@ -0,0 +1,119 @@ +import { math } from './math'; +class SpatialHashGrid { + constructor(bounds, dimensions) { + const [x, y] = dimensions; + this._cells = [...Array(x)].map(_ => [...Array(y)].map(_ => (null))); + this._dimensions = dimensions; + this._bounds = bounds; + this._queryIds = 0; + } + _GetCellIndex(position) { + const x = math.sat((position[0] - this._bounds[0][0]) / (this._bounds[1][0] - this._bounds[0][0])); + const y = math.sat((position[1] - this._bounds[0][1]) / (this._bounds[1][1] - this._bounds[0][1])); + const xIndex = Math.floor(x * (this._dimensions[0] - 1)); + const yIndex = Math.floor(y * (this._dimensions[1] - 1)); + return [xIndex, yIndex]; + } + NewClient(position, dimensions) { + const client = { + position: position, + dimensions: dimensions, + _cells: { + min: null, + max: null, + nodes: null, + }, + _queryId: -1, + }; + this._Insert(client); + return client; + } + UpdateClient(client) { + const [x, y] = client.position; + const [w, h] = client.dimensions; + const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + if (client._cells.min[0] == i1[0] && + client._cells.min[1] == i1[1] && + client._cells.max[0] == i2[0] && + client._cells.max[1] == i2[1]) { + return; + } + this.Remove(client); + this._Insert(client); + } + FindNear(position, bounds) { + const [x, y] = position; + const [w, h] = bounds; + const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + const clients = []; + const queryId = this._queryIds++; + for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { + for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { + let head = this._cells[x][y]; + while (head) { + const v = head.client; + head = head.next; + if (v._queryId != queryId) { + v._queryId = queryId; + clients.push(v); + } + } + } + } + return clients; + } + _Insert(client) { + const [x, y] = client.position; + const [w, h] = client.dimensions; + const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + const nodes = []; + for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { + nodes.push([]); + for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { + const xi = x - i1[0]; + const head = { + next: null, + prev: null, + client: client, + }; + nodes[xi].push(head); + head.next = this._cells[x][y]; + if (this._cells[x][y]) { + this._cells[x][y].prev = head; + } + this._cells[x][y] = head; + } + } + client._cells.min = i1; + client._cells.max = i2; + client._cells.nodes = nodes; + } + Remove(client) { + const i1 = client._cells.min; + const i2 = client._cells.max; + for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { + for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { + const xi = x - i1[0]; + const yi = y - i1[1]; + const node = client._cells.nodes[xi][yi]; + if (node.next) { + node.next.prev = node.prev; + } + if (node.prev) { + node.prev.next = node.next; + } + if (!node.prev) { + this._cells[x][y] = node.next; + } + } + } + client._cells.min = null; + client._cells.max = null; + client._cells.nodes = null; + } +} +export { SpatialHashGrid }; +//# sourceMappingURL=spatial-hash-grid.js.map \ No newline at end of file diff --git a/shared/dist/spatial-hash-grid.js.map b/shared/dist/spatial-hash-grid.js.map new file mode 100644 index 00000000..b008c8c9 --- /dev/null +++ b/shared/dist/spatial-hash-grid.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spatial-hash-grid.js","sourceRoot":"","sources":["../src/spatial-hash-grid.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/spline.d.ts b/shared/dist/spline.d.ts new file mode 100644 index 00000000..d22c8ed6 --- /dev/null +++ b/shared/dist/spline.d.ts @@ -0,0 +1,16 @@ +declare class CubicHermiteSpline { + _points: any[]; + _lerp: any; + constructor(lerp: any); + AddPoint(t: any, d: any): void; + Get(t: any): any; +} +declare class LinearSpline { + _points: any[]; + _lerp: any; + constructor(lerp: any); + AddPoint(t: any, d: any): void; + Get(t: any): any; +} +export { CubicHermiteSpline, LinearSpline }; +//# sourceMappingURL=spline.d.ts.map \ No newline at end of file diff --git a/shared/dist/spline.d.ts.map b/shared/dist/spline.d.ts.map new file mode 100644 index 00000000..156dec6d --- /dev/null +++ b/shared/dist/spline.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"spline.d.ts","sourceRoot":"","sources":["../src/spline.ts"],"names":[],"mappings":"AACE,cAAM,kBAAkB;IACtB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;gBACC,IAAI,KAAA;IAKhB,QAAQ,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAIb,GAAG,CAAC,CAAC,KAAA;CAwBN;AAED,cAAM,YAAY;IAChB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;gBACC,IAAI,KAAA;IAKhB,QAAQ,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAIb,GAAG,CAAC,CAAC,KAAA;CAqBN;AAGH,OAAO,EAAC,kBAAkB,EAAE,YAAY,EAAC,CAAA"} \ No newline at end of file diff --git a/shared/dist/spline.js b/shared/dist/spline.js new file mode 100644 index 00000000..098e603e --- /dev/null +++ b/shared/dist/spline.js @@ -0,0 +1,51 @@ +class CubicHermiteSpline { + constructor(lerp) { + this._points = []; + this._lerp = lerp; + } + AddPoint(t, d) { + this._points.push([t, d]); + } + Get(t) { + let p1 = 0; + for (let i = 0; i < this._points.length; i++) { + if (this._points[i][0] >= t) { + break; + } + p1 = i; + } + const p0 = Math.max(0, p1 - 1); + const p2 = Math.min(this._points.length - 1, p1 + 1); + const p3 = Math.min(this._points.length - 1, p1 + 2); + if (p1 == p2) { + return this._points[p1][1]; + } + return this._lerp((t - this._points[p1][0]) / (this._points[p2][0] - this._points[p1][0]), this._points[p0][1], this._points[p1][1], this._points[p2][1], this._points[p3][1]); + } +} +; +class LinearSpline { + constructor(lerp) { + this._points = []; + this._lerp = lerp; + } + AddPoint(t, d) { + this._points.push([t, d]); + } + Get(t) { + let p1 = 0; + for (let i = 0; i < this._points.length; i++) { + if (this._points[i][0] >= t) { + break; + } + p1 = i; + } + const p2 = Math.min(this._points.length - 1, p1 + 1); + if (p1 == p2) { + return this._points[p1][1]; + } + return this._lerp((t - this._points[p1][0]) / (this._points[p2][0] - this._points[p1][0]), this._points[p1][1], this._points[p2][1]); + } +} +export { CubicHermiteSpline, LinearSpline }; +//# sourceMappingURL=spline.js.map \ No newline at end of file diff --git a/shared/dist/spline.js.map b/shared/dist/spline.js.map new file mode 100644 index 00000000..ba84636e --- /dev/null +++ b/shared/dist/spline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spline.js","sourceRoot":"","sources":["../src/spline.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/terrain-constants.d.ts b/shared/dist/terrain-constants.d.ts new file mode 100644 index 00000000..1d215828 --- /dev/null +++ b/shared/dist/terrain-constants.d.ts @@ -0,0 +1,16 @@ +declare const QT_MIN_CELL_SIZE = 100; +declare const QT_MIN_CELL_RESOLUTION = 16; +declare const PLANET_RADIUS = 8000; +declare const NOISE_HEIGHT = 800; +declare const NOISE_SCALE = 1800; +declare const NOISE_PARAMS: { + octaves: number; + persistence: number; + lacunarity: number; + exponentiation: number; + height: number; + scale: number; + seed: number; +}; +export { QT_MIN_CELL_SIZE, QT_MIN_CELL_RESOLUTION, PLANET_RADIUS, NOISE_HEIGHT, NOISE_SCALE, NOISE_PARAMS, }; +//# sourceMappingURL=terrain-constants.d.ts.map \ No newline at end of file diff --git a/shared/dist/terrain-constants.d.ts.map b/shared/dist/terrain-constants.d.ts.map new file mode 100644 index 00000000..ae659b64 --- /dev/null +++ b/shared/dist/terrain-constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-constants.d.ts","sourceRoot":"","sources":["../src/terrain-constants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB,MAAM,CAAC;AAE7B,QAAA,MAAM,sBAAsB,KAAK,CAAC;AAElC,QAAA,MAAM,aAAa,OAAS,CAAC;AAE7B,QAAA,MAAM,YAAY,MAAQ,CAAC;AAE3B,QAAA,MAAM,WAAW,OAAS,CAAC;AAC3B,QAAA,MAAM,YAAY;;;;;;;;CAQjB,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,CAAA"} \ No newline at end of file diff --git a/shared/dist/terrain-constants.js b/shared/dist/terrain-constants.js new file mode 100644 index 00000000..d466247c --- /dev/null +++ b/shared/dist/terrain-constants.js @@ -0,0 +1,19 @@ +const QT_MIN_CELL_SIZE = 100; +// const QT_MIN_CELL_RESOLUTION = 24; +const QT_MIN_CELL_RESOLUTION = 16; +// const QT_MIN_CELL_RESOLUTION = 4; +const PLANET_RADIUS = 8000.0; +const NOISE_HEIGHT = 800.0; +// const NOISE_HEIGHT = 0.0; +const NOISE_SCALE = 1800.0; +const NOISE_PARAMS = { + octaves: 10, + persistence: 0.5, + lacunarity: 1.6, + exponentiation: 7.5, + height: NOISE_HEIGHT, + scale: NOISE_SCALE, + seed: 1 +}; +export { QT_MIN_CELL_SIZE, QT_MIN_CELL_RESOLUTION, PLANET_RADIUS, NOISE_HEIGHT, NOISE_SCALE, NOISE_PARAMS, }; +//# sourceMappingURL=terrain-constants.js.map \ No newline at end of file diff --git a/shared/dist/terrain-constants.js.map b/shared/dist/terrain-constants.js.map new file mode 100644 index 00000000..96e99e00 --- /dev/null +++ b/shared/dist/terrain-constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-constants.js","sourceRoot":"","sources":["../src/terrain-constants.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,qCAAqC;AACrC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,oCAAoC;AACpC,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,MAAM,YAAY,GAAG,KAAK,CAAC;AAC3B,4BAA4B;AAC5B,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,GAAG;IACf,cAAc,EAAE,GAAG;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,CAAC;CACR,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,CAAA"} \ No newline at end of file diff --git a/shared/dist/terrain-height.d.ts b/shared/dist/terrain-height.d.ts new file mode 100644 index 00000000..b370e722 --- /dev/null +++ b/shared/dist/terrain-height.d.ts @@ -0,0 +1,8 @@ +import { Noise } from './noise'; +declare class HeightGenerator { + noise_: Noise; + constructor(); + Get(x: any, y: any, z: any): number[]; +} +export { HeightGenerator }; +//# sourceMappingURL=terrain-height.d.ts.map \ No newline at end of file diff --git a/shared/dist/terrain-height.d.ts.map b/shared/dist/terrain-height.d.ts.map new file mode 100644 index 00000000..d090a053 --- /dev/null +++ b/shared/dist/terrain-height.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-height.d.ts","sourceRoot":"","sources":["../src/terrain-height.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,cAAM,eAAe;IACnB,MAAM,EAAE,KAAK,CAAC;;IAKd,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,CAAC,KAAA;CAGZ;AAED,OAAO,EAAC,eAAe,EAAC,CAAA"} \ No newline at end of file diff --git a/shared/dist/terrain-height.js b/shared/dist/terrain-height.js new file mode 100644 index 00000000..46a05eea --- /dev/null +++ b/shared/dist/terrain-height.js @@ -0,0 +1,13 @@ +import { NOISE_PARAMS } from './terrain-constants'; +import { Noise } from './noise'; +class HeightGenerator { + constructor() { + this.noise_ = new Noise(NOISE_PARAMS); + } + Get(x, y, z) { + return [this.noise_.Get(x, y, z), 1]; + } +} +; +export { HeightGenerator }; +//# sourceMappingURL=terrain-height.js.map \ No newline at end of file diff --git a/shared/dist/terrain-height.js.map b/shared/dist/terrain-height.js.map new file mode 100644 index 00000000..574ea49a --- /dev/null +++ b/shared/dist/terrain-height.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-height.js","sourceRoot":"","sources":["../src/terrain-height.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,eAAe;IAEnB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;CACF;AAAA,CAAC;AAEF,OAAO,EAAC,eAAe,EAAC,CAAA"} \ No newline at end of file diff --git a/shared/src/FBXLoader.ts b/shared/src/FBXLoader.ts deleted file mode 100644 index 830dff83..00000000 --- a/shared/src/FBXLoader.ts +++ /dev/null @@ -1,4205 +0,0 @@ -import { - AmbientLight, - AnimationClip, - Bone, - BufferAttribute, - BufferGeometry, - ClampToEdgeWrapping, - Color, - DirectionalLight, - EquirectangularReflectionMapping, - Euler, - FileLoader, - Float32BufferAttribute, - Group, - Line, - LineBasicMaterial, - Loader, - LoaderUtils, - MathUtils, - Matrix3, - Matrix4, - Mesh, - MeshLambertMaterial, - MeshPhongMaterial, - NumberKeyframeTrack, - Object3D, - OrthographicCamera, - PerspectiveCamera, - PointLight, - PropertyBinding, - Quaternion, - QuaternionKeyframeTrack, - RepeatWrapping, - Skeleton, - SkinnedMesh, - SpotLight, - Texture, - TextureLoader, - Uint16BufferAttribute, - Vector3, - Vector4, - VectorKeyframeTrack, - sRGBEncoding -} from '../../../build/three.module.js'; -import { Inflate } from '../libs/inflate.module.min.js'; -import { NURBSCurve } from '../curves/NURBSCurve.js'; - -/** - * Loader loads FBX file and generates Group representing FBX scene. - * Requires FBX file to be >= 7.0 and in ASCII or >= 6400 in Binary format - * Versions lower than this may load but will probably have errors - * - * Needs Support: - * Morph normals / blend shape normals - * - * FBX format references: - * https://wiki.blender.org/index.php/User:Mont29/Foundation/FBX_File_Structure - * http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference) - * - * Binary format specification: - * https://code.blender.org/2013/08/fbx-binary-file-format-specification/ - */ - - -var FBXLoader = ( function () { - - var fbxTree; - var connections; - var sceneGraph; - - function FBXLoader( manager ) { - - Loader.call( this, manager ); - - } - - FBXLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: FBXLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - var scope = this; - - var path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path; - - var loader = new FileLoader( this.manager ); - loader.setPath( scope.path ); - loader.setResponseType( 'arraybuffer' ); - loader.setRequestHeader( scope.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - - loader.load( url, function ( buffer ) { - - try { - - onLoad( scope.parse( buffer, path ) ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - }, - - parse: function ( FBXBuffer, path ) { - - if ( isFbxFormatBinary( FBXBuffer ) ) { - - fbxTree = new BinaryParser().parse( FBXBuffer ); - - } else { - - var FBXText = convertArrayBufferToString( FBXBuffer ); - - if ( ! isFbxFormatASCII( FBXText ) ) { - - throw new Error( 'THREE.FBXLoader: Unknown format.' ); - - } - - if ( getFbxVersion( FBXText ) < 7000 ) { - - throw new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + getFbxVersion( FBXText ) ); - - } - - fbxTree = new TextParser().parse( FBXText ); - - } - - // console.log( fbxTree ); - - var textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin ); - - return new FBXTreeParser( textureLoader, this.manager ).parse( fbxTree ); - - } - - } ); - - // Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group - function FBXTreeParser( textureLoader, manager ) { - - this.textureLoader = textureLoader; - this.manager = manager; - - } - - FBXTreeParser.prototype = { - - constructor: FBXTreeParser, - - parse: function () { - - connections = this.parseConnections(); - - var images = this.parseImages(); - var textures = this.parseTextures( images ); - var materials = this.parseMaterials( textures ); - var deformers = this.parseDeformers(); - var geometryMap = new GeometryParser().parse( deformers ); - - this.parseScene( deformers, geometryMap, materials ); - - return sceneGraph; - - }, - - // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry ) - // and details the connection type - parseConnections: function () { - - var connectionMap = new Map(); - - if ( 'Connections' in fbxTree ) { - - var rawConnections = fbxTree.Connections.connections; - - rawConnections.forEach( function ( rawConnection ) { - - var fromID = rawConnection[ 0 ]; - var toID = rawConnection[ 1 ]; - var relationship = rawConnection[ 2 ]; - - if ( ! connectionMap.has( fromID ) ) { - - connectionMap.set( fromID, { - parents: [], - children: [] - } ); - - } - - var parentRelationship = { ID: toID, relationship: relationship }; - connectionMap.get( fromID ).parents.push( parentRelationship ); - - if ( ! connectionMap.has( toID ) ) { - - connectionMap.set( toID, { - parents: [], - children: [] - } ); - - } - - var childRelationship = { ID: fromID, relationship: relationship }; - connectionMap.get( toID ).children.push( childRelationship ); - - } ); - - } - - return connectionMap; - - }, - - // Parse FBXTree.Objects.Video for embedded image data - // These images are connected to textures in FBXTree.Objects.Textures - // via FBXTree.Connections. - parseImages: function () { - - var images = {}; - var blobs = {}; - - if ( 'Video' in fbxTree.Objects ) { - - var videoNodes = fbxTree.Objects.Video; - - for ( var nodeID in videoNodes ) { - - var videoNode = videoNodes[ nodeID ]; - - var id = parseInt( nodeID ); - - images[ id ] = videoNode.RelativeFilename || videoNode.Filename; - - // raw image data is in videoNode.Content - if ( 'Content' in videoNode ) { - - var arrayBufferContent = ( videoNode.Content instanceof ArrayBuffer ) && ( videoNode.Content.byteLength > 0 ); - var base64Content = ( typeof videoNode.Content === 'string' ) && ( videoNode.Content !== '' ); - - if ( arrayBufferContent || base64Content ) { - - var image = this.parseImage( videoNodes[ nodeID ] ); - - blobs[ videoNode.RelativeFilename || videoNode.Filename ] = image; - - } - - } - - } - - } - - for ( var id in images ) { - - var filename = images[ id ]; - - if ( blobs[ filename ] !== undefined ) images[ id ] = blobs[ filename ]; - else images[ id ] = images[ id ].split( '\\' ).pop(); - - } - - return images; - - }, - - // Parse embedded image data in FBXTree.Video.Content - parseImage: function ( videoNode ) { - - var content = videoNode.Content; - var fileName = videoNode.RelativeFilename || videoNode.Filename; - var extension = fileName.slice( fileName.lastIndexOf( '.' ) + 1 ).toLowerCase(); - - var type; - - switch ( extension ) { - - case 'bmp': - - type = 'image/bmp'; - break; - - case 'jpg': - case 'jpeg': - - type = 'image/jpeg'; - break; - - case 'png': - - type = 'image/png'; - break; - - case 'tif': - - type = 'image/tiff'; - break; - - case 'tga': - - if ( this.manager.getHandler( '.tga' ) === null ) { - - console.warn( 'FBXLoader: TGA loader not found, skipping ', fileName ); - - } - - type = 'image/tga'; - break; - - default: - - console.warn( 'FBXLoader: Image type "' + extension + '" is not supported.' ); - return; - - } - - if ( typeof content === 'string' ) { // ASCII format - - return 'data:' + type + ';base64,' + content; - - } else { // Binary Format - - var array = new Uint8Array( content ); - return window.URL.createObjectURL( new Blob( [ array ], { type: type } ) ); - - } - - }, - - // Parse nodes in FBXTree.Objects.Texture - // These contain details such as UV scaling, cropping, rotation etc and are connected - // to images in FBXTree.Objects.Video - parseTextures: function ( images ) { - - var textureMap = new Map(); - - if ( 'Texture' in fbxTree.Objects ) { - - var textureNodes = fbxTree.Objects.Texture; - for ( var nodeID in textureNodes ) { - - var texture = this.parseTexture( textureNodes[ nodeID ], images ); - textureMap.set( parseInt( nodeID ), texture ); - - } - - } - - return textureMap; - - }, - - // Parse individual node in FBXTree.Objects.Texture - parseTexture: function ( textureNode, images ) { - - var texture = this.loadTexture( textureNode, images ); - - texture.ID = textureNode.id; - - texture.name = textureNode.attrName; - - var wrapModeU = textureNode.WrapModeU; - var wrapModeV = textureNode.WrapModeV; - - var valueU = wrapModeU !== undefined ? wrapModeU.value : 0; - var valueV = wrapModeV !== undefined ? wrapModeV.value : 0; - - // http://download.autodesk.com/us/fbx/SDKdocs/FBX_SDK_Help/files/fbxsdkref/class_k_fbx_texture.html#889640e63e2e681259ea81061b85143a - // 0: repeat(default), 1: clamp - - texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping; - texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping; - - if ( 'Scaling' in textureNode ) { - - var values = textureNode.Scaling.value; - - texture.repeat.x = values[ 0 ]; - texture.repeat.y = values[ 1 ]; - - } - - return texture; - - }, - - // load a texture specified as a blob or data URI, or via an external URL using TextureLoader - loadTexture: function ( textureNode, images ) { - - var fileName; - - var currentPath = this.textureLoader.path; - - var children = connections.get( textureNode.id ).children; - - if ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) { - - fileName = images[ children[ 0 ].ID ]; - - if ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) { - - this.textureLoader.setPath( undefined ); - - } - - } - - var texture; - - var extension = textureNode.FileName.slice( - 3 ).toLowerCase(); - - if ( extension === 'tga' ) { - - var loader = this.manager.getHandler( '.tga' ); - - if ( loader === null ) { - - console.warn( 'FBXLoader: TGA loader not found, creating placeholder texture for', textureNode.RelativeFilename ); - texture = new Texture(); - - } else { - - texture = loader.load( fileName ); - - } - - } else if ( extension === 'psd' ) { - - console.warn( 'FBXLoader: PSD textures are not supported, creating placeholder texture for', textureNode.RelativeFilename ); - texture = new Texture(); - - } else { - - texture = this.textureLoader.load( fileName ); - - } - - this.textureLoader.setPath( currentPath ); - - return texture; - - }, - - // Parse nodes in FBXTree.Objects.Material - parseMaterials: function ( textureMap ) { - - var materialMap = new Map(); - - if ( 'Material' in fbxTree.Objects ) { - - var materialNodes = fbxTree.Objects.Material; - - for ( var nodeID in materialNodes ) { - - var material = this.parseMaterial( materialNodes[ nodeID ], textureMap ); - - if ( material !== null ) materialMap.set( parseInt( nodeID ), material ); - - } - - } - - return materialMap; - - }, - - // Parse single node in FBXTree.Objects.Material - // Materials are connected to texture maps in FBXTree.Objects.Textures - // FBX format currently only supports Lambert and Phong shading models - parseMaterial: function ( materialNode, textureMap ) { - - var ID = materialNode.id; - var name = materialNode.attrName; - var type = materialNode.ShadingModel; - - // Case where FBX wraps shading model in property object. - if ( typeof type === 'object' ) { - - type = type.value; - - } - - // Ignore unused materials which don't have any connections. - if ( ! connections.has( ID ) ) return null; - - var parameters = this.parseParameters( materialNode, textureMap, ID ); - - var material; - - switch ( type.toLowerCase() ) { - - case 'phong': - material = new MeshPhongMaterial(); - break; - case 'lambert': - material = new MeshLambertMaterial(); - break; - default: - console.warn( 'THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.', type ); - material = new MeshPhongMaterial(); - break; - - } - - material.setValues( parameters ); - material.name = name; - - return material; - - }, - - // Parse FBX material and return parameters suitable for a three.js material - // Also parse the texture map and return any textures associated with the material - parseParameters: function ( materialNode, textureMap, ID ) { - - var parameters = {}; - - if ( materialNode.BumpFactor ) { - - parameters.bumpScale = materialNode.BumpFactor.value; - - } - - if ( materialNode.Diffuse ) { - - parameters.color = new Color().fromArray( materialNode.Diffuse.value ); - - } else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) { - - // The blender exporter exports diffuse here instead of in materialNode.Diffuse - parameters.color = new Color().fromArray( materialNode.DiffuseColor.value ); - - } - - if ( materialNode.DisplacementFactor ) { - - parameters.displacementScale = materialNode.DisplacementFactor.value; - - } - - if ( materialNode.Emissive ) { - - parameters.emissive = new Color().fromArray( materialNode.Emissive.value ); - - } else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) { - - // The blender exporter exports emissive color here instead of in materialNode.Emissive - parameters.emissive = new Color().fromArray( materialNode.EmissiveColor.value ); - - } - - if ( materialNode.EmissiveFactor ) { - - parameters.emissiveIntensity = parseFloat( materialNode.EmissiveFactor.value ); - - } - - if ( materialNode.Opacity ) { - - parameters.opacity = parseFloat( materialNode.Opacity.value ); - - } - - if ( parameters.opacity < 1.0 ) { - - parameters.transparent = true; - - } - - if ( materialNode.ReflectionFactor ) { - - parameters.reflectivity = materialNode.ReflectionFactor.value; - - } - - if ( materialNode.Shininess ) { - - parameters.shininess = materialNode.Shininess.value; - - } - - if ( materialNode.Specular ) { - - parameters.specular = new Color().fromArray( materialNode.Specular.value ); - - } else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) { - - // The blender exporter exports specular color here instead of in materialNode.Specular - parameters.specular = new Color().fromArray( materialNode.SpecularColor.value ); - - } - - var scope = this; - connections.get( ID ).children.forEach( function ( child ) { - - var type = child.relationship; - - switch ( type ) { - - case 'Bump': - parameters.bumpMap = scope.getTexture( textureMap, child.ID ); - break; - - case 'Maya|TEX_ao_map': - parameters.aoMap = scope.getTexture( textureMap, child.ID ); - break; - - case 'DiffuseColor': - case 'Maya|TEX_color_map': - parameters.map = scope.getTexture( textureMap, child.ID ); - parameters.map.encoding = sRGBEncoding; - break; - - case 'DisplacementColor': - parameters.displacementMap = scope.getTexture( textureMap, child.ID ); - break; - - case 'EmissiveColor': - parameters.emissiveMap = scope.getTexture( textureMap, child.ID ); - parameters.emissiveMap.encoding = sRGBEncoding; - break; - - case 'NormalMap': - case 'Maya|TEX_normal_map': - parameters.normalMap = scope.getTexture( textureMap, child.ID ); - break; - - case 'ReflectionColor': - parameters.envMap = scope.getTexture( textureMap, child.ID ); - parameters.envMap.mapping = EquirectangularReflectionMapping; - parameters.envMap.encoding = sRGBEncoding; - break; - - case 'SpecularColor': - parameters.specularMap = scope.getTexture( textureMap, child.ID ); - parameters.specularMap.encoding = sRGBEncoding; - break; - - case 'TransparentColor': - case 'TransparencyFactor': - parameters.alphaMap = scope.getTexture( textureMap, child.ID ); - parameters.transparent = true; - break; - - case 'AmbientColor': - case 'ShininessExponent': // AKA glossiness map - case 'SpecularFactor': // AKA specularLevel - case 'VectorDisplacementColor': // NOTE: Seems to be a copy of DisplacementColor - default: - console.warn( 'THREE.FBXLoader: %s map is not supported in three.js, skipping texture.', type ); - break; - - } - - } ); - - return parameters; - - }, - - // get a texture from the textureMap for use by a material. - getTexture: function ( textureMap, id ) { - - // if the texture is a layered texture, just use the first layer and issue a warning - if ( 'LayeredTexture' in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture ) { - - console.warn( 'THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.' ); - id = connections.get( id ).children[ 0 ].ID; - - } - - return textureMap.get( id ); - - }, - - // Parse nodes in FBXTree.Objects.Deformer - // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here - // Generates map of Skeleton-like objects for use later when generating and binding skeletons. - parseDeformers: function () { - - var skeletons = {}; - var morphTargets = {}; - - if ( 'Deformer' in fbxTree.Objects ) { - - var DeformerNodes = fbxTree.Objects.Deformer; - - for ( var nodeID in DeformerNodes ) { - - var deformerNode = DeformerNodes[ nodeID ]; - - var relationships = connections.get( parseInt( nodeID ) ); - - if ( deformerNode.attrType === 'Skin' ) { - - var skeleton = this.parseSkeleton( relationships, DeformerNodes ); - skeleton.ID = nodeID; - - if ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: skeleton attached to more than one geometry is not supported.' ); - skeleton.geometryID = relationships.parents[ 0 ].ID; - - skeletons[ nodeID ] = skeleton; - - } else if ( deformerNode.attrType === 'BlendShape' ) { - - var morphTarget = { - id: nodeID, - }; - - morphTarget.rawTargets = this.parseMorphTargets( relationships, DeformerNodes ); - morphTarget.id = nodeID; - - if ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: morph target attached to more than one geometry is not supported.' ); - - morphTargets[ nodeID ] = morphTarget; - - } - - } - - } - - return { - - skeletons: skeletons, - morphTargets: morphTargets, - - }; - - }, - - // Parse single nodes in FBXTree.Objects.Deformer - // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster' - // Each skin node represents a skeleton and each cluster node represents a bone - parseSkeleton: function ( relationships, deformerNodes ) { - - var rawBones = []; - - relationships.children.forEach( function ( child ) { - - var boneNode = deformerNodes[ child.ID ]; - - if ( boneNode.attrType !== 'Cluster' ) return; - - var rawBone = { - - ID: child.ID, - indices: [], - weights: [], - transformLink: new Matrix4().fromArray( boneNode.TransformLink.a ), - // transform: new Matrix4().fromArray( boneNode.Transform.a ), - // linkMode: boneNode.Mode, - - }; - - if ( 'Indexes' in boneNode ) { - - rawBone.indices = boneNode.Indexes.a; - rawBone.weights = boneNode.Weights.a; - - } - - rawBones.push( rawBone ); - - } ); - - return { - - rawBones: rawBones, - bones: [] - - }; - - }, - - // The top level morph deformer node has type "BlendShape" and sub nodes have type "BlendShapeChannel" - parseMorphTargets: function ( relationships, deformerNodes ) { - - var rawMorphTargets = []; - - for ( var i = 0; i < relationships.children.length; i ++ ) { - - var child = relationships.children[ i ]; - - var morphTargetNode = deformerNodes[ child.ID ]; - - var rawMorphTarget = { - - name: morphTargetNode.attrName, - initialWeight: morphTargetNode.DeformPercent, - id: morphTargetNode.id, - fullWeights: morphTargetNode.FullWeights.a - - }; - - if ( morphTargetNode.attrType !== 'BlendShapeChannel' ) return; - - rawMorphTarget.geoID = connections.get( parseInt( child.ID ) ).children.filter( function ( child ) { - - return child.relationship === undefined; - - } )[ 0 ].ID; - - rawMorphTargets.push( rawMorphTarget ); - - } - - return rawMorphTargets; - - }, - - // create the main Group() to be returned by the loader - parseScene: function ( deformers, geometryMap, materialMap ) { - - sceneGraph = new Group(); - - var modelMap = this.parseModels( deformers.skeletons, geometryMap, materialMap ); - - var modelNodes = fbxTree.Objects.Model; - - var scope = this; - modelMap.forEach( function ( model ) { - - var modelNode = modelNodes[ model.ID ]; - scope.setLookAtProperties( model, modelNode ); - - var parentConnections = connections.get( model.ID ).parents; - - parentConnections.forEach( function ( connection ) { - - var parent = modelMap.get( connection.ID ); - if ( parent !== undefined ) parent.add( model ); - - } ); - - if ( model.parent === null ) { - - sceneGraph.add( model ); - - } - - - } ); - - this.bindSkeleton( deformers.skeletons, geometryMap, modelMap ); - - this.createAmbientLight(); - - this.setupMorphMaterials(); - - sceneGraph.traverse( function ( node ) { - - if ( node.userData.transformData ) { - - if ( node.parent ) node.userData.transformData.parentMatrixWorld = node.parent.matrix; - - var transform = generateTransform( node.userData.transformData ); - - node.applyMatrix4( transform ); - - } - - } ); - - var animations = new AnimationParser().parse(); - - // if all the models where already combined in a single group, just return that - if ( sceneGraph.children.length === 1 && sceneGraph.children[ 0 ].isGroup ) { - - sceneGraph.children[ 0 ].animations = animations; - sceneGraph = sceneGraph.children[ 0 ]; - - } - - sceneGraph.animations = animations; - - }, - - // parse nodes in FBXTree.Objects.Model - parseModels: function ( skeletons, geometryMap, materialMap ) { - - var modelMap = new Map(); - var modelNodes = fbxTree.Objects.Model; - - for ( var nodeID in modelNodes ) { - - var id = parseInt( nodeID ); - var node = modelNodes[ nodeID ]; - var relationships = connections.get( id ); - - var model = this.buildSkeleton( relationships, skeletons, id, node.attrName ); - - if ( ! model ) { - - switch ( node.attrType ) { - - case 'Camera': - model = this.createCamera( relationships ); - break; - case 'Light': - model = this.createLight( relationships ); - break; - case 'Mesh': - model = this.createMesh( relationships, geometryMap, materialMap ); - break; - case 'NurbsCurve': - model = this.createCurve( relationships, geometryMap ); - break; - case 'LimbNode': - case 'Root': - model = new Bone(); - break; - case 'Null': - default: - model = new Group(); - break; - - } - - model.name = node.attrName ? PropertyBinding.sanitizeNodeName( node.attrName ) : ''; - - model.ID = id; - - } - - this.getTransformData( model, node ); - modelMap.set( id, model ); - - } - - return modelMap; - - }, - - buildSkeleton: function ( relationships, skeletons, id, name ) { - - var bone = null; - - relationships.parents.forEach( function ( parent ) { - - for ( var ID in skeletons ) { - - var skeleton = skeletons[ ID ]; - - skeleton.rawBones.forEach( function ( rawBone, i ) { - - if ( rawBone.ID === parent.ID ) { - - var subBone = bone; - bone = new Bone(); - - bone.matrixWorld.copy( rawBone.transformLink ); - - // set name and id here - otherwise in cases where "subBone" is created it will not have a name / id - - bone.name = name ? PropertyBinding.sanitizeNodeName( name ) : ''; - bone.ID = id; - - skeleton.bones[ i ] = bone; - - // In cases where a bone is shared between multiple meshes - // duplicate the bone here and and it as a child of the first bone - if ( subBone !== null ) { - - bone.add( subBone ); - - } - - } - - } ); - - } - - } ); - - return bone; - - }, - - // create a PerspectiveCamera or OrthographicCamera - createCamera: function ( relationships ) { - - var model; - var cameraAttribute; - - relationships.children.forEach( function ( child ) { - - var attr = fbxTree.Objects.NodeAttribute[ child.ID ]; - - if ( attr !== undefined ) { - - cameraAttribute = attr; - - } - - } ); - - if ( cameraAttribute === undefined ) { - - model = new Object3D(); - - } else { - - var type = 0; - if ( cameraAttribute.CameraProjectionType !== undefined && cameraAttribute.CameraProjectionType.value === 1 ) { - - type = 1; - - } - - var nearClippingPlane = 1; - if ( cameraAttribute.NearPlane !== undefined ) { - - nearClippingPlane = cameraAttribute.NearPlane.value / 1000; - - } - - var farClippingPlane = 1000; - if ( cameraAttribute.FarPlane !== undefined ) { - - farClippingPlane = cameraAttribute.FarPlane.value / 1000; - - } - - - var width = window.innerWidth; - var height = window.innerHeight; - - if ( cameraAttribute.AspectWidth !== undefined && cameraAttribute.AspectHeight !== undefined ) { - - width = cameraAttribute.AspectWidth.value; - height = cameraAttribute.AspectHeight.value; - - } - - var aspect = width / height; - - var fov = 45; - if ( cameraAttribute.FieldOfView !== undefined ) { - - fov = cameraAttribute.FieldOfView.value; - - } - - var focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null; - - switch ( type ) { - - case 0: // Perspective - model = new PerspectiveCamera( fov, aspect, nearClippingPlane, farClippingPlane ); - if ( focalLength !== null ) model.setFocalLength( focalLength ); - break; - - case 1: // Orthographic - model = new OrthographicCamera( - width / 2, width / 2, height / 2, - height / 2, nearClippingPlane, farClippingPlane ); - break; - - default: - console.warn( 'THREE.FBXLoader: Unknown camera type ' + type + '.' ); - model = new Object3D(); - break; - - } - - } - - return model; - - }, - - // Create a DirectionalLight, PointLight or SpotLight - createLight: function ( relationships ) { - - var model; - var lightAttribute; - - relationships.children.forEach( function ( child ) { - - var attr = fbxTree.Objects.NodeAttribute[ child.ID ]; - - if ( attr !== undefined ) { - - lightAttribute = attr; - - } - - } ); - - if ( lightAttribute === undefined ) { - - model = new Object3D(); - - } else { - - var type; - - // LightType can be undefined for Point lights - if ( lightAttribute.LightType === undefined ) { - - type = 0; - - } else { - - type = lightAttribute.LightType.value; - - } - - var color = 0xffffff; - - if ( lightAttribute.Color !== undefined ) { - - color = new Color().fromArray( lightAttribute.Color.value ); - - } - - var intensity = ( lightAttribute.Intensity === undefined ) ? 1 : lightAttribute.Intensity.value / 100; - - // light disabled - if ( lightAttribute.CastLightOnObject !== undefined && lightAttribute.CastLightOnObject.value === 0 ) { - - intensity = 0; - - } - - var distance = 0; - if ( lightAttribute.FarAttenuationEnd !== undefined ) { - - if ( lightAttribute.EnableFarAttenuation !== undefined && lightAttribute.EnableFarAttenuation.value === 0 ) { - - distance = 0; - - } else { - - distance = lightAttribute.FarAttenuationEnd.value; - - } - - } - - // TODO: could this be calculated linearly from FarAttenuationStart to FarAttenuationEnd? - var decay = 1; - - switch ( type ) { - - case 0: // Point - model = new PointLight( color, intensity, distance, decay ); - break; - - case 1: // Directional - model = new DirectionalLight( color, intensity ); - break; - - case 2: // Spot - var angle = Math.PI / 3; - - if ( lightAttribute.InnerAngle !== undefined ) { - - angle = MathUtils.degToRad( lightAttribute.InnerAngle.value ); - - } - - var penumbra = 0; - if ( lightAttribute.OuterAngle !== undefined ) { - - // TODO: this is not correct - FBX calculates outer and inner angle in degrees - // with OuterAngle > InnerAngle && OuterAngle <= Math.PI - // while three.js uses a penumbra between (0, 1) to attenuate the inner angle - penumbra = MathUtils.degToRad( lightAttribute.OuterAngle.value ); - penumbra = Math.max( penumbra, 1 ); - - } - - model = new SpotLight( color, intensity, distance, angle, penumbra, decay ); - break; - - default: - console.warn( 'THREE.FBXLoader: Unknown light type ' + lightAttribute.LightType.value + ', defaulting to a PointLight.' ); - model = new PointLight( color, intensity ); - break; - - } - - if ( lightAttribute.CastShadows !== undefined && lightAttribute.CastShadows.value === 1 ) { - - model.castShadow = true; - - } - - } - - return model; - - }, - - createMesh: function ( relationships, geometryMap, materialMap ) { - - var model; - var geometry = null; - var material = null; - var materials = []; - - // get geometry and materials(s) from connections - relationships.children.forEach( function ( child ) { - - if ( geometryMap.has( child.ID ) ) { - - geometry = geometryMap.get( child.ID ); - - } - - if ( materialMap.has( child.ID ) ) { - - materials.push( materialMap.get( child.ID ) ); - - } - - } ); - - if ( materials.length > 1 ) { - - material = materials; - - } else if ( materials.length > 0 ) { - - material = materials[ 0 ]; - - } else { - - material = new MeshPhongMaterial( { color: 0xcccccc } ); - materials.push( material ); - - } - - if ( 'color' in geometry.attributes ) { - - materials.forEach( function ( material ) { - - material.vertexColors = true; - - } ); - - } - - if ( geometry.FBX_Deformer ) { - - materials.forEach( function ( material ) { - - material.skinning = true; - - } ); - - model = new SkinnedMesh( geometry, material ); - model.normalizeSkinWeights(); - - } else { - - model = new Mesh( geometry, material ); - - } - - return model; - - }, - - createCurve: function ( relationships, geometryMap ) { - - var geometry = relationships.children.reduce( function ( geo, child ) { - - if ( geometryMap.has( child.ID ) ) geo = geometryMap.get( child.ID ); - - return geo; - - }, null ); - - // FBX does not list materials for Nurbs lines, so we'll just put our own in here. - var material = new LineBasicMaterial( { color: 0x3300ff, linewidth: 1 } ); - return new Line( geometry, material ); - - }, - - // parse the model node for transform data - getTransformData: function ( model, modelNode ) { - - var transformData = {}; - - if ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value ); - - if ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value ); - else transformData.eulerOrder = 'ZYX'; - - if ( 'Lcl_Translation' in modelNode ) transformData.translation = modelNode.Lcl_Translation.value; - - if ( 'PreRotation' in modelNode ) transformData.preRotation = modelNode.PreRotation.value; - if ( 'Lcl_Rotation' in modelNode ) transformData.rotation = modelNode.Lcl_Rotation.value; - if ( 'PostRotation' in modelNode ) transformData.postRotation = modelNode.PostRotation.value; - - if ( 'Lcl_Scaling' in modelNode ) transformData.scale = modelNode.Lcl_Scaling.value; - - if ( 'ScalingOffset' in modelNode ) transformData.scalingOffset = modelNode.ScalingOffset.value; - if ( 'ScalingPivot' in modelNode ) transformData.scalingPivot = modelNode.ScalingPivot.value; - - if ( 'RotationOffset' in modelNode ) transformData.rotationOffset = modelNode.RotationOffset.value; - if ( 'RotationPivot' in modelNode ) transformData.rotationPivot = modelNode.RotationPivot.value; - - model.userData.transformData = transformData; - - }, - - setLookAtProperties: function ( model, modelNode ) { - - if ( 'LookAtProperty' in modelNode ) { - - var children = connections.get( model.ID ).children; - - children.forEach( function ( child ) { - - if ( child.relationship === 'LookAtProperty' ) { - - var lookAtTarget = fbxTree.Objects.Model[ child.ID ]; - - if ( 'Lcl_Translation' in lookAtTarget ) { - - var pos = lookAtTarget.Lcl_Translation.value; - - // DirectionalLight, SpotLight - if ( model.target !== undefined ) { - - model.target.position.fromArray( pos ); - sceneGraph.add( model.target ); - - } else { // Cameras and other Object3Ds - - model.lookAt( new Vector3().fromArray( pos ) ); - - } - - } - - } - - } ); - - } - - }, - - bindSkeleton: function ( skeletons, geometryMap, modelMap ) { - - var bindMatrices = this.parsePoseNodes(); - - for ( var ID in skeletons ) { - - var skeleton = skeletons[ ID ]; - - var parents = connections.get( parseInt( skeleton.ID ) ).parents; - - parents.forEach( function ( parent ) { - - if ( geometryMap.has( parent.ID ) ) { - - var geoID = parent.ID; - var geoRelationships = connections.get( geoID ); - - geoRelationships.parents.forEach( function ( geoConnParent ) { - - if ( modelMap.has( geoConnParent.ID ) ) { - - var model = modelMap.get( geoConnParent.ID ); - - model.bind( new Skeleton( skeleton.bones ), bindMatrices[ geoConnParent.ID ] ); - - } - - } ); - - } - - } ); - - } - - }, - - parsePoseNodes: function () { - - var bindMatrices = {}; - - if ( 'Pose' in fbxTree.Objects ) { - - var BindPoseNode = fbxTree.Objects.Pose; - - for ( var nodeID in BindPoseNode ) { - - if ( BindPoseNode[ nodeID ].attrType === 'BindPose' ) { - - var poseNodes = BindPoseNode[ nodeID ].PoseNode; - - if ( Array.isArray( poseNodes ) ) { - - poseNodes.forEach( function ( poseNode ) { - - bindMatrices[ poseNode.Node ] = new Matrix4().fromArray( poseNode.Matrix.a ); - - } ); - - } else { - - bindMatrices[ poseNodes.Node ] = new Matrix4().fromArray( poseNodes.Matrix.a ); - - } - - } - - } - - } - - return bindMatrices; - - }, - - // Parse ambient color in FBXTree.GlobalSettings - if it's not set to black (default), create an ambient light - createAmbientLight: function () { - - if ( 'GlobalSettings' in fbxTree && 'AmbientColor' in fbxTree.GlobalSettings ) { - - var ambientColor = fbxTree.GlobalSettings.AmbientColor.value; - var r = ambientColor[ 0 ]; - var g = ambientColor[ 1 ]; - var b = ambientColor[ 2 ]; - - if ( r !== 0 || g !== 0 || b !== 0 ) { - - var color = new Color( r, g, b ); - sceneGraph.add( new AmbientLight( color, 1 ) ); - - } - - } - - }, - - setupMorphMaterials: function () { - - var scope = this; - sceneGraph.traverse( function ( child ) { - - if ( child.isMesh ) { - - if ( child.geometry.morphAttributes.position && child.geometry.morphAttributes.position.length ) { - - if ( Array.isArray( child.material ) ) { - - child.material.forEach( function ( material, i ) { - - scope.setupMorphMaterial( child, material, i ); - - } ); - - } else { - - scope.setupMorphMaterial( child, child.material ); - - } - - } - - } - - } ); - - }, - - setupMorphMaterial: function ( child, material, index ) { - - var uuid = child.uuid; - var matUuid = material.uuid; - - // if a geometry has morph targets, it cannot share the material with other geometries - var sharedMat = false; - - sceneGraph.traverse( function ( node ) { - - if ( node.isMesh ) { - - if ( Array.isArray( node.material ) ) { - - node.material.forEach( function ( mat ) { - - if ( mat.uuid === matUuid && node.uuid !== uuid ) sharedMat = true; - - } ); - - } else if ( node.material.uuid === matUuid && node.uuid !== uuid ) sharedMat = true; - - } - - } ); - - if ( sharedMat === true ) { - - var clonedMat = material.clone(); - clonedMat.morphTargets = true; - - if ( index === undefined ) child.material = clonedMat; - else child.material[ index ] = clonedMat; - - } else material.morphTargets = true; - - } - - }; - - // parse Geometry data from FBXTree and return map of BufferGeometries - function GeometryParser() {} - - GeometryParser.prototype = { - - constructor: GeometryParser, - - // Parse nodes in FBXTree.Objects.Geometry - parse: function ( deformers ) { - - var geometryMap = new Map(); - - if ( 'Geometry' in fbxTree.Objects ) { - - var geoNodes = fbxTree.Objects.Geometry; - - for ( var nodeID in geoNodes ) { - - var relationships = connections.get( parseInt( nodeID ) ); - var geo = this.parseGeometry( relationships, geoNodes[ nodeID ], deformers ); - - geometryMap.set( parseInt( nodeID ), geo ); - - } - - } - - return geometryMap; - - }, - - // Parse single node in FBXTree.Objects.Geometry - parseGeometry: function ( relationships, geoNode, deformers ) { - - switch ( geoNode.attrType ) { - - case 'Mesh': - return this.parseMeshGeometry( relationships, geoNode, deformers ); - break; - - case 'NurbsCurve': - return this.parseNurbsGeometry( geoNode ); - break; - - } - - }, - - - // Parse single node mesh geometry in FBXTree.Objects.Geometry - parseMeshGeometry: function ( relationships, geoNode, deformers ) { - - var skeletons = deformers.skeletons; - var morphTargets = []; - - var modelNodes = relationships.parents.map( function ( parent ) { - - return fbxTree.Objects.Model[ parent.ID ]; - - } ); - - // don't create geometry if it is not associated with any models - if ( modelNodes.length === 0 ) return; - - var skeleton = relationships.children.reduce( function ( skeleton, child ) { - - if ( skeletons[ child.ID ] !== undefined ) skeleton = skeletons[ child.ID ]; - - return skeleton; - - }, null ); - - relationships.children.forEach( function ( child ) { - - if ( deformers.morphTargets[ child.ID ] !== undefined ) { - - morphTargets.push( deformers.morphTargets[ child.ID ] ); - - } - - } ); - - // Assume one model and get the preRotation from that - // if there is more than one model associated with the geometry this may cause problems - var modelNode = modelNodes[ 0 ]; - - var transformData = {}; - - if ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value ); - if ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value ); - - if ( 'GeometricTranslation' in modelNode ) transformData.translation = modelNode.GeometricTranslation.value; - if ( 'GeometricRotation' in modelNode ) transformData.rotation = modelNode.GeometricRotation.value; - if ( 'GeometricScaling' in modelNode ) transformData.scale = modelNode.GeometricScaling.value; - - var transform = generateTransform( transformData ); - - return this.genGeometry( geoNode, skeleton, morphTargets, transform ); - - }, - - // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry - genGeometry: function ( geoNode, skeleton, morphTargets, preTransform ) { - - var geo = new BufferGeometry(); - if ( geoNode.attrName ) geo.name = geoNode.attrName; - - var geoInfo = this.parseGeoNode( geoNode, skeleton ); - var buffers = this.genBuffers( geoInfo ); - - var positionAttribute = new Float32BufferAttribute( buffers.vertex, 3 ); - - positionAttribute.applyMatrix4( preTransform ); - - geo.setAttribute( 'position', positionAttribute ); - - if ( buffers.colors.length > 0 ) { - - geo.setAttribute( 'color', new Float32BufferAttribute( buffers.colors, 3 ) ); - - } - - if ( skeleton ) { - - geo.setAttribute( 'skinIndex', new Uint16BufferAttribute( buffers.weightsIndices, 4 ) ); - - geo.setAttribute( 'skinWeight', new Float32BufferAttribute( buffers.vertexWeights, 4 ) ); - - // used later to bind the skeleton to the model - geo.FBX_Deformer = skeleton; - - } - - if ( buffers.normal.length > 0 ) { - - var normalMatrix = new Matrix3().getNormalMatrix( preTransform ); - - var normalAttribute = new Float32BufferAttribute( buffers.normal, 3 ); - normalAttribute.applyNormalMatrix( normalMatrix ); - - geo.setAttribute( 'normal', normalAttribute ); - - } - - buffers.uvs.forEach( function ( uvBuffer, i ) { - - // subsequent uv buffers are called 'uv1', 'uv2', ... - var name = 'uv' + ( i + 1 ).toString(); - - // the first uv buffer is just called 'uv' - if ( i === 0 ) { - - name = 'uv'; - - } - - geo.setAttribute( name, new Float32BufferAttribute( buffers.uvs[ i ], 2 ) ); - - } ); - - if ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) { - - // Convert the material indices of each vertex into rendering groups on the geometry. - var prevMaterialIndex = buffers.materialIndex[ 0 ]; - var startIndex = 0; - - buffers.materialIndex.forEach( function ( currentIndex, i ) { - - if ( currentIndex !== prevMaterialIndex ) { - - geo.addGroup( startIndex, i - startIndex, prevMaterialIndex ); - - prevMaterialIndex = currentIndex; - startIndex = i; - - } - - } ); - - // the loop above doesn't add the last group, do that here. - if ( geo.groups.length > 0 ) { - - var lastGroup = geo.groups[ geo.groups.length - 1 ]; - var lastIndex = lastGroup.start + lastGroup.count; - - if ( lastIndex !== buffers.materialIndex.length ) { - - geo.addGroup( lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex ); - - } - - } - - // case where there are multiple materials but the whole geometry is only - // using one of them - if ( geo.groups.length === 0 ) { - - geo.addGroup( 0, buffers.materialIndex.length, buffers.materialIndex[ 0 ] ); - - } - - } - - this.addMorphTargets( geo, geoNode, morphTargets, preTransform ); - - return geo; - - }, - - parseGeoNode: function ( geoNode, skeleton ) { - - var geoInfo = {}; - - geoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : []; - geoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : []; - - if ( geoNode.LayerElementColor ) { - - geoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] ); - - } - - if ( geoNode.LayerElementMaterial ) { - - geoInfo.material = this.parseMaterialIndices( geoNode.LayerElementMaterial[ 0 ] ); - - } - - if ( geoNode.LayerElementNormal ) { - - geoInfo.normal = this.parseNormals( geoNode.LayerElementNormal[ 0 ] ); - - } - - if ( geoNode.LayerElementUV ) { - - geoInfo.uv = []; - - var i = 0; - while ( geoNode.LayerElementUV[ i ] ) { - - if ( geoNode.LayerElementUV[ i ].UV ) { - - geoInfo.uv.push( this.parseUVs( geoNode.LayerElementUV[ i ] ) ); - - } - - i ++; - - } - - } - - geoInfo.weightTable = {}; - - if ( skeleton !== null ) { - - geoInfo.skeleton = skeleton; - - skeleton.rawBones.forEach( function ( rawBone, i ) { - - // loop over the bone's vertex indices and weights - rawBone.indices.forEach( function ( index, j ) { - - if ( geoInfo.weightTable[ index ] === undefined ) geoInfo.weightTable[ index ] = []; - - geoInfo.weightTable[ index ].push( { - - id: i, - weight: rawBone.weights[ j ], - - } ); - - } ); - - } ); - - } - - return geoInfo; - - }, - - genBuffers: function ( geoInfo ) { - - var buffers = { - vertex: [], - normal: [], - colors: [], - uvs: [], - materialIndex: [], - vertexWeights: [], - weightsIndices: [], - }; - - var polygonIndex = 0; - var faceLength = 0; - var displayedWeightsWarning = false; - - // these will hold data for a single face - var facePositionIndexes = []; - var faceNormals = []; - var faceColors = []; - var faceUVs = []; - var faceWeights = []; - var faceWeightIndices = []; - - var scope = this; - geoInfo.vertexIndices.forEach( function ( vertexIndex, polygonVertexIndex ) { - - var endOfFace = false; - - // Face index and vertex index arrays are combined in a single array - // A cube with quad faces looks like this: - // PolygonVertexIndex: *24 { - // a: 0, 1, 3, -3, 2, 3, 5, -5, 4, 5, 7, -7, 6, 7, 1, -1, 1, 7, 5, -4, 6, 0, 2, -5 - // } - // Negative numbers mark the end of a face - first face here is 0, 1, 3, -3 - // to find index of last vertex bit shift the index: ^ - 1 - if ( vertexIndex < 0 ) { - - vertexIndex = vertexIndex ^ - 1; // equivalent to ( x * -1 ) - 1 - endOfFace = true; - - } - - var weightIndices = []; - var weights = []; - - facePositionIndexes.push( vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2 ); - - if ( geoInfo.color ) { - - var data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color ); - - faceColors.push( data[ 0 ], data[ 1 ], data[ 2 ] ); - - } - - if ( geoInfo.skeleton ) { - - if ( geoInfo.weightTable[ vertexIndex ] !== undefined ) { - - geoInfo.weightTable[ vertexIndex ].forEach( function ( wt ) { - - weights.push( wt.weight ); - weightIndices.push( wt.id ); - - } ); - - - } - - if ( weights.length > 4 ) { - - if ( ! displayedWeightsWarning ) { - - console.warn( 'THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.' ); - displayedWeightsWarning = true; - - } - - var wIndex = [ 0, 0, 0, 0 ]; - var Weight = [ 0, 0, 0, 0 ]; - - weights.forEach( function ( weight, weightIndex ) { - - var currentWeight = weight; - var currentIndex = weightIndices[ weightIndex ]; - - Weight.forEach( function ( comparedWeight, comparedWeightIndex, comparedWeightArray ) { - - if ( currentWeight > comparedWeight ) { - - comparedWeightArray[ comparedWeightIndex ] = currentWeight; - currentWeight = comparedWeight; - - var tmp = wIndex[ comparedWeightIndex ]; - wIndex[ comparedWeightIndex ] = currentIndex; - currentIndex = tmp; - - } - - } ); - - } ); - - weightIndices = wIndex; - weights = Weight; - - } - - // if the weight array is shorter than 4 pad with 0s - while ( weights.length < 4 ) { - - weights.push( 0 ); - weightIndices.push( 0 ); - - } - - for ( var i = 0; i < 4; ++ i ) { - - faceWeights.push( weights[ i ] ); - faceWeightIndices.push( weightIndices[ i ] ); - - } - - } - - if ( geoInfo.normal ) { - - var data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal ); - - faceNormals.push( data[ 0 ], data[ 1 ], data[ 2 ] ); - - } - - if ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) { - - var materialIndex = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material )[ 0 ]; - - } - - if ( geoInfo.uv ) { - - geoInfo.uv.forEach( function ( uv, i ) { - - var data = getData( polygonVertexIndex, polygonIndex, vertexIndex, uv ); - - if ( faceUVs[ i ] === undefined ) { - - faceUVs[ i ] = []; - - } - - faceUVs[ i ].push( data[ 0 ] ); - faceUVs[ i ].push( data[ 1 ] ); - - } ); - - } - - faceLength ++; - - if ( endOfFace ) { - - scope.genFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ); - - polygonIndex ++; - faceLength = 0; - - // reset arrays for the next face - facePositionIndexes = []; - faceNormals = []; - faceColors = []; - faceUVs = []; - faceWeights = []; - faceWeightIndices = []; - - } - - } ); - - return buffers; - - }, - - // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris - genFace: function ( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ) { - - for ( var i = 2; i < faceLength; i ++ ) { - - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 0 ] ] ); - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 1 ] ] ); - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 2 ] ] ); - - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 ] ] ); - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 + 1 ] ] ); - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 + 2 ] ] ); - - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 ] ] ); - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 + 1 ] ] ); - buffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 + 2 ] ] ); - - if ( geoInfo.skeleton ) { - - buffers.vertexWeights.push( faceWeights[ 0 ] ); - buffers.vertexWeights.push( faceWeights[ 1 ] ); - buffers.vertexWeights.push( faceWeights[ 2 ] ); - buffers.vertexWeights.push( faceWeights[ 3 ] ); - - buffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 ] ); - buffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 1 ] ); - buffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 2 ] ); - buffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 3 ] ); - - buffers.vertexWeights.push( faceWeights[ i * 4 ] ); - buffers.vertexWeights.push( faceWeights[ i * 4 + 1 ] ); - buffers.vertexWeights.push( faceWeights[ i * 4 + 2 ] ); - buffers.vertexWeights.push( faceWeights[ i * 4 + 3 ] ); - - buffers.weightsIndices.push( faceWeightIndices[ 0 ] ); - buffers.weightsIndices.push( faceWeightIndices[ 1 ] ); - buffers.weightsIndices.push( faceWeightIndices[ 2 ] ); - buffers.weightsIndices.push( faceWeightIndices[ 3 ] ); - - buffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 ] ); - buffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 1 ] ); - buffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 2 ] ); - buffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 3 ] ); - - buffers.weightsIndices.push( faceWeightIndices[ i * 4 ] ); - buffers.weightsIndices.push( faceWeightIndices[ i * 4 + 1 ] ); - buffers.weightsIndices.push( faceWeightIndices[ i * 4 + 2 ] ); - buffers.weightsIndices.push( faceWeightIndices[ i * 4 + 3 ] ); - - } - - if ( geoInfo.color ) { - - buffers.colors.push( faceColors[ 0 ] ); - buffers.colors.push( faceColors[ 1 ] ); - buffers.colors.push( faceColors[ 2 ] ); - - buffers.colors.push( faceColors[ ( i - 1 ) * 3 ] ); - buffers.colors.push( faceColors[ ( i - 1 ) * 3 + 1 ] ); - buffers.colors.push( faceColors[ ( i - 1 ) * 3 + 2 ] ); - - buffers.colors.push( faceColors[ i * 3 ] ); - buffers.colors.push( faceColors[ i * 3 + 1 ] ); - buffers.colors.push( faceColors[ i * 3 + 2 ] ); - - } - - if ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) { - - buffers.materialIndex.push( materialIndex ); - buffers.materialIndex.push( materialIndex ); - buffers.materialIndex.push( materialIndex ); - - } - - if ( geoInfo.normal ) { - - buffers.normal.push( faceNormals[ 0 ] ); - buffers.normal.push( faceNormals[ 1 ] ); - buffers.normal.push( faceNormals[ 2 ] ); - - buffers.normal.push( faceNormals[ ( i - 1 ) * 3 ] ); - buffers.normal.push( faceNormals[ ( i - 1 ) * 3 + 1 ] ); - buffers.normal.push( faceNormals[ ( i - 1 ) * 3 + 2 ] ); - - buffers.normal.push( faceNormals[ i * 3 ] ); - buffers.normal.push( faceNormals[ i * 3 + 1 ] ); - buffers.normal.push( faceNormals[ i * 3 + 2 ] ); - - } - - if ( geoInfo.uv ) { - - geoInfo.uv.forEach( function ( uv, j ) { - - if ( buffers.uvs[ j ] === undefined ) buffers.uvs[ j ] = []; - - buffers.uvs[ j ].push( faceUVs[ j ][ 0 ] ); - buffers.uvs[ j ].push( faceUVs[ j ][ 1 ] ); - - buffers.uvs[ j ].push( faceUVs[ j ][ ( i - 1 ) * 2 ] ); - buffers.uvs[ j ].push( faceUVs[ j ][ ( i - 1 ) * 2 + 1 ] ); - - buffers.uvs[ j ].push( faceUVs[ j ][ i * 2 ] ); - buffers.uvs[ j ].push( faceUVs[ j ][ i * 2 + 1 ] ); - - } ); - - } - - } - - }, - - addMorphTargets: function ( parentGeo, parentGeoNode, morphTargets, preTransform ) { - - if ( morphTargets.length === 0 ) return; - - parentGeo.morphTargetsRelative = true; - - parentGeo.morphAttributes.position = []; - // parentGeo.morphAttributes.normal = []; // not implemented - - var scope = this; - morphTargets.forEach( function ( morphTarget ) { - - morphTarget.rawTargets.forEach( function ( rawTarget ) { - - var morphGeoNode = fbxTree.Objects.Geometry[ rawTarget.geoID ]; - - if ( morphGeoNode !== undefined ) { - - scope.genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name ); - - } - - } ); - - } ); - - }, - - // a morph geometry node is similar to a standard node, and the node is also contained - // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal - // and a special attribute Index defining which vertices of the original geometry are affected - // Normal and position attributes only have data for the vertices that are affected by the morph - genMorphGeometry: function ( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) { - - var vertexIndices = ( parentGeoNode.PolygonVertexIndex !== undefined ) ? parentGeoNode.PolygonVertexIndex.a : []; - - var morphPositionsSparse = ( morphGeoNode.Vertices !== undefined ) ? morphGeoNode.Vertices.a : []; - var indices = ( morphGeoNode.Indexes !== undefined ) ? morphGeoNode.Indexes.a : []; - - var length = parentGeo.attributes.position.count * 3; - var morphPositions = new Float32Array( length ); - - for ( var i = 0; i < indices.length; i ++ ) { - - var morphIndex = indices[ i ] * 3; - - morphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ]; - morphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ]; - morphPositions[ morphIndex + 2 ] = morphPositionsSparse[ i * 3 + 2 ]; - - } - - // TODO: add morph normal support - var morphGeoInfo = { - vertexIndices: vertexIndices, - vertexPositions: morphPositions, - - }; - - var morphBuffers = this.genBuffers( morphGeoInfo ); - - var positionAttribute = new Float32BufferAttribute( morphBuffers.vertex, 3 ); - positionAttribute.name = name || morphGeoNode.attrName; - - positionAttribute.applyMatrix4( preTransform ); - - parentGeo.morphAttributes.position.push( positionAttribute ); - - }, - - // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists - parseNormals: function ( NormalNode ) { - - var mappingType = NormalNode.MappingInformationType; - var referenceType = NormalNode.ReferenceInformationType; - var buffer = NormalNode.Normals.a; - var indexBuffer = []; - if ( referenceType === 'IndexToDirect' ) { - - if ( 'NormalIndex' in NormalNode ) { - - indexBuffer = NormalNode.NormalIndex.a; - - } else if ( 'NormalsIndex' in NormalNode ) { - - indexBuffer = NormalNode.NormalsIndex.a; - - } - - } - - return { - dataSize: 3, - buffer: buffer, - indices: indexBuffer, - mappingType: mappingType, - referenceType: referenceType - }; - - }, - - // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists - parseUVs: function ( UVNode ) { - - var mappingType = UVNode.MappingInformationType; - var referenceType = UVNode.ReferenceInformationType; - var buffer = UVNode.UV.a; - var indexBuffer = []; - if ( referenceType === 'IndexToDirect' ) { - - indexBuffer = UVNode.UVIndex.a; - - } - - return { - dataSize: 2, - buffer: buffer, - indices: indexBuffer, - mappingType: mappingType, - referenceType: referenceType - }; - - }, - - // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists - parseVertexColors: function ( ColorNode ) { - - var mappingType = ColorNode.MappingInformationType; - var referenceType = ColorNode.ReferenceInformationType; - var buffer = ColorNode.Colors.a; - var indexBuffer = []; - if ( referenceType === 'IndexToDirect' ) { - - indexBuffer = ColorNode.ColorIndex.a; - - } - - return { - dataSize: 4, - buffer: buffer, - indices: indexBuffer, - mappingType: mappingType, - referenceType: referenceType - }; - - }, - - // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists - parseMaterialIndices: function ( MaterialNode ) { - - var mappingType = MaterialNode.MappingInformationType; - var referenceType = MaterialNode.ReferenceInformationType; - - if ( mappingType === 'NoMappingInformation' ) { - - return { - dataSize: 1, - buffer: [ 0 ], - indices: [ 0 ], - mappingType: 'AllSame', - referenceType: referenceType - }; - - } - - var materialIndexBuffer = MaterialNode.Materials.a; - - // Since materials are stored as indices, there's a bit of a mismatch between FBX and what - // we expect.So we create an intermediate buffer that points to the index in the buffer, - // for conforming with the other functions we've written for other data. - var materialIndices = []; - - for ( var i = 0; i < materialIndexBuffer.length; ++ i ) { - - materialIndices.push( i ); - - } - - return { - dataSize: 1, - buffer: materialIndexBuffer, - indices: materialIndices, - mappingType: mappingType, - referenceType: referenceType - }; - - }, - - // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry - parseNurbsGeometry: function ( geoNode ) { - - if ( NURBSCurve === undefined ) { - - console.error( 'THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry.' ); - return new BufferGeometry(); - - } - - var order = parseInt( geoNode.Order ); - - if ( isNaN( order ) ) { - - console.error( 'THREE.FBXLoader: Invalid Order %s given for geometry ID: %s', geoNode.Order, geoNode.id ); - return new BufferGeometry(); - - } - - var degree = order - 1; - - var knots = geoNode.KnotVector.a; - var controlPoints = []; - var pointsValues = geoNode.Points.a; - - for ( var i = 0, l = pointsValues.length; i < l; i += 4 ) { - - controlPoints.push( new Vector4().fromArray( pointsValues, i ) ); - - } - - var startKnot, endKnot; - - if ( geoNode.Form === 'Closed' ) { - - controlPoints.push( controlPoints[ 0 ] ); - - } else if ( geoNode.Form === 'Periodic' ) { - - startKnot = degree; - endKnot = knots.length - 1 - startKnot; - - for ( var i = 0; i < degree; ++ i ) { - - controlPoints.push( controlPoints[ i ] ); - - } - - } - - var curve = new NURBSCurve( degree, knots, controlPoints, startKnot, endKnot ); - var vertices = curve.getPoints( controlPoints.length * 7 ); - - var positions = new Float32Array( vertices.length * 3 ); - - vertices.forEach( function ( vertex, i ) { - - vertex.toArray( positions, i * 3 ); - - } ); - - var geometry = new BufferGeometry(); - geometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) ); - - return geometry; - - }, - - }; - - // parse animation data from FBXTree - function AnimationParser() {} - - AnimationParser.prototype = { - - constructor: AnimationParser, - - // take raw animation clips and turn them into three.js animation clips - parse: function () { - - var animationClips = []; - - var rawClips = this.parseClips(); - - if ( rawClips !== undefined ) { - - for ( var key in rawClips ) { - - var rawClip = rawClips[ key ]; - - var clip = this.addClip( rawClip ); - - animationClips.push( clip ); - - } - - } - - return animationClips; - - }, - - parseClips: function () { - - // since the actual transformation data is stored in FBXTree.Objects.AnimationCurve, - // if this is undefined we can safely assume there are no animations - if ( fbxTree.Objects.AnimationCurve === undefined ) return undefined; - - var curveNodesMap = this.parseAnimationCurveNodes(); - - this.parseAnimationCurves( curveNodesMap ); - - var layersMap = this.parseAnimationLayers( curveNodesMap ); - var rawClips = this.parseAnimStacks( layersMap ); - - return rawClips; - - }, - - // parse nodes in FBXTree.Objects.AnimationCurveNode - // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation ) - // and is referenced by an AnimationLayer - parseAnimationCurveNodes: function () { - - var rawCurveNodes = fbxTree.Objects.AnimationCurveNode; - - var curveNodesMap = new Map(); - - for ( var nodeID in rawCurveNodes ) { - - var rawCurveNode = rawCurveNodes[ nodeID ]; - - if ( rawCurveNode.attrName.match( /S|R|T|DeformPercent/ ) !== null ) { - - var curveNode = { - - id: rawCurveNode.id, - attr: rawCurveNode.attrName, - curves: {}, - - }; - - curveNodesMap.set( curveNode.id, curveNode ); - - } - - } - - return curveNodesMap; - - }, - - // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to - // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated - // axis ( e.g. times and values of x rotation) - parseAnimationCurves: function ( curveNodesMap ) { - - var rawCurves = fbxTree.Objects.AnimationCurve; - - // TODO: Many values are identical up to roundoff error, but won't be optimised - // e.g. position times: [0, 0.4, 0. 8] - // position values: [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.235384487103147e-7, 93.67520904541016, -0.9982695579528809] - // clearly, this should be optimised to - // times: [0], positions [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809] - // this shows up in nearly every FBX file, and generally time array is length > 100 - - for ( var nodeID in rawCurves ) { - - var animationCurve = { - - id: rawCurves[ nodeID ].id, - times: rawCurves[ nodeID ].KeyTime.a.map( convertFBXTimeToSeconds ), - values: rawCurves[ nodeID ].KeyValueFloat.a, - - }; - - var relationships = connections.get( animationCurve.id ); - - if ( relationships !== undefined ) { - - var animationCurveID = relationships.parents[ 0 ].ID; - var animationCurveRelationship = relationships.parents[ 0 ].relationship; - - if ( animationCurveRelationship.match( /X/ ) ) { - - curveNodesMap.get( animationCurveID ).curves[ 'x' ] = animationCurve; - - } else if ( animationCurveRelationship.match( /Y/ ) ) { - - curveNodesMap.get( animationCurveID ).curves[ 'y' ] = animationCurve; - - } else if ( animationCurveRelationship.match( /Z/ ) ) { - - curveNodesMap.get( animationCurveID ).curves[ 'z' ] = animationCurve; - - } else if ( animationCurveRelationship.match( /d|DeformPercent/ ) && curveNodesMap.has( animationCurveID ) ) { - - curveNodesMap.get( animationCurveID ).curves[ 'morph' ] = animationCurve; - - } - - } - - } - - }, - - // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references - // to various AnimationCurveNodes and is referenced by an AnimationStack node - // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack - parseAnimationLayers: function ( curveNodesMap ) { - - var rawLayers = fbxTree.Objects.AnimationLayer; - - var layersMap = new Map(); - - for ( var nodeID in rawLayers ) { - - var layerCurveNodes = []; - - var connection = connections.get( parseInt( nodeID ) ); - - if ( connection !== undefined ) { - - // all the animationCurveNodes used in the layer - var children = connection.children; - - children.forEach( function ( child, i ) { - - if ( curveNodesMap.has( child.ID ) ) { - - var curveNode = curveNodesMap.get( child.ID ); - - // check that the curves are defined for at least one axis, otherwise ignore the curveNode - if ( curveNode.curves.x !== undefined || curveNode.curves.y !== undefined || curveNode.curves.z !== undefined ) { - - if ( layerCurveNodes[ i ] === undefined ) { - - var modelID = connections.get( child.ID ).parents.filter( function ( parent ) { - - return parent.relationship !== undefined; - - } )[ 0 ].ID; - - if ( modelID !== undefined ) { - - var rawModel = fbxTree.Objects.Model[ modelID.toString() ]; - - if ( rawModel === undefined ) { - - console.warn( 'THREE.FBXLoader: Encountered a unused curve.', child ); - return; - - } - - var node = { - - modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '', - ID: rawModel.id, - initialPosition: [ 0, 0, 0 ], - initialRotation: [ 0, 0, 0 ], - initialScale: [ 1, 1, 1 ], - - }; - - sceneGraph.traverse( function ( child ) { - - if ( child.ID === rawModel.id ) { - - node.transform = child.matrix; - - if ( child.userData.transformData ) node.eulerOrder = child.userData.transformData.eulerOrder; - - } - - } ); - - if ( ! node.transform ) node.transform = new Matrix4(); - - // if the animated model is pre rotated, we'll have to apply the pre rotations to every - // animation value as well - if ( 'PreRotation' in rawModel ) node.preRotation = rawModel.PreRotation.value; - if ( 'PostRotation' in rawModel ) node.postRotation = rawModel.PostRotation.value; - - layerCurveNodes[ i ] = node; - - } - - } - - if ( layerCurveNodes[ i ] ) layerCurveNodes[ i ][ curveNode.attr ] = curveNode; - - } else if ( curveNode.curves.morph !== undefined ) { - - if ( layerCurveNodes[ i ] === undefined ) { - - var deformerID = connections.get( child.ID ).parents.filter( function ( parent ) { - - return parent.relationship !== undefined; - - } )[ 0 ].ID; - - var morpherID = connections.get( deformerID ).parents[ 0 ].ID; - var geoID = connections.get( morpherID ).parents[ 0 ].ID; - - // assuming geometry is not used in more than one model - var modelID = connections.get( geoID ).parents[ 0 ].ID; - - var rawModel = fbxTree.Objects.Model[ modelID ]; - - var node = { - - modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '', - morphName: fbxTree.Objects.Deformer[ deformerID ].attrName, - - }; - - layerCurveNodes[ i ] = node; - - } - - layerCurveNodes[ i ][ curveNode.attr ] = curveNode; - - } - - } - - } ); - - layersMap.set( parseInt( nodeID ), layerCurveNodes ); - - } - - } - - return layersMap; - - }, - - // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation - // hierarchy. Each Stack node will be used to create a AnimationClip - parseAnimStacks: function ( layersMap ) { - - var rawStacks = fbxTree.Objects.AnimationStack; - - // connect the stacks (clips) up to the layers - var rawClips = {}; - - for ( var nodeID in rawStacks ) { - - var children = connections.get( parseInt( nodeID ) ).children; - - if ( children.length > 1 ) { - - // it seems like stacks will always be associated with a single layer. But just in case there are files - // where there are multiple layers per stack, we'll display a warning - console.warn( 'THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.' ); - - } - - var layer = layersMap.get( children[ 0 ].ID ); - - rawClips[ nodeID ] = { - - name: rawStacks[ nodeID ].attrName, - layer: layer, - - }; - - } - - return rawClips; - - }, - - addClip: function ( rawClip ) { - - var tracks = []; - - var scope = this; - rawClip.layer.forEach( function ( rawTracks ) { - - tracks = tracks.concat( scope.generateTracks( rawTracks ) ); - - } ); - - return new AnimationClip( rawClip.name, - 1, tracks ); - - }, - - generateTracks: function ( rawTracks ) { - - var tracks = []; - - var initialPosition = new Vector3(); - var initialRotation = new Quaternion(); - var initialScale = new Vector3(); - - if ( rawTracks.transform ) rawTracks.transform.decompose( initialPosition, initialRotation, initialScale ); - - initialPosition = initialPosition.toArray(); - initialRotation = new Euler().setFromQuaternion( initialRotation, rawTracks.eulerOrder ).toArray(); - initialScale = initialScale.toArray(); - - if ( rawTracks.T !== undefined && Object.keys( rawTracks.T.curves ).length > 0 ) { - - var positionTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.T.curves, initialPosition, 'position' ); - if ( positionTrack !== undefined ) tracks.push( positionTrack ); - - } - - if ( rawTracks.R !== undefined && Object.keys( rawTracks.R.curves ).length > 0 ) { - - var rotationTrack = this.generateRotationTrack( rawTracks.modelName, rawTracks.R.curves, initialRotation, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder ); - if ( rotationTrack !== undefined ) tracks.push( rotationTrack ); - - } - - if ( rawTracks.S !== undefined && Object.keys( rawTracks.S.curves ).length > 0 ) { - - var scaleTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.S.curves, initialScale, 'scale' ); - if ( scaleTrack !== undefined ) tracks.push( scaleTrack ); - - } - - if ( rawTracks.DeformPercent !== undefined ) { - - var morphTrack = this.generateMorphTrack( rawTracks ); - if ( morphTrack !== undefined ) tracks.push( morphTrack ); - - } - - return tracks; - - }, - - generateVectorTrack: function ( modelName, curves, initialValue, type ) { - - var times = this.getTimesForAllAxes( curves ); - var values = this.getKeyframeTrackValues( times, curves, initialValue ); - - return new VectorKeyframeTrack( modelName + '.' + type, times, values ); - - }, - - generateRotationTrack: function ( modelName, curves, initialValue, preRotation, postRotation, eulerOrder ) { - - if ( curves.x !== undefined ) { - - this.interpolateRotations( curves.x ); - curves.x.values = curves.x.values.map( MathUtils.degToRad ); - - } - - if ( curves.y !== undefined ) { - - this.interpolateRotations( curves.y ); - curves.y.values = curves.y.values.map( MathUtils.degToRad ); - - } - - if ( curves.z !== undefined ) { - - this.interpolateRotations( curves.z ); - curves.z.values = curves.z.values.map( MathUtils.degToRad ); - - } - - var times = this.getTimesForAllAxes( curves ); - var values = this.getKeyframeTrackValues( times, curves, initialValue ); - - if ( preRotation !== undefined ) { - - preRotation = preRotation.map( MathUtils.degToRad ); - preRotation.push( eulerOrder ); - - preRotation = new Euler().fromArray( preRotation ); - preRotation = new Quaternion().setFromEuler( preRotation ); - - } - - if ( postRotation !== undefined ) { - - postRotation = postRotation.map( MathUtils.degToRad ); - postRotation.push( eulerOrder ); - - postRotation = new Euler().fromArray( postRotation ); - postRotation = new Quaternion().setFromEuler( postRotation ).invert(); - - } - - var quaternion = new Quaternion(); - var euler = new Euler(); - - var quaternionValues = []; - - for ( var i = 0; i < values.length; i += 3 ) { - - euler.set( values[ i ], values[ i + 1 ], values[ i + 2 ], eulerOrder ); - - quaternion.setFromEuler( euler ); - - if ( preRotation !== undefined ) quaternion.premultiply( preRotation ); - if ( postRotation !== undefined ) quaternion.multiply( postRotation ); - - quaternion.toArray( quaternionValues, ( i / 3 ) * 4 ); - - } - - return new QuaternionKeyframeTrack( modelName + '.quaternion', times, quaternionValues ); - - }, - - generateMorphTrack: function ( rawTracks ) { - - var curves = rawTracks.DeformPercent.curves.morph; - var values = curves.values.map( function ( val ) { - - return val / 100; - - } ); - - var morphNum = sceneGraph.getObjectByName( rawTracks.modelName ).morphTargetDictionary[ rawTracks.morphName ]; - - return new NumberKeyframeTrack( rawTracks.modelName + '.morphTargetInfluences[' + morphNum + ']', curves.times, values ); - - }, - - // For all animated objects, times are defined separately for each axis - // Here we'll combine the times into one sorted array without duplicates - getTimesForAllAxes: function ( curves ) { - - var times = []; - - // first join together the times for each axis, if defined - if ( curves.x !== undefined ) times = times.concat( curves.x.times ); - if ( curves.y !== undefined ) times = times.concat( curves.y.times ); - if ( curves.z !== undefined ) times = times.concat( curves.z.times ); - - // then sort them - times = times.sort( function ( a, b ) { - - return a - b; - - } ); - - // and remove duplicates - if ( times.length > 1 ) { - - var targetIndex = 1; - var lastValue = times[ 0 ]; - for ( var i = 1; i < times.length; i ++ ) { - - var currentValue = times[ i ]; - if ( currentValue !== lastValue ) { - - times[ targetIndex ] = currentValue; - lastValue = currentValue; - targetIndex ++; - - } - - } - - times = times.slice( 0, targetIndex ); - - } - - return times; - - }, - - getKeyframeTrackValues: function ( times, curves, initialValue ) { - - var prevValue = initialValue; - - var values = []; - - var xIndex = - 1; - var yIndex = - 1; - var zIndex = - 1; - - times.forEach( function ( time ) { - - if ( curves.x ) xIndex = curves.x.times.indexOf( time ); - if ( curves.y ) yIndex = curves.y.times.indexOf( time ); - if ( curves.z ) zIndex = curves.z.times.indexOf( time ); - - // if there is an x value defined for this frame, use that - if ( xIndex !== - 1 ) { - - var xValue = curves.x.values[ xIndex ]; - values.push( xValue ); - prevValue[ 0 ] = xValue; - - } else { - - // otherwise use the x value from the previous frame - values.push( prevValue[ 0 ] ); - - } - - if ( yIndex !== - 1 ) { - - var yValue = curves.y.values[ yIndex ]; - values.push( yValue ); - prevValue[ 1 ] = yValue; - - } else { - - values.push( prevValue[ 1 ] ); - - } - - if ( zIndex !== - 1 ) { - - var zValue = curves.z.values[ zIndex ]; - values.push( zValue ); - prevValue[ 2 ] = zValue; - - } else { - - values.push( prevValue[ 2 ] ); - - } - - } ); - - return values; - - }, - - // Rotations are defined as Euler angles which can have values of any size - // These will be converted to quaternions which don't support values greater than - // PI, so we'll interpolate large rotations - interpolateRotations: function ( curve ) { - - for ( var i = 1; i < curve.values.length; i ++ ) { - - var initialValue = curve.values[ i - 1 ]; - var valuesSpan = curve.values[ i ] - initialValue; - - var absoluteSpan = Math.abs( valuesSpan ); - - if ( absoluteSpan >= 180 ) { - - var numSubIntervals = absoluteSpan / 180; - - var step = valuesSpan / numSubIntervals; - var nextValue = initialValue + step; - - var initialTime = curve.times[ i - 1 ]; - var timeSpan = curve.times[ i ] - initialTime; - var interval = timeSpan / numSubIntervals; - var nextTime = initialTime + interval; - - var interpolatedTimes = []; - var interpolatedValues = []; - - while ( nextTime < curve.times[ i ] ) { - - interpolatedTimes.push( nextTime ); - nextTime += interval; - - interpolatedValues.push( nextValue ); - nextValue += step; - - } - - curve.times = inject( curve.times, i, interpolatedTimes ); - curve.values = inject( curve.values, i, interpolatedValues ); - - } - - } - - }, - - }; - - // parse an FBX file in ASCII format - function TextParser() {} - - TextParser.prototype = { - - constructor: TextParser, - - getPrevNode: function () { - - return this.nodeStack[ this.currentIndent - 2 ]; - - }, - - getCurrentNode: function () { - - return this.nodeStack[ this.currentIndent - 1 ]; - - }, - - getCurrentProp: function () { - - return this.currentProp; - - }, - - pushStack: function ( node ) { - - this.nodeStack.push( node ); - this.currentIndent += 1; - - }, - - popStack: function () { - - this.nodeStack.pop(); - this.currentIndent -= 1; - - }, - - setCurrentProp: function ( val, name ) { - - this.currentProp = val; - this.currentPropName = name; - - }, - - parse: function ( text ) { - - this.currentIndent = 0; - - this.allNodes = new FBXTree(); - this.nodeStack = []; - this.currentProp = []; - this.currentPropName = ''; - - var scope = this; - - var split = text.split( /[\r\n]+/ ); - - split.forEach( function ( line, i ) { - - var matchComment = line.match( /^[\s\t]*;/ ); - var matchEmpty = line.match( /^[\s\t]*$/ ); - - if ( matchComment || matchEmpty ) return; - - var matchBeginning = line.match( '^\\t{' + scope.currentIndent + '}(\\w+):(.*){', '' ); - var matchProperty = line.match( '^\\t{' + ( scope.currentIndent ) + '}(\\w+):[\\s\\t\\r\\n](.*)' ); - var matchEnd = line.match( '^\\t{' + ( scope.currentIndent - 1 ) + '}}' ); - - if ( matchBeginning ) { - - scope.parseNodeBegin( line, matchBeginning ); - - } else if ( matchProperty ) { - - scope.parseNodeProperty( line, matchProperty, split[ ++ i ] ); - - } else if ( matchEnd ) { - - scope.popStack(); - - } else if ( line.match( /^[^\s\t}]/ ) ) { - - // large arrays are split over multiple lines terminated with a ',' character - // if this is encountered the line needs to be joined to the previous line - scope.parseNodePropertyContinued( line ); - - } - - } ); - - return this.allNodes; - - }, - - parseNodeBegin: function ( line, property ) { - - var nodeName = property[ 1 ].trim().replace( /^"/, '' ).replace( /"$/, '' ); - - var nodeAttrs = property[ 2 ].split( ',' ).map( function ( attr ) { - - return attr.trim().replace( /^"/, '' ).replace( /"$/, '' ); - - } ); - - var node = { name: nodeName }; - var attrs = this.parseNodeAttr( nodeAttrs ); - - var currentNode = this.getCurrentNode(); - - // a top node - if ( this.currentIndent === 0 ) { - - this.allNodes.add( nodeName, node ); - - } else { // a subnode - - // if the subnode already exists, append it - if ( nodeName in currentNode ) { - - // special case Pose needs PoseNodes as an array - if ( nodeName === 'PoseNode' ) { - - currentNode.PoseNode.push( node ); - - } else if ( currentNode[ nodeName ].id !== undefined ) { - - currentNode[ nodeName ] = {}; - currentNode[ nodeName ][ currentNode[ nodeName ].id ] = currentNode[ nodeName ]; - - } - - if ( attrs.id !== '' ) currentNode[ nodeName ][ attrs.id ] = node; - - } else if ( typeof attrs.id === 'number' ) { - - currentNode[ nodeName ] = {}; - currentNode[ nodeName ][ attrs.id ] = node; - - } else if ( nodeName !== 'Properties70' ) { - - if ( nodeName === 'PoseNode' ) currentNode[ nodeName ] = [ node ]; - else currentNode[ nodeName ] = node; - - } - - } - - if ( typeof attrs.id === 'number' ) node.id = attrs.id; - if ( attrs.name !== '' ) node.attrName = attrs.name; - if ( attrs.type !== '' ) node.attrType = attrs.type; - - this.pushStack( node ); - - }, - - parseNodeAttr: function ( attrs ) { - - var id = attrs[ 0 ]; - - if ( attrs[ 0 ] !== '' ) { - - id = parseInt( attrs[ 0 ] ); - - if ( isNaN( id ) ) { - - id = attrs[ 0 ]; - - } - - } - - var name = '', type = ''; - - if ( attrs.length > 1 ) { - - name = attrs[ 1 ].replace( /^(\w+)::/, '' ); - type = attrs[ 2 ]; - - } - - return { id: id, name: name, type: type }; - - }, - - parseNodeProperty: function ( line, property, contentLine ) { - - var propName = property[ 1 ].replace( /^"/, '' ).replace( /"$/, '' ).trim(); - var propValue = property[ 2 ].replace( /^"/, '' ).replace( /"$/, '' ).trim(); - - // for special case: base64 image data follows "Content: ," line - // Content: , - // "/9j/4RDaRXhpZgAATU0A..." - if ( propName === 'Content' && propValue === ',' ) { - - propValue = contentLine.replace( /"/g, '' ).replace( /,$/, '' ).trim(); - - } - - var currentNode = this.getCurrentNode(); - var parentName = currentNode.name; - - if ( parentName === 'Properties70' ) { - - this.parseNodeSpecialProperty( line, propName, propValue ); - return; - - } - - // Connections - if ( propName === 'C' ) { - - var connProps = propValue.split( ',' ).slice( 1 ); - var from = parseInt( connProps[ 0 ] ); - var to = parseInt( connProps[ 1 ] ); - - var rest = propValue.split( ',' ).slice( 3 ); - - rest = rest.map( function ( elem ) { - - return elem.trim().replace( /^"/, '' ); - - } ); - - propName = 'connections'; - propValue = [ from, to ]; - append( propValue, rest ); - - if ( currentNode[ propName ] === undefined ) { - - currentNode[ propName ] = []; - - } - - } - - // Node - if ( propName === 'Node' ) currentNode.id = propValue; - - // connections - if ( propName in currentNode && Array.isArray( currentNode[ propName ] ) ) { - - currentNode[ propName ].push( propValue ); - - } else { - - if ( propName !== 'a' ) currentNode[ propName ] = propValue; - else currentNode.a = propValue; - - } - - this.setCurrentProp( currentNode, propName ); - - // convert string to array, unless it ends in ',' in which case more will be added to it - if ( propName === 'a' && propValue.slice( - 1 ) !== ',' ) { - - currentNode.a = parseNumberArray( propValue ); - - } - - }, - - parseNodePropertyContinued: function ( line ) { - - var currentNode = this.getCurrentNode(); - - currentNode.a += line; - - // if the line doesn't end in ',' we have reached the end of the property value - // so convert the string to an array - if ( line.slice( - 1 ) !== ',' ) { - - currentNode.a = parseNumberArray( currentNode.a ); - - } - - }, - - // parse "Property70" - parseNodeSpecialProperty: function ( line, propName, propValue ) { - - // split this - // P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1 - // into array like below - // ["Lcl Scaling", "Lcl Scaling", "", "A", "1,1,1" ] - var props = propValue.split( '",' ).map( function ( prop ) { - - return prop.trim().replace( /^\"/, '' ).replace( /\s/, '_' ); - - } ); - - var innerPropName = props[ 0 ]; - var innerPropType1 = props[ 1 ]; - var innerPropType2 = props[ 2 ]; - var innerPropFlag = props[ 3 ]; - var innerPropValue = props[ 4 ]; - - // cast values where needed, otherwise leave as strings - switch ( innerPropType1 ) { - - case 'int': - case 'enum': - case 'bool': - case 'ULongLong': - case 'double': - case 'Number': - case 'FieldOfView': - innerPropValue = parseFloat( innerPropValue ); - break; - - case 'Color': - case 'ColorRGB': - case 'Vector3D': - case 'Lcl_Translation': - case 'Lcl_Rotation': - case 'Lcl_Scaling': - innerPropValue = parseNumberArray( innerPropValue ); - break; - - } - - // CAUTION: these props must append to parent's parent - this.getPrevNode()[ innerPropName ] = { - - 'type': innerPropType1, - 'type2': innerPropType2, - 'flag': innerPropFlag, - 'value': innerPropValue - - }; - - this.setCurrentProp( this.getPrevNode(), innerPropName ); - - }, - - }; - - // Parse an FBX file in Binary format - function BinaryParser() {} - - BinaryParser.prototype = { - - constructor: BinaryParser, - - parse: function ( buffer ) { - - var reader = new BinaryReader( buffer ); - reader.skip( 23 ); // skip magic 23 bytes - - var version = reader.getUint32(); - - if ( version < 6400 ) { - - throw new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + version ); - - } - - var allNodes = new FBXTree(); - - while ( ! this.endOfContent( reader ) ) { - - var node = this.parseNode( reader, version ); - if ( node !== null ) allNodes.add( node.name, node ); - - } - - return allNodes; - - }, - - // Check if reader has reached the end of content. - endOfContent: function ( reader ) { - - // footer size: 160bytes + 16-byte alignment padding - // - 16bytes: magic - // - padding til 16-byte alignment (at least 1byte?) - // (seems like some exporters embed fixed 15 or 16bytes?) - // - 4bytes: magic - // - 4bytes: version - // - 120bytes: zero - // - 16bytes: magic - if ( reader.size() % 16 === 0 ) { - - return ( ( reader.getOffset() + 160 + 16 ) & ~ 0xf ) >= reader.size(); - - } else { - - return reader.getOffset() + 160 + 16 >= reader.size(); - - } - - }, - - // recursively parse nodes until the end of the file is reached - parseNode: function ( reader, version ) { - - var node = {}; - - // The first three data sizes depends on version. - var endOffset = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); - var numProperties = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); - - ( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); // the returned propertyListLen is not used - - var nameLen = reader.getUint8(); - var name = reader.getString( nameLen ); - - // Regards this node as NULL-record if endOffset is zero - if ( endOffset === 0 ) return null; - - var propertyList = []; - - for ( var i = 0; i < numProperties; i ++ ) { - - propertyList.push( this.parseProperty( reader ) ); - - } - - // Regards the first three elements in propertyList as id, attrName, and attrType - var id = propertyList.length > 0 ? propertyList[ 0 ] : ''; - var attrName = propertyList.length > 1 ? propertyList[ 1 ] : ''; - var attrType = propertyList.length > 2 ? propertyList[ 2 ] : ''; - - // check if this node represents just a single property - // like (name, 0) set or (name2, [0, 1, 2]) set of {name: 0, name2: [0, 1, 2]} - node.singleProperty = ( numProperties === 1 && reader.getOffset() === endOffset ) ? true : false; - - while ( endOffset > reader.getOffset() ) { - - var subNode = this.parseNode( reader, version ); - - if ( subNode !== null ) this.parseSubNode( name, node, subNode ); - - } - - node.propertyList = propertyList; // raw property list used by parent - - if ( typeof id === 'number' ) node.id = id; - if ( attrName !== '' ) node.attrName = attrName; - if ( attrType !== '' ) node.attrType = attrType; - if ( name !== '' ) node.name = name; - - return node; - - }, - - parseSubNode: function ( name, node, subNode ) { - - // special case: child node is single property - if ( subNode.singleProperty === true ) { - - var value = subNode.propertyList[ 0 ]; - - if ( Array.isArray( value ) ) { - - node[ subNode.name ] = subNode; - - subNode.a = value; - - } else { - - node[ subNode.name ] = value; - - } - - } else if ( name === 'Connections' && subNode.name === 'C' ) { - - var array = []; - - subNode.propertyList.forEach( function ( property, i ) { - - // first Connection is FBX type (OO, OP, etc.). We'll discard these - if ( i !== 0 ) array.push( property ); - - } ); - - if ( node.connections === undefined ) { - - node.connections = []; - - } - - node.connections.push( array ); - - } else if ( subNode.name === 'Properties70' ) { - - var keys = Object.keys( subNode ); - - keys.forEach( function ( key ) { - - node[ key ] = subNode[ key ]; - - } ); - - } else if ( name === 'Properties70' && subNode.name === 'P' ) { - - var innerPropName = subNode.propertyList[ 0 ]; - var innerPropType1 = subNode.propertyList[ 1 ]; - var innerPropType2 = subNode.propertyList[ 2 ]; - var innerPropFlag = subNode.propertyList[ 3 ]; - var innerPropValue; - - if ( innerPropName.indexOf( 'Lcl ' ) === 0 ) innerPropName = innerPropName.replace( 'Lcl ', 'Lcl_' ); - if ( innerPropType1.indexOf( 'Lcl ' ) === 0 ) innerPropType1 = innerPropType1.replace( 'Lcl ', 'Lcl_' ); - - if ( innerPropType1 === 'Color' || innerPropType1 === 'ColorRGB' || innerPropType1 === 'Vector' || innerPropType1 === 'Vector3D' || innerPropType1.indexOf( 'Lcl_' ) === 0 ) { - - innerPropValue = [ - subNode.propertyList[ 4 ], - subNode.propertyList[ 5 ], - subNode.propertyList[ 6 ] - ]; - - } else { - - innerPropValue = subNode.propertyList[ 4 ]; - - } - - // this will be copied to parent, see above - node[ innerPropName ] = { - - 'type': innerPropType1, - 'type2': innerPropType2, - 'flag': innerPropFlag, - 'value': innerPropValue - - }; - - } else if ( node[ subNode.name ] === undefined ) { - - if ( typeof subNode.id === 'number' ) { - - node[ subNode.name ] = {}; - node[ subNode.name ][ subNode.id ] = subNode; - - } else { - - node[ subNode.name ] = subNode; - - } - - } else { - - if ( subNode.name === 'PoseNode' ) { - - if ( ! Array.isArray( node[ subNode.name ] ) ) { - - node[ subNode.name ] = [ node[ subNode.name ] ]; - - } - - node[ subNode.name ].push( subNode ); - - } else if ( node[ subNode.name ][ subNode.id ] === undefined ) { - - node[ subNode.name ][ subNode.id ] = subNode; - - } - - } - - }, - - parseProperty: function ( reader ) { - - var type = reader.getString( 1 ); - - switch ( type ) { - - case 'C': - return reader.getBoolean(); - - case 'D': - return reader.getFloat64(); - - case 'F': - return reader.getFloat32(); - - case 'I': - return reader.getInt32(); - - case 'L': - return reader.getInt64(); - - case 'R': - var length = reader.getUint32(); - return reader.getArrayBuffer( length ); - - case 'S': - var length = reader.getUint32(); - return reader.getString( length ); - - case 'Y': - return reader.getInt16(); - - case 'b': - case 'c': - case 'd': - case 'f': - case 'i': - case 'l': - - var arrayLength = reader.getUint32(); - var encoding = reader.getUint32(); // 0: non-compressed, 1: compressed - var compressedLength = reader.getUint32(); - - if ( encoding === 0 ) { - - switch ( type ) { - - case 'b': - case 'c': - return reader.getBooleanArray( arrayLength ); - - case 'd': - return reader.getFloat64Array( arrayLength ); - - case 'f': - return reader.getFloat32Array( arrayLength ); - - case 'i': - return reader.getInt32Array( arrayLength ); - - case 'l': - return reader.getInt64Array( arrayLength ); - - } - - } - - if ( typeof Inflate === 'undefined' ) { - - console.error( 'THREE.FBXLoader: External library Inflate.min.js required, obtain or import from https://github.com/imaya/zlib.js' ); - - } - - var inflate = new Inflate( new Uint8Array( reader.getArrayBuffer( compressedLength ) ) ); // eslint-disable-line no-undef - var reader2 = new BinaryReader( inflate.decompress().buffer ); - - switch ( type ) { - - case 'b': - case 'c': - return reader2.getBooleanArray( arrayLength ); - - case 'd': - return reader2.getFloat64Array( arrayLength ); - - case 'f': - return reader2.getFloat32Array( arrayLength ); - - case 'i': - return reader2.getInt32Array( arrayLength ); - - case 'l': - return reader2.getInt64Array( arrayLength ); - - } - - default: - throw new Error( 'THREE.FBXLoader: Unknown property type ' + type ); - - } - - } - - }; - - function BinaryReader( buffer, littleEndian ) { - - this.dv = new DataView( buffer ); - this.offset = 0; - this.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true; - - } - - BinaryReader.prototype = { - - constructor: BinaryReader, - - getOffset: function () { - - return this.offset; - - }, - - size: function () { - - return this.dv.buffer.byteLength; - - }, - - skip: function ( length ) { - - this.offset += length; - - }, - - // seems like true/false representation depends on exporter. - // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54) - // then sees LSB. - getBoolean: function () { - - return ( this.getUint8() & 1 ) === 1; - - }, - - getBooleanArray: function ( size ) { - - var a = []; - - for ( var i = 0; i < size; i ++ ) { - - a.push( this.getBoolean() ); - - } - - return a; - - }, - - getUint8: function () { - - var value = this.dv.getUint8( this.offset ); - this.offset += 1; - return value; - - }, - - getInt16: function () { - - var value = this.dv.getInt16( this.offset, this.littleEndian ); - this.offset += 2; - return value; - - }, - - getInt32: function () { - - var value = this.dv.getInt32( this.offset, this.littleEndian ); - this.offset += 4; - return value; - - }, - - getInt32Array: function ( size ) { - - var a = []; - - for ( var i = 0; i < size; i ++ ) { - - a.push( this.getInt32() ); - - } - - return a; - - }, - - getUint32: function () { - - var value = this.dv.getUint32( this.offset, this.littleEndian ); - this.offset += 4; - return value; - - }, - - // JavaScript doesn't support 64-bit integer so calculate this here - // 1 << 32 will return 1 so using multiply operation instead here. - // There's a possibility that this method returns wrong value if the value - // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER. - // TODO: safely handle 64-bit integer - getInt64: function () { - - var low, high; - - if ( this.littleEndian ) { - - low = this.getUint32(); - high = this.getUint32(); - - } else { - - high = this.getUint32(); - low = this.getUint32(); - - } - - // calculate negative value - if ( high & 0x80000000 ) { - - high = ~ high & 0xFFFFFFFF; - low = ~ low & 0xFFFFFFFF; - - if ( low === 0xFFFFFFFF ) high = ( high + 1 ) & 0xFFFFFFFF; - - low = ( low + 1 ) & 0xFFFFFFFF; - - return - ( high * 0x100000000 + low ); - - } - - return high * 0x100000000 + low; - - }, - - getInt64Array: function ( size ) { - - var a = []; - - for ( var i = 0; i < size; i ++ ) { - - a.push( this.getInt64() ); - - } - - return a; - - }, - - // Note: see getInt64() comment - getUint64: function () { - - var low, high; - - if ( this.littleEndian ) { - - low = this.getUint32(); - high = this.getUint32(); - - } else { - - high = this.getUint32(); - low = this.getUint32(); - - } - - return high * 0x100000000 + low; - - }, - - getFloat32: function () { - - var value = this.dv.getFloat32( this.offset, this.littleEndian ); - this.offset += 4; - return value; - - }, - - getFloat32Array: function ( size ) { - - var a = []; - - for ( var i = 0; i < size; i ++ ) { - - a.push( this.getFloat32() ); - - } - - return a; - - }, - - getFloat64: function () { - - var value = this.dv.getFloat64( this.offset, this.littleEndian ); - this.offset += 8; - return value; - - }, - - getFloat64Array: function ( size ) { - - var a = []; - - for ( var i = 0; i < size; i ++ ) { - - a.push( this.getFloat64() ); - - } - - return a; - - }, - - getArrayBuffer: function ( size ) { - - var value = this.dv.buffer.slice( this.offset, this.offset + size ); - this.offset += size; - return value; - - }, - - getString: function ( size ) { - - // note: safari 9 doesn't support Uint8Array.indexOf; create intermediate array instead - var a = []; - - for ( var i = 0; i < size; i ++ ) { - - a[ i ] = this.getUint8(); - - } - - var nullByte = a.indexOf( 0 ); - if ( nullByte >= 0 ) a = a.slice( 0, nullByte ); - - return LoaderUtils.decodeText( new Uint8Array( a ) ); - - } - - }; - - // FBXTree holds a representation of the FBX data, returned by the TextParser ( FBX ASCII format) - // and BinaryParser( FBX Binary format) - function FBXTree() {} - - FBXTree.prototype = { - - constructor: FBXTree, - - add: function ( key, val ) { - - this[ key ] = val; - - }, - - }; - - // ************** UTILITY FUNCTIONS ************** - - function isFbxFormatBinary( buffer ) { - - var CORRECT = 'Kaydara FBX Binary \0'; - - return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString( buffer, 0, CORRECT.length ); - - } - - function isFbxFormatASCII( text ) { - - var CORRECT = [ 'K', 'a', 'y', 'd', 'a', 'r', 'a', '\\', 'F', 'B', 'X', '\\', 'B', 'i', 'n', 'a', 'r', 'y', '\\', '\\' ]; - - var cursor = 0; - - function read( offset ) { - - var result = text[ offset - 1 ]; - text = text.slice( cursor + offset ); - cursor ++; - return result; - - } - - for ( var i = 0; i < CORRECT.length; ++ i ) { - - var num = read( 1 ); - if ( num === CORRECT[ i ] ) { - - return false; - - } - - } - - return true; - - } - - function getFbxVersion( text ) { - - var versionRegExp = /FBXVersion: (\d+)/; - var match = text.match( versionRegExp ); - - if ( match ) { - - var version = parseInt( match[ 1 ] ); - return version; - - } - - throw new Error( 'THREE.FBXLoader: Cannot find the version number for the file given.' ); - - } - - // Converts FBX ticks into real time seconds. - function convertFBXTimeToSeconds( time ) { - - return time / 46186158000; - - } - - var dataArray = []; - - // extracts the data from the correct position in the FBX array based on indexing type - function getData( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) { - - var index; - - switch ( infoObject.mappingType ) { - - case 'ByPolygonVertex' : - index = polygonVertexIndex; - break; - case 'ByPolygon' : - index = polygonIndex; - break; - case 'ByVertice' : - index = vertexIndex; - break; - case 'AllSame' : - index = infoObject.indices[ 0 ]; - break; - default : - console.warn( 'THREE.FBXLoader: unknown attribute mapping type ' + infoObject.mappingType ); - - } - - if ( infoObject.referenceType === 'IndexToDirect' ) index = infoObject.indices[ index ]; - - var from = index * infoObject.dataSize; - var to = from + infoObject.dataSize; - - return slice( dataArray, infoObject.buffer, from, to ); - - } - - var tempEuler = new Euler(); - var tempVec = new Vector3(); - - // generate transformation from FBX transform data - // ref: https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm - // ref: http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/index.html?url=cpp_ref/_transformations_2main_8cxx-example.html,topicNumber=cpp_ref__transformations_2main_8cxx_example_htmlfc10a1e1-b18d-4e72-9dc0-70d0f1959f5e - function generateTransform( transformData ) { - - var lTranslationM = new Matrix4(); - var lPreRotationM = new Matrix4(); - var lRotationM = new Matrix4(); - var lPostRotationM = new Matrix4(); - - var lScalingM = new Matrix4(); - var lScalingPivotM = new Matrix4(); - var lScalingOffsetM = new Matrix4(); - var lRotationOffsetM = new Matrix4(); - var lRotationPivotM = new Matrix4(); - - var lParentGX = new Matrix4(); - var lGlobalT = new Matrix4(); - - var inheritType = ( transformData.inheritType ) ? transformData.inheritType : 0; - - if ( transformData.translation ) lTranslationM.setPosition( tempVec.fromArray( transformData.translation ) ); - - if ( transformData.preRotation ) { - - var array = transformData.preRotation.map( MathUtils.degToRad ); - array.push( transformData.eulerOrder ); - lPreRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) ); - - } - - if ( transformData.rotation ) { - - var array = transformData.rotation.map( MathUtils.degToRad ); - array.push( transformData.eulerOrder ); - lRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) ); - - } - - if ( transformData.postRotation ) { - - var array = transformData.postRotation.map( MathUtils.degToRad ); - array.push( transformData.eulerOrder ); - lPostRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) ); - - } - - if ( transformData.scale ) lScalingM.scale( tempVec.fromArray( transformData.scale ) ); - - // Pivots and offsets - if ( transformData.scalingOffset ) lScalingOffsetM.setPosition( tempVec.fromArray( transformData.scalingOffset ) ); - if ( transformData.scalingPivot ) lScalingPivotM.setPosition( tempVec.fromArray( transformData.scalingPivot ) ); - if ( transformData.rotationOffset ) lRotationOffsetM.setPosition( tempVec.fromArray( transformData.rotationOffset ) ); - if ( transformData.rotationPivot ) lRotationPivotM.setPosition( tempVec.fromArray( transformData.rotationPivot ) ); - - // parent transform - if ( transformData.parentMatrixWorld ) lParentGX = transformData.parentMatrixWorld; - - // Global Rotation - var lLRM = lPreRotationM.multiply( lRotationM ).multiply( lPostRotationM ); - var lParentGRM = new Matrix4(); - lParentGX.extractRotation( lParentGRM ); - - // Global Shear*Scaling - var lParentTM = new Matrix4(); - lParentTM.copyPosition( lParentGX ); - - var lParentGSM = new Matrix4(); - lParentGSM.copy( lParentGRM ).invert().multiply( lParentGX ); - - var lGlobalRS = new Matrix4(); - - if ( inheritType === 0 ) { - - lGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lScalingM ); - - } else if ( inheritType === 1 ) { - - lGlobalRS.copy( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lScalingM ); - - } else { - - var lParentLSM_inv = new Matrix4(); - lParentLSM_inv.copy( lScalingM ).invert(); - var lParentGSM_noLocal = new Matrix4().multiply( lParentGSM ).multiply( lParentLSM_inv ); - - lGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lScalingM ); - - } - - var lRotationPivotM_inv = new Matrix4(); - lRotationPivotM_inv.copy( lRotationPivotM ).invert(); - var lScalingPivotM_inv = new Matrix4(); - lScalingPivotM_inv.copy( lScalingPivotM ).invert(); - // Calculate the local transform matrix - var lTransform = new Matrix4(); - lTransform.copy( lTranslationM ).multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv ); - - var lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform ); - - var lGlobalTranslation = new Matrix4().copy( lParentGX ).multiply( lLocalTWithAllPivotAndOffsetInfo ); - lGlobalT.copyPosition( lGlobalTranslation ); - - lTransform = new Matrix4().multiply( lGlobalT ).multiply( lGlobalRS ); - - return lTransform; - - } - - // Returns the three.js intrinsic Euler order corresponding to FBX extrinsic Euler order - // ref: http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_euler_html - function getEulerOrder( order ) { - - order = order || 0; - - var enums = [ - 'ZYX', // -> XYZ extrinsic - 'YZX', // -> XZY extrinsic - 'XZY', // -> YZX extrinsic - 'ZXY', // -> YXZ extrinsic - 'YXZ', // -> ZXY extrinsic - 'XYZ', // -> ZYX extrinsic - //'SphericXYZ', // not possible to support - ]; - - if ( order === 6 ) { - - console.warn( 'THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.' ); - return enums[ 0 ]; - - } - - return enums[ order ]; - - } - - // Parses comma separated list of numbers and returns them an array. - // Used internally by the TextParser - function parseNumberArray( value ) { - - var array = value.split( ',' ).map( function ( val ) { - - return parseFloat( val ); - - } ); - - return array; - - } - - function convertArrayBufferToString( buffer, from, to ) { - - if ( from === undefined ) from = 0; - if ( to === undefined ) to = buffer.byteLength; - - return LoaderUtils.decodeText( new Uint8Array( buffer, from, to ) ); - - } - - function append( a, b ) { - - for ( var i = 0, j = a.length, l = b.length; i < l; i ++, j ++ ) { - - a[ j ] = b[ i ]; - - } - - } - - function slice( a, b, from, to ) { - - for ( var i = from, j = 0; i < to; i ++, j ++ ) { - - a[ j ] = b[ i ]; - - } - - return a; - - } - - // inject array a2 into array a1 at index - function inject( a1, index, a2 ) { - - return a1.slice( 0, index ).concat( a2 ).concat( a1.slice( index ) ); - - } - - return FBXLoader; - -} )(); - -export { FBXLoader }; \ No newline at end of file diff --git a/shared/src/OrbitControls.ts b/shared/src/OrbitControls.ts index 44f13371..19483658 100644 --- a/shared/src/OrbitControls.ts +++ b/shared/src/OrbitControls.ts @@ -6,7 +6,7 @@ import { TOUCH, Vector2, Vector3 -} from '../../../build/three.module.js'; +} from 'three'; // This set of controls performs orbiting, dollying (zooming), and panning. // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). @@ -558,7 +558,7 @@ var OrbitControls = function ( object, domElement ) { } - function handleMouseUp( /*event*/ ) { + function handleMouseUp(e: any) { // no-op @@ -764,7 +764,7 @@ var OrbitControls = function ( object, domElement ) { } - function handleTouchEnd( /*event*/ ) { + function handleTouchEnd(e: any) { // no-op diff --git a/shared/src/constants.ts b/shared/src/constants.ts index 4ea8d56a..c0737c44 100644 --- a/shared/src/constants.ts +++ b/shared/src/constants.ts @@ -8,16 +8,27 @@ enum STATE_TYPES { } enum EVENT_TYPES { + ACTION_ATTACK = 'action.attack', + ATTACK = 'attack', ATTACK_DAMAGE = 'attack.damage', - ATTACK = 'attack' + CHAT_MSG = 'chat.msg', + CHAT_MESSAGE = 'chat.message', // Why are there two of these? + LOGIN_COMMIT = 'login.commit', + WORLD_INVENTORY = 'world.inventory', + WORLD_UPDATE = 'world.update', + WORLD_PLAYER = 'world.player', + WORLD_STATS = 'world.stats' } enum ATTACK_TYPES { MELEE = 'melee' } +const _TIMEOUT:number = 600.0; + export { STATE_TYPES, EVENT_TYPES, - ATTACK_TYPES + ATTACK_TYPES, + _TIMEOUT } \ No newline at end of file diff --git a/shared/src/defs.ts b/shared/src/defs.ts index c1530d07..1f45be63 100644 --- a/shared/src/defs.ts +++ b/shared/src/defs.ts @@ -1,157 +1,154 @@ -export const defs = (() => { +const _CHARACTER_MODELS = { + paladin: { + base: 'paladin.glb', + path: './resources/characters/', + anchors: { + rightHand: 'RightHandIndex1', + }, + nameOffset: 11, + attack: { + timing: 0.35, + cooldown: 1.0, + type: 'melee', + range: 10, + }, + scale: 6.0, + inventory: { + 'inventory-1': 'weapon.axe1', + 'inventory-2': 'weapon.hammer1', + 'inventory-equip-1': 'weapon.sword1', + }, + stats: { + health: 200, + maxHealth: 200, + strength: 50, + wisdomness: 5, + benchpress: 20, + curl: 100, + experience: 0, + level: 1, + }, + name: 'Paladin', + }, + sorceror: { + base: 'sorceror.glb', + path: './resources/characters/', + anchors: { + rightHand: 'RightHandIndex1', + }, + nameOffset: 10, + attack: { + timing: 1.0, + cooldown: 1.5, + type: 'magic', + range: 40, + }, + scale: 4.0, + inventory: {}, + stats: { + health: 100, + maxHealth: 100, + strength: 10, + wisdomness: 200, + benchpress: 3, + curl: 17, + experience: 0, + level: 1, + }, + name: 'Sorceror', + }, + warrok: { + base: 'warrok.glb', + path: './resources/characters/', + anchors: { + rightHand: 'RightHandIndex1', + }, + nameOffset: 16, + attack: { + timing: 1.5, + cooldown: 2.6, + type: 'melee', + range: 15, + }, + scale: 8.0, + inventory: {}, + stats: { + health: 1000, + maxHealth: 1000, + strength: 200, + wisdomness: 4, + benchpress: 3, + curl: 200, + experience: 0, + level: 1, + }, + name: 'Monster Guy', + }, + zombie: { + base: 'zombie-guy.glb', + path: './resources/characters/', + anchors: { + rightHand: 'RightHandIndex1', + }, + nameOffset: 8, + attack: { + timing: 1.0, + cooldown: 3.0, + type: 'melee', + range: 10, + }, + scale: 4.0, + inventory: {}, + stats: { + health: 20, + maxHealth: 50, + strength: 25, + wisdomness: 4, + benchpress: 3, + curl: 20, + experience: 0, + level: 1, + }, + name: 'Zombie', + }, +}; - const _CHARACTER_MODELS = { - paladin: { - base: 'paladin.glb', - path: './resources/characters/', - anchors: { - rightHand: 'RightHandIndex1', - }, - nameOffset: 11, - attack: { - timing: 0.35, - cooldown: 1.0, - type: 'melee', - range: 10, - }, - scale: 6.0, - inventory: { - 'inventory-1': 'weapon.axe1', - 'inventory-2': 'weapon.hammer1', - 'inventory-equip-1': 'weapon.sword1', - }, - stats: { - health: 200, - maxHealth: 200, - strength: 50, - wisdomness: 5, - benchpress: 20, - curl: 100, - experience: 0, - level: 1, - }, - name: 'Paladin', - }, - sorceror: { - base: 'sorceror.glb', - path: './resources/characters/', - anchors: { - rightHand: 'RightHandIndex1', - }, - nameOffset: 10, - attack: { - timing: 1.0, - cooldown: 1.5, - type: 'magic', - range: 40, - }, - scale: 4.0, - inventory: {}, - stats: { - health: 100, - maxHealth: 100, - strength: 10, - wisdomness: 200, - benchpress: 3, - curl: 17, - experience: 0, - level: 1, - }, - name: 'Sorceror', - }, - warrok: { - base: 'warrok.glb', - path: './resources/characters/', - anchors: { - rightHand: 'RightHandIndex1', - }, - nameOffset: 16, - attack: { - timing: 1.5, - cooldown: 2.6, - type: 'melee', - range: 15, - }, - scale: 8.0, - inventory: {}, - stats: { - health: 1000, - maxHealth: 1000, - strength: 200, - wisdomness: 4, - benchpress: 3, - curl: 200, - experience: 0, - level: 1, - }, - name: 'Monster Guy', - }, - zombie: { - base: 'zombie-guy.glb', - path: './resources/characters/', - anchors: { - rightHand: 'RightHandIndex1', - }, - nameOffset: 8, - attack: { - timing: 1.0, - cooldown: 3.0, - type: 'melee', - range: 10, - }, - scale: 4.0, - inventory: {}, - stats: { - health: 20, - maxHealth: 50, - strength: 25, - wisdomness: 4, - benchpress: 3, - curl: 20, - experience: 0, - level: 1, - }, - name: 'Zombie', - }, - }; +const _WEAPONS_DATA = { + 'weapon.axe1': + { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Axe', + scale: 0.125, + icon: 'war-axe-64.png', + }, + }, + 'weapon.sword1': + { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Sword', + scale: 0.125, + icon: 'pointy-sword-64.png', + }, + }, + 'weapon.hammer1': + { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Hammer_Small', + scale: 0.125, + icon: 'hammer-64.png', + }, + }, +}; - const _WEAPONS_DATA = { - 'weapon.axe1': - { - type: 'weapon', - damage: 3, - renderParams: { - name: 'Axe', - scale: 0.125, - icon: 'war-axe-64.png', - }, - }, - 'weapon.sword1': - { - type: 'weapon', - damage: 3, - renderParams: { - name: 'Sword', - scale: 0.125, - icon: 'pointy-sword-64.png', - }, - }, - 'weapon.hammer1': - { - type: 'weapon', - damage: 3, - renderParams: { - name: 'Hammer_Small', - scale: 0.125, - icon: 'hammer-64.png', - }, - }, - }; - return { - CHARACTER_MODELS: _CHARACTER_MODELS, - WEAPONS_DATA: _WEAPONS_DATA, - }; -})(); \ No newline at end of file +const CHARACTER_MODELS = _CHARACTER_MODELS; +const WEAPONS_DATA = _WEAPONS_DATA; +export { CHARACTER_MODELS, WEAPONS_DATA } \ No newline at end of file diff --git a/shared/src/entity-manager.ts b/shared/src/entity-manager.ts new file mode 100644 index 00000000..a86f601d --- /dev/null +++ b/shared/src/entity-manager.ts @@ -0,0 +1,84 @@ +class EntityManager { + _ids: number; + _entitiesMap: {}; + _entities: any[]; + + constructor() { + this._ids = 0; + this._entitiesMap = {}; + this._entities = []; + } + + _GenerateName() { + this._ids += 1; + + return '__name__' + this._ids; + } + + Get(n) { + return this._entitiesMap[n]; + } + + Filter(cb) { + return this._entities.filter(cb); + } + + Add(e, n) { + if (!n) { + n = this._GenerateName(); + } + + this._entitiesMap[n] = e; + this._entities.push(e); + + e.SetParent(this); + e.SetName(n); + e.InitEntity(); + } + + SetActive(e, b) { + const i = this._entities.indexOf(e); + + if (!b) { + if (i < 0) { + return; + } + + this._entities.splice(i, 1); + } else { + if (i >= 0) { + return; + } + + this._entities.push(e); + } + } + + Update(timeElapsed) { + const dead = []; + const alive = []; + for (let i = 0; i < this._entities.length; ++i) { + const e = this._entities[i]; + + e.Update(timeElapsed); + + if (e.dead_) { + dead.push(e); + } else { + alive.push(e); + } + } + + for (let i = 0; i < dead.length; ++i) { + const e = dead[i]; + + delete this._entitiesMap[e.Name]; + + e.Destroy(); + } + + this._entities = alive; + } +} + +export { EntityManager } \ No newline at end of file diff --git a/shared/src/globaltypes.ts b/shared/src/globaltypes.ts new file mode 100644 index 00000000..740b2fd1 --- /dev/null +++ b/shared/src/globaltypes.ts @@ -0,0 +1,20 @@ +import { EVENT_TYPES } from "./constants" + +interface IOnMessageArgs { + (evt: TEvt, params: { + accountName?: string, + }): void +} + + +/** + * shared event type + */ +type TEvt = { + topic: EVENT_TYPES, params: any +} + +export type { + IOnMessageArgs, + TEvt, +}; \ No newline at end of file diff --git a/shared/src/noise.ts b/shared/src/noise.ts index 369a08f6..3aa101cf 100644 --- a/shared/src/noise.ts +++ b/shared/src/noise.ts @@ -1,45 +1,43 @@ -import {simplex} from './simplex-noise'; - - -export const noise = (function() { - - class _NoiseGenerator { - constructor(params) { - this._params = params; - this._Init(); - } - - _Init() { - this._noise = new simplex.SimplexNoise(this._params.seed); - } - - Get(x, y, z) { - const G = 2.0 ** (-this._params.persistence); - const xs = x / this._params.scale; - const ys = y / this._params.scale; - const zs = z / this._params.scale; - const noiseFunc = this._noise; +import { SimplexNoise } from './simplex-noise'; +class Noise { + _params: any; + // would love to add type def to this, but I don't wanna mess with the simplex function. + // Super complicated. + _noise: any; + + constructor(params) { + this._params = params; + this._Init(); + } - let amplitude = 1.0; - let frequency = 1.0; - let normalization = 0; - let total = 0; - for (let o = 0; o < this._params.octaves; o++) { - const noiseValue = noiseFunc.noise3D( - xs * frequency, ys * frequency, zs * frequency) * 0.5 + 0.5; + _Init() { + this._noise = new SimplexNoise(this._params.seed); + } - total += noiseValue * amplitude; - normalization += amplitude; - amplitude *= G; - frequency *= this._params.lacunarity; - } - total /= normalization; - return Math.pow( - total, this._params.exponentiation) * this._params.height; + Get(x, y, z) { + const G = 2.0 ** (-this._params.persistence); + const xs = x / this._params.scale; + const ys = y / this._params.scale; + const zs = z / this._params.scale; + const noiseFunc = this._noise; + + let amplitude = 1.0; + let frequency = 1.0; + let normalization = 0; + let total = 0; + for (let o = 0; o < this._params.octaves; o++) { + const noiseValue = noiseFunc.noise3D( + xs * frequency, ys * frequency, zs * frequency) * 0.5 + 0.5; + + total += noiseValue * amplitude; + normalization += amplitude; + amplitude *= G; + frequency *= this._params.lacunarity; } + total /= normalization; + return Math.pow( + total, this._params.exponentiation) * this._params.height; } +} - return { - Noise: _NoiseGenerator - } -})(); +export { Noise } \ No newline at end of file diff --git a/shared/src/simplex-noise.ts b/shared/src/simplex-noise.ts index 7cf04bb9..efac2745 100644 --- a/shared/src/simplex-noise.ts +++ b/shared/src/simplex-noise.ts @@ -1,3 +1,4 @@ +'use strict'; /* * A fast javascript implementation of simplex noise by Jonas Wagner @@ -29,9 +30,8 @@ Better rank ordering method by Stefan Gustavson in 2012. */ // (function() { -export const simplex = (function() { - 'use strict'; + var F2 = 0.5 * (Math.sqrt(3.0) - 1.0); var G2 = (3.0 - Math.sqrt(3.0)) / 6.0; @@ -410,7 +410,7 @@ export const simplex = (function() { } SimplexNoise._buildPermutationTable = buildPermutationTable; - function alea() { + function alea(input: any) { // Johannes Baagøe , 2010 var s0 = 0; var s1 = 0; @@ -472,8 +472,5 @@ export const simplex = (function() { // if (typeof module !== 'undefined') { // module.exports = SimplexNoise; // } - return { - SimplexNoise: SimplexNoise - }; -})(); \ No newline at end of file + export {SimplexNoise} \ No newline at end of file diff --git a/shared/src/spatial-hash-grid.ts b/shared/src/spatial-hash-grid.ts index 82ca7437..b6a6f5d5 100644 --- a/shared/src/spatial-hash-grid.ts +++ b/shared/src/spatial-hash-grid.ts @@ -1,161 +1,156 @@ +import { math } from './math'; -import {math} from './math.mjs'; +class SpatialHashGrid { + _cells: any[][]; + _dimensions: any; + _bounds: any; + _queryIds: number; + constructor(bounds, dimensions) { + const [x, y] = dimensions; + this._cells = [...Array(x)].map(_ => [...Array(y)].map(_ => (null))); + this._dimensions = dimensions; + this._bounds = bounds; + this._queryIds = 0; + } + _GetCellIndex(position) { + const x = math.sat((position[0] - this._bounds[0][0]) / ( + this._bounds[1][0] - this._bounds[0][0])); + const y = math.sat((position[1] - this._bounds[0][1]) / ( + this._bounds[1][1] - this._bounds[0][1])); -export const spatial_hash_grid = (() => { + const xIndex = Math.floor(x * (this._dimensions[0] - 1)); + const yIndex = Math.floor(y * (this._dimensions[1] - 1)); - class SpatialHashGrid { - constructor(bounds, dimensions) { - const [x, y] = dimensions; - this._cells = [...Array(x)].map(_ => [...Array(y)].map(_ => (null))); - this._dimensions = dimensions; - this._bounds = bounds; - this._queryIds = 0; - } - - _GetCellIndex(position) { - const x = math.sat((position[0] - this._bounds[0][0]) / ( - this._bounds[1][0] - this._bounds[0][0])); - const y = math.sat((position[1] - this._bounds[0][1]) / ( - this._bounds[1][1] - this._bounds[0][1])); - - const xIndex = Math.floor(x * (this._dimensions[0] - 1)); - const yIndex = Math.floor(y * (this._dimensions[1] - 1)); - - return [xIndex, yIndex]; - } - - NewClient(position, dimensions) { - const client = { - position: position, - dimensions: dimensions, - _cells: { - min: null, - max: null, - nodes: null, - }, - _queryId: -1, - }; - - this._Insert(client); - - return client; - } - - UpdateClient(client) { - const [x, y] = client.position; - const [w, h] = client.dimensions; - - const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); - const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); - - if (client._cells.min[0] == i1[0] && - client._cells.min[1] == i1[1] && - client._cells.max[0] == i2[0] && - client._cells.max[1] == i2[1]) { - return; - } - - this.Remove(client); - this._Insert(client); + return [xIndex, yIndex]; + } + + NewClient(position, dimensions) { + const client = { + position: position, + dimensions: dimensions, + _cells: { + min: null, + max: null, + nodes: null, + }, + _queryId: -1, + }; + + this._Insert(client); + + return client; + } + + UpdateClient(client) { + const [x, y] = client.position; + const [w, h] = client.dimensions; + + const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + + if (client._cells.min[0] == i1[0] && + client._cells.min[1] == i1[1] && + client._cells.max[0] == i2[0] && + client._cells.max[1] == i2[1]) { + return; } - - FindNear(position, bounds) { - const [x, y] = position; - const [w, h] = bounds; - - const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); - const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); - - const clients = []; - const queryId = this._queryIds++; - - for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { - for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { - let head = this._cells[x][y]; - - while (head) { - const v = head.client; - head = head.next; - - if (v._queryId != queryId) { - v._queryId = queryId; - clients.push(v); - } + + this.Remove(client); + this._Insert(client); + } + + FindNear(position, bounds) { + const [x, y] = position; + const [w, h] = bounds; + + const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + + const clients = []; + const queryId = this._queryIds++; + + for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { + for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { + let head = this._cells[x][y]; + + while (head) { + const v = head.client; + head = head.next; + + if (v._queryId != queryId) { + v._queryId = queryId; + clients.push(v); } } } - return clients; } - - _Insert(client) { - const [x, y] = client.position; - const [w, h] = client.dimensions; - - const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); - const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); - - const nodes = []; - - for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { - nodes.push([]); - - for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { - const xi = x - i1[0]; - - const head = { - next: null, - prev: null, - client: client, - }; - - nodes[xi].push(head); - - head.next = this._cells[x][y]; - if (this._cells[x][y]) { - this._cells[x][y].prev = head; - } - - this._cells[x][y] = head; + return clients; + } + + _Insert(client) { + const [x, y] = client.position; + const [w, h] = client.dimensions; + + const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + + const nodes = []; + + for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { + nodes.push([]); + + for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { + const xi = x - i1[0]; + + const head = { + next: null, + prev: null, + client: client, + }; + + nodes[xi].push(head); + + head.next = this._cells[x][y]; + if (this._cells[x][y]) { + this._cells[x][y].prev = head; } + + this._cells[x][y] = head; } - - client._cells.min = i1; - client._cells.max = i2; - client._cells.nodes = nodes; } - - Remove(client) { - const i1 = client._cells.min; - const i2 = client._cells.max; - - for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { - for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { - const xi = x - i1[0]; - const yi = y - i1[1]; - const node = client._cells.nodes[xi][yi]; - - if (node.next) { - node.next.prev = node.prev; - } - if (node.prev) { - node.prev.next = node.next; - } - - if (!node.prev) { - this._cells[x][y] = node.next; - } + + client._cells.min = i1; + client._cells.max = i2; + client._cells.nodes = nodes; + } + + Remove(client) { + const i1 = client._cells.min; + const i2 = client._cells.max; + + for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { + for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { + const xi = x - i1[0]; + const yi = y - i1[1]; + const node = client._cells.nodes[xi][yi]; + + if (node.next) { + node.next.prev = node.prev; + } + if (node.prev) { + node.prev.next = node.next; + } + + if (!node.prev) { + this._cells[x][y] = node.next; } } - - client._cells.min = null; - client._cells.max = null; - client._cells.nodes = null; } - } - return { - SpatialHashGrid: SpatialHashGrid, - }; - -})(); \ No newline at end of file + client._cells.min = null; + client._cells.max = null; + client._cells.nodes = null; + } +} +export { SpatialHashGrid } diff --git a/shared/src/spline.ts b/shared/src/spline.ts index 611f8577..be99e7b2 100644 --- a/shared/src/spline.ts +++ b/shared/src/spline.ts @@ -1,6 +1,7 @@ -export const spline = (function() { - class _CubicHermiteSpline { + class CubicHermiteSpline { + _points: any[]; + _lerp: any; constructor(lerp) { this._points = []; this._lerp = lerp; @@ -36,7 +37,9 @@ export const spline = (function() { } }; - class _LinearSpline { + class LinearSpline { + _points: any[]; + _lerp: any; constructor(lerp) { this._points = []; this._lerp = lerp; @@ -69,8 +72,5 @@ export const spline = (function() { } } - return { - CubicHermiteSpline: _CubicHermiteSpline, - LinearSpline: _LinearSpline, - }; -})(); + +export {CubicHermiteSpline, LinearSpline} diff --git a/shared/src/terrain-constants.ts b/shared/src/terrain-constants.ts index 50d7b1fa..36c5dbf1 100644 --- a/shared/src/terrain-constants.ts +++ b/shared/src/terrain-constants.ts @@ -1,31 +1,28 @@ +const QT_MIN_CELL_SIZE = 100; +// const QT_MIN_CELL_RESOLUTION = 24; +const QT_MIN_CELL_RESOLUTION = 16; +// const QT_MIN_CELL_RESOLUTION = 4; +const PLANET_RADIUS = 8000.0; +const NOISE_HEIGHT = 800.0; +// const NOISE_HEIGHT = 0.0; +const NOISE_SCALE = 1800.0; +const NOISE_PARAMS = { + octaves: 10, + persistence: 0.5, + lacunarity: 1.6, + exponentiation: 7.5, + height: NOISE_HEIGHT, + scale: NOISE_SCALE, + seed: 1 +} -export const terrain_constants = (function() { - const QT_MIN_CELL_SIZE = 100; - // const QT_MIN_CELL_RESOLUTION = 24; - const QT_MIN_CELL_RESOLUTION = 16; - // const QT_MIN_CELL_RESOLUTION = 4; - const PLANET_RADIUS = 8000.0; +export { + QT_MIN_CELL_SIZE, + QT_MIN_CELL_RESOLUTION, + PLANET_RADIUS, - const NOISE_HEIGHT = 800.0; - // const NOISE_HEIGHT = 0.0; - const NOISE_SCALE = 1800.0; - - return { - QT_MIN_CELL_SIZE: QT_MIN_CELL_SIZE, - QT_MIN_CELL_RESOLUTION: QT_MIN_CELL_RESOLUTION, - PLANET_RADIUS: PLANET_RADIUS, - - NOISE_HEIGHT: NOISE_HEIGHT, - NOISE_SCALE: NOISE_SCALE, - NOISE_PARAMS: { - octaves: 10, - persistence: 0.5, - lacunarity: 1.6, - exponentiation: 7.5, - height: NOISE_HEIGHT, - scale: NOISE_SCALE, - seed: 1 - }, - } -})(); + NOISE_HEIGHT, + NOISE_SCALE, + NOISE_PARAMS, +} \ No newline at end of file diff --git a/shared/src/terrain-height.ts b/shared/src/terrain-height.ts index 457784eb..a323faa2 100644 --- a/shared/src/terrain-height.ts +++ b/shared/src/terrain-height.ts @@ -1,23 +1,16 @@ -import {terrain_constants} from './terrain-constants.mjs'; -import {noise} from './noise.mjs'; +import {NOISE_PARAMS} from './terrain-constants'; +import {Noise} from './noise'; +class HeightGenerator { + noise_: Noise; + constructor() { + this.noise_ = new Noise(NOISE_PARAMS); + } -export const terrain_height = (() => { + Get(x, y, z) { + return [this.noise_.Get(x, y, z), 1]; + } +}; - - class HeightGenerator { - constructor() { - this.noise_ = new noise.Noise(terrain_constants.NOISE_PARAMS); - } - - Get(x, y, z) { - return [this.noise_.Get(x, y, z), 1]; - } - }; - - - return { - HeightGenerator: HeightGenerator, - }; -})(); \ No newline at end of file +export {HeightGenerator} \ No newline at end of file diff --git a/shared/tsconfig.tsbuildinfo b/shared/tsconfig.tsbuildinfo index a762ef94..f49d2bd5 100644 --- a/shared/tsconfig.tsbuildinfo +++ b/shared/tsconfig.tsbuildinfo @@ -26,194 +26,1424 @@ "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2019.d.ts": { - "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", - "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "../node_modules/typescript/lib/lib.dom.d.ts": { + "version": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "signature": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "affectsGlobalScope": true + }, + "../node_modules/three/src/polyfills.d.ts": { + "version": "bae8640f98f4800ab31583b8a680e283d8f7e51d1d601f23a2461ebf2a35b7b6", + "signature": "bae8640f98f4800ab31583b8a680e283d8f7e51d1d601f23a2461ebf2a35b7b6", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Quaternion.d.ts": { + "version": "9ec8c22c765b53d591c4f4ced7f169179b3abdaa532183fdd2de9809f53e8447", + "signature": "9ec8c22c765b53d591c4f4ced7f169179b3abdaa532183fdd2de9809f53e8447", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Euler.d.ts": { + "version": "cf1e60d3ac816e692299db9077abd3ecd340f2efb0b988cba55f7e9a4834314a", + "signature": "cf1e60d3ac816e692299db9077abd3ecd340f2efb0b988cba55f7e9a4834314a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Matrix3.d.ts": { + "version": "02f7c43cb5d67591df1fdc9a56c3cc75b68c383c6358e7b53b2d2daa583d6895", + "signature": "02f7c43cb5d67591df1fdc9a56c3cc75b68c383c6358e7b53b2d2daa583d6895", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/Layers.d.ts": { + "version": "f71f5c980f73a75a95234c32a86e6ca6fd77740b658cb1aec643e68ea5865b0c", + "signature": "f71f5c980f73a75a95234c32a86e6ca6fd77740b658cb1aec643e68ea5865b0c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/constants.d.ts": { + "version": "067d2686532727f5a184082424fb5e481ebc109b8ec9a13998369fd2ebdb42c9", + "signature": "067d2686532727f5a184082424fb5e481ebc109b8ec9a13998369fd2ebdb42c9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/BufferAttribute.d.ts": { + "version": "e58657ba619d49e9fd6a7f36830d391d69deff7253de0caf143e3e902870f353", + "signature": "e58657ba619d49e9fd6a7f36830d391d69deff7253de0caf143e3e902870f353", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Color.d.ts": { + "version": "3a358af08f4209e1170f587cc051d83561aeaaad8f55e442a63e1009ef5e038a", + "signature": "3a358af08f4209e1170f587cc051d83561aeaaad8f55e442a63e1009ef5e038a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/scenes/Fog.d.ts": { + "version": "76e868b09261bf9dd4d7ce3c9fd034bda1ed1aa7a8aae497a7e5ae0a258b169e", + "signature": "76e868b09261bf9dd4d7ce3c9fd034bda1ed1aa7a8aae497a7e5ae0a258b169e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Vector2.d.ts": { + "version": "0a50cf8b125d4376f6f76feec5bd6677a1a76e467d6dd87de5f2af00bbefb7da", + "signature": "0a50cf8b125d4376f6f76feec5bd6677a1a76e467d6dd87de5f2af00bbefb7da", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Triangle.d.ts": { + "version": "f601e9de54b5bc335a60d5602b651b77d2c7d415730f5027eac51a4a8fdbe7e1", + "signature": "f601e9de54b5bc335a60d5602b651b77d2c7d415730f5027eac51a4a8fdbe7e1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Box3.d.ts": { + "version": "23080fb370ff46bed1ad7d0310145b6af7c990a452bb36445e370d22bd2b081e", + "signature": "23080fb370ff46bed1ad7d0310145b6af7c990a452bb36445e370d22bd2b081e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Sphere.d.ts": { + "version": "83b166f487e4358a41ddd61d5da37f89e124ab51eb9ec63d231f72622ac4c715", + "signature": "83b166f487e4358a41ddd61d5da37f89e124ab51eb9ec63d231f72622ac4c715", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Line3.d.ts": { + "version": "eec9dc5597317c41df8676a0c0693f613519e70d9289fe8274052bd2803beb86", + "signature": "eec9dc5597317c41df8676a0c0693f613519e70d9289fe8274052bd2803beb86", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Plane.d.ts": { + "version": "cf3d11589dd4e3bd8c69220fd933d268ca95feeec62a1f5390e78daeb4418cd3", + "signature": "cf3d11589dd4e3bd8c69220fd933d268ca95feeec62a1f5390e78daeb4418cd3", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/EventDispatcher.d.ts": { + "version": "2d126f01b385e46a6954e9b759175445a70589475aa0bd106d61f0f44ba16824", + "signature": "2d126f01b385e46a6954e9b759175445a70589475aa0bd106d61f0f44ba16824", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts": { + "version": "6beeb177b3e112a823e9b78e5a929a2b337caf21b851b0ad8b76554fb40652f4", + "signature": "6beeb177b3e112a823e9b78e5a929a2b337caf21b851b0ad8b76554fb40652f4", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts": { + "version": "6d8e630c34b0da8bc4876615199656aed775344924292591d3574e2eae7282d0", + "signature": "6d8e630c34b0da8bc4876615199656aed775344924292591d3574e2eae7282d0", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/Material.d.ts": { + "version": "d7d4dfbf4d98b8ef0ea72d71d4cca36005f8bfcc5ce970a7cd4270a5ca8f9a60", + "signature": "d7d4dfbf4d98b8ef0ea72d71d4cca36005f8bfcc5ce970a7cd4270a5ca8f9a60", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/Texture.d.ts": { + "version": "34bc59a64626bdc0af3a8b3b92c40131fc2f9bc3a59de457aaf86dfd1d8046c1", + "signature": "34bc59a64626bdc0af3a8b3b92c40131fc2f9bc3a59de457aaf86dfd1d8046c1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/CubeTexture.d.ts": { + "version": "7c70c3f3845a0b2d183ced4b134b518e2b01d760eb562b6ad34c6585944a02d7", + "signature": "7c70c3f3845a0b2d183ced4b134b518e2b01d760eb562b6ad34c6585944a02d7", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts": { + "version": "c0c438afa18dfa53e44da1ee170d112cd662df7891de46c5b6065a6102a0c38e", + "signature": "c0c438afa18dfa53e44da1ee170d112cd662df7891de46c5b6065a6102a0c38e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/scenes/Scene.d.ts": { + "version": "85439264469a6e41174476497764e63674aaa142c96989d1831d559f409e42d3", + "signature": "85439264469a6e41174476497764e63674aaa142c96989d1831d559f409e42d3", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts": { + "version": "96f66a2d50f8755808d11dfe0f059e9843aa2044815e024728b97198531aa450", + "signature": "96f66a2d50f8755808d11dfe0f059e9843aa2044815e024728b97198531aa450", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts": { + "version": "a9c5d065fdf15f2ad2172bc77c05d521b0e1974fb347ed6e2746d4fe9309bdfd", + "signature": "a9c5d065fdf15f2ad2172bc77c05d521b0e1974fb347ed6e2746d4fe9309bdfd", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts": { + "version": "c1a2eb8f17703db13432aa789cc42f17cfe367ad1642420c151b05483b5bcc8a", + "signature": "c1a2eb8f17703db13432aa789cc42f17cfe367ad1642420c151b05483b5bcc8a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts": { + "version": "6aeaf84f78365709724e236f3c970ed86b53b9139a6596daea708cde04173282", + "signature": "6aeaf84f78365709724e236f3c970ed86b53b9139a6596daea708cde04173282", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts": { + "version": "4a62aafd24dbac76740d630a5fca5ec5c622bf1c70027ca81ef781250f7b21ea", + "signature": "4a62aafd24dbac76740d630a5fca5ec5c622bf1c70027ca81ef781250f7b21ea", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLUtils.d.ts": { + "version": "561d2843063b97c9eb497a338e3cca20aa2921f0022e23bee74f8ea7e48d01e6", + "signature": "561d2843063b97c9eb497a338e3cca20aa2921f0022e23bee74f8ea7e48d01e6", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts": { + "version": "5c4d869f83138555d1e10063609e51f7ea63d985793a1398d1b516401cddb66c", + "signature": "5c4d869f83138555d1e10063609e51f7ea63d985793a1398d1b516401cddb66c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts": { + "version": "153b366509ec94cfd9458d31d82bd26b815088c194e021bc887cc87c1abf434e", + "signature": "153b366509ec94cfd9458d31d82bd26b815088c194e021bc887cc87c1abf434e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts": { + "version": "75433b83c53cc302b880653d1a079eb68f9e246611a82e90c56fe93ddc4eedd8", + "signature": "75433b83c53cc302b880653d1a079eb68f9e246611a82e90c56fe93ddc4eedd8", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts": { + "version": "da0b75fde997f5293ac95bfd8484e1570660bb18b9e7a7c13bfca9cd49180669", + "signature": "da0b75fde997f5293ac95bfd8484e1570660bb18b9e7a7c13bfca9cd49180669", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts": { + "version": "a44f7f81b0eb053b5d76ec1213e8611c19985746f827ebb3587213316155467e", + "signature": "a44f7f81b0eb053b5d76ec1213e8611c19985746f827ebb3587213316155467e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/Group.d.ts": { + "version": "19849c22ba216ca4389438d66abc6a2d0e4f99177f84252cdb1b6e06287a8f91", + "signature": "19849c22ba216ca4389438d66abc6a2d0e4f99177f84252cdb1b6e06287a8f91", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/Face3.d.ts": { + "version": "7569cf62cb606aba7efe3432e28851ea83d35307f94cdf6229a2a2c0742a6739", + "signature": "7569cf62cb606aba7efe3432e28851ea83d35307f94cdf6229a2a2c0742a6739", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Ray.d.ts": { + "version": "a3fd9e78ed03f244031594a7b15d897b28f4aabf8b520a14fcde352593035250", + "signature": "a3fd9e78ed03f244031594a7b15d897b28f4aabf8b520a14fcde352593035250", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/Raycaster.d.ts": { + "version": "9fd6bb73427912a6602c62c84a680744f4834e8a8ca06695663e208a6f8e0965", + "signature": "9fd6bb73427912a6602c62c84a680744f4834e8a8ca06695663e208a6f8e0965", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/Mesh.d.ts": { + "version": "fe818a2b08021eb4bedc9d4d1f172c28b90795a838222dfd8724bf7d8e8f99b8", + "signature": "fe818a2b08021eb4bedc9d4d1f172c28b90795a838222dfd8724bf7d8e8f99b8", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/Bone.d.ts": { + "version": "884ca9a302751744e80f8c14d866e3e7063029725bef8228647a8678ac4f425b", + "signature": "884ca9a302751744e80f8c14d866e3e7063029725bef8228647a8678ac4f425b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Interpolant.d.ts": { + "version": "fa86859bf96acbf32ddb71bec8465139b31573cd7017fb3cd8cddf69d15e77cb", + "signature": "fa86859bf96acbf32ddb71bec8465139b31573cd7017fb3cd8cddf69d15e77cb", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts": { + "version": "f493d1c4104b3e6f49cbb2863b2c8b533ba07862f4d6321fb8aee59cac2ec9b9", + "signature": "f493d1c4104b3e6f49cbb2863b2c8b533ba07862f4d6321fb8aee59cac2ec9b9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts": { + "version": "81256ce2c0798ecbc7d8c5bc93aad16b10ef4ab2a244599a8c12f2be019a88e1", + "signature": "81256ce2c0798ecbc7d8c5bc93aad16b10ef4ab2a244599a8c12f2be019a88e1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts": { + "version": "e64294f2454f8e5b8879e1c28cd2867a46e2a9da21d12e5fa4a45213e6045477", + "signature": "e64294f2454f8e5b8879e1c28cd2867a46e2a9da21d12e5fa4a45213e6045477", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/KeyframeTrack.d.ts": { + "version": "49c545febb655c32209e04cc841aea93946a558824a322f289331a85d2c67788", + "signature": "49c545febb655c32209e04cc841aea93946a558824a322f289331a85d2c67788", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/AnimationClip.d.ts": { + "version": "a0eae98fb28afab7df8296cbfa4a830cda6592b69ee646a0476b81a16403d444", + "signature": "a0eae98fb28afab7df8296cbfa4a830cda6592b69ee646a0476b81a16403d444", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/Geometry.d.ts": { + "version": "86538ad7fdd3ce90f6231f8f522f035a24c7429834cad844dd2780d74eca90cf", + "signature": "86538ad7fdd3ce90f6231f8f522f035a24c7429834cad844dd2780d74eca90cf", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/DirectGeometry.d.ts": { + "version": "88e5d0522eb347140ee5440e7d6482a31448f96e47280f87cb45410e3ce0c06a", + "signature": "88e5d0522eb347140ee5440e7d6482a31448f96e47280f87cb45410e3ce0c06a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/InterleavedBuffer.d.ts": { + "version": "d60f3568e03a2636f93a38a27ebd84dc92d934a228db48157276ffde58d2786a", + "signature": "d60f3568e03a2636f93a38a27ebd84dc92d934a228db48157276ffde58d2786a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts": { + "version": "4a855f3b01b2f37ee5b763bb52dd22ff19620bc46602b13fc5c4b933c1e61307", + "signature": "4a855f3b01b2f37ee5b763bb52dd22ff19620bc46602b13fc5c4b933c1e61307", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/BufferGeometry.d.ts": { + "version": "4a356b4a0ab172ef86af204e4a52db24d3566139c285577fbd20cd51ea73c5a9", + "signature": "4a356b4a0ab172ef86af204e4a52db24d3566139c285577fbd20cd51ea73c5a9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts": { + "version": "cea0f4c77ded3cb1c25e1c325569ab31dd02d603a1859ca1002f859c10e21451", + "signature": "cea0f4c77ded3cb1c25e1c325569ab31dd02d603a1859ca1002f859c10e21451", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/LightShadow.d.ts": { + "version": "c50ceef0349e0b5ebc2df522734e8ab4af187be106d2ce2ffaefca04ea38894e", + "signature": "c50ceef0349e0b5ebc2df522734e8ab4af187be106d2ce2ffaefca04ea38894e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/Light.d.ts": { + "version": "8bd0d45b67bd01369ec8715a8b39e19eea762ca9306824bb1933944c39dbd541", + "signature": "8bd0d45b67bd01369ec8715a8b39e19eea762ca9306824bb1933944c39dbd541", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts": { + "version": "41a6372dea8f77ac0d1bc71c4da1ddb5447d9a34e54c3daaea961d3d9a46fdbb", + "signature": "41a6372dea8f77ac0d1bc71c4da1ddb5447d9a34e54c3daaea961d3d9a46fdbb", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webxr/WebXR.d.ts": { + "version": "394706c99cc2cbe0aac93000c1ca60ff546f7d3987e91fff9b8dd40dd4bb7bd5", + "signature": "394706c99cc2cbe0aac93000c1ca60ff546f7d3987e91fff9b8dd40dd4bb7bd5", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts": { + "version": "002191707252b65379f26389a7162df2d2e1941a98109d4bfb08c9b0793d4467", + "signature": "002191707252b65379f26389a7162df2d2e1941a98109d4bfb08c9b0793d4467", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/WebGLRenderer.d.ts": { + "version": "39376f690117cd5e30a0be16443c05d06671e56a3925938310ec7f0e535d8536", + "signature": "39376f690117cd5e30a0be16443c05d06671e56a3925938310ec7f0e535d8536", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/Object3D.d.ts": { + "version": "f985551352439f25b8b616269345c3c22a7b14723d99953ff87f43b8e4062eb3", + "signature": "f985551352439f25b8b616269345c3c22a7b14723d99953ff87f43b8e4062eb3", + "affectsGlobalScope": false + }, + "../node_modules/three/src/cameras/Camera.d.ts": { + "version": "89ddef08571f074c3794518cc270a879626b3d238d7027d24b3e588ac128357b", + "signature": "89ddef08571f074c3794518cc270a879626b3d238d7027d24b3e588ac128357b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Spherical.d.ts": { + "version": "dd789bdbf32baab95bf257952f074d6e321b8e5815f18c1f4a97cc134a1cf79f", + "signature": "dd789bdbf32baab95bf257952f074d6e321b8e5815f18c1f4a97cc134a1cf79f", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Cylindrical.d.ts": { + "version": "54cae366ddd40cdb1988e6acdbc25b671f21f4ea7c06b2d062248fbbbf95044e", + "signature": "54cae366ddd40cdb1988e6acdbc25b671f21f4ea7c06b2d062248fbbbf95044e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Vector3.d.ts": { + "version": "641d20fc7ca0b72111c3d586cfedcd2d4860fc7aa7c0b83c571199f49d4129cd", + "signature": "641d20fc7ca0b72111c3d586cfedcd2d4860fc7aa7c0b83c571199f49d4129cd", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Matrix4.d.ts": { + "version": "7322b2e598fa9946e883d1a139da65bc87c65d2cc6300817f8c6482f295a982c", + "signature": "7322b2e598fa9946e883d1a139da65bc87c65d2cc6300817f8c6482f295a982c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Vector4.d.ts": { + "version": "6d190fb2b8290b4407c519881455c72ba3a0ffa5fafc3284376f1b6fc1dec34e", + "signature": "6d190fb2b8290b4407c519881455c72ba3a0ffa5fafc3284376f1b6fc1dec34e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/DepthTexture.d.ts": { + "version": "b52c7b58a354a17e021a04ff11d91244438310b632c21f796c9b83b50f5733fc", + "signature": "b52c7b58a354a17e021a04ff11d91244438310b632c21f796c9b83b50f5733fc", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts": { + "version": "5072a6ac1050d7c025955571793dbac357d92618452fe625def1be4a2455d59f", + "signature": "5072a6ac1050d7c025955571793dbac357d92618452fe625def1be4a2455d59f", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": { + "version": "d0fd71a16bbde18706197532a11682aea4031a780b81b5f6cc028893f6cc7bfd", + "signature": "d0fd71a16bbde18706197532a11682aea4031a780b81b5f6cc028893f6cc7bfd", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/WebGL1Renderer.d.ts": { + "version": "9435bba8873eca583b5e94a0fcc8dfb064a59c3cf028a2a68d007db1a0b4de86", + "signature": "9435bba8873eca583b5e94a0fcc8dfb064a59c3cf028a2a68d007db1a0b4de86", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/shaders/UniformsUtils.d.ts": { + "version": "374df830ffcdae74590aa3e45d784bfce8909cc215c7796785937d098964e4c2", + "signature": "374df830ffcdae74590aa3e45d784bfce8909cc215c7796785937d098964e4c2", + "affectsGlobalScope": false + }, + "../node_modules/three/src/renderers/shaders/ShaderChunk.d.ts": { + "version": "ec26ea0ddbb4c6e316d35469b76ca822f7170e06c65f3015dc5b8d68e1913398", + "signature": "ec26ea0ddbb4c6e316d35469b76ca822f7170e06c65f3015dc5b8d68e1913398", + "affectsGlobalScope": false + }, + "../node_modules/three/src/scenes/FogExp2.d.ts": { + "version": "c0577ecf5bdd534c2612c879873e2565ab5554c82091192380b0ca8e8f4898c9", + "signature": "c0577ecf5bdd534c2612c879873e2565ab5554c82091192380b0ca8e8f4898c9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/ShadowMaterial.d.ts": { + "version": "73d6f7d82bdc40bf33fa0a82d84d607aa9cfb4738ab83ab232f97a6bd69c00fd", + "signature": "73d6f7d82bdc40bf33fa0a82d84d607aa9cfb4738ab83ab232f97a6bd69c00fd", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/SpriteMaterial.d.ts": { + "version": "22d9e3ee38db808e88cda09ac2b1cd31d2e11f0d1c7a7841cb81a9f92b550b1f", + "signature": "22d9e3ee38db808e88cda09ac2b1cd31d2e11f0d1c7a7841cb81a9f92b550b1f", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/ShaderMaterial.d.ts": { + "version": "ccc4d960e8ca3408590ac63975ab2ac3cb4fff4cd29cb7d9d5f7a5c95924239b", + "signature": "ccc4d960e8ca3408590ac63975ab2ac3cb4fff4cd29cb7d9d5f7a5c95924239b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/RawShaderMaterial.d.ts": { + "version": "6e76375967f95c970091a2a3378b1f33c96e7a9d0c7c694fbbcd1364501ccbda", + "signature": "6e76375967f95c970091a2a3378b1f33c96e7a9d0c7c694fbbcd1364501ccbda", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/PointsMaterial.d.ts": { + "version": "1a631f45b430df4b2694616daf02d09f282de052df2ff28535c4ebe9cbd6850a", + "signature": "1a631f45b430df4b2694616daf02d09f282de052df2ff28535c4ebe9cbd6850a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshStandardMaterial.d.ts": { + "version": "a5a617fe935e64642639bad53184d3a5a95bc232a47dafef30ae5e00ebf344d9", + "signature": "a5a617fe935e64642639bad53184d3a5a95bc232a47dafef30ae5e00ebf344d9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts": { + "version": "17d9f0e0ea72127491f46f994cd98de4b0578d79db08e2085c731433df756ead", + "signature": "17d9f0e0ea72127491f46f994cd98de4b0578d79db08e2085c731433df756ead", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshPhongMaterial.d.ts": { + "version": "e4907dc8926a40e56dc3f6feb2f76bbe898a7d3fa5a30b133a0e64dbfda30cfb", + "signature": "e4907dc8926a40e56dc3f6feb2f76bbe898a7d3fa5a30b133a0e64dbfda30cfb", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshToonMaterial.d.ts": { + "version": "bb7a8c550b56060dc2a3d862f5bbe7f3587bbf9a5a3866fc48853a8e4d0f232b", + "signature": "bb7a8c550b56060dc2a3d862f5bbe7f3587bbf9a5a3866fc48853a8e4d0f232b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshNormalMaterial.d.ts": { + "version": "81e2df121a8d94b454b1f13e598c461f3583297a1bdc70792d72ea1c36476e4c", + "signature": "81e2df121a8d94b454b1f13e598c461f3583297a1bdc70792d72ea1c36476e4c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshLambertMaterial.d.ts": { + "version": "84b665f618f939c42fa9396a0f4b61fb44d8f0a82095448efcb683398c4c2596", + "signature": "84b665f618f939c42fa9396a0f4b61fb44d8f0a82095448efcb683398c4c2596", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshDepthMaterial.d.ts": { + "version": "12e46c3bc585ac098652ae1dd59f998813c433223c854c630e63bbdae62a9007", + "signature": "12e46c3bc585ac098652ae1dd59f998813c433223c854c630e63bbdae62a9007", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts": { + "version": "b66f9bc40fc03d6c799ea18c43878fb05d19a90a3a77f0efd72ccd293a7475d7", + "signature": "b66f9bc40fc03d6c799ea18c43878fb05d19a90a3a77f0efd72ccd293a7475d7", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshBasicMaterial.d.ts": { + "version": "a55882366dfef3b69e0c50117869d0d97abb8a55340bec0a4308dcb4bda84bb4", + "signature": "a55882366dfef3b69e0c50117869d0d97abb8a55340bec0a4308dcb4bda84bb4", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts": { + "version": "eb02aeba1f7b6384349324de1dda6a4cee080474ef9b71e4c0458b1fc3432eba", + "signature": "eb02aeba1f7b6384349324de1dda6a4cee080474ef9b71e4c0458b1fc3432eba", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/LineBasicMaterial.d.ts": { + "version": "7404e6b4ecbc4ca455747088e76f333fe5fd05f9d5515720fc749f18dcad6a26", + "signature": "7404e6b4ecbc4ca455747088e76f333fe5fd05f9d5515720fc749f18dcad6a26", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/LineDashedMaterial.d.ts": { + "version": "c90cbad957d33ec00520d89ef1c535a699248b6dc0d73f9bd42dcdb2369f3158", + "signature": "c90cbad957d33ec00520d89ef1c535a699248b6dc0d73f9bd42dcdb2369f3158", + "affectsGlobalScope": false + }, + "../node_modules/three/src/materials/Materials.d.ts": { + "version": "355d745d283e4f89bd785542bdba50ae1ab31ca5fa9618f2e221fbe12b9933cc", + "signature": "355d745d283e4f89bd785542bdba50ae1ab31ca5fa9618f2e221fbe12b9933cc", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/Sprite.d.ts": { + "version": "87b4338924eabf315f82d61b6227d0fbbbd712b527384832ba995f0c96f5e5d1", + "signature": "87b4338924eabf315f82d61b6227d0fbbbd712b527384832ba995f0c96f5e5d1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/LOD.d.ts": { + "version": "873820fa4faed2d2e4974cbde2db255f47cb956b3ced50d0752c8c1d4c855484", + "signature": "873820fa4faed2d2e4974cbde2db255f47cb956b3ced50d0752c8c1d4c855484", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/InstancedMesh.d.ts": { + "version": "5bae4a939da9846badccbed331906938ff8468cbc4c3d52dece1da4db0145fb4", + "signature": "5bae4a939da9846badccbed331906938ff8468cbc4c3d52dece1da4db0145fb4", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/DataTexture.d.ts": { + "version": "7d86173eb49ad47ec88e313306f25302af599bdf78d308da6bd8a37c2f598531", + "signature": "7d86173eb49ad47ec88e313306f25302af599bdf78d308da6bd8a37c2f598531", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/Skeleton.d.ts": { + "version": "f69299c8c432c0dab44d7bb06e47f3f3a54c6c219a30b04375d479836f2be9a2", + "signature": "f69299c8c432c0dab44d7bb06e47f3f3a54c6c219a30b04375d479836f2be9a2", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/SkinnedMesh.d.ts": { + "version": "c1bec8131f58c297e6dad3794ecd0feae713a0ef293786391878407993b892fd", + "signature": "c1bec8131f58c297e6dad3794ecd0feae713a0ef293786391878407993b892fd", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/Line.d.ts": { + "version": "04e66eae24e76fc4a8cb9ae492de117884fd2a3ec605466a1157535058e6e1a9", + "signature": "04e66eae24e76fc4a8cb9ae492de117884fd2a3ec605466a1157535058e6e1a9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/LineSegments.d.ts": { + "version": "8ce53d588bf8b257900741473613003e2f86c6c72242c19e24c259a73b1c2833", + "signature": "8ce53d588bf8b257900741473613003e2f86c6c72242c19e24c259a73b1c2833", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/LineLoop.d.ts": { + "version": "58613b1a397da18258ad044a46c6a5637e6ef08ba2372fdb6e93c5f4d1c5fdfb", + "signature": "58613b1a397da18258ad044a46c6a5637e6ef08ba2372fdb6e93c5f4d1c5fdfb", + "affectsGlobalScope": false + }, + "../node_modules/three/src/objects/Points.d.ts": { + "version": "ffbd112aca9f61ac0b4d9443dcc3dca9309678403780b7b809704ca4b449c49b", + "signature": "ffbd112aca9f61ac0b4d9443dcc3dca9309678403780b7b809704ca4b449c49b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/VideoTexture.d.ts": { + "version": "99f2bb5898a327bdc1c16d587ed090ea052da86521c3ee54c7a3ac52a6543002", + "signature": "99f2bb5898a327bdc1c16d587ed090ea052da86521c3ee54c7a3ac52a6543002", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/DataTexture2DArray.d.ts": { + "version": "42e41629a2ba5e604dd98cae7b4cce83be4cee0990a0d55363b1b01346ab0bd8", + "signature": "42e41629a2ba5e604dd98cae7b4cce83be4cee0990a0d55363b1b01346ab0bd8", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/DataTexture3D.d.ts": { + "version": "68bc808ef05f15a1378dc430bb22552fc9f5e3f32c492baa96c1b8b332987171", + "signature": "68bc808ef05f15a1378dc430bb22552fc9f5e3f32c492baa96c1b8b332987171", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/CompressedTexture.d.ts": { + "version": "75a8b7922a1679b55d83518f1f96bfe9bc8c01bb2c4605a5422244f3668ac7e0", + "signature": "75a8b7922a1679b55d83518f1f96bfe9bc8c01bb2c4605a5422244f3668ac7e0", + "affectsGlobalScope": false + }, + "../node_modules/three/src/textures/CanvasTexture.d.ts": { + "version": "32203953b80342bd8969021ef173634c9327b01067bf54eca5dd34c89600afc2", + "signature": "32203953b80342bd8969021ef173634c9327b01067bf54eca5dd34c89600afc2", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/BoxGeometry.d.ts": { + "version": "5c244bb9e042d4cd3657883850601344c3ba978162cdd611d5a1df1e0799021a", + "signature": "5c244bb9e042d4cd3657883850601344c3ba978162cdd611d5a1df1e0799021a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts": { + "version": "5e2ff50cbb499fa61c834f0c3f475a4a980e9cea077046dd81e9032498c89181", + "signature": "5e2ff50cbb499fa61c834f0c3f475a4a980e9cea077046dd81e9032498c89181", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/CircleGeometry.d.ts": { + "version": "da0a0ebbfd8a96941262b3e3f4cb97e9e5c9837a6f9f702a678db140e426711b", + "signature": "da0a0ebbfd8a96941262b3e3f4cb97e9e5c9837a6f9f702a678db140e426711b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts": { + "version": "9e2e0bed41381daea467ebf667de13663544ce8a6a4c42c43ac9b6f168db5cf9", + "signature": "9e2e0bed41381daea467ebf667de13663544ce8a6a4c42c43ac9b6f168db5cf9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/CylinderGeometry.d.ts": { + "version": "cb095734b0f0f65f08cf18575f5d16b5b264233051452781c3c75dbf2ead7ee9", + "signature": "cb095734b0f0f65f08cf18575f5d16b5b264233051452781c3c75dbf2ead7ee9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/ConeGeometry.d.ts": { + "version": "56074aa3417e05ff0a3d2281d82427871a26b9c5872bd81abe766ca07d666f64", + "signature": "56074aa3417e05ff0a3d2281d82427871a26b9c5872bd81abe766ca07d666f64", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts": { + "version": "ffdb7973e3aa43cf33feaa25c0ff02777a977d755fe81f07b2bece270a9a9568", + "signature": "ffdb7973e3aa43cf33feaa25c0ff02777a977d755fe81f07b2bece270a9a9568", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts": { + "version": "eea76e1ac82eaf221b5f50c02df1b26b767a9723c99d5c9ea0440e8b86b6fc09", + "signature": "eea76e1ac82eaf221b5f50c02df1b26b767a9723c99d5c9ea0440e8b86b6fc09", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts": { + "version": "b45632734f143e3059d81f2fbcd7d192667fbd26111f02b3e27d740d9d37f992", + "signature": "b45632734f143e3059d81f2fbcd7d192667fbd26111f02b3e27d740d9d37f992", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts": { + "version": "281f0f03a165a3c49626ba919e64fe9341f03e8651baa9e0c789065d342aa4ef", + "signature": "281f0f03a165a3c49626ba919e64fe9341f03e8651baa9e0c789065d342aa4ef", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts": { + "version": "5f58734d1824159a7f4dd4a74c0ff498e7f1c68e26e5dba470b232bc507d038c", + "signature": "5f58734d1824159a7f4dd4a74c0ff498e7f1c68e26e5dba470b232bc507d038c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/EdgesGeometry.d.ts": { + "version": "1ae3fef0b76b404e1ec72430f00a8a5207a87f84e3cc313d293b2e1e62811ca3", + "signature": "1ae3fef0b76b404e1ec72430f00a8a5207a87f84e3cc313d293b2e1e62811ca3", + "affectsGlobalScope": false + }, + "../node_modules/three/src/extras/core/Curve.d.ts": { + "version": "1b18011fdda8f6669557b02690107ea74d0750d7f8c2d0e9459d5ebe6c3288e0", + "signature": "1b18011fdda8f6669557b02690107ea74d0750d7f8c2d0e9459d5ebe6c3288e0", + "affectsGlobalScope": false + }, + "../node_modules/three/src/extras/core/CurvePath.d.ts": { + "version": "8e33f328e816ecc128eee84616f67bbafbfdff09c9b37ab41d108e2cab61f5b3", + "signature": "8e33f328e816ecc128eee84616f67bbafbfdff09c9b37ab41d108e2cab61f5b3", + "affectsGlobalScope": false + }, + "../node_modules/three/src/extras/core/Path.d.ts": { + "version": "0279718a661b0cec730f0c80413738c64bdf30c33986b06c173e12a2343561da", + "signature": "0279718a661b0cec730f0c80413738c64bdf30c33986b06c173e12a2343561da", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/ShapeGeometry.d.ts": { + "version": "8d581dc5b581e9d552439947fb9f79eafb08ea8ccf30fe79e363b3292a2018d0", + "signature": "8d581dc5b581e9d552439947fb9f79eafb08ea8ccf30fe79e363b3292a2018d0", + "affectsGlobalScope": false + }, + "../node_modules/three/src/extras/core/Shape.d.ts": { + "version": "ae113be81a21cd5bbac748f6293b9346ad6e4e3557935ff980280beadc9a2c7a", + "signature": "ae113be81a21cd5bbac748f6293b9346ad6e4e3557935ff980280beadc9a2c7a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts": { + "version": "66d7beca037eee68d73fbba7825fa9517adc307db73fc1bbe9160e0249fc1f6e", + "signature": "66d7beca037eee68d73fbba7825fa9517adc307db73fc1bbe9160e0249fc1f6e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts": { + "version": "c983476c4566217bdfcef0adca6f14e95e57c8f8b2a8b52caef419450b296fa1", + "signature": "c983476c4566217bdfcef0adca6f14e95e57c8f8b2a8b52caef419450b296fa1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts": { + "version": "82e2605fe2d42494866e4570f7b9fc5060ea2e2a881359f61efa425dfc0b59a8", + "signature": "82e2605fe2d42494866e4570f7b9fc5060ea2e2a881359f61efa425dfc0b59a8", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts": { + "version": "64223ab142213dc57ddf7e581baac4467eed01cfb007033ee860412210150e30", + "signature": "64223ab142213dc57ddf7e581baac4467eed01cfb007033ee860412210150e30", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/LatheGeometry.d.ts": { + "version": "c943a30ab1e188c9f60c0c6500d3d5d3c11b2f2ca5061f66f4ef8a21ff87c936", + "signature": "c943a30ab1e188c9f60c0c6500d3d5d3c11b2f2ca5061f66f4ef8a21ff87c936", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts": { + "version": "5f279127d9eabc8f542aa5fa4e1892941aefdda45ce5929d22fcab6b195f21f5", + "signature": "5f279127d9eabc8f542aa5fa4e1892941aefdda45ce5929d22fcab6b195f21f5", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/OctahedronGeometry.d.ts": { + "version": "7be2fc549a8ac2a64bc47d27eee22bca0a428f77114b920c66e83f693cb43fb2", + "signature": "7be2fc549a8ac2a64bc47d27eee22bca0a428f77114b920c66e83f693cb43fb2", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts": { + "version": "d1ee35fb506b17b6501c6ccf50651f18b862ea899967b8a19af4a9c9d0fd1ac7", + "signature": "d1ee35fb506b17b6501c6ccf50651f18b862ea899967b8a19af4a9c9d0fd1ac7", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/ParametricGeometry.d.ts": { + "version": "d7327b66a06fc3f9bb0b25fd0a772ed110843ce75247fbe7ebb336f0ee8ddeea", + "signature": "d7327b66a06fc3f9bb0b25fd0a772ed110843ce75247fbe7ebb336f0ee8ddeea", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts": { + "version": "d81a8dd281a483715ec5aa6c107e4b665f4ca80e477fda53cfad7d1c9a9bb142", + "signature": "d81a8dd281a483715ec5aa6c107e4b665f4ca80e477fda53cfad7d1c9a9bb142", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/PlaneGeometry.d.ts": { + "version": "1d025e8886f2fec6f83687534111f0a7ba7b1937895c83fee526252c9281d7f9", + "signature": "1d025e8886f2fec6f83687534111f0a7ba7b1937895c83fee526252c9281d7f9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts": { + "version": "a21a71f2a7506ec4cbb236695720844ec44d6c490e32625553c2e83061f83ab0", + "signature": "a21a71f2a7506ec4cbb236695720844ec44d6c490e32625553c2e83061f83ab0", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts": { + "version": "a7e057c8f9822d5d7a98b689c4b8e35a6e918ae09d1586564fae5107a928935f", + "signature": "a7e057c8f9822d5d7a98b689c4b8e35a6e918ae09d1586564fae5107a928935f", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/RingGeometry.d.ts": { + "version": "1de015ea48963a11dec80ff6a0b6ca75834b41a828da08feb211aa522f8a9336", + "signature": "1de015ea48963a11dec80ff6a0b6ca75834b41a828da08feb211aa522f8a9336", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/RingBufferGeometry.d.ts": { + "version": "d4d7ac003b5917eef6897a4e4079937abca6808f28a03e5414351135c8e753a0", + "signature": "d4d7ac003b5917eef6897a4e4079937abca6808f28a03e5414351135c8e753a0", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts": { + "version": "6ce5745d796d1c8e60ad6fc667353d80fceb39617f8b26090dcb2d7953c72066", + "signature": "6ce5745d796d1c8e60ad6fc667353d80fceb39617f8b26090dcb2d7953c72066", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/SphereGeometry.d.ts": { + "version": "5ce1d82940668665e217476420ff41b84fb9a512d10735796441fe7196517125", + "signature": "5ce1d82940668665e217476420ff41b84fb9a512d10735796441fe7196517125", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts": { + "version": "9ece00793894f040be474b430fd36397b9168a0c19147511853e8c647c2a911f", + "signature": "9ece00793894f040be474b430fd36397b9168a0c19147511853e8c647c2a911f", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts": { + "version": "426136ce9cc57ba3de3e4a5e0d59760a240973be004efe9451a8fc553b0e72fe", + "signature": "426136ce9cc57ba3de3e4a5e0d59760a240973be004efe9451a8fc553b0e72fe", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts": { + "version": "c2802e611d49d070a0a8d6fbac64ec9c8643d34de6f42008f0a61d6d14cdfe2b", + "signature": "c2802e611d49d070a0a8d6fbac64ec9c8643d34de6f42008f0a61d6d14cdfe2b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/extras/core/Font.d.ts": { + "version": "436a86f32de19f660faaba6ab399b3503ee5152727de08ceabb54dc02c840116", + "signature": "436a86f32de19f660faaba6ab399b3503ee5152727de08ceabb54dc02c840116", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TextBufferGeometry.d.ts": { + "version": "63d72427f833f416c406f098b9418a98bcc82ebda3625e5e575c39e2edffc160", + "signature": "63d72427f833f416c406f098b9418a98bcc82ebda3625e5e575c39e2edffc160", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TextGeometry.d.ts": { + "version": "ff5e4dfc030f193d7bd1f36755b81732c0975e5154070e0e179bf48a8e735f60", + "signature": "ff5e4dfc030f193d7bd1f36755b81732c0975e5154070e0e179bf48a8e735f60", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TorusGeometry.d.ts": { + "version": "e1d209016d9e68055d1a80ffd07c0803e1b150ecd1c0f462be9c803c5f74e84d", + "signature": "e1d209016d9e68055d1a80ffd07c0803e1b150ecd1c0f462be9c803c5f74e84d", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts": { + "version": "6b95dd250051dbcfe23b186e4add7620cc819fa6eb61d6b53f27c33bb7835992", + "signature": "6b95dd250051dbcfe23b186e4add7620cc819fa6eb61d6b53f27c33bb7835992", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts": { + "version": "c2ca14afe82e4dcf28f6f45a7e7ca5bfb5c459fcfa24570ac478073f4190b15c", + "signature": "c2ca14afe82e4dcf28f6f45a7e7ca5bfb5c459fcfa24570ac478073f4190b15c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts": { + "version": "c5989fab43a5866216af885ff77230c7bd4a8077486c99883e53634d5495a5db", + "signature": "c5989fab43a5866216af885ff77230c7bd4a8077486c99883e53634d5495a5db", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TubeGeometry.d.ts": { + "version": "5e8104cc3413209ef4d3cfa5948b45174d7d399d66ce938df171e1fdb8b403dd", + "signature": "5e8104cc3413209ef4d3cfa5948b45174d7d399d66ce938df171e1fdb8b403dd", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts": { + "version": "aa186e410cf728f08488178074d80652d7a14b6e78db72730dabd4589d23b8b1", + "signature": "aa186e410cf728f08488178074d80652d7a14b6e78db72730dabd4589d23b8b1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/WireframeGeometry.d.ts": { + "version": "85fc7661b8988644a472402405fc9b48c88164a95ba7abf9c4031b0a848a7fd1", + "signature": "85fc7661b8988644a472402405fc9b48c88164a95ba7abf9c4031b0a848a7fd1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/geometries/Geometries.d.ts": { + "version": "74eca9f5b8b75520d65fecaa88829964f9430a209b2ec879bb16abe09a5a1ace", + "signature": "74eca9f5b8b75520d65fecaa88829964f9430a209b2ec879bb16abe09a5a1ace", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/Loader.d.ts": { + "version": "a72dcb765a9b4287f1adbe84f0784d887dd462b27b1be1320b12f4eeec888032", + "signature": "a72dcb765a9b4287f1adbe84f0784d887dd462b27b1be1320b12f4eeec888032", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/LoadingManager.d.ts": { + "version": "096ccc78d28d561ee0cb8ddbfe3b09b099a513d70732004c2d121ae028e2537c", + "signature": "096ccc78d28d561ee0cb8ddbfe3b09b099a513d70732004c2d121ae028e2537c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/AnimationLoader.d.ts": { + "version": "00cf8c14cb0bf467e38deaea3657ac652d038b3d4aadb707d7b2473c62d7961e", + "signature": "00cf8c14cb0bf467e38deaea3657ac652d038b3d4aadb707d7b2473c62d7961e", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts": { + "version": "90e4593ebd701c4e42a5725e5bfb01685d7aa7d2137d3f8aaaba57859d1df722", + "signature": "90e4593ebd701c4e42a5725e5bfb01685d7aa7d2137d3f8aaaba57859d1df722", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/DataTextureLoader.d.ts": { + "version": "58e4ac1738f57a0b72857ab9cea87d7378d2176455adacb01ecfbe61f7273cef", + "signature": "58e4ac1738f57a0b72857ab9cea87d7378d2176455adacb01ecfbe61f7273cef", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/CubeTextureLoader.d.ts": { + "version": "a5349196160d03ae091244e4c4bd043b87de393842bdc6660427d1a4c1d33f79", + "signature": "a5349196160d03ae091244e4c4bd043b87de393842bdc6660427d1a4c1d33f79", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/TextureLoader.d.ts": { + "version": "a3b0483b154b6a496f0b76646fad75af104aa569924d8dbef4e4f15fd61eea82", + "signature": "a3b0483b154b6a496f0b76646fad75af104aa569924d8dbef4e4f15fd61eea82", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/ObjectLoader.d.ts": { + "version": "4faf759e8e8e595716ed687e0bdb75c39f50b162c6970b653cb1580ab7d0717a", + "signature": "4faf759e8e8e595716ed687e0bdb75c39f50b162c6970b653cb1580ab7d0717a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/MaterialLoader.d.ts": { + "version": "54bef3553216f887a79d88aa5b12ae5cd54b47120d6f367515238f0c1d99e3fb", + "signature": "54bef3553216f887a79d88aa5b12ae5cd54b47120d6f367515238f0c1d99e3fb", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/InstancedBufferGeometry.d.ts": { + "version": "f1477e292370cb3d9cc5b7800c02624b589c789d9c40219cb718a75e17bce992", + "signature": "f1477e292370cb3d9cc5b7800c02624b589c789d9c40219cb718a75e17bce992", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts": { + "version": "3b6b9be6198383913e6dac7ea64b485aa157da753c2e01b04fc17c2a662be21c", + "signature": "3b6b9be6198383913e6dac7ea64b485aa157da753c2e01b04fc17c2a662be21c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/ImageLoader.d.ts": { + "version": "290767d42ab176b3db6da68594fc1f084292838a94ce9dd4dcc982070bb97c43", + "signature": "290767d42ab176b3db6da68594fc1f084292838a94ce9dd4dcc982070bb97c43", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts": { + "version": "0b69881c10a075269a565ee3871aafa9d398cf46f17249e89c9f2e0f7240aa42", + "signature": "0b69881c10a075269a565ee3871aafa9d398cf46f17249e89c9f2e0f7240aa42", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/FontLoader.d.ts": { + "version": "987dbc7d78b979ed143f87be5cad71763cb207a59c66645e073ff863d02a4abd", + "signature": "987dbc7d78b979ed143f87be5cad71763cb207a59c66645e073ff863d02a4abd", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/FileLoader.d.ts": { + "version": "c8b51a7eaa607d1be8649af592faef0b5f168f61826a9354b9145d530bed9b17", + "signature": "c8b51a7eaa607d1be8649af592faef0b5f168f61826a9354b9145d530bed9b17", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/LoaderUtils.d.ts": { + "version": "69b5e85d185c724f0947fb40711f75266f6aaab53345d4384dd80b9a57214c46", + "signature": "69b5e85d185c724f0947fb40711f75266f6aaab53345d4384dd80b9a57214c46", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/Cache.d.ts": { + "version": "609dbe55175c0982030f9f270b3aa1bd8f85d313323956133df31207834a09cf", + "signature": "609dbe55175c0982030f9f270b3aa1bd8f85d313323956133df31207834a09cf", + "affectsGlobalScope": false + }, + "../node_modules/three/src/loaders/AudioLoader.d.ts": { + "version": "ee042fb1c109176ed53177dc9ac342bf70cb74dd991629f080f9b2f6a12d9132", + "signature": "ee042fb1c109176ed53177dc9ac342bf70cb74dd991629f080f9b2f6a12d9132", + "affectsGlobalScope": false + }, + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts": { + "version": "02594940abedb506bea6e9a89f42dc663e6bc5d14d4c7022bbd1206ff3fecb52", + "signature": "02594940abedb506bea6e9a89f42dc663e6bc5d14d4c7022bbd1206ff3fecb52", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/SpotLightShadow.d.ts": { + "version": "9caa267524e911fabaad8ff7235ee387c4969b37593ea1578b2796181527d6ef", + "signature": "9caa267524e911fabaad8ff7235ee387c4969b37593ea1578b2796181527d6ef", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/SpotLight.d.ts": { + "version": "c4c5424b0fafdf5db869c90bb065136015088567916944a51732e546ab5aeee7", + "signature": "c4c5424b0fafdf5db869c90bb065136015088567916944a51732e546ab5aeee7", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/PointLightShadow.d.ts": { + "version": "080c5e53470690d535e57c8996582daeefe945c9e5838ac5114a878427ac062d", + "signature": "080c5e53470690d535e57c8996582daeefe945c9e5838ac5114a878427ac062d", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/PointLight.d.ts": { + "version": "8c0d24b8fed0f0237e631607bd164d5debc615d15b54d908a2b61c3256e3012d", + "signature": "8c0d24b8fed0f0237e631607bd164d5debc615d15b54d908a2b61c3256e3012d", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/RectAreaLight.d.ts": { + "version": "cacf1756ff0087224113803d167e6f17ddcff407ba93a95f53b5bf7470de8e0d", + "signature": "cacf1756ff0087224113803d167e6f17ddcff407ba93a95f53b5bf7470de8e0d", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/HemisphereLight.d.ts": { + "version": "d01108d8d88777434a7a88009ccfeb1ef6eaa405f10f9e817d88a32f60c04021", + "signature": "d01108d8d88777434a7a88009ccfeb1ef6eaa405f10f9e817d88a32f60c04021", + "affectsGlobalScope": false + }, + "../node_modules/three/src/cameras/OrthographicCamera.d.ts": { + "version": "954a8ab7a12af5588bded5afcd728f42aa9f1b4ea506ce9709569372c127ca61", + "signature": "954a8ab7a12af5588bded5afcd728f42aa9f1b4ea506ce9709569372c127ca61", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/DirectionalLightShadow.d.ts": { + "version": "cb510525f6d3cf0a5da49b286d38518f5c59583f4b0caf4768a170c0f5fef5b9", + "signature": "cb510525f6d3cf0a5da49b286d38518f5c59583f4b0caf4768a170c0f5fef5b9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/DirectionalLight.d.ts": { + "version": "48bf62799d990a764d998af647f39b0e7fa8d9ddca16466381c3dc70dffd749b", + "signature": "48bf62799d990a764d998af647f39b0e7fa8d9ddca16466381c3dc70dffd749b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/AmbientLight.d.ts": { + "version": "d67c1526c0e60d2ac438a94d910debc045277ae9d6da56072f925e17ef8ded3c", + "signature": "d67c1526c0e60d2ac438a94d910debc045277ae9d6da56072f925e17ef8ded3c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/SphericalHarmonics3.d.ts": { + "version": "2c9924b43f02c478f1371bbb16ab377dda904e0c06170f221f8df32cdc898430", + "signature": "2c9924b43f02c478f1371bbb16ab377dda904e0c06170f221f8df32cdc898430", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/LightProbe.d.ts": { + "version": "bff8bc8a9cb0d3d7559da02f87f2ed90806feca89e90caafb4db118691be3d1b", + "signature": "bff8bc8a9cb0d3d7559da02f87f2ed90806feca89e90caafb4db118691be3d1b", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/AmbientLightProbe.d.ts": { + "version": "f76d529e6a2438ecaed261b23d3e152a2a3452e15e0a6256115cbf1ac40da866", + "signature": "f76d529e6a2438ecaed261b23d3e152a2a3452e15e0a6256115cbf1ac40da866", + "affectsGlobalScope": false + }, + "../node_modules/three/src/lights/HemisphereLightProbe.d.ts": { + "version": "b45f1d7704c649259e85e335ea0dc47d8813caa8335ae34f44d8e9829f93b74a", + "signature": "b45f1d7704c649259e85e335ea0dc47d8813caa8335ae34f44d8e9829f93b74a", + "affectsGlobalScope": false + }, + "../node_modules/three/src/cameras/StereoCamera.d.ts": { + "version": "382aee957702a3669129f336d1f2eaf4da55d1f72d330bd0bd86fc5141e62a29", + "signature": "382aee957702a3669129f336d1f2eaf4da55d1f72d330bd0bd86fc5141e62a29", + "affectsGlobalScope": false + }, + "../node_modules/three/src/cameras/CubeCamera.d.ts": { + "version": "d24bacb3789b72f2ee367239fa8078ba1e3844021a1bd78c77d6272da85e2992", + "signature": "d24bacb3789b72f2ee367239fa8078ba1e3844021a1bd78c77d6272da85e2992", + "affectsGlobalScope": false + }, + "../node_modules/three/src/cameras/ArrayCamera.d.ts": { + "version": "6b0a5dd86066886465f595f22bf6693dd7d50e84278d2f936be085240cba9447", + "signature": "6b0a5dd86066886465f595f22bf6693dd7d50e84278d2f936be085240cba9447", + "affectsGlobalScope": false + }, + "../node_modules/three/src/audio/AudioContext.d.ts": { + "version": "3a16fc8f323474862a7a13e4cb1890d9f490eb6f26c44b81d064dcf8bdd13882", + "signature": "3a16fc8f323474862a7a13e4cb1890d9f490eb6f26c44b81d064dcf8bdd13882", + "affectsGlobalScope": false + }, + "../node_modules/three/src/audio/AudioListener.d.ts": { + "version": "45882e7ddcabd7ecd3f88914265169537c4d2038bda68cc9c3b10c1eac82d66f", + "signature": "45882e7ddcabd7ecd3f88914265169537c4d2038bda68cc9c3b10c1eac82d66f", + "affectsGlobalScope": false + }, + "../node_modules/three/src/audio/Audio.d.ts": { + "version": "3bf67c4150ef2a6681d0bd15a659be49e373deafcd98e77102069958361b96b8", + "signature": "3bf67c4150ef2a6681d0bd15a659be49e373deafcd98e77102069958361b96b8", + "affectsGlobalScope": false + }, + "../node_modules/three/src/audio/PositionalAudio.d.ts": { + "version": "94ac917a35edb7e8dee856ee994833e581b293bbc565be80359e3cfbe02b68ab", + "signature": "94ac917a35edb7e8dee856ee994833e581b293bbc565be80359e3cfbe02b68ab", + "affectsGlobalScope": false + }, + "../node_modules/three/src/audio/AudioAnalyser.d.ts": { + "version": "cd0bfc372a4cb0b23a6ed6461bf5218485671715f3d7e8cc1b21548ebf2f2e03", + "signature": "cd0bfc372a4cb0b23a6ed6461bf5218485671715f3d7e8cc1b21548ebf2f2e03", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts": { + "version": "a4d62616dc35504638f9a1e0cc1ecbaef840df69f4026b4f6ffe4742d596f168", + "signature": "a4d62616dc35504638f9a1e0cc1ecbaef840df69f4026b4f6ffe4742d596f168", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts": { + "version": "0cb09335768a1c28021248c27da0ad243e2d16eeb0d8e31ea227c352de39ce26", + "signature": "0cb09335768a1c28021248c27da0ad243e2d16eeb0d8e31ea227c352de39ce26", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": { + "version": "4c818329eba79c527592f8970ddba721c7325c29fd28b7156d7d50c55207c58f", + "signature": "4c818329eba79c527592f8970ddba721c7325c29fd28b7156d7d50c55207c58f", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts": { + "version": "0a874a82c54596c15ffe75b3dd1b730773a753b90d630ed3e296e904079a31a9", + "signature": "0a874a82c54596c15ffe75b3dd1b730773a753b90d630ed3e296e904079a31a9", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts": { + "version": "0fd64abcdb567e7cfcc536f5cb633b1361ca482ba424ea1ffc7cfa50240bc0de", + "signature": "0fd64abcdb567e7cfcc536f5cb633b1361ca482ba424ea1ffc7cfa50240bc0de", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": { + "version": "5a766534f22553988632e8b5a92fc3e4aec917f6cd2a8fae890612711741c70d", + "signature": "5a766534f22553988632e8b5a92fc3e4aec917f6cd2a8fae890612711741c70d", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/PropertyMixer.d.ts": { + "version": "d153da124dee66283298d5e1c6c06cf79609172cc90305426144977496b6ab17", + "signature": "d153da124dee66283298d5e1c6c06cf79609172cc90305426144977496b6ab17", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/PropertyBinding.d.ts": { + "version": "12b10434acc5b84b93dd245ec7120e1fe2f257e80b11ec110a60071166025470", + "signature": "12b10434acc5b84b93dd245ec7120e1fe2f257e80b11ec110a60071166025470", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/AnimationUtils.d.ts": { + "version": "ba7fb82eb8d0b6e527ff15643e5157f74cb88b3ca38eb27812e4a17e96f1cf04", + "signature": "ba7fb82eb8d0b6e527ff15643e5157f74cb88b3ca38eb27812e4a17e96f1cf04", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/AnimationObjectGroup.d.ts": { + "version": "5f01f1a897d15abb687597ef551b2b23ffb7c872e11187f649f86de79cf246d4", + "signature": "5f01f1a897d15abb687597ef551b2b23ffb7c872e11187f649f86de79cf246d4", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/AnimationAction.d.ts": { + "version": "75a6f3a1b056897f94eeb387e2b61f0814bd3ee1baedad54ca95c8b50370b6a5", + "signature": "75a6f3a1b056897f94eeb387e2b61f0814bd3ee1baedad54ca95c8b50370b6a5", + "affectsGlobalScope": false + }, + "../node_modules/three/src/animation/AnimationMixer.d.ts": { + "version": "985a17f0f588aa99d19f4fadd5b37643abfaa7d99b95346e13f62099d1bbc123", + "signature": "985a17f0f588aa99d19f4fadd5b37643abfaa7d99b95346e13f62099d1bbc123", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/Uniform.d.ts": { + "version": "a35c91c464268c07c67020b513e4f88847e87d549514628c3524f9d1d5d9d539", + "signature": "a35c91c464268c07c67020b513e4f88847e87d549514628c3524f9d1d5d9d539", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts": { + "version": "07cb3f0fd34165c2f477d01e9919fe3dba3e3ff5dbf6427059dd3e8ae75f66d4", + "signature": "07cb3f0fd34165c2f477d01e9919fe3dba3e3ff5dbf6427059dd3e8ae75f66d4", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/InstancedBufferAttribute.d.ts": { + "version": "8864bde866a8940afb6b8cd295b6eb42e133c12ca11b052a3df004a2114d19d0", + "signature": "8864bde866a8940afb6b8cd295b6eb42e133c12ca11b052a3df004a2114d19d0", + "affectsGlobalScope": false + }, + "../node_modules/three/src/core/Clock.d.ts": { + "version": "697ea55faaeb771f18270d9ba27a868c13b4430ae7530c4fd53cabed4d1041a1", + "signature": "697ea55faaeb771f18270d9ba27a868c13b4430ae7530c4fd53cabed4d1041a1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": { + "version": "6eb0074c07aa60be1bfdeba02bc0075808d04b6fae7a76268259088114c9193d", + "signature": "6eb0074c07aa60be1bfdeba02bc0075808d04b6fae7a76268259088114c9193d", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/MathUtils.d.ts": { + "version": "b0edf0b98895c080f4a082c5f1b35e42bd12c6ee624cb42b723a928245167257", + "signature": "b0edf0b98895c080f4a082c5f1b35e42bd12c6ee624cb42b723a928245167257", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Frustum.d.ts": { + "version": "d3025fdb12b8ca9b680e6641fbe9b296da425a0a69969b075110db065f1deee0", + "signature": "d3025fdb12b8ca9b680e6641fbe9b296da425a0a69969b075110db065f1deee0", + "affectsGlobalScope": false + }, + "../node_modules/three/src/math/Box2.d.ts": { + "version": "3b74a19021afa846dd0d9820a97cec907bea98239e8726fff3584a77f4f3673f", + "signature": "3b74a19021afa846dd0d9820a97cec907bea98239e8726fff3584a77f4f3673f", + "affectsGlobalScope": false + }, + "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts": { + "version": "f1cdfd6a76470a10fd22833d042a2ceed76176f61c48b1a26546d34cf476e4e7", + "signature": "f1cdfd6a76470a10fd22833d042a2ceed76176f61c48b1a26546d34cf476e4e7", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/SpotLightHelper.d.ts": { + "version": "fd384aa99baea593712841ea6d10b4eba364a514db821ab403c376b3c46940fa", + "signature": "fd384aa99baea593712841ea6d10b4eba364a514db821ab403c376b3c46940fa", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/SkeletonHelper.d.ts": { + "version": "5cf9e76cd6647ce638189b9859e5d2a2262171d81ea0359b5debf9c8f51cf342", + "signature": "5cf9e76cd6647ce638189b9859e5d2a2262171d81ea0359b5debf9c8f51cf342", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/PointLightHelper.d.ts": { + "version": "dd37a03a0e5ea3e5c1c7eeaec7477ef4af32fc0351ed9ce2c79adb2c56218436", + "signature": "dd37a03a0e5ea3e5c1c7eeaec7477ef4af32fc0351ed9ce2c79adb2c56218436", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts": { + "version": "d5aac916cb7ba330a8e9bdb27740b508b314851ec616e88e8972f27ba3949356", + "signature": "d5aac916cb7ba330a8e9bdb27740b508b314851ec616e88e8972f27ba3949356", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/GridHelper.d.ts": { + "version": "e925f64d2c32d61bde90a9cbf12fc6195d49855551ad830751ef012941b7b423", + "signature": "e925f64d2c32d61bde90a9cbf12fc6195d49855551ad830751ef012941b7b423", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/PolarGridHelper.d.ts": { + "version": "d47993e9c87064a944cf4fc876b8e9c50e8e880a6847c73a344594cca9c477c4", + "signature": "d47993e9c87064a944cf4fc876b8e9c50e8e880a6847c73a344594cca9c477c4", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts": { + "version": "2b194c4d7aabca35846dc5694fb1332b674c41f7e3c44122392b94d0e230673c", + "signature": "2b194c4d7aabca35846dc5694fb1332b674c41f7e3c44122392b94d0e230673c", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/CameraHelper.d.ts": { + "version": "c9654377f5ac130bea0d1f8e55c52d1fabc6bd9c27cfe0fb9dc53215a35d08c1", + "signature": "c9654377f5ac130bea0d1f8e55c52d1fabc6bd9c27cfe0fb9dc53215a35d08c1", + "affectsGlobalScope": false + }, + "../node_modules/three/src/helpers/BoxHelper.d.ts": { + "version": "4d31bbe9dde590c11d519c0770e882573fc23100a32243d9c6b63f693c3c788f", + "signature": "4d31bbe9dde590c11d519c0770e882573fc23100a32243d9c6b63f693c3c788f", "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2020.d.ts": { - "version": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", - "signature": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "../node_modules/three/src/helpers/Box3Helper.d.ts": { + "version": "ff8001abcd514a62a25d7b38508d7fa1dd38e0f325b3ae2f28258ab377b5c980", + "signature": "ff8001abcd514a62a25d7b38508d7fa1dd38e0f325b3ae2f28258ab377b5c980", "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.esnext.d.ts": { - "version": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", - "signature": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "../node_modules/three/src/helpers/PlaneHelper.d.ts": { + "version": "961ee6061c130e5deaae9c3255c2547e4c1b709a00476f9ac1b8c7c6d11e8327", + "signature": "961ee6061c130e5deaae9c3255c2547e4c1b709a00476f9ac1b8c7c6d11e8327", "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.core.d.ts": { - "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", - "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", - "affectsGlobalScope": true + "../node_modules/three/src/helpers/ArrowHelper.d.ts": { + "version": "80ef78000a8288906f9b31007dc99b2567999adaa2e5dd6b7a700cac7fa6803e", + "signature": "80ef78000a8288906f9b31007dc99b2567999adaa2e5dd6b7a700cac7fa6803e", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { - "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", - "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", - "affectsGlobalScope": true + "../node_modules/three/src/helpers/AxesHelper.d.ts": { + "version": "df3f8cad4f2b8e5f4c03e3441bf21a02f7b2d0e1e4e4e84c00e41599e0c80552", + "signature": "df3f8cad4f2b8e5f4c03e3441bf21a02f7b2d0e1e4e4e84c00e41599e0c80552", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { - "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", - "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/EllipseCurve.d.ts": { + "version": "8f3463eab8661e0deb795df8463afa78b3d2f12620acdd9ef47dae2cf077f7f4", + "signature": "8f3463eab8661e0deb795df8463afa78b3d2f12620acdd9ef47dae2cf077f7f4", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { - "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", - "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/ArcCurve.d.ts": { + "version": "b1662bcb4a857a741ccd2a97932fa0f09817c487d22a700a86a7957341d492a6", + "signature": "b1662bcb4a857a741ccd2a97932fa0f09817c487d22a700a86a7957341d492a6", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { - "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", - "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts": { + "version": "e9624fbce97908868186ec11f7386b6ce7fc6f63547f0cdc3157b5278d2518ab", + "signature": "e9624fbce97908868186ec11f7386b6ce7fc6f63547f0cdc3157b5278d2518ab", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { - "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", - "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts": { + "version": "f82723b24df7d1dbbf6519aaddd6fba3bc02ecf4d0802b36f1b5cc1cb032157c", + "signature": "f82723b24df7d1dbbf6519aaddd6fba3bc02ecf4d0802b36f1b5cc1cb032157c", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { - "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", - "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts": { + "version": "c5b4b089a4fc8e068e647616d1c3ecf70dc1f44771b34865e50a60bbec5279a7", + "signature": "c5b4b089a4fc8e068e647616d1c3ecf70dc1f44771b34865e50a60bbec5279a7", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { - "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", - "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/LineCurve.d.ts": { + "version": "353fb5256371abae2c2784b88413e69450dc0a50172b3b03f9a823f542115782", + "signature": "353fb5256371abae2c2784b88413e69450dc0a50172b3b03f9a823f542115782", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { - "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", - "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/LineCurve3.d.ts": { + "version": "22d5121c485534164b41467be72553dac37b6b8cf05cde86f20b8426eebd66a9", + "signature": "22d5121c485534164b41467be72553dac37b6b8cf05cde86f20b8426eebd66a9", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { - "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", - "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts": { + "version": "0c5a87a03e070ed01782aae86b4884721a670dabfcb59191a8cc6099e1f6e8b5", + "signature": "0c5a87a03e070ed01782aae86b4884721a670dabfcb59191a8cc6099e1f6e8b5", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2017.object.d.ts": { - "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", - "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts": { + "version": "4b8ff5288876b9536917ad6a989a0eca57e6c6e78968dd6695cf1f691d2cdde9", + "signature": "4b8ff5288876b9536917ad6a989a0eca57e6c6e78968dd6695cf1f691d2cdde9", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { - "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", - "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/SplineCurve.d.ts": { + "version": "bd7fbab735542acc02a20d6a306f3fd74e8bb67fee943d9592a128a938e9dc54", + "signature": "bd7fbab735542acc02a20d6a306f3fd74e8bb67fee943d9592a128a938e9dc54", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2017.string.d.ts": { - "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", - "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", - "affectsGlobalScope": true + "../node_modules/three/src/extras/curves/Curves.d.ts": { + "version": "4998cbff67e76f385d9955674a9f2ac385926e807ed371ed357ccb6f03a4d72e", + "signature": "4998cbff67e76f385d9955674a9f2ac385926e807ed371ed357ccb6f03a4d72e", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { - "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", - "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", - "affectsGlobalScope": true + "../node_modules/three/src/extras/core/ShapePath.d.ts": { + "version": "c70a17f88a18c816a1db716fdc3c04cd179c03b659dfb0832ebd87fb7b0693aa", + "signature": "c70a17f88a18c816a1db716fdc3c04cd179c03b659dfb0832ebd87fb7b0693aa", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { - "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", - "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", - "affectsGlobalScope": true + "../node_modules/three/src/extras/DataUtils.d.ts": { + "version": "b5651e85f368793aa0eda055713b327c60ef9dee3a600859e3ec0da044540d86", + "signature": "b5651e85f368793aa0eda055713b327c60ef9dee3a600859e3ec0da044540d86", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { - "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", - "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", - "affectsGlobalScope": true + "../node_modules/three/src/extras/ImageUtils.d.ts": { + "version": "e6fd54ef41facbe3a7a1faaa15668675c300fefc362f7a22848b3ad9b31afff0", + "signature": "e6fd54ef41facbe3a7a1faaa15668675c300fefc362f7a22848b3ad9b31afff0", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { - "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", - "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", - "affectsGlobalScope": true + "../node_modules/three/src/extras/ShapeUtils.d.ts": { + "version": "8d07903d00b0906311abc0c5ab3cb3ce2955ab19d66db7fe4e153af82b66db58", + "signature": "8d07903d00b0906311abc0c5ab3cb3ce2955ab19d66db7fe4e153af82b66db58", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2018.intl.d.ts": { - "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", - "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", - "affectsGlobalScope": true + "../node_modules/three/src/extras/PMREMGenerator.d.ts": { + "version": "a39e71fd9aea81bb04de848f4d3e9564dfb03d03dbc8e622e157d23725830162", + "signature": "a39e71fd9aea81bb04de848f4d3e9564dfb03d03dbc8e622e157d23725830162", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2018.promise.d.ts": { - "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", - "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": { + "version": "b085d79c2a9dfd4ad97d0cdf99c8f1a20747f00eaac15d6292ac2ea79d4102f4", + "signature": "b085d79c2a9dfd4ad97d0cdf99c8f1a20747f00eaac15d6292ac2ea79d4102f4", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { - "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", - "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts": { + "version": "3b2e6dfa494d183e41597c2255151800c4698c442e89cf6e86ced1f21f1c402b", + "signature": "3b2e6dfa494d183e41597c2255151800c4698c442e89cf6e86ced1f21f1c402b", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2019.array.d.ts": { - "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", - "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts": { + "version": "e2c4839f9075e560003f9a957aab9573def00f67e61be01a7f74849b24ff3226", + "signature": "e2c4839f9075e560003f9a957aab9573def00f67e61be01a7f74849b24ff3226", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2019.object.d.ts": { - "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", - "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts": { + "version": "d7d67f8b9211226c101dd03951a55f2d731314d03e4058f514a561f761b11c21", + "signature": "d7d67f8b9211226c101dd03951a55f2d731314d03e4058f514a561f761b11c21", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2019.string.d.ts": { - "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", - "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts": { + "version": "637606c43185cc19da3a519338b903cd6c579820a465837a25b270db0c92c249", + "signature": "637606c43185cc19da3a519338b903cd6c579820a465837a25b270db0c92c249", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { - "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", - "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts": { + "version": "7f2b316acec1a1be0fba99e35c651139c784fd293cb2689c8562854b4d81ab44", + "signature": "7f2b316acec1a1be0fba99e35c651139c784fd293cb2689c8562854b4d81ab44", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { - "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", - "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts": { + "version": "7992371e47123acd9d2318f1472a2fd82d55f1477dd0c83781002bdcc10e58bd", + "signature": "7992371e47123acd9d2318f1472a2fd82d55f1477dd0c83781002bdcc10e58bd", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2020.promise.d.ts": { - "version": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", - "signature": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts": { + "version": "182f0e0b0866058320e00a8f417aeb0892d8a220dd81f7a647c25eeb70354583", + "signature": "182f0e0b0866058320e00a8f417aeb0892d8a220dd81f7a647c25eeb70354583", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts": { - "version": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", - "signature": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts": { + "version": "74989bb8182ff93b96b99c38c12393e698083cccc01a046a8120bfbfe81abb21", + "signature": "74989bb8182ff93b96b99c38c12393e698083cccc01a046a8120bfbfe81abb21", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2020.string.d.ts": { - "version": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", - "signature": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", - "affectsGlobalScope": true + "../node_modules/three/src/renderers/webxr/WebXRController.d.ts": { + "version": "3b405d5a85aed78f25003669ef0ed14513dc4aa6f0116ad5d8a80d51933dd5be", + "signature": "3b405d5a85aed78f25003669ef0ed14513dc4aa6f0116ad5d8a80d51933dd5be", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": { - "version": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", - "signature": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", - "affectsGlobalScope": true + "../node_modules/three/src/Three.Legacy.d.ts": { + "version": "d6f22642eec4002db21f1b66b3d2589329e933798b5a6d40dd5fc3dcbbb5d3ea", + "signature": "d6f22642eec4002db21f1b66b3d2589329e933798b5a6d40dd5fc3dcbbb5d3ea", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.es2020.intl.d.ts": { - "version": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", - "signature": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", - "affectsGlobalScope": true + "../node_modules/three/src/Three.d.ts": { + "version": "c9355e11cd1b1149dc6cc93cac06dfda57e5472f972b39864bffd1385c95b0e8", + "signature": "c9355e11cd1b1149dc6cc93cac06dfda57e5472f972b39864bffd1385c95b0e8", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.esnext.intl.d.ts": { - "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", - "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", - "affectsGlobalScope": true + "./src/OrbitControls.ts": { + "version": "ba7a60bcb8343d452c0502f297699375c87c7cdf347ab16640ae825369422ce7", + "signature": "7f79d2e65a6c65d37499954a054fcbb073438430b81be0472d6ed280ce4fe095", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.esnext.string.d.ts": { - "version": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", - "signature": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", - "affectsGlobalScope": true + "./src/constants.ts": { + "version": "34b52104e5431a15db6e7272d131ebac9575352ba3679e3d9c4f8cb1fdf58164", + "signature": "04b6d17dc5edbb7c491985baa2f88e2a3bda07c73f03e6671e9ff3a6aacd639b", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.esnext.promise.d.ts": { - "version": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", - "signature": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", - "affectsGlobalScope": true + "./src/defs.ts": { + "version": "d3c7eb0ebd42d2246b729fc9a9bf04c2089fb846070d49cd3557309a833ea604", + "signature": "a29b6eeefcc096608ae147a08c191ab35e5e366c8b3ea01031bec525631f0638", + "affectsGlobalScope": false }, - "../node_modules/typescript/lib/lib.esnext.weakref.d.ts": { - "version": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", - "signature": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", - "affectsGlobalScope": true + "./src/entity-manager.ts": { + "version": "e0e5715b91b5043c4f4c88a0466bc1f63d2db98efebd23d6cfc17c52da4304d5", + "signature": "3ac8d504e820eaf7bd25ad6659d53ceadc4e36151fa23535649e5b85ced046a6", + "affectsGlobalScope": false }, - "./src/defs.ts": { - "version": "ee2d0e3ac538531896f0109b38a9f73451ab1b4ef41051a2934325aa03bd7114", - "signature": "e5634ecbed55390c8de45614b72913b60c105e65cc685d863fc53f751d2093d8", + "./src/globaltypes.ts": { + "version": "eb4c1f4c99e94e80a96c809bc6c34ca33faa72f2c44e72f1e886260a9fee1dc2", + "signature": "d05d26aaf833e6a4e66400cf88170a9fb5ccf4537d16b48bd9d2b6e57ce5ecf3", "affectsGlobalScope": false }, "./src/index.ts": { @@ -227,33 +1457,33 @@ "affectsGlobalScope": false }, "./src/simplex-noise.ts": { - "version": "2e0e03491a4340612aa8813a5d0e3d4b37a7ffd0793e65a3ecc299bddf15a2db", - "signature": "8d940f5dce4f103d14f5dd1aa43c9b6dca97f14dc334ebfe25bd3252e1b2c825", + "version": "9d46fb7195fd47f74ceb2de8620b0e68edc598101c547265ce9270c380d826f2", + "signature": "892889ee1b6d0940949d70f933bc9b34efe3fc45fdc224fe8ce1a14aaa5de47d", "affectsGlobalScope": false }, "./src/noise.ts": { - "version": "18837a0f7abcec1884d931ff1680cffaf365ecbde8d437f8a4afaef63f0d9193", - "signature": "8ffb576e6d53dabe6161ab9e91d6f2d55a74d49da2b1175fdbae53e8fe12d598", + "version": "da104448d4e8980a224ce8eb50055f648a98e24406d6e01473eb5b858850738c", + "signature": "0948dd88dcb21fc3c8e8c90b80627404cf4ea1130a3105752b1816da441fbe23", "affectsGlobalScope": false }, "./src/spatial-hash-grid.ts": { - "version": "5eca1343f93d27e4ca08866b8eedb0daa1189762b817f33b9a7e0599483b1517", - "signature": "053107de23d742790865911c5043891500f8b99367673fe363a8bbf5d92bfacb", + "version": "9a53e8426ecca022c62a07c399482c0f9efcd69268b01bd988f84b9f1a537020", + "signature": "94acf0380d5ed01b01616d6fbd5bfbe83c6e90acb0520419cd90ddf3c0c9b9ba", "affectsGlobalScope": false }, "./src/spline.ts": { - "version": "e2a62babf00fec7b1a79ece81e4baa86240a60258699ca9fa87737ae5db14c83", - "signature": "4d13815593233635ebaaeec6c7ad3cd69d167ccb30a2e997667b1060a18bddb8", + "version": "32b2e5e577d4da4ac28058a9b6684e473dce3a9363648b54ca3d26586cf80e22", + "signature": "8ab6fe0abede8eedb143be2ad5fd3366c331c97367d6cc9e4cae36157f6e1191", "affectsGlobalScope": false }, "./src/terrain-constants.ts": { - "version": "42e780b7c57dbd3d98114116ba0be4d744a5c2998f5327aace70a98588c38cb2", - "signature": "3e22cf9c55dee32622e2202d5016811b431b22ab75bec17fa48329681cd8d59c", + "version": "7a715dfc01f25d93bc1b37d284455f5795d8ef68980377c04d86002fa5056e3d", + "signature": "2e54d9fea598f4ab39a11fc85530f3912f0e6ee890ebc0ee779868ae48f14347", "affectsGlobalScope": false }, "./src/terrain-height.ts": { - "version": "16c6f556852dcf90de0394a49e9de4a0724f1b55ee1e5f7f15114ff8981cf587", - "signature": "e5ee9b45c5b949470b79df1599520472f09838f8febacebfba239b695d081848", + "version": "b0272188f97de9f2072fae1d3fa3a89b3a8866d69934f2e97bfb6357b2222767", + "signature": "3733c1c49de58091f4b887909d2530298d920493cace325ba57a9bfc22c119b8", "affectsGlobalScope": false }, "../node_modules/@types/component-emitter/index.d.ts": { @@ -271,6 +1501,11 @@ "signature": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", "affectsGlobalScope": false }, + "../node_modules/@types/minimatch/index.d.ts": { + "version": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "signature": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "affectsGlobalScope": false + }, "../node_modules/@types/node/globals.d.ts": { "version": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", "signature": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", @@ -506,7 +1741,7 @@ "target": 2, "module": 99, "lib": [ - "lib.esnext.d.ts" + "lib.dom.d.ts" ], "strict": false, "moduleResolution": 2, @@ -753,8 +1988,1414 @@ "../node_modules/@types/node/stream.d.ts", "../node_modules/@types/node/zlib.d.ts" ], + "../node_modules/three/src/Three.Legacy.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/Three.d.ts": [ + "../node_modules/three/src/Three.Legacy.d.ts", + "../node_modules/three/src/animation/AnimationAction.d.ts", + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/animation/AnimationMixer.d.ts", + "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", + "../node_modules/three/src/animation/AnimationUtils.d.ts", + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/animation/PropertyBinding.d.ts", + "../node_modules/three/src/animation/PropertyMixer.d.ts", + "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts", + "../node_modules/three/src/audio/Audio.d.ts", + "../node_modules/three/src/audio/AudioAnalyser.d.ts", + "../node_modules/three/src/audio/AudioContext.d.ts", + "../node_modules/three/src/audio/AudioListener.d.ts", + "../node_modules/three/src/audio/PositionalAudio.d.ts", + "../node_modules/three/src/cameras/ArrayCamera.d.ts", + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/cameras/CubeCamera.d.ts", + "../node_modules/three/src/cameras/OrthographicCamera.d.ts", + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", + "../node_modules/three/src/cameras/StereoCamera.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Clock.d.ts", + "../node_modules/three/src/core/DirectGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Face3.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/InstancedBufferAttribute.d.ts", + "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", + "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts", + "../node_modules/three/src/core/InterleavedBuffer.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/core/Layers.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/core/Uniform.d.ts", + "../node_modules/three/src/extras/DataUtils.d.ts", + "../node_modules/three/src/extras/ImageUtils.d.ts", + "../node_modules/three/src/extras/PMREMGenerator.d.ts", + "../node_modules/three/src/extras/ShapeUtils.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/extras/core/CurvePath.d.ts", + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/extras/core/Path.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/extras/core/ShapePath.d.ts", + "../node_modules/three/src/extras/curves/Curves.d.ts", + "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts", + "../node_modules/three/src/geometries/Geometries.d.ts", + "../node_modules/three/src/helpers/ArrowHelper.d.ts", + "../node_modules/three/src/helpers/AxesHelper.d.ts", + "../node_modules/three/src/helpers/Box3Helper.d.ts", + "../node_modules/three/src/helpers/BoxHelper.d.ts", + "../node_modules/three/src/helpers/CameraHelper.d.ts", + "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts", + "../node_modules/three/src/helpers/GridHelper.d.ts", + "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts", + "../node_modules/three/src/helpers/PlaneHelper.d.ts", + "../node_modules/three/src/helpers/PointLightHelper.d.ts", + "../node_modules/three/src/helpers/PolarGridHelper.d.ts", + "../node_modules/three/src/helpers/SkeletonHelper.d.ts", + "../node_modules/three/src/helpers/SpotLightHelper.d.ts", + "../node_modules/three/src/lights/AmbientLight.d.ts", + "../node_modules/three/src/lights/AmbientLightProbe.d.ts", + "../node_modules/three/src/lights/DirectionalLight.d.ts", + "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", + "../node_modules/three/src/lights/HemisphereLight.d.ts", + "../node_modules/three/src/lights/HemisphereLightProbe.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/lights/LightProbe.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts", + "../node_modules/three/src/lights/PointLight.d.ts", + "../node_modules/three/src/lights/PointLightShadow.d.ts", + "../node_modules/three/src/lights/RectAreaLight.d.ts", + "../node_modules/three/src/lights/SpotLight.d.ts", + "../node_modules/three/src/lights/SpotLightShadow.d.ts", + "../node_modules/three/src/loaders/AnimationLoader.d.ts", + "../node_modules/three/src/loaders/AudioLoader.d.ts", + "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts", + "../node_modules/three/src/loaders/Cache.d.ts", + "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts", + "../node_modules/three/src/loaders/CubeTextureLoader.d.ts", + "../node_modules/three/src/loaders/DataTextureLoader.d.ts", + "../node_modules/three/src/loaders/FileLoader.d.ts", + "../node_modules/three/src/loaders/FontLoader.d.ts", + "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts", + "../node_modules/three/src/loaders/ImageLoader.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoaderUtils.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/loaders/MaterialLoader.d.ts", + "../node_modules/three/src/loaders/ObjectLoader.d.ts", + "../node_modules/three/src/loaders/TextureLoader.d.ts", + "../node_modules/three/src/materials/Materials.d.ts", + "../node_modules/three/src/math/Box2.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Cylindrical.d.ts", + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Frustum.d.ts", + "../node_modules/three/src/math/Interpolant.d.ts", + "../node_modules/three/src/math/Line3.d.ts", + "../node_modules/three/src/math/MathUtils.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Ray.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Spherical.d.ts", + "../node_modules/three/src/math/SphericalHarmonics3.d.ts", + "../node_modules/three/src/math/Triangle.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/objects/InstancedMesh.d.ts", + "../node_modules/three/src/objects/LOD.d.ts", + "../node_modules/three/src/objects/Line.d.ts", + "../node_modules/three/src/objects/LineLoop.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts", + "../node_modules/three/src/objects/Points.d.ts", + "../node_modules/three/src/objects/Skeleton.d.ts", + "../node_modules/three/src/objects/SkinnedMesh.d.ts", + "../node_modules/three/src/objects/Sprite.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/renderers/WebGL1Renderer.d.ts", + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/shaders/ShaderChunk.d.ts", + "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts", + "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts", + "../node_modules/three/src/renderers/shaders/UniformsUtils.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts", + "../node_modules/three/src/renderers/webxr/WebXRController.d.ts", + "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", + "../node_modules/three/src/scenes/Fog.d.ts", + "../node_modules/three/src/scenes/FogExp2.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts", + "../node_modules/three/src/textures/CanvasTexture.d.ts", + "../node_modules/three/src/textures/CompressedTexture.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts", + "../node_modules/three/src/textures/DataTexture.d.ts", + "../node_modules/three/src/textures/DataTexture2DArray.d.ts", + "../node_modules/three/src/textures/DataTexture3D.d.ts", + "../node_modules/three/src/textures/DepthTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts", + "../node_modules/three/src/textures/VideoTexture.d.ts" + ], + "../node_modules/three/src/animation/AnimationAction.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/animation/AnimationMixer.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/animation/AnimationClip.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/objects/Bone.d.ts" + ], + "../node_modules/three/src/animation/AnimationMixer.d.ts": [ + "../node_modules/three/src/animation/AnimationAction.d.ts", + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/animation/AnimationUtils.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts" + ], + "../node_modules/three/src/animation/KeyframeTrack.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts" + ], + "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts" + ], + "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/audio/Audio.d.ts": [ + "../node_modules/three/src/audio/AudioContext.d.ts", + "../node_modules/three/src/audio/AudioListener.d.ts", + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/audio/AudioAnalyser.d.ts": [ + "../node_modules/three/src/audio/Audio.d.ts" + ], + "../node_modules/three/src/audio/AudioListener.d.ts": [ + "../node_modules/three/src/audio/AudioContext.d.ts", + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/audio/PositionalAudio.d.ts": [ + "../node_modules/three/src/audio/Audio.d.ts", + "../node_modules/three/src/audio/AudioListener.d.ts" + ], + "../node_modules/three/src/cameras/ArrayCamera.d.ts": [ + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts" + ], + "../node_modules/three/src/cameras/Camera.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/cameras/CubeCamera.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/cameras/OrthographicCamera.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts" + ], + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts" + ], + "../node_modules/three/src/cameras/StereoCamera.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts" + ], + "../node_modules/three/src/core/BufferAttribute.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts" + ], + "../node_modules/three/src/core/BufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/DirectGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/core/DirectGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/math/Vector4.d.ts" + ], + "../node_modules/three/src/core/Face3.d.ts": [ + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/core/Geometry.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Face3.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts" + ], + "../node_modules/three/src/core/InstancedBufferAttribute.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/core/InstancedBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts": [ + "../node_modules/three/src/core/InterleavedBuffer.d.ts" + ], + "../node_modules/three/src/core/InterleavedBuffer.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts" + ], + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/InterleavedBuffer.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts" + ], + "../node_modules/three/src/core/Object3D.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Layers.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/core/Raycaster.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/Face3.d.ts", + "../node_modules/three/src/core/Layers.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Ray.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/ImageUtils.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/extras/PMREMGenerator.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/extras/core/Curve.d.ts": [ + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/core/CurvePath.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/core/Font.d.ts": [ + "../node_modules/three/src/extras/core/Shape.d.ts" + ], + "../node_modules/three/src/extras/core/Path.d.ts": [ + "../node_modules/three/src/extras/core/CurvePath.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/core/Shape.d.ts": [ + "../node_modules/three/src/extras/core/Path.d.ts", + "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", + "../node_modules/three/src/geometries/ShapeGeometry.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/core/ShapePath.d.ts": [ + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/ArcCurve.d.ts": [ + "../node_modules/three/src/extras/curves/EllipseCurve.d.ts" + ], + "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/curves/Curves.d.ts": [ + "../node_modules/three/src/extras/curves/ArcCurve.d.ts", + "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts", + "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts", + "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts", + "../node_modules/three/src/extras/curves/EllipseCurve.d.ts", + "../node_modules/three/src/extras/curves/LineCurve.d.ts", + "../node_modules/three/src/extras/curves/LineCurve3.d.ts", + "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts", + "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts", + "../node_modules/three/src/extras/curves/SplineCurve.d.ts" + ], + "../node_modules/three/src/extras/curves/EllipseCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/LineCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/LineCurve3.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/curves/SplineCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts" + ], + "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/BoxGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/CircleGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/ConeGeometry.d.ts": [ + "../node_modules/three/src/geometries/CylinderGeometry.d.ts" + ], + "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/CylinderGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/EdgesGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/Geometries.d.ts": [ + "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts", + "../node_modules/three/src/geometries/BoxGeometry.d.ts", + "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts", + "../node_modules/three/src/geometries/CircleGeometry.d.ts", + "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ConeGeometry.d.ts", + "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts", + "../node_modules/three/src/geometries/CylinderGeometry.d.ts", + "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts", + "../node_modules/three/src/geometries/EdgesGeometry.d.ts", + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", + "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts", + "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts", + "../node_modules/three/src/geometries/LatheGeometry.d.ts", + "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/OctahedronGeometry.d.ts", + "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ParametricGeometry.d.ts", + "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts", + "../node_modules/three/src/geometries/PlaneGeometry.d.ts", + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts", + "../node_modules/three/src/geometries/RingBufferGeometry.d.ts", + "../node_modules/three/src/geometries/RingGeometry.d.ts", + "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ShapeGeometry.d.ts", + "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts", + "../node_modules/three/src/geometries/SphereGeometry.d.ts", + "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts", + "../node_modules/three/src/geometries/TextBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TextGeometry.d.ts", + "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TorusGeometry.d.ts", + "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts", + "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TubeGeometry.d.ts", + "../node_modules/three/src/geometries/WireframeGeometry.d.ts" + ], + "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/geometries/LatheGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/OctahedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/ParametricGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/PlaneGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/RingBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/RingGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts" + ], + "../node_modules/three/src/geometries/ShapeGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts" + ], + "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/SphereGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/TextBufferGeometry.d.ts": [ + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TextGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/geometries/TextBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TorusGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/TubeGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/WireframeGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/helpers/ArrowHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/objects/Line.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts" + ], + "../node_modules/three/src/helpers/AxesHelper.d.ts": [ + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/Box3Helper.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/BoxHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/CameraHelper.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/DirectionalLight.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Line.d.ts" + ], + "../node_modules/three/src/helpers/GridHelper.d.ts": [ + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/HemisphereLight.d.ts", + "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts" + ], + "../node_modules/three/src/helpers/PlaneHelper.d.ts": [ + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/PointLightHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/PointLight.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts" + ], + "../node_modules/three/src/helpers/PolarGridHelper.d.ts": [ + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/SkeletonHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/SpotLightHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/lights/AmbientLight.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/AmbientLightProbe.d.ts": [ + "../node_modules/three/src/lights/LightProbe.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/DirectionalLight.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/lights/DirectionalLightShadow.d.ts": [ + "../node_modules/three/src/cameras/OrthographicCamera.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts" + ], + "../node_modules/three/src/lights/HemisphereLight.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/lights/HemisphereLightProbe.d.ts": [ + "../node_modules/three/src/lights/LightProbe.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/Light.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/LightProbe.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/SphericalHarmonics3.d.ts" + ], + "../node_modules/three/src/lights/LightShadow.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts" + ], + "../node_modules/three/src/lights/PointLight.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/lights/PointLightShadow.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/PointLightShadow.d.ts": [ + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts" + ], + "../node_modules/three/src/lights/RectAreaLight.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/SpotLight.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/lights/SpotLightShadow.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/lights/SpotLightShadow.d.ts": [ + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts" + ], + "../node_modules/three/src/loaders/AnimationLoader.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/AudioLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/textures/CompressedTexture.d.ts" + ], + "../node_modules/three/src/loaders/CubeTextureLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts" + ], + "../node_modules/three/src/loaders/DataTextureLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/textures/DataTexture.d.ts" + ], + "../node_modules/three/src/loaders/FileLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/FontLoader.d.ts": [ + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/ImageLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/Loader.d.ts": [ + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/LoaderUtils.d.ts": [ + "../node_modules/three/src/polyfills.d.ts" + ], + "../node_modules/three/src/loaders/LoadingManager.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts" + ], + "../node_modules/three/src/loaders/MaterialLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/loaders/ObjectLoader.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/loaders/TextureLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/LineBasicMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/materials/LineDashedMaterial.d.ts": [ + "../node_modules/three/src/materials/LineBasicMaterial.d.ts" + ], + "../node_modules/three/src/materials/Material.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts" + ], + "../node_modules/three/src/materials/Materials.d.ts": [ + "../node_modules/three/src/materials/LineBasicMaterial.d.ts", + "../node_modules/three/src/materials/LineDashedMaterial.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", + "../node_modules/three/src/materials/MeshDepthMaterial.d.ts", + "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts", + "../node_modules/three/src/materials/MeshLambertMaterial.d.ts", + "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts", + "../node_modules/three/src/materials/MeshNormalMaterial.d.ts", + "../node_modules/three/src/materials/MeshPhongMaterial.d.ts", + "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts", + "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", + "../node_modules/three/src/materials/MeshToonMaterial.d.ts", + "../node_modules/three/src/materials/PointsMaterial.d.ts", + "../node_modules/three/src/materials/RawShaderMaterial.d.ts", + "../node_modules/three/src/materials/ShaderMaterial.d.ts", + "../node_modules/three/src/materials/ShadowMaterial.d.ts", + "../node_modules/three/src/materials/SpriteMaterial.d.ts" + ], + "../node_modules/three/src/materials/MeshBasicMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshDepthMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshLambertMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshNormalMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshPhongMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts": [ + "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshStandardMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshToonMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/PointsMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/RawShaderMaterial.d.ts": [ + "../node_modules/three/src/materials/ShaderMaterial.d.ts" + ], + "../node_modules/three/src/materials/ShaderMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts" + ], + "../node_modules/three/src/materials/ShadowMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/materials/SpriteMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/math/Box2.d.ts": [ + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/math/Box3.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Triangle.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Color.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts" + ], + "../node_modules/three/src/math/Cylindrical.d.ts": [ + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Euler.d.ts": [ + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Frustum.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/objects/Sprite.d.ts" + ], + "../node_modules/three/src/math/Line3.d.ts": [ + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/MathUtils.d.ts": [ + "../node_modules/three/src/math/Quaternion.d.ts" + ], + "../node_modules/three/src/math/Matrix3.d.ts": [ + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Matrix4.d.ts": [ + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Plane.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Line3.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Quaternion.d.ts": [ + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Ray.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Sphere.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Spherical.d.ts": [ + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/SphericalHarmonics3.d.ts": [ + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Triangle.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Vector2.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts" + ], + "../node_modules/three/src/math/Vector3.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/math/Cylindrical.d.ts", + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Spherical.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/math/Vector4.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts": [ + "../node_modules/three/src/math/Interpolant.d.ts" + ], + "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts": [ + "../node_modules/three/src/math/Interpolant.d.ts" + ], + "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts": [ + "../node_modules/three/src/math/Interpolant.d.ts" + ], + "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": [ + "../node_modules/three/src/math/Interpolant.d.ts" + ], + "../node_modules/three/src/objects/Bone.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/objects/Group.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/objects/InstancedMesh.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts" + ], + "../node_modules/three/src/objects/LOD.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts" + ], + "../node_modules/three/src/objects/Line.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Material.d.ts" + ], + "../node_modules/three/src/objects/LineLoop.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/objects/Line.d.ts" + ], + "../node_modules/three/src/objects/LineSegments.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/objects/Line.d.ts" + ], + "../node_modules/three/src/objects/Mesh.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Material.d.ts" + ], + "../node_modules/three/src/objects/Points.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Material.d.ts" + ], + "../node_modules/three/src/objects/Skeleton.d.ts": [ + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/textures/DataTexture.d.ts" + ], + "../node_modules/three/src/objects/SkinnedMesh.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts", + "../node_modules/three/src/objects/Skeleton.d.ts" + ], + "../node_modules/three/src/objects/Sprite.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Materials.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/renderers/WebGL1Renderer.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderer.d.ts" + ], + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts" + ], + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/textures/DepthTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/renderers/WebGLRenderer.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts", + "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts": [ + "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderer.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLUtils.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts" + ], + "../node_modules/three/src/renderers/webxr/WebXRController.d.ts": [ + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts" + ], + "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts" + ], + "../node_modules/three/src/scenes/Fog.d.ts": [ + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/scenes/FogExp2.d.ts": [ + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/scenes/Fog.d.ts" + ], + "../node_modules/three/src/scenes/Scene.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/scenes/Fog.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/CanvasTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/CompressedTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/CubeTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/DataTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/DataTexture2DArray.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/DataTexture3D.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/DepthTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/Texture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/textures/VideoTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "./src/OrbitControls.ts": [ + "../node_modules/three/src/Three.d.ts" + ], + "./src/globaltypes.ts": [ + "./src/constants.ts" + ], "./src/noise.ts": [ "./src/simplex-noise.ts" + ], + "./src/spatial-hash-grid.ts": [ + "./src/math.ts" + ], + "./src/terrain-height.ts": [ + "./src/noise.ts", + "./src/terrain-constants.ts" ] }, "exportedModulesMap": { @@ -988,12 +3629,1412 @@ "../node_modules/@types/node/zlib.d.ts": [ "../node_modules/@types/node/stream.d.ts", "../node_modules/@types/node/zlib.d.ts" + ], + "../node_modules/three/src/Three.Legacy.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/Three.d.ts": [ + "../node_modules/three/src/Three.Legacy.d.ts", + "../node_modules/three/src/animation/AnimationAction.d.ts", + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/animation/AnimationMixer.d.ts", + "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", + "../node_modules/three/src/animation/AnimationUtils.d.ts", + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/animation/PropertyBinding.d.ts", + "../node_modules/three/src/animation/PropertyMixer.d.ts", + "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts", + "../node_modules/three/src/audio/Audio.d.ts", + "../node_modules/three/src/audio/AudioAnalyser.d.ts", + "../node_modules/three/src/audio/AudioContext.d.ts", + "../node_modules/three/src/audio/AudioListener.d.ts", + "../node_modules/three/src/audio/PositionalAudio.d.ts", + "../node_modules/three/src/cameras/ArrayCamera.d.ts", + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/cameras/CubeCamera.d.ts", + "../node_modules/three/src/cameras/OrthographicCamera.d.ts", + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", + "../node_modules/three/src/cameras/StereoCamera.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Clock.d.ts", + "../node_modules/three/src/core/DirectGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Face3.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/InstancedBufferAttribute.d.ts", + "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", + "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts", + "../node_modules/three/src/core/InterleavedBuffer.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/core/Layers.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/core/Uniform.d.ts", + "../node_modules/three/src/extras/DataUtils.d.ts", + "../node_modules/three/src/extras/ImageUtils.d.ts", + "../node_modules/three/src/extras/PMREMGenerator.d.ts", + "../node_modules/three/src/extras/ShapeUtils.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/extras/core/CurvePath.d.ts", + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/extras/core/Path.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/extras/core/ShapePath.d.ts", + "../node_modules/three/src/extras/curves/Curves.d.ts", + "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts", + "../node_modules/three/src/geometries/Geometries.d.ts", + "../node_modules/three/src/helpers/ArrowHelper.d.ts", + "../node_modules/three/src/helpers/AxesHelper.d.ts", + "../node_modules/three/src/helpers/Box3Helper.d.ts", + "../node_modules/three/src/helpers/BoxHelper.d.ts", + "../node_modules/three/src/helpers/CameraHelper.d.ts", + "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts", + "../node_modules/three/src/helpers/GridHelper.d.ts", + "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts", + "../node_modules/three/src/helpers/PlaneHelper.d.ts", + "../node_modules/three/src/helpers/PointLightHelper.d.ts", + "../node_modules/three/src/helpers/PolarGridHelper.d.ts", + "../node_modules/three/src/helpers/SkeletonHelper.d.ts", + "../node_modules/three/src/helpers/SpotLightHelper.d.ts", + "../node_modules/three/src/lights/AmbientLight.d.ts", + "../node_modules/three/src/lights/AmbientLightProbe.d.ts", + "../node_modules/three/src/lights/DirectionalLight.d.ts", + "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", + "../node_modules/three/src/lights/HemisphereLight.d.ts", + "../node_modules/three/src/lights/HemisphereLightProbe.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/lights/LightProbe.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts", + "../node_modules/three/src/lights/PointLight.d.ts", + "../node_modules/three/src/lights/PointLightShadow.d.ts", + "../node_modules/three/src/lights/RectAreaLight.d.ts", + "../node_modules/three/src/lights/SpotLight.d.ts", + "../node_modules/three/src/lights/SpotLightShadow.d.ts", + "../node_modules/three/src/loaders/AnimationLoader.d.ts", + "../node_modules/three/src/loaders/AudioLoader.d.ts", + "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts", + "../node_modules/three/src/loaders/Cache.d.ts", + "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts", + "../node_modules/three/src/loaders/CubeTextureLoader.d.ts", + "../node_modules/three/src/loaders/DataTextureLoader.d.ts", + "../node_modules/three/src/loaders/FileLoader.d.ts", + "../node_modules/three/src/loaders/FontLoader.d.ts", + "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts", + "../node_modules/three/src/loaders/ImageLoader.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoaderUtils.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/loaders/MaterialLoader.d.ts", + "../node_modules/three/src/loaders/ObjectLoader.d.ts", + "../node_modules/three/src/loaders/TextureLoader.d.ts", + "../node_modules/three/src/materials/Materials.d.ts", + "../node_modules/three/src/math/Box2.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Cylindrical.d.ts", + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Frustum.d.ts", + "../node_modules/three/src/math/Interpolant.d.ts", + "../node_modules/three/src/math/Line3.d.ts", + "../node_modules/three/src/math/MathUtils.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Ray.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Spherical.d.ts", + "../node_modules/three/src/math/SphericalHarmonics3.d.ts", + "../node_modules/three/src/math/Triangle.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/objects/InstancedMesh.d.ts", + "../node_modules/three/src/objects/LOD.d.ts", + "../node_modules/three/src/objects/Line.d.ts", + "../node_modules/three/src/objects/LineLoop.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts", + "../node_modules/three/src/objects/Points.d.ts", + "../node_modules/three/src/objects/Skeleton.d.ts", + "../node_modules/three/src/objects/SkinnedMesh.d.ts", + "../node_modules/three/src/objects/Sprite.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/renderers/WebGL1Renderer.d.ts", + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/shaders/ShaderChunk.d.ts", + "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts", + "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts", + "../node_modules/three/src/renderers/shaders/UniformsUtils.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts", + "../node_modules/three/src/renderers/webxr/WebXRController.d.ts", + "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", + "../node_modules/three/src/scenes/Fog.d.ts", + "../node_modules/three/src/scenes/FogExp2.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts", + "../node_modules/three/src/textures/CanvasTexture.d.ts", + "../node_modules/three/src/textures/CompressedTexture.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts", + "../node_modules/three/src/textures/DataTexture.d.ts", + "../node_modules/three/src/textures/DataTexture2DArray.d.ts", + "../node_modules/three/src/textures/DataTexture3D.d.ts", + "../node_modules/three/src/textures/DepthTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts", + "../node_modules/three/src/textures/VideoTexture.d.ts" + ], + "../node_modules/three/src/animation/AnimationAction.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/animation/AnimationMixer.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/animation/AnimationClip.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/objects/Bone.d.ts" + ], + "../node_modules/three/src/animation/AnimationMixer.d.ts": [ + "../node_modules/three/src/animation/AnimationAction.d.ts", + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/animation/AnimationUtils.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts" + ], + "../node_modules/three/src/animation/KeyframeTrack.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts" + ], + "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts" + ], + "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts": [ + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/constants.d.ts" + ], + "../node_modules/three/src/audio/Audio.d.ts": [ + "../node_modules/three/src/audio/AudioContext.d.ts", + "../node_modules/three/src/audio/AudioListener.d.ts", + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/audio/AudioAnalyser.d.ts": [ + "../node_modules/three/src/audio/Audio.d.ts" + ], + "../node_modules/three/src/audio/AudioListener.d.ts": [ + "../node_modules/three/src/audio/AudioContext.d.ts", + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/audio/PositionalAudio.d.ts": [ + "../node_modules/three/src/audio/Audio.d.ts", + "../node_modules/three/src/audio/AudioListener.d.ts" + ], + "../node_modules/three/src/cameras/ArrayCamera.d.ts": [ + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts" + ], + "../node_modules/three/src/cameras/Camera.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/cameras/CubeCamera.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/cameras/OrthographicCamera.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts" + ], + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts" + ], + "../node_modules/three/src/cameras/StereoCamera.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts" + ], + "../node_modules/three/src/core/BufferAttribute.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts" + ], + "../node_modules/three/src/core/BufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/DirectGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/core/DirectGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/math/Vector4.d.ts" + ], + "../node_modules/three/src/core/Face3.d.ts": [ + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/core/Geometry.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Face3.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts" + ], + "../node_modules/three/src/core/InstancedBufferAttribute.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/core/InstancedBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts": [ + "../node_modules/three/src/core/InterleavedBuffer.d.ts" + ], + "../node_modules/three/src/core/InterleavedBuffer.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts" + ], + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/InterleavedBuffer.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts" + ], + "../node_modules/three/src/core/Object3D.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Layers.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/core/Raycaster.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/Face3.d.ts", + "../node_modules/three/src/core/Layers.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Ray.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/ImageUtils.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/extras/PMREMGenerator.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/extras/core/Curve.d.ts": [ + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/core/CurvePath.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/core/Font.d.ts": [ + "../node_modules/three/src/extras/core/Shape.d.ts" + ], + "../node_modules/three/src/extras/core/Path.d.ts": [ + "../node_modules/three/src/extras/core/CurvePath.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/core/Shape.d.ts": [ + "../node_modules/three/src/extras/core/Path.d.ts", + "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", + "../node_modules/three/src/geometries/ShapeGeometry.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/core/ShapePath.d.ts": [ + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/ArcCurve.d.ts": [ + "../node_modules/three/src/extras/curves/EllipseCurve.d.ts" + ], + "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/curves/Curves.d.ts": [ + "../node_modules/three/src/extras/curves/ArcCurve.d.ts", + "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts", + "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts", + "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts", + "../node_modules/three/src/extras/curves/EllipseCurve.d.ts", + "../node_modules/three/src/extras/curves/LineCurve.d.ts", + "../node_modules/three/src/extras/curves/LineCurve3.d.ts", + "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts", + "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts", + "../node_modules/three/src/extras/curves/SplineCurve.d.ts" + ], + "../node_modules/three/src/extras/curves/EllipseCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/LineCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/LineCurve3.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/extras/curves/SplineCurve.d.ts": [ + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts" + ], + "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/BoxGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/CircleGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/ConeGeometry.d.ts": [ + "../node_modules/three/src/geometries/CylinderGeometry.d.ts" + ], + "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/CylinderGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/EdgesGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/Geometries.d.ts": [ + "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts", + "../node_modules/three/src/geometries/BoxGeometry.d.ts", + "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts", + "../node_modules/three/src/geometries/CircleGeometry.d.ts", + "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ConeGeometry.d.ts", + "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts", + "../node_modules/three/src/geometries/CylinderGeometry.d.ts", + "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts", + "../node_modules/three/src/geometries/EdgesGeometry.d.ts", + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", + "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts", + "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts", + "../node_modules/three/src/geometries/LatheGeometry.d.ts", + "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/OctahedronGeometry.d.ts", + "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ParametricGeometry.d.ts", + "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts", + "../node_modules/three/src/geometries/PlaneGeometry.d.ts", + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts", + "../node_modules/three/src/geometries/RingBufferGeometry.d.ts", + "../node_modules/three/src/geometries/RingGeometry.d.ts", + "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ShapeGeometry.d.ts", + "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts", + "../node_modules/three/src/geometries/SphereGeometry.d.ts", + "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts", + "../node_modules/three/src/geometries/TextBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TextGeometry.d.ts", + "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TorusGeometry.d.ts", + "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts", + "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TubeGeometry.d.ts", + "../node_modules/three/src/geometries/WireframeGeometry.d.ts" + ], + "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/geometries/LatheGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/OctahedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/ParametricGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/PlaneGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/RingBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/RingGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts" + ], + "../node_modules/three/src/geometries/ShapeGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts" + ], + "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/SphereGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts": [ + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/TextBufferGeometry.d.ts": [ + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TextGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/geometries/TextBufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TorusGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts" + ], + "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/TubeGeometry.d.ts": [ + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/geometries/WireframeGeometry.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts" + ], + "../node_modules/three/src/helpers/ArrowHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/objects/Line.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts" + ], + "../node_modules/three/src/helpers/AxesHelper.d.ts": [ + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/Box3Helper.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/BoxHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/CameraHelper.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/DirectionalLight.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Line.d.ts" + ], + "../node_modules/three/src/helpers/GridHelper.d.ts": [ + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/HemisphereLight.d.ts", + "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts" + ], + "../node_modules/three/src/helpers/PlaneHelper.d.ts": [ + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/PointLightHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/PointLight.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts" + ], + "../node_modules/three/src/helpers/PolarGridHelper.d.ts": [ + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/SkeletonHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/helpers/SpotLightHelper.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts" + ], + "../node_modules/three/src/lights/AmbientLight.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/AmbientLightProbe.d.ts": [ + "../node_modules/three/src/lights/LightProbe.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/DirectionalLight.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/lights/DirectionalLightShadow.d.ts": [ + "../node_modules/three/src/cameras/OrthographicCamera.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts" + ], + "../node_modules/three/src/lights/HemisphereLight.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/lights/HemisphereLightProbe.d.ts": [ + "../node_modules/three/src/lights/LightProbe.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/Light.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/LightProbe.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/SphericalHarmonics3.d.ts" + ], + "../node_modules/three/src/lights/LightShadow.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts" + ], + "../node_modules/three/src/lights/PointLight.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/lights/PointLightShadow.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/PointLightShadow.d.ts": [ + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts" + ], + "../node_modules/three/src/lights/RectAreaLight.d.ts": [ + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/lights/SpotLight.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/lights/SpotLightShadow.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/lights/SpotLightShadow.d.ts": [ + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts" + ], + "../node_modules/three/src/loaders/AnimationLoader.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/AudioLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/textures/CompressedTexture.d.ts" + ], + "../node_modules/three/src/loaders/CubeTextureLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts" + ], + "../node_modules/three/src/loaders/DataTextureLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/textures/DataTexture.d.ts" + ], + "../node_modules/three/src/loaders/FileLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/FontLoader.d.ts": [ + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/ImageLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/Loader.d.ts": [ + "../node_modules/three/src/loaders/LoadingManager.d.ts" + ], + "../node_modules/three/src/loaders/LoaderUtils.d.ts": [ + "../node_modules/three/src/polyfills.d.ts" + ], + "../node_modules/three/src/loaders/LoadingManager.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts" + ], + "../node_modules/three/src/loaders/MaterialLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/loaders/ObjectLoader.d.ts": [ + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/loaders/TextureLoader.d.ts": [ + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/LineBasicMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/materials/LineDashedMaterial.d.ts": [ + "../node_modules/three/src/materials/LineBasicMaterial.d.ts" + ], + "../node_modules/three/src/materials/Material.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts" + ], + "../node_modules/three/src/materials/Materials.d.ts": [ + "../node_modules/three/src/materials/LineBasicMaterial.d.ts", + "../node_modules/three/src/materials/LineDashedMaterial.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", + "../node_modules/three/src/materials/MeshDepthMaterial.d.ts", + "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts", + "../node_modules/three/src/materials/MeshLambertMaterial.d.ts", + "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts", + "../node_modules/three/src/materials/MeshNormalMaterial.d.ts", + "../node_modules/three/src/materials/MeshPhongMaterial.d.ts", + "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts", + "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", + "../node_modules/three/src/materials/MeshToonMaterial.d.ts", + "../node_modules/three/src/materials/PointsMaterial.d.ts", + "../node_modules/three/src/materials/RawShaderMaterial.d.ts", + "../node_modules/three/src/materials/ShaderMaterial.d.ts", + "../node_modules/three/src/materials/ShadowMaterial.d.ts", + "../node_modules/three/src/materials/SpriteMaterial.d.ts" + ], + "../node_modules/three/src/materials/MeshBasicMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshDepthMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshLambertMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshNormalMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshPhongMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts": [ + "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshStandardMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/MeshToonMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/PointsMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/materials/RawShaderMaterial.d.ts": [ + "../node_modules/three/src/materials/ShaderMaterial.d.ts" + ], + "../node_modules/three/src/materials/ShaderMaterial.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts" + ], + "../node_modules/three/src/materials/ShadowMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/materials/SpriteMaterial.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/math/Box2.d.ts": [ + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/math/Box3.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Triangle.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Color.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts" + ], + "../node_modules/three/src/math/Cylindrical.d.ts": [ + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Euler.d.ts": [ + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Frustum.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/objects/Sprite.d.ts" + ], + "../node_modules/three/src/math/Line3.d.ts": [ + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/MathUtils.d.ts": [ + "../node_modules/three/src/math/Quaternion.d.ts" + ], + "../node_modules/three/src/math/Matrix3.d.ts": [ + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Matrix4.d.ts": [ + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Plane.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Line3.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Quaternion.d.ts": [ + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Ray.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Sphere.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Spherical.d.ts": [ + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/SphericalHarmonics3.d.ts": [ + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Triangle.d.ts": [ + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts" + ], + "../node_modules/three/src/math/Vector2.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts" + ], + "../node_modules/three/src/math/Vector3.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/math/Cylindrical.d.ts", + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Spherical.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/math/Vector4.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts": [ + "../node_modules/three/src/math/Interpolant.d.ts" + ], + "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts": [ + "../node_modules/three/src/math/Interpolant.d.ts" + ], + "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts": [ + "../node_modules/three/src/math/Interpolant.d.ts" + ], + "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": [ + "../node_modules/three/src/math/Interpolant.d.ts" + ], + "../node_modules/three/src/objects/Bone.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/objects/Group.d.ts": [ + "../node_modules/three/src/core/Object3D.d.ts" + ], + "../node_modules/three/src/objects/InstancedMesh.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts" + ], + "../node_modules/three/src/objects/LOD.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts" + ], + "../node_modules/three/src/objects/Line.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Material.d.ts" + ], + "../node_modules/three/src/objects/LineLoop.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/objects/Line.d.ts" + ], + "../node_modules/three/src/objects/LineSegments.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/objects/Line.d.ts" + ], + "../node_modules/three/src/objects/Mesh.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Material.d.ts" + ], + "../node_modules/three/src/objects/Points.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Material.d.ts" + ], + "../node_modules/three/src/objects/Skeleton.d.ts": [ + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/textures/DataTexture.d.ts" + ], + "../node_modules/three/src/objects/SkinnedMesh.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts", + "../node_modules/three/src/objects/Skeleton.d.ts" + ], + "../node_modules/three/src/objects/Sprite.d.ts": [ + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/materials/Materials.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/renderers/WebGL1Renderer.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderer.d.ts" + ], + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts" + ], + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/textures/DepthTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/renderers/WebGLRenderer.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts", + "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts": [ + "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderer.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts": [ + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts": [ + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts": [ + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLUtils.d.ts" + ], + "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts": [ + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts" + ], + "../node_modules/three/src/renderers/webxr/WebXRController.d.ts": [ + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts" + ], + "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts" + ], + "../node_modules/three/src/scenes/Fog.d.ts": [ + "../node_modules/three/src/math/Color.d.ts" + ], + "../node_modules/three/src/scenes/FogExp2.d.ts": [ + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/scenes/Fog.d.ts" + ], + "../node_modules/three/src/scenes/Scene.d.ts": [ + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/scenes/Fog.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/CanvasTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/CompressedTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/CubeTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/DataTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/DataTexture2DArray.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/DataTexture3D.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/DepthTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "../node_modules/three/src/textures/Texture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Vector2.d.ts" + ], + "../node_modules/three/src/textures/VideoTexture.d.ts": [ + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/textures/Texture.d.ts" + ], + "./src/globaltypes.ts": [ + "./src/constants.ts" + ], + "./src/terrain-height.ts": [ + "./src/noise.ts" ] }, "semanticDiagnosticsPerFile": [ "../node_modules/@types/component-emitter/index.d.ts", "../node_modules/@types/cookie/index.d.ts", "../node_modules/@types/cors/index.d.ts", + "../node_modules/@types/minimatch/index.d.ts", "../node_modules/@types/node/assert.d.ts", "../node_modules/@types/node/async_hooks.d.ts", "../node_modules/@types/node/base.d.ts", @@ -1040,6 +5081,263 @@ "../node_modules/@types/node/wasi.d.ts", "../node_modules/@types/node/worker_threads.d.ts", "../node_modules/@types/node/zlib.d.ts", + "../node_modules/three/src/Three.Legacy.d.ts", + "../node_modules/three/src/Three.d.ts", + "../node_modules/three/src/animation/AnimationAction.d.ts", + "../node_modules/three/src/animation/AnimationClip.d.ts", + "../node_modules/three/src/animation/AnimationMixer.d.ts", + "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", + "../node_modules/three/src/animation/AnimationUtils.d.ts", + "../node_modules/three/src/animation/KeyframeTrack.d.ts", + "../node_modules/three/src/animation/PropertyBinding.d.ts", + "../node_modules/three/src/animation/PropertyMixer.d.ts", + "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts", + "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts", + "../node_modules/three/src/audio/Audio.d.ts", + "../node_modules/three/src/audio/AudioAnalyser.d.ts", + "../node_modules/three/src/audio/AudioContext.d.ts", + "../node_modules/three/src/audio/AudioListener.d.ts", + "../node_modules/three/src/audio/PositionalAudio.d.ts", + "../node_modules/three/src/cameras/ArrayCamera.d.ts", + "../node_modules/three/src/cameras/Camera.d.ts", + "../node_modules/three/src/cameras/CubeCamera.d.ts", + "../node_modules/three/src/cameras/OrthographicCamera.d.ts", + "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", + "../node_modules/three/src/cameras/StereoCamera.d.ts", + "../node_modules/three/src/constants.d.ts", + "../node_modules/three/src/core/BufferAttribute.d.ts", + "../node_modules/three/src/core/BufferGeometry.d.ts", + "../node_modules/three/src/core/Clock.d.ts", + "../node_modules/three/src/core/DirectGeometry.d.ts", + "../node_modules/three/src/core/EventDispatcher.d.ts", + "../node_modules/three/src/core/Face3.d.ts", + "../node_modules/three/src/core/Geometry.d.ts", + "../node_modules/three/src/core/InstancedBufferAttribute.d.ts", + "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", + "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts", + "../node_modules/three/src/core/InterleavedBuffer.d.ts", + "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", + "../node_modules/three/src/core/Layers.d.ts", + "../node_modules/three/src/core/Object3D.d.ts", + "../node_modules/three/src/core/Raycaster.d.ts", + "../node_modules/three/src/core/Uniform.d.ts", + "../node_modules/three/src/extras/DataUtils.d.ts", + "../node_modules/three/src/extras/ImageUtils.d.ts", + "../node_modules/three/src/extras/PMREMGenerator.d.ts", + "../node_modules/three/src/extras/ShapeUtils.d.ts", + "../node_modules/three/src/extras/core/Curve.d.ts", + "../node_modules/three/src/extras/core/CurvePath.d.ts", + "../node_modules/three/src/extras/core/Font.d.ts", + "../node_modules/three/src/extras/core/Path.d.ts", + "../node_modules/three/src/extras/core/Shape.d.ts", + "../node_modules/three/src/extras/core/ShapePath.d.ts", + "../node_modules/three/src/extras/curves/ArcCurve.d.ts", + "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts", + "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts", + "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts", + "../node_modules/three/src/extras/curves/Curves.d.ts", + "../node_modules/three/src/extras/curves/EllipseCurve.d.ts", + "../node_modules/three/src/extras/curves/LineCurve.d.ts", + "../node_modules/three/src/extras/curves/LineCurve3.d.ts", + "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts", + "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts", + "../node_modules/three/src/extras/curves/SplineCurve.d.ts", + "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts", + "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts", + "../node_modules/three/src/geometries/BoxGeometry.d.ts", + "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts", + "../node_modules/three/src/geometries/CircleGeometry.d.ts", + "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ConeGeometry.d.ts", + "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts", + "../node_modules/three/src/geometries/CylinderGeometry.d.ts", + "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts", + "../node_modules/three/src/geometries/EdgesGeometry.d.ts", + "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", + "../node_modules/three/src/geometries/Geometries.d.ts", + "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts", + "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts", + "../node_modules/three/src/geometries/LatheGeometry.d.ts", + "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/OctahedronGeometry.d.ts", + "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ParametricGeometry.d.ts", + "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts", + "../node_modules/three/src/geometries/PlaneGeometry.d.ts", + "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts", + "../node_modules/three/src/geometries/RingBufferGeometry.d.ts", + "../node_modules/three/src/geometries/RingGeometry.d.ts", + "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/ShapeGeometry.d.ts", + "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts", + "../node_modules/three/src/geometries/SphereGeometry.d.ts", + "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts", + "../node_modules/three/src/geometries/TextBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TextGeometry.d.ts", + "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TorusGeometry.d.ts", + "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts", + "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts", + "../node_modules/three/src/geometries/TubeGeometry.d.ts", + "../node_modules/three/src/geometries/WireframeGeometry.d.ts", + "../node_modules/three/src/helpers/ArrowHelper.d.ts", + "../node_modules/three/src/helpers/AxesHelper.d.ts", + "../node_modules/three/src/helpers/Box3Helper.d.ts", + "../node_modules/three/src/helpers/BoxHelper.d.ts", + "../node_modules/three/src/helpers/CameraHelper.d.ts", + "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts", + "../node_modules/three/src/helpers/GridHelper.d.ts", + "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts", + "../node_modules/three/src/helpers/PlaneHelper.d.ts", + "../node_modules/three/src/helpers/PointLightHelper.d.ts", + "../node_modules/three/src/helpers/PolarGridHelper.d.ts", + "../node_modules/three/src/helpers/SkeletonHelper.d.ts", + "../node_modules/three/src/helpers/SpotLightHelper.d.ts", + "../node_modules/three/src/lights/AmbientLight.d.ts", + "../node_modules/three/src/lights/AmbientLightProbe.d.ts", + "../node_modules/three/src/lights/DirectionalLight.d.ts", + "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", + "../node_modules/three/src/lights/HemisphereLight.d.ts", + "../node_modules/three/src/lights/HemisphereLightProbe.d.ts", + "../node_modules/three/src/lights/Light.d.ts", + "../node_modules/three/src/lights/LightProbe.d.ts", + "../node_modules/three/src/lights/LightShadow.d.ts", + "../node_modules/three/src/lights/PointLight.d.ts", + "../node_modules/three/src/lights/PointLightShadow.d.ts", + "../node_modules/three/src/lights/RectAreaLight.d.ts", + "../node_modules/three/src/lights/SpotLight.d.ts", + "../node_modules/three/src/lights/SpotLightShadow.d.ts", + "../node_modules/three/src/loaders/AnimationLoader.d.ts", + "../node_modules/three/src/loaders/AudioLoader.d.ts", + "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts", + "../node_modules/three/src/loaders/Cache.d.ts", + "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts", + "../node_modules/three/src/loaders/CubeTextureLoader.d.ts", + "../node_modules/three/src/loaders/DataTextureLoader.d.ts", + "../node_modules/three/src/loaders/FileLoader.d.ts", + "../node_modules/three/src/loaders/FontLoader.d.ts", + "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts", + "../node_modules/three/src/loaders/ImageLoader.d.ts", + "../node_modules/three/src/loaders/Loader.d.ts", + "../node_modules/three/src/loaders/LoaderUtils.d.ts", + "../node_modules/three/src/loaders/LoadingManager.d.ts", + "../node_modules/three/src/loaders/MaterialLoader.d.ts", + "../node_modules/three/src/loaders/ObjectLoader.d.ts", + "../node_modules/three/src/loaders/TextureLoader.d.ts", + "../node_modules/three/src/materials/LineBasicMaterial.d.ts", + "../node_modules/three/src/materials/LineDashedMaterial.d.ts", + "../node_modules/three/src/materials/Material.d.ts", + "../node_modules/three/src/materials/Materials.d.ts", + "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", + "../node_modules/three/src/materials/MeshDepthMaterial.d.ts", + "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts", + "../node_modules/three/src/materials/MeshLambertMaterial.d.ts", + "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts", + "../node_modules/three/src/materials/MeshNormalMaterial.d.ts", + "../node_modules/three/src/materials/MeshPhongMaterial.d.ts", + "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts", + "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", + "../node_modules/three/src/materials/MeshToonMaterial.d.ts", + "../node_modules/three/src/materials/PointsMaterial.d.ts", + "../node_modules/three/src/materials/RawShaderMaterial.d.ts", + "../node_modules/three/src/materials/ShaderMaterial.d.ts", + "../node_modules/three/src/materials/ShadowMaterial.d.ts", + "../node_modules/three/src/materials/SpriteMaterial.d.ts", + "../node_modules/three/src/math/Box2.d.ts", + "../node_modules/three/src/math/Box3.d.ts", + "../node_modules/three/src/math/Color.d.ts", + "../node_modules/three/src/math/Cylindrical.d.ts", + "../node_modules/three/src/math/Euler.d.ts", + "../node_modules/three/src/math/Frustum.d.ts", + "../node_modules/three/src/math/Interpolant.d.ts", + "../node_modules/three/src/math/Line3.d.ts", + "../node_modules/three/src/math/MathUtils.d.ts", + "../node_modules/three/src/math/Matrix3.d.ts", + "../node_modules/three/src/math/Matrix4.d.ts", + "../node_modules/three/src/math/Plane.d.ts", + "../node_modules/three/src/math/Quaternion.d.ts", + "../node_modules/three/src/math/Ray.d.ts", + "../node_modules/three/src/math/Sphere.d.ts", + "../node_modules/three/src/math/Spherical.d.ts", + "../node_modules/three/src/math/SphericalHarmonics3.d.ts", + "../node_modules/three/src/math/Triangle.d.ts", + "../node_modules/three/src/math/Vector2.d.ts", + "../node_modules/three/src/math/Vector3.d.ts", + "../node_modules/three/src/math/Vector4.d.ts", + "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts", + "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", + "../node_modules/three/src/objects/Bone.d.ts", + "../node_modules/three/src/objects/Group.d.ts", + "../node_modules/three/src/objects/InstancedMesh.d.ts", + "../node_modules/three/src/objects/LOD.d.ts", + "../node_modules/three/src/objects/Line.d.ts", + "../node_modules/three/src/objects/LineLoop.d.ts", + "../node_modules/three/src/objects/LineSegments.d.ts", + "../node_modules/three/src/objects/Mesh.d.ts", + "../node_modules/three/src/objects/Points.d.ts", + "../node_modules/three/src/objects/Skeleton.d.ts", + "../node_modules/three/src/objects/SkinnedMesh.d.ts", + "../node_modules/three/src/objects/Sprite.d.ts", + "../node_modules/three/src/polyfills.d.ts", + "../node_modules/three/src/renderers/WebGL1Renderer.d.ts", + "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", + "../node_modules/three/src/renderers/WebGLRenderer.d.ts", + "../node_modules/three/src/renderers/shaders/ShaderChunk.d.ts", + "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts", + "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts", + "../node_modules/three/src/renderers/shaders/UniformsUtils.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts", + "../node_modules/three/src/renderers/webgl/WebGLUtils.d.ts", + "../node_modules/three/src/renderers/webxr/WebXR.d.ts", + "../node_modules/three/src/renderers/webxr/WebXRController.d.ts", + "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", + "../node_modules/three/src/scenes/Fog.d.ts", + "../node_modules/three/src/scenes/FogExp2.d.ts", + "../node_modules/three/src/scenes/Scene.d.ts", + "../node_modules/three/src/textures/CanvasTexture.d.ts", + "../node_modules/three/src/textures/CompressedTexture.d.ts", + "../node_modules/three/src/textures/CubeTexture.d.ts", + "../node_modules/three/src/textures/DataTexture.d.ts", + "../node_modules/three/src/textures/DataTexture2DArray.d.ts", + "../node_modules/three/src/textures/DataTexture3D.d.ts", + "../node_modules/three/src/textures/DepthTexture.d.ts", + "../node_modules/three/src/textures/Texture.d.ts", + "../node_modules/three/src/textures/VideoTexture.d.ts", + "../node_modules/typescript/lib/lib.dom.d.ts", "../node_modules/typescript/lib/lib.es2015.collection.d.ts", "../node_modules/typescript/lib/lib.es2015.core.d.ts", "../node_modules/typescript/lib/lib.es2015.d.ts", @@ -1064,847 +5362,22 @@ "../node_modules/typescript/lib/lib.es2018.intl.d.ts", "../node_modules/typescript/lib/lib.es2018.promise.d.ts", "../node_modules/typescript/lib/lib.es2018.regexp.d.ts", - "../node_modules/typescript/lib/lib.es2019.array.d.ts", - "../node_modules/typescript/lib/lib.es2019.d.ts", - "../node_modules/typescript/lib/lib.es2019.object.d.ts", - "../node_modules/typescript/lib/lib.es2019.string.d.ts", - "../node_modules/typescript/lib/lib.es2019.symbol.d.ts", "../node_modules/typescript/lib/lib.es2020.bigint.d.ts", - "../node_modules/typescript/lib/lib.es2020.d.ts", - "../node_modules/typescript/lib/lib.es2020.intl.d.ts", - "../node_modules/typescript/lib/lib.es2020.promise.d.ts", - "../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts", - "../node_modules/typescript/lib/lib.es2020.string.d.ts", - "../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts", "../node_modules/typescript/lib/lib.es5.d.ts", - "../node_modules/typescript/lib/lib.esnext.d.ts", "../node_modules/typescript/lib/lib.esnext.intl.d.ts", - "../node_modules/typescript/lib/lib.esnext.promise.d.ts", - "../node_modules/typescript/lib/lib.esnext.string.d.ts", - "../node_modules/typescript/lib/lib.esnext.weakref.d.ts", + "./src/OrbitControls.ts", + "./src/constants.ts", "./src/defs.ts", + "./src/entity-manager.ts", + "./src/globaltypes.ts", "./src/index.ts", "./src/math.ts", - [ - "./src/noise.ts", - [ - { - "file": "./src/noise.ts", - "start": 142, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 212, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_noise' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 251, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 322, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 370, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 411, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 452, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 496, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_noise' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 640, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 909, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 1012, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - }, - { - "file": "./src/noise.ts", - "start": 1043, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_params' does not exist on type '_NoiseGenerator'." - } - ] - ], - [ - "./src/simplex-noise.ts", - [ - { - "file": "./src/simplex-noise.ts", - "start": 1893, - "length": 12, - "messageText": "Expected 0 arguments, but got 1.", - "category": 1, - "code": 2554 - } - ] - ], - [ - "./src/spatial-hash-grid.ts", - [ - { - "file": "./src/spatial-hash-grid.ts", - "start": 21, - "length": 12, - "messageText": "Cannot find module './math.mjs' or its corresponding type declarations.", - "category": 1, - "code": 2307 - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 196, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 273, - "length": 11, - "code": 2339, - "category": 1, - "messageText": "Property '_dimensions' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 311, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 341, - "length": 9, - "code": 2339, - "category": 1, - "messageText": "Property '_queryIds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 444, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 479, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 500, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 563, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 598, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 619, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_bounds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 683, - "length": 11, - "code": 2339, - "category": 1, - "messageText": "Property '_dimensions' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 748, - "length": 11, - "code": 2339, - "category": 1, - "messageText": "Property '_dimensions' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 1941, - "length": 9, - "code": 2339, - "category": 1, - "messageText": "Property '_queryIds' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 2097, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 3035, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 3069, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 3103, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 3162, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." - }, - { - "file": "./src/spatial-hash-grid.ts", - "start": 3866, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property '_cells' does not exist on type 'SpatialHashGrid'." - } - ] - ], - [ - "./src/spline.ts", - [ - { - "file": "./src/spline.ts", - "start": 102, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 127, - "length": 5, - "code": 2339, - "category": 1, - "messageText": "Property '_lerp' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 180, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 272, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 312, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 455, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 515, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 587, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 630, - "length": 5, - "code": 2339, - "category": 1, - "messageText": "Property '_lerp' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 657, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 696, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 718, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 750, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 771, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 802, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 823, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_CubicHermiteSpline'." - }, - { - "file": "./src/spline.ts", - "start": 911, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 936, - "length": 5, - "code": 2339, - "category": 1, - "messageText": "Property '_lerp' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 989, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1081, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1121, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1226, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1298, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1341, - "length": 5, - "code": 2339, - "category": 1, - "messageText": "Property '_lerp' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1368, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1407, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1429, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1461, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - }, - { - "file": "./src/spline.ts", - "start": 1482, - "length": 7, - "code": 2339, - "category": 1, - "messageText": "Property '_points' does not exist on type '_LinearSpline'." - } - ] - ], + "./src/noise.ts", + "./src/simplex-noise.ts", + "./src/spatial-hash-grid.ts", + "./src/spline.ts", "./src/terrain-constants.ts", - [ - "./src/terrain-height.ts", - [ - { - "file": "./src/terrain-height.ts", - "start": 33, - "length": 25, - "messageText": "Cannot find module './terrain-constants.mjs' or its corresponding type declarations.", - "category": 1, - "code": 2307 - }, - { - "file": "./src/terrain-height.ts", - "start": 80, - "length": 13, - "messageText": "Cannot find module './noise.mjs' or its corresponding type declarations.", - "category": 1, - "code": 2307 - }, - { - "file": "./src/terrain-height.ts", - "start": 195, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property 'noise_' does not exist on type 'HeightGenerator'." - }, - { - "file": "./src/terrain-height.ts", - "start": 298, - "length": 6, - "code": 2339, - "category": 1, - "messageText": "Property 'noise_' does not exist on type 'HeightGenerator'." - } - ] - ] - ], - "affectedFilesPendingEmit": [ - [ - "../node_modules/@types/component-emitter/index.d.ts", - 1 - ], - [ - "../node_modules/@types/cookie/index.d.ts", - 1 - ], - [ - "../node_modules/@types/cors/index.d.ts", - 1 - ], - [ - "../node_modules/@types/node/assert.d.ts", - 1 - ], - [ - "../node_modules/@types/node/async_hooks.d.ts", - 1 - ], - [ - "../node_modules/@types/node/base.d.ts", - 1 - ], - [ - "../node_modules/@types/node/buffer.d.ts", - 1 - ], - [ - "../node_modules/@types/node/child_process.d.ts", - 1 - ], - [ - "../node_modules/@types/node/cluster.d.ts", - 1 - ], - [ - "../node_modules/@types/node/console.d.ts", - 1 - ], - [ - "../node_modules/@types/node/constants.d.ts", - 1 - ], - [ - "../node_modules/@types/node/crypto.d.ts", - 1 - ], - [ - "../node_modules/@types/node/dgram.d.ts", - 1 - ], - [ - "../node_modules/@types/node/dns.d.ts", - 1 - ], - [ - "../node_modules/@types/node/domain.d.ts", - 1 - ], - [ - "../node_modules/@types/node/events.d.ts", - 1 - ], - [ - "../node_modules/@types/node/fs.d.ts", - 1 - ], - [ - "../node_modules/@types/node/fs/promises.d.ts", - 1 - ], - [ - "../node_modules/@types/node/globals.d.ts", - 1 - ], - [ - "../node_modules/@types/node/globals.global.d.ts", - 1 - ], - [ - "../node_modules/@types/node/http.d.ts", - 1 - ], - [ - "../node_modules/@types/node/http2.d.ts", - 1 - ], - [ - "../node_modules/@types/node/https.d.ts", - 1 - ], - [ - "../node_modules/@types/node/index.d.ts", - 1 - ], - [ - "../node_modules/@types/node/inspector.d.ts", - 1 - ], - [ - "../node_modules/@types/node/module.d.ts", - 1 - ], - [ - "../node_modules/@types/node/net.d.ts", - 1 - ], - [ - "../node_modules/@types/node/os.d.ts", - 1 - ], - [ - "../node_modules/@types/node/path.d.ts", - 1 - ], - [ - "../node_modules/@types/node/perf_hooks.d.ts", - 1 - ], - [ - "../node_modules/@types/node/process.d.ts", - 1 - ], - [ - "../node_modules/@types/node/punycode.d.ts", - 1 - ], - [ - "../node_modules/@types/node/querystring.d.ts", - 1 - ], - [ - "../node_modules/@types/node/readline.d.ts", - 1 - ], - [ - "../node_modules/@types/node/repl.d.ts", - 1 - ], - [ - "../node_modules/@types/node/stream.d.ts", - 1 - ], - [ - "../node_modules/@types/node/string_decoder.d.ts", - 1 - ], - [ - "../node_modules/@types/node/timers.d.ts", - 1 - ], - [ - "../node_modules/@types/node/tls.d.ts", - 1 - ], - [ - "../node_modules/@types/node/trace_events.d.ts", - 1 - ], - [ - "../node_modules/@types/node/ts3.6/base.d.ts", - 1 - ], - [ - "../node_modules/@types/node/tty.d.ts", - 1 - ], - [ - "../node_modules/@types/node/url.d.ts", - 1 - ], - [ - "../node_modules/@types/node/util.d.ts", - 1 - ], - [ - "../node_modules/@types/node/v8.d.ts", - 1 - ], - [ - "../node_modules/@types/node/vm.d.ts", - 1 - ], - [ - "../node_modules/@types/node/wasi.d.ts", - 1 - ], - [ - "../node_modules/@types/node/worker_threads.d.ts", - 1 - ], - [ - "../node_modules/@types/node/zlib.d.ts", - 1 - ], - [ - "../node_modules/typescript/lib/lib.d.ts", - 1 - ], - [ - "../node_modules/typescript/lib/lib.es2015.d.ts", - 1 - ], - [ - "../node_modules/typescript/lib/lib.es2016.d.ts", - 1 - ], - [ - "../node_modules/typescript/lib/lib.es2017.d.ts", - 1 - ], - [ - "../node_modules/typescript/lib/lib.es2018.d.ts", - 1 - ], - [ - "../node_modules/typescript/lib/lib.es2019.d.ts", - 1 - ], - [ - "../node_modules/typescript/lib/lib.es2020.d.ts", - 1 - ], - [ - "../node_modules/typescript/lib/lib.esnext.d.ts", - 1 - ], - [ - "./src/defs.ts", - 1 - ], - [ - "./src/index.ts", - 1 - ], - [ - "./src/math.ts", - 1 - ], - [ - "./src/noise.ts", - 1 - ], - [ - "./src/simplex-noise.ts", - 1 - ], - [ - "./src/spatial-hash-grid.ts", - 1 - ], - [ - "./src/spline.ts", - 1 - ], - [ - "./src/terrain-constants.ts", - 1 - ], - [ - "./src/terrain-height.ts", - 1 - ] + "./src/terrain-height.ts" ] }, "version": "4.2.3" From 01c159b1e5b073b17078afee99128496def5b3c9 Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Tue, 30 Mar 2021 11:27:11 -0400 Subject: [PATCH 07/13] more slow progress on typing everything out in the client. --- client/src/attacker-controller.ts | 15 +- client/src/blood-effect.ts | 110 ++-- client/src/entity.ts | 25 +- client/src/equip-weapon-component.ts | 31 +- client/src/finite-state-machine.ts | 59 +- client/src/floating-name.ts | 148 ++--- client/src/gltf-component.ts | 23 +- client/src/health-bar.ts | 37 +- client/src/health-component.ts | 58 +- client/src/inventory-controller.ts | 379 ++++++------- client/src/level-up-component.ts | 8 +- client/src/load-controller.ts | 6 +- client/src/main.ts | 6 +- client/src/network-controller.ts | 2 +- client/src/network-entity-controller.ts | 4 +- client/src/network-player-controller.ts | 10 +- client/src/npc-entity.ts | 8 +- client/src/particle-system.ts | 534 +++++++++--------- client/src/player-entity.ts | 8 +- client/src/player-input.ts | 8 +- client/src/player-state.ts | 2 +- client/src/quest-component.ts | 4 +- client/src/render-component.ts | 4 +- client/src/scenery-controller.ts | 4 +- client/src/sorceror-effect.ts | 8 +- client/src/spatial-grid-controller.ts | 2 +- client/src/spawners.ts | 4 +- client/src/terrain-builder-threaded-worker.ts | 2 +- client/src/terrain-chunk.ts | 2 +- client/src/terrain.ts | 4 +- client/src/texture-splatter.ts | 2 +- client/src/textures.ts | 2 +- client/src/third-person-camera.ts | 4 +- client/src/thre.ts_component.ts | 6 +- client/src/ui-controller.ts | 2 +- server/src/scripts/world-manager.ts | 3 +- shared/src/constants.ts | 65 ++- shared/src/defs.ts | 98 +++- 38 files changed, 940 insertions(+), 757 deletions(-) diff --git a/client/src/attacker-controller.ts b/client/src/attacker-controller.ts index 24513597..6f6f2f9e 100644 --- a/client/src/attacker-controller.ts +++ b/client/src/attacker-controller.ts @@ -1,28 +1,31 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {entity} from './entity.js'; +import {Component} from './entity'; +import {EVENT_TYPES} from 'shared/src/constants' export const attack_controller = (() => { - class AttackController extends entity.Component { + class AttackController extends Component { + action_: any; + constructor() { super(); this.action_ = null; } InitComponent() { - this._RegisterHandler('player.action', (m) => { this._OnAnimAction(m); }); + this._RegisterHandler(EVENT_TYPES.PLAYER_ACTION, (m: {action: EVENT_TYPES}) => { this._OnAnimAction(m); }); } _OnAnimAction(m) { - if (m.action != 'attack') { + if (m.action != EVENT_TYPES.ATTACK) { this.action_ = m.action; return; } else if (m.action != this.action_) { this.action_ = m.action; this.Broadcast({ - topic: 'action.attack', + topic: EVENT_TYPES.ACTION_ATTACK, }); } } diff --git a/client/src/blood-effect.ts b/client/src/blood-effect.ts index ca498bd6..cf1f9224 100644 --- a/client/src/blood-effect.ts +++ b/client/src/blood-effect.ts @@ -1,11 +1,17 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {particle_system} from "./particle-system.js"; -import {entity} from "./entity.js"; +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; export const blood_effect = (() => { - class BloodEffectEmitter extends particle_system.ParticleEmitter { + class BloodEffectEmitter extends ParticleEmitter { + parent_: any; + blend_: number; + emitterLife_: number; + alphaSpline_: any; + colourSpline_: any; + sizeSpline_: any; constructor(parent) { super(); this.parent_ = parent; @@ -25,9 +31,9 @@ export const blood_effect = (() => { const radius = 1.0; const life = (Math.random() * 0.75 + 0.25) * 0.5; const p = new THREE.Vector3( - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius); + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius); const d = p.clone().normalize(); p.copy(d); @@ -36,21 +42,27 @@ export const blood_effect = (() => { d.multiplyScalar(0.0); return { - position: p, - size: (Math.random() * 0.5 + 0.5) * 1.0, - colour: new THREE.Color(), - alpha: 1.0, - life: life, - maxLife: life, - rotation: Math.random() * 2.0 * Math.PI, - velocity: d, - blend: this.blend_, + position: p, + size: (Math.random() * 0.5 + 0.5) * 1.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: d, + blend: this.blend_, }; } }; - class FireFXEmitter extends particle_system.ParticleEmitter { + class FireFXEmitter extends ParticleEmitter { + parent_: any; + blend_: number; + particles_: any; + alphaSpline_: any; + colourSpline_: any; + sizeSpline_: any; constructor(parent) { super(); this.parent_ = parent; @@ -74,9 +86,9 @@ export const blood_effect = (() => { const radius = 1.0; const life = (Math.random() * 0.75 + 0.25) * 1.5; const p = new THREE.Vector3( - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius); + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius); const d = p.clone().normalize(); p.copy(d); @@ -85,34 +97,38 @@ export const blood_effect = (() => { d.multiplyScalar(3.0); return { - position: p, - size: (Math.random() * 0.5 + 0.5) * 1.0, - colour: new THREE.Color(), - alpha: 1.0, - life: life, - maxLife: life, - rotation: Math.random() * 2.0 * Math.PI, - velocity: d, - blend: this.blend_, + position: p, + size: (Math.random() * 0.5 + 0.5) * 1.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: d, + blend: this.blend_, }; } }; - class BloodEffect extends entity.Component { + class BloodEffect extends Component { + params_: any; + bloodFX_: ParticleSystem; + fireFX_: ParticleSystem; + bones_: any; constructor(params) { super(); this.params_ = params; - this.bloodFX_ = new particle_system.ParticleSystem({ - camera: params.camera, - parent: params.scene, - texture: './resources/textures/whitePuff14.png', + this.bloodFX_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/whitePuff14.png', }); - this.fireFX_ = new particle_system.ParticleSystem({ - camera: params.camera, - parent: params.scene, - texture: './resources/textures/fire.png', + this.fireFX_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/fire.png', }); } @@ -123,7 +139,7 @@ export const blood_effect = (() => { InitComponent() { this._RegisterHandler('events.network', (m) => { this.OnEvents_(m); }); - this._RegisterHandler('load.character', (m) => this.OnCharacterLoaded_(m)); + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); } OnCharacterLoaded_(msg) { @@ -159,12 +175,12 @@ export const blood_effect = (() => { emitter.alphaSpline_.AddPoint(0.0, 0.0); emitter.alphaSpline_.AddPoint(0.5, 1.0); emitter.alphaSpline_.AddPoint(1.0, 0.0); - + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x00FF00)); emitter.colourSpline_.AddPoint(0.3, new THREE.Color(0x00FF00)); emitter.colourSpline_.AddPoint(0.4, new THREE.Color(0xdeec42)); emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0xf4a776)); - + emitter.sizeSpline_.AddPoint(0.0, 0.5); emitter.sizeSpline_.AddPoint(0.5, 3.0); emitter.sizeSpline_.AddPoint(1.0, 0.5); @@ -177,10 +193,10 @@ export const blood_effect = (() => { emitter.alphaSpline_.AddPoint(0.0, 0.0); emitter.alphaSpline_.AddPoint(0.7, 1.0); emitter.alphaSpline_.AddPoint(1.0, 0.0); - + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x000000)); emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x000000)); - + emitter.sizeSpline_.AddPoint(0.0, 0.5); emitter.sizeSpline_.AddPoint(0.5, 4.0); emitter.sizeSpline_.AddPoint(1.0, 10.0); @@ -200,10 +216,10 @@ export const blood_effect = (() => { emitter.alphaSpline_.AddPoint(0.0, 0.0); emitter.alphaSpline_.AddPoint(0.7, 1.0); emitter.alphaSpline_.AddPoint(1.0, 0.0); - + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0xbb2909)); emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x701a08)); - + emitter.sizeSpline_.AddPoint(0.0, 0.5); emitter.sizeSpline_.AddPoint(0.5, 1.0); emitter.sizeSpline_.AddPoint(1.0, 0.5); @@ -212,7 +228,7 @@ export const blood_effect = (() => { emitter.blend_ = 1.0; this.bloodFX_.AddEmitter(emitter); - } + } } Update(timeElapsed) { @@ -220,7 +236,7 @@ export const blood_effect = (() => { this.fireFX_.Update(timeElapsed); } } - + return { BloodEffect: BloodEffect, }; diff --git a/client/src/entity.ts b/client/src/entity.ts index 1fea36b0..26743033 100644 --- a/client/src/entity.ts +++ b/client/src/entity.ts @@ -1,9 +1,14 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - - -export const entity = (() => { - - class Entity { +import * as THREE from 'three'; + +class Entity { + _name: any; + _components: {}; + _position: THREE.Vector3; + _rotation: THREE.Quaternion; + _handlers: {}; + parent_: any; + dead_: boolean; + constructor() { this._name = null; this._components = {}; @@ -118,6 +123,7 @@ export const entity = (() => { }; class Component { + parent_: any; constructor() { this.parent_ = null; } @@ -160,9 +166,4 @@ export const entity = (() => { } }; - return { - Entity: Entity, - Component: Component, - }; - -})(); \ No newline at end of file +export {Entity, Component} \ No newline at end of file diff --git a/client/src/equip-weapon-component.ts b/client/src/equip-weapon-component.ts index fbf16515..4264a980 100644 --- a/client/src/equip-weapon-component.ts +++ b/client/src/equip-weapon-component.ts @@ -1,15 +1,22 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {entity} from './entity.js'; +import {Component} from './entity'; -import {defs} from '/shared/defs.mjs'; +import {CHARACTER_MODELS} from 'shared/src/defs'; -import {FBXLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/FBXLoader.js'; +import {FBXLoader} from 'three/examples/jsm/loaders/FBXLoader'; +import { EVENT_TYPES, KNOWN_ENTITIES } from 'shared/src/constants'; export const equip_weapon_component = (() => { - class EquipWeapon extends entity.Component { + class EquipWeapon extends Component { + params_: any; + target_: any; + name_: any; + anchor_: any; + _bones: any; + constructor(params) { super(); this.params_ = params; @@ -17,13 +24,13 @@ export const equip_weapon_component = (() => { this.name_ = null; const classType = this.params_.desc.character.class; - const modelData = defs.CHARACTER_MODELS[classType]; + const modelData = CHARACTER_MODELS[classType]; this.anchor_ = modelData.anchors.rightHand; } InitComponent() { - this._RegisterHandler('load.character', (m) => this._OnCharacterLoaded(m)); - this._RegisterHandler('inventory.equip', (m) => this._OnEquip(m)); + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this._OnCharacterLoaded(m)); + this._RegisterHandler(EVENT_TYPES.INVENTORY_EQUIP, (m) => this._OnEquip(m)); } _OnCharacterLoaded(msg) { @@ -38,8 +45,8 @@ export const equip_weapon_component = (() => { } GetItemDefinition_(name) { - const database = this.FindEntity('database').GetComponent( - 'InventoryDatabaseController'); + const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent( + KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); return database.Find(name); } @@ -51,7 +58,7 @@ export const equip_weapon_component = (() => { if (this.target_) { this._UnloadModels(); } - const inventory = this.GetComponent('InventoryController'); + const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER); const item = this.GetItemDefinition_(msg.value); this.name_ = msg.value; @@ -115,7 +122,7 @@ export const equip_weapon_component = (() => { cb(); this.Broadcast({ - topic: 'load.weapon', + topic: EVENT_TYPES.LOAD_WEAPON, model: this.target_, bones: this._bones, }); diff --git a/client/src/finite-state-machine.ts b/client/src/finite-state-machine.ts index e816bd21..1c146581 100644 --- a/client/src/finite-state-machine.ts +++ b/client/src/finite-state-machine.ts @@ -1,42 +1,37 @@ +class FiniteStateMachine { + _states: {}; + _currentState: any; -export const finite_state_machine = (() => { + constructor() { + this._states = {}; + this._currentState = null; + } - class FiniteStateMachine { - constructor() { - this._states = {}; - this._currentState = null; - } + _AddState(name, type) { + this._states[name] = type; + } - _AddState(name, type) { - this._states[name] = type; - } + SetState(name) { + const prevState = this._currentState; - SetState(name) { - const prevState = this._currentState; - - if (prevState) { - if (prevState.Name == name) { - return; - } - prevState.Exit(); + if (prevState) { + if (prevState.Name == name) { + return; } - - const state = new this._states[name](this); - - this._currentState = state; - state.Enter(prevState); + prevState.Exit(); } - Update(timeElapsed, input) { - if (this._currentState) { - this._currentState.Update(timeElapsed, input); - } - } - }; + const state = new this._states[name](this); - return { - FiniteStateMachine: FiniteStateMachine - }; + this._currentState = state; + state.Enter(prevState); + } -})(); \ No newline at end of file + Update(timeElapsed, input) { + if (this._currentState) { + this._currentState.Update(timeElapsed, input); + } + } +}; +export { FiniteStateMachine } \ No newline at end of file diff --git a/client/src/floating-name.ts b/client/src/floating-name.ts index 13c21a6e..d7c0a97d 100644 --- a/client/src/floating-name.ts +++ b/client/src/floating-name.ts @@ -1,87 +1,97 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {entity} from './entity.js'; +import { Component } from './entity'; -import {defs} from '/shared/defs.mjs'; +import { CHARACTER_MODELS } from 'shared/src/defs'; +import { CLASS_TYPES_ENUM, EVENT_TYPES } from 'shared/src/constants'; +class FloatingName extends Component { + params_: { + desc: { + character: { + class: CLASS_TYPES_ENUM + }, + account: { + name: string + } + } + }; + visible_: boolean; + sprite_: any; + element_: HTMLCanvasElement; + context2d_: any; -export const floating_name = (() => { + constructor(params) { + super(); + this.params_ = params; + this.visible_ = true; + } - class FloatingName extends entity.Component { - constructor(params) { - super(); - this.params_ = params; - this.visible_ = true; + Destroy() { + if (!this.sprite_) { + this.visible_ = false; + return; } - Destroy() { - if (!this.sprite_) { - this.visible_ = false; - return; - } - - this.sprite_.traverse(c => { - if (c.material) { - let materials = c.material; - if (!(c.material instanceof Array)) { - materials = [c.material]; - } - for (let m of materials) { - m.dispose(); - } + this.sprite_.traverse(c => { + if (c.material) { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; } - - if (c.geometry) { - c.geometry.dispose(); + for (let m of materials) { + m.dispose(); } - }); - if (this.sprite_.parent) { - this.sprite_.parent.remove(this.sprite_); } - } - InitComponent() { - this._RegisterHandler( - 'load.character', (m) => { this.CreateSprite_(m); }); - this._RegisterHandler( - 'health.death', (m) => { this.OnDeath_(m); }); + if (c.geometry) { + c.geometry.dispose(); + } + }); + if (this.sprite_.parent) { + this.sprite_.parent.remove(this.sprite_); } + } - OnDeath_() { - this.Destroy(); - } + InitComponent() { + this._RegisterHandler( + EVENT_TYPES.LOAD_CHARACTER, (m) => { this.CreateSprite_(m); }); + this._RegisterHandler( + EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); + } - CreateSprite_(msg) { - if (!this.visible_) { - return; - } - const modelData = defs.CHARACTER_MODELS[ - this.params_.desc.character.class]; + OnDeath_(e: any) { + this.Destroy(); + } - this.element_ = document.createElement('canvas'); - this.context2d_ = this.element_.getContext('2d'); - this.context2d_.canvas.width = 256; - this.context2d_.canvas.height = 128; - this.context2d_.fillStyle = '#FFF'; - this.context2d_.font = "18pt Helvetica"; - this.context2d_.shadowOffsetX = 3; - this.context2d_.shadowOffsetY = 3; - this.context2d_.shadowColor = "rgba(0,0,0,0.3)"; - this.context2d_.shadowBlur = 4; - this.context2d_.textAlign = 'center'; - this.context2d_.fillText(this.params_.desc.account.name, 128, 64); + CreateSprite_(msg) { + if (!this.visible_) { + return; + } + const modelData = CHARACTER_MODELS[ + this.params_.desc.character.class]; - const map = new THREE.CanvasTexture(this.context2d_.canvas); + this.element_ = document.createElement('canvas'); + this.context2d_ = this.element_.getContext('2d'); + this.context2d_.canvas.width = 256; + this.context2d_.canvas.height = 128; + this.context2d_.fillStyle = '#FFF'; + this.context2d_.font = "18pt Helvetica"; + this.context2d_.shadowOffsetX = 3; + this.context2d_.shadowOffsetY = 3; + this.context2d_.shadowColor = "rgba(0,0,0,0.3)"; + this.context2d_.shadowBlur = 4; + this.context2d_.textAlign = 'center'; + this.context2d_.fillText(this.params_.desc.account.name, 128, 64); - this.sprite_ = new THREE.Sprite( - new THREE.SpriteMaterial({map: map, color: 0xffffff, fog: false})); - this.sprite_.scale.set(10, 5, 1) - this.sprite_.position.y += modelData.nameOffset; - msg.model.add(this.sprite_); - } - }; + const map = new THREE.CanvasTexture(this.context2d_.canvas); - return { - FloatingName: FloatingName, - }; -})(); \ No newline at end of file + this.sprite_ = new THREE.Sprite( + new THREE.SpriteMaterial({ map: map, color: 0xffffff, fog: false })); + this.sprite_.scale.set(10, 5, 1) + this.sprite_.position.y += modelData.nameOffset; + msg.model.add(this.sprite_); + } +}; + +export { FloatingName } \ No newline at end of file diff --git a/client/src/gltf-component.ts b/client/src/gltf-component.ts index 17f17ca8..bfa59625 100644 --- a/client/src/gltf-component.ts +++ b/client/src/gltf-component.ts @@ -1,14 +1,17 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {GLTFLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/GLTFLoader.js'; -import {FBXLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/FBXLoader.js'; +import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader'; +import {FBXLoader} from 'three/examples/jsm/loaders/FBXLoader'; -import {entity} from './entity.js'; +import {Component} from './entity'; +import { EVENT_TYPES } from 'shared/src/constants'; export const gltf_component = (() => { - class StaticModelComponent extends entity.Component { + class StaticModelComponent extends Component { + _params: any; + _target: any; constructor(params) { super(); this._Init(params); @@ -104,7 +107,11 @@ export const gltf_component = (() => { }; - class AnimatedModelComponent extends entity.Component { + class AnimatedModelComponent extends Component { + _target: any; + _params: any; + _parent: any; + _mixer: any; constructor(params) { super(); this._Init(params); @@ -199,7 +206,7 @@ export const gltf_component = (() => { this._parent._mesh = this._target; this.Broadcast({ - topic: 'load.character', + topic: EVENT_TYPES.LOAD_CHARACTER, model: this._target, }); } @@ -216,7 +223,7 @@ export const gltf_component = (() => { const loader = new FBXLoader(); loader.setPath(this._params.resourcePath); loader.load(this._params.resourceName, (fbx) => { - this._OnLoaded(fbx); + this._OnLoaded(fbx, null); }); } diff --git a/client/src/health-bar.ts b/client/src/health-bar.ts index c7aa1229..94becf57 100644 --- a/client/src/health-bar.ts +++ b/client/src/health-bar.ts @@ -1,13 +1,10 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {entity} from './entity.js'; +import { Component } from './entity'; -import {math} from '/shared/math.mjs'; +import { math } from 'shared/src/math'; - -export const health_bar = (() => { - - const _VS = ` +const _VS = ` varying vec2 vUV; void main() { @@ -17,7 +14,7 @@ void main() { } `; - const _PS = ` +const _PS = ` uniform vec3 colour; uniform float health; @@ -28,7 +25,14 @@ void main() { } `; -class HealthBar extends entity.Component { +class HealthBar extends Component { + params_: any; + material_: any; + geometry_: any; + bar_: THREE.Mesh; + realHealth_: number; + animHealth_: number; + constructor(params) { super(); this.params_ = params; @@ -49,7 +53,7 @@ class HealthBar extends entity.Component { value: 1.0, }, }; - this.material_ = new THREE.ShaderMaterial( { + this.material_ = new THREE.ShaderMaterial({ uniforms: uniforms, vertexShader: _VS, fragmentShader: _PS, @@ -79,7 +83,7 @@ class HealthBar extends entity.Component { OnHealth_(msg) { const healthPercent = (msg.health / msg.maxHealth); - + this.realHealth_ = healthPercent; } @@ -125,17 +129,14 @@ class HealthBar extends entity.Component { positions.push(p4.x, p4.y, p4.z); this.geometry_.setAttribute( - 'position', new THREE.Float32BufferAttribute(positions, 3)); + 'position', new THREE.Float32BufferAttribute(positions, 3)); this.geometry_.setAttribute( - 'uv', new THREE.Float32BufferAttribute(uvs, 2)); + 'uv', new THREE.Float32BufferAttribute(uvs, 2)); this.geometry_.setIndex( - new THREE.BufferAttribute(new Uint32Array(indices), 1)); + new THREE.BufferAttribute(new Uint32Array(indices), 1)); this.geometry_.attributes.position.needsUpdate = true; } }; - return { - HealthBar: HealthBar, - }; -})(); \ No newline at end of file +export { HealthBar } \ No newline at end of file diff --git a/client/src/health-component.ts b/client/src/health-component.ts index be78ac71..92941ea3 100644 --- a/client/src/health-component.ts +++ b/client/src/health-component.ts @@ -1,9 +1,19 @@ -import {entity} from "./entity.js"; - - -export const health_component = (() => { - - class HealthComponent extends entity.Component { +import { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } from "shared/src/constants"; +import { Component } from "./entity"; + + class HealthComponent extends Component { + stats_: { + level: number, + updateUI: boolean, + health: number, + maxHealth: number, + strength: number, + wisdomness: number, + benchpress: number, + curl: number, + experience: number, + + }; constructor(params) { super(); this.stats_ = params; @@ -11,11 +21,11 @@ export const health_component = (() => { InitComponent() { this._RegisterHandler( - 'health.damage', (m) => this.OnDamage_(m)); + EVENT_TYPES.HEALTH_DAMAGE, (m) => this.OnDamage_(m)); this._RegisterHandler( - 'stats.network', (m) => this.OnNetworkUpdate_(m)); + EVENT_TYPES.STATS_NETWORK, (m) => this.OnNetworkUpdate_(m)); this._RegisterHandler( - 'health.add-experience', (m) => this.OnAddExperience_(m)); + EVENT_TYPES.HEALTH_ADD_EXPERIENCE, (m) => this.OnAddExperience_(m)); this.UpdateUI_(); } @@ -33,16 +43,16 @@ export const health_component = (() => { return; } - const bar = document.getElementById('health-bar'); + const bar = document.getElementById(DOM_IDS.HEALTH_BAR); const healthAsPercentage = this.stats_.health / this.stats_.maxHealth; bar.style.width = Math.floor(200 * healthAsPercentage) + 'px'; - document.getElementById('stats-strength').innerText = this.stats_.strength; - document.getElementById('stats-wisdomness').innerText = this.stats_.wisdomness; - document.getElementById('stats-benchpress').innerText = this.stats_.benchpress; - document.getElementById('stats-curl').innerText = this.stats_.curl; - document.getElementById('stats-experience').innerText = this.stats_.experience; + document.getElementById(DOM_IDS.STATS_STRENGTH).innerText = this.stats_.strength?.toString?.(); + document.getElementById(DOM_IDS.STATS_WISDOMNESS).innerText = this.stats_.wisdomness?.toString?.(); + document.getElementById(DOM_IDS.STATS_BENCHPRESS).innerText = this.stats_.benchpress?.toString?.(); + document.getElementById(DOM_IDS.STATS_CURL).innerText = this.stats_.curl?.toString?.(); + document.getElementById(DOM_IDS.STATS_EXPERIENCE).innerText = this.stats_.experience?.toString?.(); } _ComputeLevelXPRequirement() { @@ -66,11 +76,11 @@ export const health_component = (() => { this.stats_.curl += 2; const spawner = this.FindEntity( - 'level-up-spawner').GetComponent('LevelUpComponentSpawner'); + KNOWN_ENTITIES.LEVEL_UP_SPAWNER).GetComponent(NAMED_COMPONENTS.LEVEL_UP_SPAWNER); spawner.Spawn(this.Parent.Position); this.Broadcast({ - topic: 'health.levelGained', + topic: EVENT_TYPES.HEALTH_LEVEL, value: this.stats_.level, }); @@ -79,7 +89,7 @@ export const health_component = (() => { _OnDeath() { this.Broadcast({ - topic: 'health.death', + topic: EVENT_TYPES.HEALTH_DEATH, }); } @@ -89,7 +99,7 @@ export const health_component = (() => { } this.Broadcast({ - topic: 'health.update', + topic: EVENT_TYPES.HEALTH_UPDATE, health: this.stats_.health, maxHealth: this.stats_.maxHealth, }); @@ -107,15 +117,13 @@ export const health_component = (() => { this.OnHealthChanged_(); } - OnDamage_(msg) { + OnDamage_(msg: {value: number}) { this.stats_.health = Math.max(0.0, this.stats_.health - msg.value); this.OnHealthChanged_(); } }; - return { - HealthComponent: HealthComponent, - }; - -})(); \ No newline at end of file +export { + HealthComponent +} \ No newline at end of file diff --git a/client/src/inventory-controller.ts b/client/src/inventory-controller.ts index 6ff9d505..ad7677bf 100644 --- a/client/src/inventory-controller.ts +++ b/client/src/inventory-controller.ts @@ -1,213 +1,214 @@ -import {entity} from './entity.js'; +import { EVENT_TYPES, KNOWN_ENTITIES } from 'shared/src/constants'; +import { Component } from './entity'; +class InventoryDatabaseController extends Component { + items_: {}; + constructor() { + super(); + + this.items_ = {}; + } -export const inventory_controller = (() => { + AddItem(name, item) { + this.items_[name] = item; + } + + Find(name) { + return this.items_[name]; + } +}; + +class UIInventoryController extends Component { + inventory_: any; + constructor() { + super(); + } + + InitEntity() { + this._RegisterHandler(EVENT_TYPES.INVENTORY_UPDATED, () => this.OnInventoryUpdated_()); + + this.inventory_ = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER); + + const _SetupElement = (n) => { + const element = document.getElementById(n); + element.ondragstart = (ev) => { + ev.dataTransfer.setData('text/plain', n); + }; + element.ondragover = (ev) => { + ev.preventDefault(); + }; + element.ondrop = (ev) => { + ev.preventDefault(); + const data = ev.dataTransfer.getData('text/plain'); + const other = document.getElementById(data); + + this.OnItemDropped_(other, element); + }; + } + + for (let k in this.inventory_.Inventory) { + _SetupElement(k); + } + } + + OnInventoryUpdated_() { + const items = this.inventory_.Inventory; + for (let k in items) { + this.SetItemAtSlot_(k, items[k].value); + } + } + + OnItemDropped_(oldElement, newElement) { + const oldItem = this.inventory_.Inventory[oldElement.id]; + const newItem = this.inventory_.Inventory[newElement.id]; + + const oldValue = oldItem.value; + const newValue = newItem.value; + + this.SetItemAtSlot_(oldElement.id, newValue); + this.SetItemAtSlot_(newElement.id, oldValue); + + this.inventory_.SetItemAtSlot_(oldElement.id, newValue); + this.inventory_.SetItemAtSlot_(newElement.id, oldValue); + } + + GetItemDefinition_(name) { + const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent( + KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); + return database.Find(name); + } + + SetItemAtSlot_(slot, itemName) { + const div = document.getElementById(slot); + const item = this.GetItemDefinition_(itemName); + if (item) { + const path = './resources/icons/weapons/' + item.renderParams.icon; + div.style.backgroundImage = "url('" + path + "')"; + } else { + div.style.backgroundImage = ''; + } + } +}; + + +class InventoryController extends Component { + inventory_: {}; + constructor() { + super(); + + this.inventory_ = this.CreateEmpty_(); + } + + CreateEmpty_() { + const inventory = {}; + for (let i = 1; i <= 24; ++i) { + inventory['inventory-' + i] = { + type: 'inventory', + value: null, + }; + } + + for (let i = 1; i <= 8; ++i) { + inventory['inventory-equip-' + i] = { + type: 'equip', + value: null, + }; + } + return inventory; + } + + get Inventory() { + return this.inventory_; + } + + InitComponent() { + // Hack + this._RegisterHandler('network.inventory', (m) => this.OnNetworkUpdate_(m)); + } - class InventoryDatabaseController extends entity.Component { - constructor() { - super(); - - this.items_ = {}; - } - - AddItem(name, item) { - this.items_[name] = item; - } - - Find(name) { - return this.items_[name]; - } - }; - - class UIInventoryController extends entity.Component { - constructor() { - super(); - } - - InitEntity() { - this._RegisterHandler('inventory.updated', () => this.OnInventoryUpdated_()); - - this.inventory_ = this.GetComponent('InventoryController'); - - const _SetupElement = (n) => { - const element = document.getElementById(n); - element.ondragstart = (ev) => { - ev.dataTransfer.setData('text/plain', n); - }; - element.ondragover = (ev) => { - ev.preventDefault(); - }; - element.ondrop = (ev) => { - ev.preventDefault(); - const data = ev.dataTransfer.getData('text/plain'); - const other = document.getElementById(data); - - this.OnItemDropped_(other, element); - }; - } - - for (let k in this.inventory_.Inventory) { - _SetupElement(k); - } - } - - OnInventoryUpdated_() { - const items = this.inventory_.Inventory; - for (let k in items) { - this.SetItemAtSlot_(k, items[k].value); - } - } - - OnItemDropped_(oldElement, newElement) { - const oldItem = this.inventory_.Inventory[oldElement.id]; - const newItem = this.inventory_.Inventory[newElement.id]; - - const oldValue = oldItem.value; - const newValue = newItem.value; - - this.SetItemAtSlot_(oldElement.id, newValue); - this.SetItemAtSlot_(newElement.id, oldValue); - - this.inventory_.SetItemAtSlot_(oldElement.id, newValue); - this.inventory_.SetItemAtSlot_(newElement.id, oldValue); - } - - GetItemDefinition_(name) { - const database = this.FindEntity('database').GetComponent( - 'InventoryDatabaseController'); - return database.Find(name); - } - - SetItemAtSlot_(slot, itemName) { - const div = document.getElementById(slot); - const item = this.GetItemDefinition_(itemName); - if (item) { - const path = './resources/icons/weapons/' + item.renderParams.icon; - div.style.backgroundImage = "url('" + path + "')"; - } else { - div.style.backgroundImage = ''; + OnNetworkUpdate_(msg) { + const inventory = this.CreateEmpty_(); + for (let k in msg.inventory) { + inventory[k].value = msg.inventory[k]; + } + + let changed = false; + for (let k in inventory) { + if (inventory[k].value != this.inventory_[k].value) { + this.SetItemAtSlot_(k, inventory[k].value); } } - }; - - - class InventoryController extends entity.Component { - constructor() { - super(); - this.inventory_ = this.CreateEmpty_(); + if (inventory) { + this.Broadcast({ + topic: EVENT_TYPES.INVENTORY_UPDATED + }); } + } - CreateEmpty_() { - const inventory = {}; - for (let i = 1; i <= 24; ++i) { - inventory['inventory-' + i] = { - type: 'inventory', - value: null, - }; + CreatePacket() { + // Meh + const packet = {}; + for (let k in this.inventory_) { + if (this.inventory_[k].value) { + packet[k] = this.inventory_[k].value; } - - for (let i = 1; i <= 8; ++i) { - inventory['inventory-equip-' + i] = { - type: 'equip', - value: null, - }; - } - return inventory; - } - - get Inventory() { - return this.inventory_; } + return packet; + } - InitComponent() { - // Hack - this._RegisterHandler('network.inventory', (m) => this.OnNetworkUpdate_(m)); - } + GetItemDefinition_(name) { + const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent( + KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); + return database.Find(name); + } - OnNetworkUpdate_(msg) { - const inventory = this.CreateEmpty_(); - for (let k in msg.inventory) { - inventory[k].value = msg.inventory[k]; - } + SetItemAtSlot_(slot, itemName) { + const oldValue = this.inventory_[slot].value; - let changed = false; - for (let k in inventory) { - if (inventory[k].value != this.inventory_[k].value) { - this.SetItemAtSlot_(k, inventory[k].value); - } - } + this.inventory_[slot].value = itemName; - if (inventory) { - this.Broadcast({ - topic: 'inventory.updated' - }); - } + // @TODO: Figure out all the inventory slot types. Is there only equip? + if (this.inventory_[slot].type == 'equip' && oldValue != itemName) { + this.Broadcast({ + topic: EVENT_TYPES.INVENTORY_EQUIP, + value: itemName, + }); } + } - CreatePacket() { - // Meh - const packet = {}; - for (let k in this.inventory_) { - if (this.inventory_[k].value) { - packet[k] = this.inventory_[k].value; - } + GetItemByName(name) { + for (let k in this.inventory_) { + if (this.inventory_[k].value == name) { + return this.FindEntity(name); } - return packet; } + return null; + } +}; - GetItemDefinition_(name) { - const database = this.FindEntity('database').GetComponent( - 'InventoryDatabaseController'); - return database.Find(name); - } - SetItemAtSlot_(slot, itemName) { - const oldValue = this.inventory_[slot].value; +class InventoryItem extends Component { + _params: any; + constructor(params) { + super(); + this._params = params; + } - this.inventory_[slot].value = itemName; + InitComponent() { } - if (this.inventory_[slot].type == 'equip' && oldValue != itemName) { - this.Broadcast({ - topic: 'inventory.equip', - value: itemName, - }); - } - } - - GetItemByName(name) { - for (let k in this.inventory_) { - if (this.inventory_[k].value == name) { - return this.FindEntity(name); - } - } - return null; - } - }; + get Params() { + return this._params; + } + get RenderParams() { + return this._params.renderParams; + } +}; - class InventoryItem extends entity.Component { - constructor(params) { - super(); - this._params = params; - } - - InitComponent() {} - - get Params() { - return this._params; - } - - get RenderParams() { - return this._params.renderParams; - } - }; - - - return { - InventoryDatabaseController: InventoryDatabaseController, - UIInventoryController: UIInventoryController, - InventoryController: InventoryController, - InventoryItem: InventoryItem, - }; -})(); \ No newline at end of file +export { + InventoryDatabaseController, + UIInventoryController, + InventoryController, + InventoryItem +} diff --git a/client/src/level-up-component.ts b/client/src/level-up-component.ts index 17e1630e..101a029a 100644 --- a/client/src/level-up-component.ts +++ b/client/src/level-up-component.ts @@ -1,11 +1,11 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {particle_system} from "./particle-system.js"; -import {entity} from "./entity.js"; +import { Component } from "./entity"; export const level_up_component = (() => { - class LevelUpComponentSpawner extends entity.Component { + class LevelUpComponentSpawner extends Component { constructor(params) { super(); this._params = params; @@ -21,7 +21,7 @@ export const level_up_component = (() => { } }; - class LevelUpComponent extends entity.Component { + class LevelUpComponent extends Component { constructor(params) { super(); this._params = params; diff --git a/client/src/load-controller.ts b/client/src/load-controller.ts index e8c11eaf..480f4aa8 100644 --- a/client/src/load-controller.ts +++ b/client/src/load-controller.ts @@ -1,15 +1,15 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {FBXLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/FBXLoader.js'; import {GLTFLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/GLTFLoader.js'; import {SkeletonUtils} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/utils/SkeletonUtils.js'; -import {entity} from "./entity.js"; +import { Component } from "./entity"; export const load_controller = (() => { - class LoadController extends entity.Component { + class LoadController extends Component { constructor() { super(); diff --git a/client/src/main.ts b/client/src/main.ts index d7803d0d..8d633e4a 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,6 +1,6 @@ import {GUI} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/libs/dat.gui.module.js'; -import {entity_manager} from './entity-manager.js'; +import {entity_manager} from 'shared/src/entity-manager'; import {entity} from './entity.js'; import {ui_controller} from './ui-controller.js'; import {level_up_component} from './level-up-component.js'; @@ -110,11 +110,11 @@ class CrappyMMOAttempt { const database = new entity.Entity(); database.AddComponent(new inventory_controller.InventoryDatabaseController()); - this.entityManager_.Add(database, 'database'); + this.entityManager_.Add(database, KNOWN_ENTITIES.DATABASE); // HACK for (let k in defs.WEAPONS_DATA) { - database.GetComponent('InventoryDatabaseController').AddItem( + database.GetComponent(KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER).AddItem( k, defs.WEAPONS_DATA[k]); } } diff --git a/client/src/network-controller.ts b/client/src/network-controller.ts index 2e8b49bd..f02a86b5 100644 --- a/client/src/network-controller.ts +++ b/client/src/network-controller.ts @@ -7,7 +7,7 @@ import { ui_controller } from './ui-controller.js'; export const network_controller = (() => { - class NetworkController extends entity.Component { + class NetworkController extends Component { constructor(params) { super(); diff --git a/client/src/network-entity-controller.ts b/client/src/network-entity-controller.ts index e2200b98..6838ab30 100644 --- a/client/src/network-entity-controller.ts +++ b/client/src/network-entity-controller.ts @@ -1,11 +1,11 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {entity} from './entity.js'; export const network_entity_controller = (() => { - class NetworkEntityController extends entity.Component { + class NetworkEntityController extends Component { constructor() { super(); this.transformUpdates_ = []; diff --git a/client/src/network-player-controller.ts b/client/src/network-player-controller.ts index ecfb7c68..2eb28edd 100644 --- a/client/src/network-player-controller.ts +++ b/client/src/network-player-controller.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {entity} from './entity.js'; @@ -6,7 +6,7 @@ import {entity} from './entity.js'; export const network_player_controller = (() => { - class NetworkEntityController extends entity.Component { + class NetworkEntityController extends Component { constructor() { super(); this.updateTimer_ = 0.0; @@ -15,9 +15,9 @@ export const network_player_controller = (() => { InitComponent() { this._RegisterHandler( - 'load.character', (m) => { this.OnLoaded_(m); }); + EVENT_TYPES.LOAD_CHARACTER, (m) => { this.OnLoaded_(m); }); this._RegisterHandler( - 'inventory.equip', (m) => { this.OnEquipChanged_(m); }); + EVENT_TYPES.INVENTORY_EQUIP, (m) => { this.OnEquipChanged_(m); }); this._RegisterHandler( 'network.update', (m) => { this.OnUpdate_(m); }); this._RegisterHandler( @@ -30,7 +30,7 @@ export const network_player_controller = (() => { } OnEquipChanged_(msg) { - const inventory = this.GetComponent('InventoryController').CreatePacket(); + const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER).CreatePacket(); this.net_.SendInventoryChange_(inventory); } diff --git a/client/src/npc-entity.ts b/client/src/npc-entity.ts index d93b43ff..7d0fa3b3 100644 --- a/client/src/npc-entity.ts +++ b/client/src/npc-entity.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {entity} from './entity.js'; import {player_entity} from './player-entity.js' @@ -8,7 +8,7 @@ import {defs} from '/shared/defs.mjs'; export const npc_entity = (() => { - class NPCController extends entity.Component { + class NPCController extends Component { constructor(params) { super(); this.params_ = params; @@ -48,7 +48,7 @@ export const npc_entity = (() => { } InitComponent() { - this._RegisterHandler('health.death', (m) => { this.OnDeath_(m); }); + this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); this._RegisterHandler('update.position', (m) => { this.OnPosition_(m); }); this._RegisterHandler('update.rotation', (m) => { this.OnRotation_(m); }); } @@ -149,7 +149,7 @@ export const npc_entity = (() => { } this.Broadcast({ - topic: 'load.character', + topic: EVENT_TYPES.LOAD_CHARACTER, model: this.group_, bones: this.bones_, }); diff --git a/client/src/particle-system.ts b/client/src/particle-system.ts index c0919e95..7515d8f2 100644 --- a/client/src/particle-system.ts +++ b/client/src/particle-system.ts @@ -1,8 +1,6 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -export const particle_system = (() => { - - const _VS = ` +const _VS = ` uniform float pointMultiplier; attribute float size; @@ -24,8 +22,8 @@ export const particle_system = (() => { vColour = colour; vBlend = blend; }`; - - const _FS = ` + +const _FS = ` uniform sampler2D diffuseTexture; @@ -39,289 +37,303 @@ export const particle_system = (() => { gl_FragColor.xyz *= gl_FragColor.w; gl_FragColor.w *= vBlend; }`; - - - class LinearSpline { - constructor(lerp) { - this.points_ = []; - this._lerp = lerp; - } - - AddPoint(t, d) { - this.points_.push([t, d]); - } - - Get(t) { - let p1 = 0; - - for (let i = 0; i < this.points_.length; i++) { - if (this.points_[i][0] >= t) { - break; - } - p1 = i; - } - - const p2 = Math.min(this.points_.length - 1, p1 + 1); - - if (p1 == p2) { - return this.points_[p1][1]; - } - - return this._lerp( - (t - this.points_[p1][0]) / ( - this.points_[p2][0] - this.points_[p1][0]), - this.points_[p1][1], this.points_[p2][1]); - } + + +class LinearSpline { + points_: any[]; + _lerp: any; + constructor(lerp) { + this.points_ = []; + this._lerp = lerp; } - - class ParticleEmitter { - constructor() { - this.alphaSpline_ = new LinearSpline((t, a, b) => { - return a + t * (b - a); - }); - - this.colourSpline_ = new LinearSpline((t, a, b) => { - const c = a.clone(); - return c.lerp(b, t); - }); - - this.sizeSpline_ = new LinearSpline((t, a, b) => { - return a + t * (b - a); - }); - - this.emissionRate_ = 0.0; - this.emissionAccumulator_ = 0.0; - this.particles_ = []; - this.emitterLife_ = null; - } - UpdateParticles_(timeElapsed) { - for (let p of this.particles_) { - p.life -= timeElapsed; - } - - this.particles_ = this.particles_.filter(p => { - return p.life > 0.0; - }); - - for (let i = 0; i < this.particles_.length; ++i) { - const p = this.particles_[i]; - const t = 1.0 - p.life / p.maxLife; + AddPoint(t, d) { + this.points_.push([t, d]); + } - if (t < 0 || t > 1) { - let a = 0; - } - - p.rotation += timeElapsed * 0.5; - p.alpha = this.alphaSpline_.Get(t); - p.currentSize = p.size * this.sizeSpline_.Get(t); - p.colour.copy(this.colourSpline_.Get(t)); - - p.position.add(p.velocity.clone().multiplyScalar(timeElapsed)); - - const drag = p.velocity.clone(); - drag.multiplyScalar(timeElapsed * 0.1); - drag.x = Math.sign(p.velocity.x) * Math.min(Math.abs(drag.x), Math.abs(p.velocity.x)); - drag.y = Math.sign(p.velocity.y) * Math.min(Math.abs(drag.y), Math.abs(p.velocity.y)); - drag.z = Math.sign(p.velocity.z) * Math.min(Math.abs(drag.z), Math.abs(p.velocity.z)); - p.velocity.sub(drag); - } - } - - CreateParticle_() { - const life = (Math.random() * 0.75 + 0.25) * 5.0; - return { - position: new THREE.Vector3( - (Math.random() * 2 - 1) * 4.0 + -44, - (Math.random() * 2 - 1) * 4.0 + 0, - (Math.random() * 2 - 1) * 4.0 + 12), - size: (Math.random() * 0.5 + 0.5) * 2.0, - colour: new THREE.Color(), - alpha: 1.0, - life: life, - maxLife: life, - rotation: Math.random() * 2.0 * Math.PI, - velocity: new THREE.Vector3(0, 1, 0), - blend: 0.0, - }; - } + Get(t) { + let p1 = 0; - get IsAlive() { - if (this.emitterLife_ === null) { - return this.particles_.length > 0; - } else { - return this.emitterLife_ > 0.0 || this.particles_.length > 0; + for (let i = 0; i < this.points_.length; i++) { + if (this.points_[i][0] >= t) { + break; } + p1 = i; } - SetLife(life) { - this.emitterLife_ = life; - } + const p2 = Math.min(this.points_.length - 1, p1 + 1); - SetEmissionRate(rate) { - this.emissionRate_ = rate; + if (p1 == p2) { + return this.points_[p1][1]; } - OnUpdate_(_) { + return this._lerp( + (t - this.points_[p1][0]) / ( + this.points_[p2][0] - this.points_[p1][0]), + this.points_[p1][1], this.points_[p2][1]); + } +} + +class ParticleEmitter { + alphaSpline_: LinearSpline; + colourSpline_: LinearSpline; + sizeSpline_: LinearSpline; + emissionRate_: number; + emissionAccumulator_: number; + particles_: any[]; + emitterLife_: any; + constructor() { + this.alphaSpline_ = new LinearSpline((t, a, b) => { + return a + t * (b - a); + }); + + this.colourSpline_ = new LinearSpline((t, a, b) => { + const c = a.clone(); + return c.lerp(b, t); + }); + + this.sizeSpline_ = new LinearSpline((t, a, b) => { + return a + t * (b - a); + }); + + this.emissionRate_ = 0.0; + this.emissionAccumulator_ = 0.0; + this.particles_ = []; + this.emitterLife_ = null; + } + + UpdateParticles_(timeElapsed) { + for (let p of this.particles_) { + p.life -= timeElapsed; } - Update(timeElapsed) { - this.OnUpdate_(timeElapsed); + this.particles_ = this.particles_.filter(p => { + return p.life > 0.0; + }); - if (this.emitterLife_ !== null) { - this.emitterLife_ -= timeElapsed; - } + for (let i = 0; i < this.particles_.length; ++i) { + const p = this.particles_[i]; + const t = 1.0 - p.life / p.maxLife; - if (this.emissionRate_ > 0.0) { - this.emissionAccumulator_ += timeElapsed; - const n = Math.floor(this.emissionAccumulator_ * this.emissionRate_); - this.emissionAccumulator_ -= n / this.emissionRate_; - - for (let i = 0; i < n; i++) { - const p = this.CreateParticle_(); - this.particles_.push(p); - } + if (t < 0 || t > 1) { + let a = 0; } - this.UpdateParticles_(timeElapsed); + p.rotation += timeElapsed * 0.5; + p.alpha = this.alphaSpline_.Get(t); + p.currentSize = p.size * this.sizeSpline_.Get(t); + p.colour.copy(this.colourSpline_.Get(t)); + + p.position.add(p.velocity.clone().multiplyScalar(timeElapsed)); + + const drag = p.velocity.clone(); + drag.multiplyScalar(timeElapsed * 0.1); + drag.x = Math.sign(p.velocity.x) * Math.min(Math.abs(drag.x), Math.abs(p.velocity.x)); + drag.y = Math.sign(p.velocity.y) * Math.min(Math.abs(drag.y), Math.abs(p.velocity.y)); + drag.z = Math.sign(p.velocity.z) * Math.min(Math.abs(drag.z), Math.abs(p.velocity.z)); + p.velocity.sub(drag); } - }; + } - - class ParticleSystem { - constructor(params) { - const uniforms = { - diffuseTexture: { - value: new THREE.TextureLoader().load(params.texture) - }, - pointMultiplier: { - value: window.innerHeight / (2.0 * Math.tan(0.5 * 60.0 * Math.PI / 180.0)) - } - }; - - this.material_ = new THREE.ShaderMaterial({ - uniforms: uniforms, - vertexShader: _VS, - fragmentShader: _FS, - blending: THREE.CustomBlending, - blendEquation: THREE.AddEquation, - blendSrc: THREE.OneFactor, - blendDst: THREE.OneMinusSrcAlphaFactor, - depthTest: true, - depthWrite: false, - transparent: true, - vertexColors: true - }); - - this.camera_ = params.camera; - this.particles_ = []; - - this.geometry_ = new THREE.BufferGeometry(); - this.geometry_.setAttribute('position', new THREE.Float32BufferAttribute([], 3)); - this.geometry_.setAttribute('size', new THREE.Float32BufferAttribute([], 1)); - this.geometry_.setAttribute('colour', new THREE.Float32BufferAttribute([], 4)); - this.geometry_.setAttribute('angle', new THREE.Float32BufferAttribute([], 1)); - this.geometry_.setAttribute('blend', new THREE.Float32BufferAttribute([], 1)); - - this.points_ = new THREE.Points(this.geometry_, this.material_); - - params.parent.add(this.points_); - - this.emitters_ = []; - this.particles_ = []; - - this.UpdateGeometry_(); + CreateParticle_() { + const life = (Math.random() * 0.75 + 0.25) * 5.0; + return { + position: new THREE.Vector3( + (Math.random() * 2 - 1) * 4.0 + -44, + (Math.random() * 2 - 1) * 4.0 + 0, + (Math.random() * 2 - 1) * 4.0 + 12), + size: (Math.random() * 0.5 + 0.5) * 2.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: new THREE.Vector3(0, 1, 0), + blend: 0.0, + }; + } + + get IsAlive() { + if (this.emitterLife_ === null) { + return this.particles_.length > 0; + } else { + return this.emitterLife_ > 0.0 || this.particles_.length > 0; } - - Destroy() { - this.material_.dispose(); - this.geometry_.dispose(); - if (this.points_.parent) { - this.points_.parent.remove(this.points_); - } + } + + SetLife(life) { + this.emitterLife_ = life; + } + + SetEmissionRate(rate) { + this.emissionRate_ = rate; + } + + OnUpdate_(_) { + } + + Update(timeElapsed) { + this.OnUpdate_(timeElapsed); + + if (this.emitterLife_ !== null) { + this.emitterLife_ -= timeElapsed; } - - AddEmitter(e) { - this.emitters_.push(e); + if (this.emissionRate_ > 0.0) { + this.emissionAccumulator_ += timeElapsed; + const n = Math.floor(this.emissionAccumulator_ * this.emissionRate_); + this.emissionAccumulator_ -= n / this.emissionRate_; + + for (let i = 0; i < n; i++) { + const p = this.CreateParticle_(); + this.particles_.push(p); + } } - UpdateGeometry_() { - const positions = []; - const sizes = []; - const colours = []; - const angles = []; - const blends = []; - - const box = new THREE.Box3(); - for (let p of this.particles_) { - positions.push(p.position.x, p.position.y, p.position.z); - colours.push(p.colour.r, p.colour.g, p.colour.b, p.alpha); - sizes.push(p.currentSize); - angles.push(p.rotation); - blends.push(p.blend); - - box.expandByPoint(p.position); + this.UpdateParticles_(timeElapsed); + } +}; + + +class ParticleSystem { + material_: any; + camera_: any; + particles_: any[]; + geometry_: any; + points_: any; + emitters_: any[]; + constructor(params) { + const uniforms = { + diffuseTexture: { + value: new THREE.TextureLoader().load(params.texture) + }, + pointMultiplier: { + value: window.innerHeight / (2.0 * Math.tan(0.5 * 60.0 * Math.PI / 180.0)) } - - this.geometry_.setAttribute( - 'position', new THREE.Float32BufferAttribute(positions, 3)); - this.geometry_.setAttribute( - 'size', new THREE.Float32BufferAttribute(sizes, 1)); - this.geometry_.setAttribute( - 'colour', new THREE.Float32BufferAttribute(colours, 4)); - this.geometry_.setAttribute( - 'angle', new THREE.Float32BufferAttribute(angles, 1)); - this.geometry_.setAttribute( - 'blend', new THREE.Float32BufferAttribute(blends, 1)); - - this.geometry_.attributes.position.needsUpdate = true; - this.geometry_.attributes.size.needsUpdate = true; - this.geometry_.attributes.colour.needsUpdate = true; - this.geometry_.attributes.angle.needsUpdate = true; - this.geometry_.attributes.blend.needsUpdate = true; - this.geometry_.boundingBox = box; - this.geometry_.boundingSphere = new THREE.Sphere(); - - box.getBoundingSphere(this.geometry_.boundingSphere); + }; + + this.material_ = new THREE.ShaderMaterial({ + uniforms: uniforms, + vertexShader: _VS, + fragmentShader: _FS, + blending: THREE.CustomBlending, + blendEquation: THREE.AddEquation, + blendSrc: THREE.OneFactor, + blendDst: THREE.OneMinusSrcAlphaFactor, + depthTest: true, + depthWrite: false, + transparent: true, + vertexColors: true + }); + + this.camera_ = params.camera; + this.particles_ = []; + + this.geometry_ = new THREE.BufferGeometry(); + this.geometry_.setAttribute('position', new THREE.Float32BufferAttribute([], 3)); + this.geometry_.setAttribute('size', new THREE.Float32BufferAttribute([], 1)); + this.geometry_.setAttribute('colour', new THREE.Float32BufferAttribute([], 4)); + this.geometry_.setAttribute('angle', new THREE.Float32BufferAttribute([], 1)); + this.geometry_.setAttribute('blend', new THREE.Float32BufferAttribute([], 1)); + + this.points_ = new THREE.Points(this.geometry_, this.material_); + + params.parent.add(this.points_); + + this.emitters_ = []; + this.particles_ = []; + + this.UpdateGeometry_(); + } + + Destroy() { + this.material_.dispose(); + this.geometry_.dispose(); + if (this.points_.parent) { + this.points_.parent.remove(this.points_); } - - UpdateParticles_(timeElapsed) { - this.particles_ = this.emitters_.map(e => e.particles_); - this.particles_ = this.particles_.flat(); - this.particles_.sort((a, b) => { - const d1 = this.camera_.position.distanceTo(a.position); - const d2 = this.camera_.position.distanceTo(b.position); - - if (d1 > d2) { - return -1; - } - - if (d1 < d2) { - return 1; - } - - return 0; - }); + } + + + AddEmitter(e) { + this.emitters_.push(e); + } + + UpdateGeometry_() { + const positions = []; + const sizes = []; + const colours = []; + const angles = []; + const blends = []; + + const box = new THREE.Box3(); + for (let p of this.particles_) { + positions.push(p.position.x, p.position.y, p.position.z); + colours.push(p.colour.r, p.colour.g, p.colour.b, p.alpha); + sizes.push(p.currentSize); + angles.push(p.rotation); + blends.push(p.blend); + + box.expandByPoint(p.position); } - UpdateEmitters_(timeElapsed) { - for (let i = 0; i < this.emitters_.length; ++i) { - this.emitters_[i].Update(timeElapsed); + this.geometry_.setAttribute( + 'position', new THREE.Float32BufferAttribute(positions, 3)); + this.geometry_.setAttribute( + 'size', new THREE.Float32BufferAttribute(sizes, 1)); + this.geometry_.setAttribute( + 'colour', new THREE.Float32BufferAttribute(colours, 4)); + this.geometry_.setAttribute( + 'angle', new THREE.Float32BufferAttribute(angles, 1)); + this.geometry_.setAttribute( + 'blend', new THREE.Float32BufferAttribute(blends, 1)); + + this.geometry_.attributes.position.needsUpdate = true; + this.geometry_.attributes.size.needsUpdate = true; + this.geometry_.attributes.colour.needsUpdate = true; + this.geometry_.attributes.angle.needsUpdate = true; + this.geometry_.attributes.blend.needsUpdate = true; + this.geometry_.boundingBox = box; + this.geometry_.boundingSphere = new THREE.Sphere(); + + box.getBoundingSphere(this.geometry_.boundingSphere); + } + + UpdateParticles_(timeElapsed) { + this.particles_ = this.emitters_.map(e => e.particles_); + this.particles_ = this.particles_.flat(); + this.particles_.sort((a, b) => { + const d1 = this.camera_.position.distanceTo(a.position); + const d2 = this.camera_.position.distanceTo(b.position); + + if (d1 > d2) { + return -1; } - this.emitters_= this.emitters_.filter(e => e.IsAlive); - } - - Update(timeElapsed) { - this.UpdateEmitters_(timeElapsed); - this.UpdateParticles_(timeElapsed); - this.UpdateGeometry_(); + if (d1 < d2) { + return 1; + } + + return 0; + }); + } + + UpdateEmitters_(timeElapsed) { + for (let i = 0; i < this.emitters_.length; ++i) { + this.emitters_[i].Update(timeElapsed); } - }; - return { - ParticleEmitter: ParticleEmitter, - ParticleSystem: ParticleSystem, - }; -})(); \ No newline at end of file + this.emitters_ = this.emitters_.filter(e => e.IsAlive); + } + + Update(timeElapsed) { + this.UpdateEmitters_(timeElapsed); + this.UpdateParticles_(timeElapsed); + this.UpdateGeometry_(); + } +}; + +export { + ParticleEmitter, + ParticleSystem +} \ No newline at end of file diff --git a/client/src/player-entity.ts b/client/src/player-entity.ts index f3bf579f..f0e8c3e5 100644 --- a/client/src/player-entity.ts +++ b/client/src/player-entity.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {entity} from './entity.js'; import {finite_state_machine} from './finite-state-machine.js'; @@ -36,7 +36,7 @@ export const player_entity = (() => { } }; - class BasicCharacterController extends entity.Component { + class BasicCharacterController extends Component { constructor(params) { super(); this.params_ = params; @@ -60,7 +60,7 @@ export const player_entity = (() => { } InitComponent() { - this._RegisterHandler('health.death', (m) => { this.OnDeath_(m); }); + this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); this._RegisterHandler( 'update.position', (m) => { this.OnUpdatePosition_(m); }); this._RegisterHandler( @@ -140,7 +140,7 @@ export const player_entity = (() => { this.stateMachine_.SetState('idle'); this.Broadcast({ - topic: 'load.character', + topic: EVENT_TYPES.LOAD_CHARACTER, model: this.target_, bones: this.bones_, }); diff --git a/client/src/player-input.ts b/client/src/player-input.ts index 91d4f52d..c10a7d08 100644 --- a/client/src/player-input.ts +++ b/client/src/player-input.ts @@ -1,11 +1,11 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {entity} from "./entity.js"; +import { Component } from "./entity"; export const player_input = (() => { - class PickableComponent extends entity.Component { + class PickableComponent extends Component { constructor() { super(); } @@ -14,7 +14,7 @@ export const player_input = (() => { } }; - class BasicCharacterControllerInput extends entity.Component { + class BasicCharacterControllerInput extends Component { constructor(params) { super(); this._params = params; diff --git a/client/src/player-state.ts b/client/src/player-state.ts index 1d3098d3..caab32f7 100644 --- a/client/src/player-state.ts +++ b/client/src/player-state.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; export const player_state = (() => { diff --git a/client/src/quest-component.ts b/client/src/quest-component.ts index e8d14b0f..ae8a5662 100644 --- a/client/src/quest-component.ts +++ b/client/src/quest-component.ts @@ -1,4 +1,4 @@ -import {entity} from "./entity.js"; +import { Component } from "./entity"; export const quest_component = (() => { @@ -6,7 +6,7 @@ export const quest_component = (() => { const _TITLE = 'Welcome Adventurer!'; const _TEXT = `Welcome to Honeywood adventurer, I see you're the chosen one and also the dragon born and whatever else, you're going to save the world! Also bring the rings back to mordor and defeat the evil dragon, and all the other things. But first, I must test you with some meaningless bullshit tasks that every rpg makes you do to waste time. Go kill like uh 30 ghosts and collect their eyeballs or something. Also go get my drycleaning and pick up my kids from daycare.`; - class QuestComponent extends entity.Component { + class QuestComponent extends Component { constructor() { super(); diff --git a/client/src/render-component.ts b/client/src/render-component.ts index a9b74c6e..0fe7a4d4 100644 --- a/client/src/render-component.ts +++ b/client/src/render-component.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {GLTFLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/GLTFLoader.js'; import {OBJLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/OBJLoader.js'; @@ -8,7 +8,7 @@ import {entity} from './entity.js'; export const render_component = (() => { - class RenderComponent extends entity.Component { + class RenderComponent extends Component { constructor(params) { super(); this.group_ = new THREE.Group(); diff --git a/client/src/scenery-controller.ts b/client/src/scenery-controller.ts index 25248e71..1a08105e 100644 --- a/client/src/scenery-controller.ts +++ b/client/src/scenery-controller.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {entity} from './entity.js'; import {render_component} from './render-component.js'; @@ -92,7 +92,7 @@ export const scenery_controller = (() => { } } - class SceneryController extends entity.Component { + class SceneryController extends Component { constructor(params) { super(); this.params_ = params; diff --git a/client/src/sorceror-effect.ts b/client/src/sorceror-effect.ts index 2a0731f1..f681da1b 100644 --- a/client/src/sorceror-effect.ts +++ b/client/src/sorceror-effect.ts @@ -1,7 +1,7 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {particle_system} from "./particle-system.js"; -import {entity} from "./entity.js"; +import { Component } from "./entity"; export const sorceror_effect = (() => { @@ -49,7 +49,7 @@ export const sorceror_effect = (() => { } }; - class SorcerorEffect extends entity.Component { + class SorcerorEffect extends Component { constructor(params) { super(); this.params_ = params; @@ -67,7 +67,7 @@ export const sorceror_effect = (() => { InitComponent() { this._RegisterHandler('action.attack', (m) => { this.OnAttack_(m); }); - this._RegisterHandler('load.character', (m) => this.OnCharacterLoaded_(m)); + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); } OnCharacterLoaded_(msg) { diff --git a/client/src/spatial-grid-controller.ts b/client/src/spatial-grid-controller.ts index 41dda3a7..411f9633 100644 --- a/client/src/spatial-grid-controller.ts +++ b/client/src/spatial-grid-controller.ts @@ -3,7 +3,7 @@ import {entity} from './entity.js'; export const spatial_grid_controller = (() => { - class SpatialGridController extends entity.Component { + class SpatialGridController extends Component { constructor(params) { super(); diff --git a/client/src/spawners.ts b/client/src/spawners.ts index 10719ac9..bec6faf9 100644 --- a/client/src/spawners.ts +++ b/client/src/spawners.ts @@ -20,7 +20,7 @@ import {blood_effect} from './blood-effect.js'; export const spawners = (() => { - class PlayerSpawner extends entity.Component { + class PlayerSpawner extends Component { constructor(params) { super(); this.params_ = params; @@ -80,7 +80,7 @@ export const spawners = (() => { } }; - class NetworkEntitySpawner extends entity.Component { + class NetworkEntitySpawner extends Component { constructor(params) { super(); this.params_ = params; diff --git a/client/src/terrain-builder-threaded-worker.ts b/client/src/terrain-builder-threaded-worker.ts index 1bd5f051..6ee41a0d 100644 --- a/client/src/terrain-builder-threaded-worker.ts +++ b/client/src/terrain-builder-threaded-worker.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {texture_splatter} from './texture-splatter.js' ; diff --git a/client/src/terrain-chunk.ts b/client/src/terrain-chunk.ts index 8f84aba7..f45479e8 100644 --- a/client/src/terrain-chunk.ts +++ b/client/src/terrain-chunk.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; export const terrain_chunk = (function() { diff --git a/client/src/terrain.ts b/client/src/terrain.ts index 5bcde5ce..d3be9a74 100644 --- a/client/src/terrain.ts +++ b/client/src/terrain.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {entity} from './entity.js'; import {quadtree} from './quadtree.js'; @@ -16,7 +16,7 @@ import {noise} from '/shared/noise.mjs'; export const terrain = (function() { - class TerrainChunkManager extends entity.Component { + class TerrainChunkManager extends Component { constructor(params) { super(); this._Init(params); diff --git a/client/src/texture-splatter.ts b/client/src/texture-splatter.ts index 21b6bb63..9797af6a 100644 --- a/client/src/texture-splatter.ts +++ b/client/src/texture-splatter.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {math} from '/shared/math.mjs'; diff --git a/client/src/textures.ts b/client/src/textures.ts index d71ca257..3fb344de 100644 --- a/client/src/textures.ts +++ b/client/src/textures.ts @@ -1,4 +1,4 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; export const textures = (function() { diff --git a/client/src/third-person-camera.ts b/client/src/third-person-camera.ts index cc7c6513..d3f26a8b 100644 --- a/client/src/third-person-camera.ts +++ b/client/src/third-person-camera.ts @@ -1,10 +1,10 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; import {entity} from './entity.js'; export const third_person_camera = (() => { - class ThirdPersonCamera extends entity.Component { + class ThirdPersonCamera extends Component { constructor(params) { super(); diff --git a/client/src/thre.ts_component.ts b/client/src/thre.ts_component.ts index d7b26b8c..ec7b363f 100644 --- a/client/src/thre.ts_component.ts +++ b/client/src/thre.ts_component.ts @@ -1,6 +1,6 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +import * as THREE from 'three'; -import {entity} from "./entity.js"; +import { Component } from "./entity"; export const threejs_component = (() => { @@ -38,7 +38,7 @@ export const threejs_component = (() => { gl_FragColor = vec4(sky, 1.0); }`; - class ThreeJSController extends entity.Component { + class ThreeJSController extends Component { constructor() { super(); } diff --git a/client/src/ui-controller.ts b/client/src/ui-controller.ts index d76aeecf..89ac26a4 100644 --- a/client/src/ui-controller.ts +++ b/client/src/ui-controller.ts @@ -3,7 +3,7 @@ import {entity} from './entity.js'; export const ui_controller = (() => { - class UIController extends entity.Component { + class UIController extends Component { constructor(params) { super(); this._params = params; diff --git a/server/src/scripts/world-manager.ts b/server/src/scripts/world-manager.ts index 5bb8f6e4..732919b7 100644 --- a/server/src/scripts/world-manager.ts +++ b/server/src/scripts/world-manager.ts @@ -6,6 +6,7 @@ import { WorldEntity } from './world-entity'; import { SpatialHashGrid } from 'shared/src/spatial-hash-grid'; import { HeightGenerator } from 'shared/src/terrain-height'; import { CHARACTER_MODELS } from 'shared/src/defs'; +import {CLASS_TYPES} from 'shared/src/constants' class MonsterSpawner { parent_: any; @@ -101,7 +102,7 @@ class WorldManager { } Add(client, params) { - const models = ['sorceror', 'paladin']; + const models = CLASS_TYPES; const randomClass = models[ Math.floor(Math.random() * models.length)]; diff --git a/shared/src/constants.ts b/shared/src/constants.ts index c0737c44..6e15ee5a 100644 --- a/shared/src/constants.ts +++ b/shared/src/constants.ts @@ -11,24 +11,77 @@ enum EVENT_TYPES { ACTION_ATTACK = 'action.attack', ATTACK = 'attack', ATTACK_DAMAGE = 'attack.damage', - CHAT_MSG = 'chat.msg', CHAT_MESSAGE = 'chat.message', // Why are there two of these? + CHAT_MSG = 'chat.msg', + HEALTH_ADD_EXPERIENCE = 'health.add-experience', + HEALTH_DAMAGE = 'health.damage', + HEALTH_DEATH = 'health.death', + HEALTH_LEVEL = 'health.level', + HEALTH_UPDATE = 'health.update', + INVENTORY_EQUIP = 'inventory.equip', + INVENTORY_UPDATED = 'inventory.updated', + LOAD_CHARACTER = 'load.character', + LOAD_WEAPON = 'load.weapon', LOGIN_COMMIT = 'login.commit', + PLAYER_ACTION = 'player.action', + STATS_NETWORK = 'stats.network', WORLD_INVENTORY = 'world.inventory', - WORLD_UPDATE = 'world.update', WORLD_PLAYER = 'world.player', - WORLD_STATS = 'world.stats' + WORLD_STATS = 'world.stats', + WORLD_UPDATE = 'world.update', +} + +enum KNOWN_ENTITIES { + INVENTORY_CONTROLLER = 'InventoryController', + DATABASE = 'database', + INVENTORY_DATABASE_CONTROLLER = 'InventoryDatabaseController', + LEVEL_UP_SPAWNER = 'level-up-spawner' +} + +enum NAMED_COMPONENTS { + LEVEL_UP_SPAWNER = 'LevelUpComponentSpawner', + +} + +enum CLASS_TYPES_ENUM { + SORCEROR = 'sorceror', + PALADIN = 'paladin', + WARROK = 'warrok', + ZOMBIE = 'zombie' +} + +enum WEAPON_TYPES_ENUM { + AXE = 'weapon.axe1', + SWORD = 'weapon.sword1', + HAMMER = 'weapon.hammer1' } +const CLASS_TYPES = [CLASS_TYPES_ENUM.SORCEROR, CLASS_TYPES_ENUM.PALADIN]; + enum ATTACK_TYPES { MELEE = 'melee' } const _TIMEOUT:number = 600.0; +enum DOM_IDS { + HEALTH_BAR = 'health-bar', + STATS_STRENGTH = 'stats-strength', + STATS_BENCHPRESS = 'stats-benchpress', + STATS_CURL = 'stats-curl', + STATS_EXPERIENCE = 'stats-experience', + STATS_WISDOMNESS = 'stats-wisdomness' +} + export { - STATE_TYPES, - EVENT_TYPES, + _TIMEOUT, ATTACK_TYPES, - _TIMEOUT + CLASS_TYPES, + CLASS_TYPES_ENUM, + EVENT_TYPES, + KNOWN_ENTITIES, + STATE_TYPES, + WEAPON_TYPES_ENUM, + NAMED_COMPONENTS, + DOM_IDS } \ No newline at end of file diff --git a/shared/src/defs.ts b/shared/src/defs.ts index 1f45be63..f18de606 100644 --- a/shared/src/defs.ts +++ b/shared/src/defs.ts @@ -1,7 +1,59 @@ +import { CLASS_TYPES_ENUM, WEAPON_TYPES_ENUM } from "./constants"; +declare module ICharacter { -const _CHARACTER_MODELS = { - paladin: { + export interface Anchors { + rightHand: string; + } + + export interface Attack { + timing: number; + cooldown: number; + type: string; + range: number; + } + + export interface Inventory { + ['inventory-1']?: string; + ['inventory-2']?: string; + ['inventory-equip-1']?: string; + } + + export interface Stats { + health: number; + maxHealth: number; + strength: number; + wisdomness: number; + benchpress: number; + curl: number; + experience: number; + level: number; + } + + export interface RootObject { + base: string; + path: string; + anchors: Anchors; + nameOffset: number; + attack: Attack; + scale: number; + inventory: Inventory; + stats: Stats; + name: string; + } + +} + +interface ICharacterModels { + [CLASS_TYPES_ENUM.PALADIN]: ICharacter.RootObject, + [CLASS_TYPES_ENUM.SORCEROR]: ICharacter.RootObject, + [CLASS_TYPES_ENUM.WARROK]: ICharacter.RootObject, + [CLASS_TYPES_ENUM.ZOMBIE]: ICharacter.RootObject, +} + + +const CHARACTER_MODELS: ICharacterModels = { + [CLASS_TYPES_ENUM.PALADIN]: { base: 'paladin.glb', path: './resources/characters/', anchors: { @@ -16,9 +68,9 @@ const _CHARACTER_MODELS = { }, scale: 6.0, inventory: { - 'inventory-1': 'weapon.axe1', - 'inventory-2': 'weapon.hammer1', - 'inventory-equip-1': 'weapon.sword1', + 'inventory-1': WEAPON_TYPES_ENUM.AXE, + 'inventory-2': WEAPON_TYPES_ENUM.HAMMER, + 'inventory-equip-1': WEAPON_TYPES_ENUM.SWORD, }, stats: { health: 200, @@ -32,7 +84,7 @@ const _CHARACTER_MODELS = { }, name: 'Paladin', }, - sorceror: { + [CLASS_TYPES_ENUM.SORCEROR]: { base: 'sorceror.glb', path: './resources/characters/', anchors: { @@ -59,7 +111,7 @@ const _CHARACTER_MODELS = { }, name: 'Sorceror', }, - warrok: { + [CLASS_TYPES_ENUM.WARROK]: { base: 'warrok.glb', path: './resources/characters/', anchors: { @@ -86,7 +138,7 @@ const _CHARACTER_MODELS = { }, name: 'Monster Guy', }, - zombie: { + [CLASS_TYPES_ENUM.ZOMBIE]: { base: 'zombie-guy.glb', path: './resources/characters/', anchors: { @@ -115,8 +167,26 @@ const _CHARACTER_MODELS = { }, }; -const _WEAPONS_DATA = { - 'weapon.axe1': +interface IWeaponsData { + [WEAPON_TYPES_ENUM.AXE]: IWeaponaxe1; + [WEAPON_TYPES_ENUM.SWORD]: IWeaponaxe1; + [WEAPON_TYPES_ENUM.HAMMER]: IWeaponaxe1; +} + +interface IWeaponaxe1 { + type: string; + damage: number; + renderParams: RenderParams; +} + +interface RenderParams { + name: string; + scale: number; + icon: string; +} + +const WEAPONS_DATA: IWeaponsData = { + [WEAPON_TYPES_ENUM.AXE]: { type: 'weapon', damage: 3, @@ -126,7 +196,7 @@ const _WEAPONS_DATA = { icon: 'war-axe-64.png', }, }, - 'weapon.sword1': + [WEAPON_TYPES_ENUM.SWORD]: { type: 'weapon', damage: 3, @@ -136,7 +206,7 @@ const _WEAPONS_DATA = { icon: 'pointy-sword-64.png', }, }, - 'weapon.hammer1': + [WEAPON_TYPES_ENUM.HAMMER]: { type: 'weapon', damage: 3, @@ -148,7 +218,5 @@ const _WEAPONS_DATA = { }, }; - -const CHARACTER_MODELS = _CHARACTER_MODELS; -const WEAPONS_DATA = _WEAPONS_DATA; +export type { ICharacter }; export { CHARACTER_MODELS, WEAPONS_DATA } \ No newline at end of file From 36e24d7881ad063a7aeb14fff6da5eaa3d19a879 Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Tue, 30 Mar 2021 17:34:06 -0400 Subject: [PATCH 08/13] continuing to retype things --- client/src/attacker-controller.ts | 59 +- client/src/blood-effect.ts | 18 +- client/src/entity.ts | 3 +- client/src/index.ts | 20 +- client/src/inventory-controller.ts | 16 +- client/src/level-up-component.ts | 107 ++-- client/src/load-controller.ts | 10 +- client/src/loading-manager.ts | 55 +- client/src/main.ts | 135 +++-- client/src/network-controller.ts | 293 +++++---- client/src/network-entity-controller.ts | 181 +++--- client/src/network-player-controller.ts | 150 +++-- client/src/npc-entity.ts | 54 +- client/src/particle-system.ts | 1 + client/src/player-entity.ts | 516 ++++++++-------- client/src/player-input.ts | 243 ++++---- client/src/player-state.ts | 562 +++++++++--------- client/src/quadtree.ts | 275 ++++----- client/src/quest-component.ts | 9 +- client/src/render-component.ts | 288 +++++---- client/src/scenery-controller.ts | 472 +++++++-------- client/src/sorceror-effect.ts | 220 +++---- client/src/spatial-grid-controller.ts | 89 ++- client/src/spawners.ts | 248 ++++---- client/src/terrain-builder-threaded-worker.ts | 111 ++-- client/src/terrain-builder-threaded.ts | 268 +++++---- client/src/terrain-builder.ts | 151 ++--- client/src/terrain-chunk.ts | 104 ++-- client/src/terrain.ts | 4 +- client/src/texture-splatter.ts | 2 +- client/src/third-person-camera.ts | 4 +- ...e.ts_component.ts => threejs_component.ts} | 2 +- client/src/ui-controller.ts | 295 +++++---- server/dist/scripts/world-client.js | 6 +- server/dist/scripts/world-manager.js | 2 +- server/src/scripts/world-client.ts | 6 +- shared/src/constants.ts | 61 +- 37 files changed, 2553 insertions(+), 2487 deletions(-) rename client/src/{thre.ts_component.ts => threejs_component.ts} (99%) diff --git a/client/src/attacker-controller.ts b/client/src/attacker-controller.ts index 6f6f2f9e..88f4456c 100644 --- a/client/src/attacker-controller.ts +++ b/client/src/attacker-controller.ts @@ -1,37 +1,30 @@ import * as THREE from 'three'; -import {Component} from './entity'; -import {EVENT_TYPES} from 'shared/src/constants' - - -export const attack_controller = (() => { - - class AttackController extends Component { - action_: any; - - constructor() { - super(); - this.action_ = null; - } - - InitComponent() { - this._RegisterHandler(EVENT_TYPES.PLAYER_ACTION, (m: {action: EVENT_TYPES}) => { this._OnAnimAction(m); }); - } - - _OnAnimAction(m) { - if (m.action != EVENT_TYPES.ATTACK) { - this.action_ = m.action; - return; - } else if (m.action != this.action_) { - this.action_ = m.action; - this.Broadcast({ - topic: EVENT_TYPES.ACTION_ATTACK, - }); - } +import { Component } from './entity'; +import { EVENT_TYPES } from 'shared/src/constants' +class AttackController extends Component { + action_: any; + + constructor() { + super(); + this.action_ = null; + } + + InitComponent() { + this._RegisterHandler(EVENT_TYPES.PLAYER_ACTION, (m: { action: EVENT_TYPES }) => { this._OnAnimAction(m); }); + } + + _OnAnimAction(m) { + if (m.action != EVENT_TYPES.ATTACK) { + this.action_ = m.action; + return; + } else if (m.action != this.action_) { + this.action_ = m.action; + this.Broadcast({ + topic: EVENT_TYPES.ACTION_ATTACK, + }); } - }; + } +}; - return { - AttackController: AttackController, - }; -})(); \ No newline at end of file +export { AttackController } \ No newline at end of file diff --git a/client/src/blood-effect.ts b/client/src/blood-effect.ts index cf1f9224..dd36e04f 100644 --- a/client/src/blood-effect.ts +++ b/client/src/blood-effect.ts @@ -2,9 +2,7 @@ import * as THREE from 'three'; import { ParticleEmitter, ParticleSystem } from "./particle-system"; import { Component } from "./entity"; - -export const blood_effect = (() => { - +import { CLASS_TYPES_ENUM, EVENT_TYPES, STATE_TYPES } from 'shared/src/constants'; class BloodEffectEmitter extends ParticleEmitter { parent_: any; blend_: number; @@ -138,7 +136,7 @@ export const blood_effect = (() => { } InitComponent() { - this._RegisterHandler('events.network', (m) => { this.OnEvents_(m); }); + this._RegisterHandler(EVENT_TYPES.EVENTS_NETWORK, (m) => { this.OnEvents_(m); }); this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); } @@ -152,14 +150,14 @@ export const blood_effect = (() => { } for (let e of msg.value) { - if (e.type != 'attack') { + if (e.type != STATE_TYPES.ATTACK) { continue; } // Another hack const hc = e.attacker.GetComponent('HealthComponent'); - if (hc.stats_.desc.character.class != 'sorceror') { + if (hc.stats_.desc.character.class != CLASS_TYPES_ENUM.SORCEROR) { this.EmitBloodFX_(); } else { this.EmitFireFX_(); @@ -168,6 +166,7 @@ export const blood_effect = (() => { } EmitFireFX_() { + // dem hips const targets = ['Head', 'Hips']; for (let t of targets) { const b = this.bones_[t]; @@ -237,7 +236,6 @@ export const blood_effect = (() => { } } - return { - BloodEffect: BloodEffect, - }; -})(); \ No newline at end of file + + +export {BloodEffect, FireFXEmitter, BloodEffectEmitter} \ No newline at end of file diff --git a/client/src/entity.ts b/client/src/entity.ts index 26743033..7f500605 100644 --- a/client/src/entity.ts +++ b/client/src/entity.ts @@ -8,6 +8,7 @@ class Entity { _handlers: {}; parent_: any; dead_: boolean; + Account: any; constructor() { this._name = null; @@ -124,7 +125,7 @@ class Entity { class Component { parent_: any; - constructor() { + constructor(params?) { this.parent_ = null; } diff --git a/client/src/index.ts b/client/src/index.ts index 2045cd3d..b66cba71 100644 --- a/client/src/index.ts +++ b/client/src/index.ts @@ -4,8 +4,9 @@ import * as THREE from 'three'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; -import { io, Socket } from 'socket.io-client'; -import { STATE_TYPES } from 'shared/src/constants'; +import { io } from 'socket.io-client'; +import type { Socket } from 'socket.io-client'; +import { EVENT_TYPES, STATE_TYPES } from 'shared/src/constants'; const _CHARACTER_MODELS = { @@ -813,7 +814,7 @@ class PlayerEntity { if (this.updateTimer_ <= 0.0 && this.controls_.IsLoaded) { this.updateTimer_ = 0.1; this.params_.socket.emit( - 'world.update', + EVENT_TYPES.WORLD_UPDATE, this.controls_.CreateTransformPacket(), ); } @@ -1014,7 +1015,7 @@ class BasicMMODemo { entities_: any; chatbox_: Chatbox; previousRAF_: any; - socket_: Socket; + socket_: Socket; playerID_: string; @@ -1132,10 +1133,11 @@ class BasicMMODemo { transports: ['websocket'], }); - this.socket_.on("connect", () => { + // The socket.io TS definition is wrong I think. This is a hack. + (this.socket_ as { on: (type: EVENT_TYPES, cb: () => void) => void }).on(EVENT_TYPES.CONNECT, () => { console.log(this.socket_.id); const randomName = this.GenerateRandomName_(); - this.socket_.emit('login.commit', randomName); + this.socket_.emit(EVENT_TYPES.LOGIN_COMMIT, randomName); }); this.socket_.on("disconnect", () => { @@ -1148,11 +1150,11 @@ class BasicMMODemo { } OnChat_(txt) { - this.socket_.emit('chat.msg', txt); + this.socket_.emit(EVENT_TYPES.CHAT_MSG, txt); } OnMessage_(e, d) { - if (e == 'world.player') { + if (e == EVENT_TYPES.WORLD_PLAYER) { this.playerID_ = d.id; const e = new PlayerEntity({ scene: this.scene_, @@ -1163,7 +1165,7 @@ class BasicMMODemo { e.UpdateTransform(d.transform); this.entities_[d.id] = e; console.log('entering world: ' + d.id); - } else if (e == 'world.update') { + } else if (e == EVENT_TYPES.WORLD_UPDATE) { const updates = d; const alive = {}; diff --git a/client/src/inventory-controller.ts b/client/src/inventory-controller.ts index ad7677bf..714daf40 100644 --- a/client/src/inventory-controller.ts +++ b/client/src/inventory-controller.ts @@ -1,4 +1,4 @@ -import { EVENT_TYPES, KNOWN_ENTITIES } from 'shared/src/constants'; +import { EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES } from 'shared/src/constants'; import { Component } from './entity'; class InventoryDatabaseController extends Component { @@ -20,8 +20,8 @@ class InventoryDatabaseController extends Component { class UIInventoryController extends Component { inventory_: any; - constructor() { - super(); + constructor(params) { + super(params); } InitEntity() { @@ -81,7 +81,7 @@ class UIInventoryController extends Component { SetItemAtSlot_(slot, itemName) { const div = document.getElementById(slot); const item = this.GetItemDefinition_(itemName); - if (item) { + if (item?.renderParams?.icon) { const path = './resources/icons/weapons/' + item.renderParams.icon; div.style.backgroundImage = "url('" + path + "')"; } else { @@ -93,7 +93,7 @@ class UIInventoryController extends Component { class InventoryController extends Component { inventory_: {}; - constructor() { + constructor(params?) { super(); this.inventory_ = this.CreateEmpty_(); @@ -102,14 +102,14 @@ class InventoryController extends Component { CreateEmpty_() { const inventory = {}; for (let i = 1; i <= 24; ++i) { - inventory['inventory-' + i] = { + inventory[INVENTORY_TYPES.DEFAULT_PREFIX + i] = { type: 'inventory', value: null, }; } for (let i = 1; i <= 8; ++i) { - inventory['inventory-equip-' + i] = { + inventory[INVENTORY_TYPES.EQUIP_PREFIX + i] = { type: 'equip', value: null, }; @@ -123,7 +123,7 @@ class InventoryController extends Component { InitComponent() { // Hack - this._RegisterHandler('network.inventory', (m) => this.OnNetworkUpdate_(m)); + this._RegisterHandler(EVENT_TYPES.NETWORK_INVENTORY, (m) => this.OnNetworkUpdate_(m)); } OnNetworkUpdate_(msg) { diff --git a/client/src/level-up-component.ts b/client/src/level-up-component.ts index 101a029a..f0cecfbf 100644 --- a/client/src/level-up-component.ts +++ b/client/src/level-up-component.ts @@ -1,64 +1,65 @@ import * as THREE from 'three'; -import {particle_system} from "./particle-system.js"; -import { Component } from "./entity"; +import { ParticleSystem } from "./particle-system"; +import { Component, Entity } from "./entity"; -export const level_up_component = (() => { +class LevelUpComponentSpawner extends Component { + _params: any; + constructor(params) { + super(); + this._params = params; + } - class LevelUpComponentSpawner extends Component { - constructor(params) { - super(); - this._params = params; - } + Spawn(pos) { + const e = new Entity(); + e.SetPosition(pos); + e.AddComponent(new LevelUpComponent(this._params)); + this.Manager.Add(e); - Spawn(pos) { - const e = new entity.Entity(); - e.SetPosition(pos); - e.AddComponent(new LevelUpComponent(this._params)); - this.Manager.Add(e); + return e; + } +}; - return e; - } - }; +class LevelUpComponent extends Component { + _params: any; + _particles: any; + constructor(params) { + super(); + this._params = params; - class LevelUpComponent extends Component { - constructor(params) { - super(); - this._params = params; + this._particles = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/ball.png', + }); + this._particles._alphaSpline.AddPoint(0.0, 0.0); + this._particles._alphaSpline.AddPoint(0.1, 1.0); + this._particles._alphaSpline.AddPoint(0.7, 1.0); + this._particles._alphaSpline.AddPoint(1.0, 0.0); - this._particles = new particle_system.ParticleSystem({ - camera: params.camera, - parent: params.scene, - texture: './resources/textures/ball.png', - }); - this._particles._alphaSpline.AddPoint(0.0, 0.0); - this._particles._alphaSpline.AddPoint(0.1, 1.0); - this._particles._alphaSpline.AddPoint(0.7, 1.0); - this._particles._alphaSpline.AddPoint(1.0, 0.0); - - this._particles._colourSpline.AddPoint(0.0, new THREE.Color(0x00FF00)); - this._particles._colourSpline.AddPoint(0.5, new THREE.Color(0x40C040)); - this._particles._colourSpline.AddPoint(1.0, new THREE.Color(0xFF4040)); - - this._particles._sizeSpline.AddPoint(0.0, 0.05); - this._particles._sizeSpline.AddPoint(0.5, 0.25); - this._particles._sizeSpline.AddPoint(1.0, 0.0); - } + this._particles._colourSpline.AddPoint(0.0, new THREE.Color(0x00FF00)); + this._particles._colourSpline.AddPoint(0.5, new THREE.Color(0x40C040)); + this._particles._colourSpline.AddPoint(1.0, new THREE.Color(0xFF4040)); - InitComponent() { - this._particles.AddParticles(this.Parent.Position, 300); - } - - Update(timeElapsed) { - this._particles.Step(timeElapsed); - if (this._particles._particles.length == 0) { - this.Parent.SetActive(false); - } + this._particles._sizeSpline.AddPoint(0.0, 0.05); + this._particles._sizeSpline.AddPoint(0.5, 0.25); + this._particles._sizeSpline.AddPoint(1.0, 0.0); + } + + InitComponent() { + this._particles.AddParticles(this.Parent.Position, 300); + } + + Update(timeElapsed) { + this._particles.Step(timeElapsed); + if (this._particles._particles.length == 0) { + this.Parent.SetActive(false); } } - - return { - LevelUpComponent: LevelUpComponent, - LevelUpComponentSpawner: LevelUpComponentSpawner, - }; -})(); \ No newline at end of file +} + + +export { + LevelUpComponent, + LevelUpComponentSpawner, +} \ No newline at end of file diff --git a/client/src/load-controller.ts b/client/src/load-controller.ts index 480f4aa8..1b051c72 100644 --- a/client/src/load-controller.ts +++ b/client/src/load-controller.ts @@ -1,8 +1,10 @@ import * as THREE from 'three'; -import {FBXLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/FBXLoader.js'; -import {GLTFLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/GLTFLoader.js'; -import {SkeletonUtils} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/utils/SkeletonUtils.js'; + + +import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader'; +import {FBXLoader} from 'three/examples/jsm/loaders/FBXLoader'; +import {SkeletonUtils} from 'three/examples/jsm/utils/SkeletonUtils.js'; import { Component } from "./entity"; @@ -10,6 +12,8 @@ import { Component } from "./entity"; export const load_controller = (() => { class LoadController extends Component { + textures_: {}; + models_: {}; constructor() { super(); diff --git a/client/src/loading-manager.ts b/client/src/loading-manager.ts index 6f615ec5..b700a678 100644 --- a/client/src/loading-manager.ts +++ b/client/src/loading-manager.ts @@ -1,32 +1,31 @@ +// LoadingManager seems to be broken when you attempt to load multiple +// resources multiple times, only first onLoad is called. +// So roll our own. +class OurLoadingManager { + loader_: any; + files_: Set; + onLoad: () => void; + constructor(loader) { + this.loader_ = loader; + this.files_ = new Set(); + this.onLoad = () => { }; + } -export const loading_manager = (() => { + load(file, cb) { + this.files_.add(file); - // LoadingManager seems to be broken when you attempt to load multiple - // resources multiple times, only first onLoad is called. - // So roll our own. - class OurLoadingManager { - constructor(loader) { - this.loader_ = loader; - this.files_ = new Set(); - this.onLoad = () => {}; - } - - load(file, cb) { - this.files_.add(file); - - this.loader_.load(file, (result) => { - this.files_.delete(file); - cb(result); - - if (this.files_.size == 0) { - this.onLoad(); - } - }); - } - }; + this.loader_.load(file, (result) => { + this.files_.delete(file); + cb(result); - return { - OurLoadingManager: OurLoadingManager, - }; -})(); \ No newline at end of file + if (this.files_.size == 0) { + this.onLoad(); + } + }); + } +}; + +export { + OurLoadingManager +} \ No newline at end of file diff --git a/client/src/main.ts b/client/src/main.ts index 8d633e4a..7790d7ce 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,32 +1,41 @@ -import {GUI} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/libs/dat.gui.module.js'; +import { GUI } from 'three/examples/jsm/libs/dat.gui.module'; -import {entity_manager} from 'shared/src/entity-manager'; -import {entity} from './entity.js'; -import {ui_controller} from './ui-controller.js'; -import {level_up_component} from './level-up-component.js'; -import {network_controller} from './network-controller.js'; -import {scenery_controller} from './scenery-controller.js'; -import {load_controller} from './load-controller.js'; -import {spawners} from './spawners.js'; -import {terrain} from './terrain.js'; -import {inventory_controller} from './inventory-controller.js'; +import { EntityManager } from 'shared/src/entity-manager'; +import { Entity } from './entity'; +import { UIController } from './ui-controller'; +import { LevelUpComponentSpawner } from './level-up-component'; +import { NetworkController } from './network-controller'; +import { SceneryController } from './scenery-controller'; +import { load_controller } from './load-controller'; +import { PlayerSpawner, NetworkEntitySpawner } from './spawners'; +import { terrain } from './terrain'; +import { InventoryDatabaseController } from './inventory-controller'; -import {spatial_hash_grid} from '/shared/spatial-hash-grid.mjs'; -import {defs} from '/shared/defs.mjs'; -import {threejs_component} from './threejs_component.js'; +import { SpatialHashGrid } from 'shared/src/spatial-hash-grid'; +import { WEAPONS_DATA } from 'shared/src/defs'; +import { threejs_component } from './threejs_component'; +import { DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS } from 'shared/src/constants'; class CrappyMMOAttempt { + entityManager_: EntityManager; + grid_: any; + previousRAF_: any; + _guiParams: { general: {}; }; + _gui: any; + scene_: any; + camera_: any; + threejs_: any; constructor() { this._Initialize(); } _Initialize() { - this.entityManager_ = new entity_manager.EntityManager(); + this.entityManager_ = new EntityManager(); - document.getElementById('login-ui').style.visibility = 'visible'; - document.getElementById('login-button').onclick = () => { + document.getElementById(DOM_IDS.LOGIN_UI).style.visibility = 'visible'; + document.getElementById(DOM_IDS.LOGIN_BUTTON).onclick = () => { this.OnGameStarted_(); }; } @@ -34,8 +43,8 @@ class CrappyMMOAttempt { OnGameStarted_() { this.CreateGUI_(); - this.grid_ = new spatial_hash_grid.SpatialHashGrid( - [[-1000, -1000], [1000, 1000]], [100, 100]); + this.grid_ = new SpatialHashGrid( + [[-1000, -1000], [1000, 1000]], [100, 100]); this.LoadControllers_(); this.LoadPlayer_(); @@ -56,66 +65,66 @@ class CrappyMMOAttempt { } LoadControllers_() { - const threejs = new entity.Entity(); + const threejs = new Entity(); threejs.AddComponent(new threejs_component.ThreeJSController()); - this.entityManager_.Add(threejs); + this.entityManager_.Add(threejs, null); // Hack - this.scene_ = threejs.GetComponent('ThreeJSController').scene_; - this.camera_ = threejs.GetComponent('ThreeJSController').camera_; - this.threejs_ = threejs.GetComponent('ThreeJSController').threejs_; + this.scene_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).scene_; + this.camera_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).camera_; + this.threejs_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).threejs_; - const ui = new entity.Entity(); - ui.AddComponent(new ui_controller.UIController()); - this.entityManager_.Add(ui, 'ui'); + const ui = new Entity(); + ui.AddComponent(new UIController(null)); + this.entityManager_.Add(ui, KNOWN_ENTITIES.UI); - const network = new entity.Entity(); - network.AddComponent(new network_controller.NetworkController()); - this.entityManager_.Add(network, 'network'); + const network = new Entity(); + network.AddComponent(new NetworkController(null)); + this.entityManager_.Add(network, KNOWN_ENTITIES.NETWORK); - const t = new entity.Entity(); + const t = new Entity(); t.AddComponent(new terrain.TerrainChunkManager({ - scene: this.scene_, - target: 'player', - gui: this._gui, - guiParams: this._guiParams, - threejs: this.threejs_, + scene: this.scene_, + target: 'player', + gui: this._gui, + guiParams: this._guiParams, + threejs: this.threejs_, })); - this.entityManager_.Add(t, 'terrain'); + this.entityManager_.Add(t, KNOWN_ENTITIES.TERRAIN); - const l = new entity.Entity(); + const l = new Entity(); l.AddComponent(new load_controller.LoadController()); - this.entityManager_.Add(l, 'loader'); + this.entityManager_.Add(l, KNOWN_ENTITIES.LOADER); - const scenery = new entity.Entity(); - scenery.AddComponent(new scenery_controller.SceneryController({ - scene: this.scene_, - grid: this.grid_, + const scenery = new Entity(); + scenery.AddComponent(new SceneryController({ + scene: this.scene_, + grid: this.grid_, })); - this.entityManager_.Add(scenery, 'scenery'); + this.entityManager_.Add(scenery, KNOWN_ENTITIES.SCENERY); - const spawner = new entity.Entity(); - spawner.AddComponent(new spawners.PlayerSpawner({ - grid: this.grid_, - scene: this.scene_, - camera: this.camera_, + const spawner = new Entity(); + spawner.AddComponent(new PlayerSpawner({ + grid: this.grid_, + scene: this.scene_, + camera: this.camera_, })); - spawner.AddComponent(new spawners.NetworkEntitySpawner({ - grid: this.grid_, - scene: this.scene_, - camera: this.camera_, + spawner.AddComponent(new NetworkEntitySpawner({ + grid: this.grid_, + scene: this.scene_, + camera: this.camera_, })); - this.entityManager_.Add(spawner, 'spawners'); + this.entityManager_.Add(spawner, KNOWN_ENTITIES.SPAWNERS); - const database = new entity.Entity(); - database.AddComponent(new inventory_controller.InventoryDatabaseController()); + const database = new Entity(); + database.AddComponent(new InventoryDatabaseController()); this.entityManager_.Add(database, KNOWN_ENTITIES.DATABASE); // HACK - for (let k in defs.WEAPONS_DATA) { + for (let k in WEAPONS_DATA) { database.GetComponent(KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER).AddItem( - k, defs.WEAPONS_DATA[k]); + k, WEAPONS_DATA[k]); } } @@ -125,12 +134,12 @@ class CrappyMMOAttempt { scene: this.scene_, }; - const levelUpSpawner = new entity.Entity(); - levelUpSpawner.AddComponent(new level_up_component.LevelUpComponentSpawner({ - camera: this.camera_, - scene: this.scene_, + const levelUpSpawner = new Entity(); + levelUpSpawner.AddComponent(new LevelUpComponentSpawner({ + camera: this.camera_, + scene: this.scene_, })); - this.entityManager_.Add(levelUpSpawner, 'level-up-spawner'); + this.entityManager_.Add(levelUpSpawner, KNOWN_ENTITIES.LEVEL_UP_SPAWNER); } _OnWindowResize() { diff --git a/client/src/network-controller.ts b/client/src/network-controller.ts index f02a86b5..05c7fbab 100644 --- a/client/src/network-controller.ts +++ b/client/src/network-controller.ts @@ -1,168 +1,165 @@ -import 'https://cdn.jsdelivr.net/npm/socket.io-client@3.1.0/dist/socket.io.js'; - - -import {entity} from './entity.js'; -import { ui_controller } from './ui-controller.js'; - - -export const network_controller = (() => { - - class NetworkController extends Component { - constructor(params) { - super(); - - this.playerID_ = null; - this.SetupSocket_(); +import { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } from 'shared/src/constants'; +import { io } from 'socket.io-client'; + + +import { Component } from './entity'; +import { UIController } from './ui-controller'; + +class NetworkController extends Component { + playerID_: any; + socket_: any; + constructor(params) { + super(); + + this.playerID_ = null; + this.SetupSocket_(); + } + + GenerateRandomName_() { + const names1 = [ + 'Aspiring', 'Nameless', 'Cautionary', 'Excited', + 'Modest', 'Maniacal', 'Caffeinated', 'Sleepy', + 'Passionate', 'Medical', + ]; + const names2 = [ + 'Painter', 'Cheese Guy', 'Giraffe', 'Snowman', + 'Doberwolf', 'Cocktail', 'Fondler', 'Typist', + 'Noodler', 'Arborist', 'Peeper' + ]; + const n1 = names1[ + Math.floor(Math.random() * names1.length)]; + const n2 = names2[ + Math.floor(Math.random() * names2.length)]; + return n1 + ' ' + n2; + } + + SetupSocket_() { + this.socket_ = io('ws://localhost:3000', { + reconnection: false, + transports: ['websocket'], + timeout: 10000, + }); + + this.socket_.on(EVENT_TYPES.CONNECT, () => { + console.log(this.socket_.id); + const randomName = this.GenerateRandomName_(); + // Input validation is for losers + this.socket_.emit( + EVENT_TYPES.LOGIN_COMMIT, (document.getElementById('login-input') as HTMLInputElement).value); + }); + + this.socket_.on("disconnect", () => { + console.log('DISCONNECTED: ' + this.socket_.id); // undefined + }); + + this.socket_.onAny((e, d) => { + this.OnMessage_(e, d); + }); + } + + SendChat(txt) { + this.socket_.emit(EVENT_TYPES.CHAT_MSG, txt); + } + + SendTransformUpdate(transform) { + this.socket_.emit(EVENT_TYPES.WORLD_UPDATE, transform); + } + + SendActionAttack_() { + this.socket_.emit(EVENT_TYPES.ACTION_ATTACK); + } + + SendInventoryChange_(packet) { + this.socket_.emit(EVENT_TYPES.WORLD_INVENTORY, packet); + } + + GetEntityID_(serverID) { + if (serverID == this.playerID_) { + return 'player'; + } else { + return '__npc__' + serverID; } + } - GenerateRandomName_() { - const names1 = [ - 'Aspiring', 'Nameless', 'Cautionary', 'Excited', - 'Modest', 'Maniacal', 'Caffeinated', 'Sleepy', - 'Passionate', 'Medical', - ]; - const names2 = [ - 'Painter', 'Cheese Guy', 'Giraffe', 'Snowman', - 'Doberwolf', 'Cocktail', 'Fondler', 'Typist', - 'Noodler', 'Arborist', 'Peeper' - ]; - const n1 = names1[ - Math.floor(Math.random() * names1.length)]; - const n2 = names2[ - Math.floor(Math.random() * names2.length)]; - return n1 + ' ' + n2; - } + OnMessage_(e, d) { + if (e == EVENT_TYPES.WORLD_PLAYER) { + const spawner = this.FindEntity(KNOWN_ENTITIES.SPAWNERS).GetComponent( + NAMED_COMPONENTS.PLAYER_SPAWNER); - SetupSocket_() { - this.socket_ = io('ws://localhost:3000', { - reconnection: false, - transports: ['websocket'], - timeout: 10000, - }); - - this.socket_.on("connect", () => { - console.log(this.socket_.id); - const randomName = this.GenerateRandomName_(); - // Input validation is for losers - this.socket_.emit( - 'login.commit', document.getElementById('login-input').value); - }); - - this.socket_.on("disconnect", () => { - console.log('DISCONNECTED: ' + this.socket_.id); // undefined - }); - - this.socket_.onAny((e, d) => { - this.OnMessage_(e, d); + const player = spawner.Spawn(d.desc); + player.Broadcast({ + topic: EVENT_TYPES.NETWORK_UPDATE, + transform: d.transform, }); - } - - SendChat(txt) { - this.socket_.emit('chat.msg', txt); - } - - SendTransformUpdate(transform) { - this.socket_.emit('world.update', transform); - } - - SendActionAttack_() { - this.socket_.emit('action.attack'); - } - - SendInventoryChange_(packet) { - this.socket_.emit('world.inventory', packet); - } - GetEntityID_(serverID) { - if (serverID == this.playerID_) { - return 'player'; - } else { - return '__npc__' + serverID; - } - } - - OnMessage_(e, d) { - if (e == 'world.player') { - const spawner = this.FindEntity('spawners').GetComponent( - 'PlayerSpawner'); - - const player = spawner.Spawn(d.desc); - player.Broadcast({ - topic: 'network.update', - transform: d.transform, - }); - - player.Broadcast({ - topic: 'network.inventory', - inventory: d.desc.character.inventory, - }); + player.Broadcast({ + topic: EVENT_TYPES.NETWORK_INVENTORY, + inventory: d.desc.character.inventory, + }); - console.log('entering world: ' + d.id); - this.playerID_ = d.id; - } else if (e == 'world.update') { - const updates = d; + console.log('entering world: ' + d.id); + this.playerID_ = d.id; + } else if (e == EVENT_TYPES.WORLD_UPDATE) { + const updates = d; - const spawner = this.FindEntity('spawners').GetComponent( - 'NetworkEntitySpawner'); + const spawner = this.FindEntity(KNOWN_ENTITIES.SPAWNERS).GetComponent( + NAMED_COMPONENTS.NETWORK_ENTITY_SPAWNER); - const ui = this.FindEntity('ui').GetComponent('UIController'); + const ui = this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER); - for (let u of updates) { - const id = this.GetEntityID_(u.id); + for (let u of updates) { + const id = this.GetEntityID_(u.id); - let npc = null; - if ('desc' in u) { - npc = spawner.Spawn(id, u.desc); - - npc.Broadcast({ - topic: 'network.inventory', - inventory: u.desc.character.inventory, - }); - } else { - npc = this.FindEntity(id); - } - - // Translate events, hardcoded, bad, sorry - let events = []; - if (u.events) { - for (let e of u.events) { - events.push({ - type: e.type, - target: this.FindEntity(this.GetEntityID_(e.target)), - attacker: this.FindEntity(this.GetEntityID_(e.attacker)), - amount: e.amount, - }); - } - } - - ui.AddEventMessages(events); + let npc = null; + if ('desc' in u) { + npc = spawner.Spawn(id, u.desc); npc.Broadcast({ - topic: 'network.update', - transform: u.transform, - stats: u.stats, - events: events, + topic: EVENT_TYPES.NETWORK_INVENTORY, + inventory: u.desc.character.inventory, }); + } else { + npc = this.FindEntity(id); } - } else if (e == 'chat.message') { - this.FindEntity('ui').GetComponent('UIController').AddChatMessage(d); - } else if (e == 'world.inventory') { - const id = this.GetEntityID_(d[0]); - - const e = this.FindEntity(id); - if (!e) { - return; + + // Translate events, hardcoded, bad, sorry + let events = []; + if (u.events) { + for (let e of u.events) { + events.push({ + type: e.type, + target: this.FindEntity(this.GetEntityID_(e.target)), + attacker: this.FindEntity(this.GetEntityID_(e.attacker)), + amount: e.amount, + }); + } } - e.Broadcast({ - topic: 'network.inventory', - inventory: d[1], + ui.AddEventMessages(events); + + npc.Broadcast({ + topic: EVENT_TYPES.NETWORK_UPDATE, + transform: u.transform, + stats: u.stats, + events: events, }); } + } else if (e == 'chat.message') { + this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER).AddChatMessage(d); + } else if (e == EVENT_TYPES.WORLD_INVENTORY) { + const id = this.GetEntityID_(d[0]); + + const e = this.FindEntity(id); + if (!e) { + return; + } + + e.Broadcast({ + topic: EVENT_TYPES.NETWORK_INVENTORY, + inventory: d[1], + }); } - }; + } +}; - return { - NetworkController: NetworkController - }; -})(); \ No newline at end of file +export { NetworkController } \ No newline at end of file diff --git a/client/src/network-entity-controller.ts b/client/src/network-entity-controller.ts index 6838ab30..e1ceeee3 100644 --- a/client/src/network-entity-controller.ts +++ b/client/src/network-entity-controller.ts @@ -1,111 +1,110 @@ +import { EVENT_TYPES } from 'shared/src/constants'; import * as THREE from 'three'; -import {entity} from './entity.js'; +import { Component } from './entity'; +class NetworkEntityController extends Component { + transformUpdates_: any[]; + targetFrame_: any; + lastFrame_: any; + lastUpdate_: number; + constructor(params?) { + super(); + this.transformUpdates_ = []; + this.targetFrame_ = null; + this.lastFrame_ = null; + this.lastUpdate_ = 0.0; + } -export const network_entity_controller = (() => { + InitComponent() { + this._RegisterHandler( + EVENT_TYPES.NETWORK_UPDATE, (m) => { this.OnNetworkUpdate_(m); }); + } - class NetworkEntityController extends Component { - constructor() { - super(); - this.transformUpdates_ = []; - this.targetFrame_ = null; - this.lastFrame_ = null; + SetTransform_(transform) { + this.parent_.SetPosition(new THREE.Vector3(...transform[1])); + this.parent_.SetQuaternion(new THREE.Quaternion(...transform[2])); + this.targetFrame_ = { time: 0.1, transform: transform }; + } + + OnNetworkUpdate_(msg) { + if ('transform' in msg) { this.lastUpdate_ = 0.0; - } + this.transformUpdates_.push({ time: 0.1, transform: msg.transform }); - InitComponent() { - this._RegisterHandler( - 'network.update', (m) => { this.OnNetworkUpdate_(m); }); + // First update + if (this.targetFrame_ == null) { + this.SetTransform_(msg.transform); + } } - SetTransform_(transform) { - this.parent_.SetPosition(new THREE.Vector3(...transform[1])); - this.parent_.SetQuaternion(new THREE.Quaternion(...transform[2])); - this.targetFrame_ = {time: 0.1, transform: transform}; + // All of this should be LCT'd, but whatever + if ('stats' in msg) { + this.Broadcast({ + topic: EVENT_TYPES.STATS_NETWORK, + value: msg.stats, + }); } - OnNetworkUpdate_(msg) { - if ('transform' in msg) { - this.lastUpdate_ = 0.0; - this.transformUpdates_.push({time: 0.1, transform: msg.transform}); - - // First update - if (this.targetFrame_ == null) { - this.SetTransform_(msg.transform); - } - } - - // All of this should be LCT'd, but whatever - if ('stats' in msg) { + if ('events' in msg) { + if (msg.events.length > 0) { this.Broadcast({ - topic: 'stats.network', - value: msg.stats, + topic: EVENT_TYPES.EVENTS_NETWORK, + value: msg.events, }); } + } + } - if ('events' in msg) { - if (msg.events.length > 0) { - this.Broadcast({ - topic: 'events.network', - value: msg.events, - }); - } - } + Update(timeElapsed) { + this.lastUpdate_ += timeElapsed; + if (this.lastUpdate_ >= 10.0) { + this.Parent.SetDead(); } - Update(timeElapsed) { - this.lastUpdate_ += timeElapsed; - if (this.lastUpdate_ >= 10.0) { - this.Parent.SetDead(); - } + if (this.transformUpdates_.length == 0) { + return; + } - if (this.transformUpdates_.length == 0) { - return; - } - - for (let i = 0; i < this.transformUpdates_.length; ++i) { - this.transformUpdates_[i].time -= timeElapsed; - } - - while (this.transformUpdates_.length > 0 && - this.transformUpdates_[0].time <= 0.0) { - this.lastFrame_ = { - transform: [ - this.targetFrame_.transform[0], - this.Parent.Position.toArray(), - this.Parent.Quaternion.toArray() - ] - }; - this.targetFrame_ = this.transformUpdates_.shift(); - this.targetFrame_.time = 0.0; - } - - if (this.targetFrame_ && this.lastFrame_) { - this.targetFrame_.time += timeElapsed; - const p1 = new THREE.Vector3(...this.lastFrame_.transform[1]); - const p2 = new THREE.Vector3(...this.targetFrame_.transform[1]); - const q1 = new THREE.Quaternion(...this.lastFrame_.transform[2]); - const q2 = new THREE.Quaternion(...this.targetFrame_.transform[2]); - - const pf = new THREE.Vector3(); - const qf = new THREE.Quaternion(); - pf.copy(p1); - qf.copy(q1); - - const t = Math.max(Math.min(this.targetFrame_.time / 0.1, 1.0), 0.0); - pf.lerp(p2, t); - qf.slerp(q2, t); - - this.Parent.SetPosition(pf); - this.Parent.SetQuaternion(qf); - const controller = this.GetComponent('NPCController'); - controller.SetState(this.lastFrame_.transform[0]); - } + for (let i = 0; i < this.transformUpdates_.length; ++i) { + this.transformUpdates_[i].time -= timeElapsed; + } + + while (this.transformUpdates_.length > 0 && + this.transformUpdates_[0].time <= 0.0) { + this.lastFrame_ = { + transform: [ + this.targetFrame_.transform[0], + this.Parent.Position.toArray(), + this.Parent.Quaternion.toArray() + ] + }; + this.targetFrame_ = this.transformUpdates_.shift(); + this.targetFrame_.time = 0.0; + } + + if (this.targetFrame_ && this.lastFrame_) { + this.targetFrame_.time += timeElapsed; + const p1 = new THREE.Vector3(...this.lastFrame_.transform[1]); + const p2 = new THREE.Vector3(...this.targetFrame_.transform[1]); + const q1 = new THREE.Quaternion(...this.lastFrame_.transform[2]); + const q2 = new THREE.Quaternion(...this.targetFrame_.transform[2]); + + const pf = new THREE.Vector3(); + const qf = new THREE.Quaternion(); + pf.copy(p1); + qf.copy(q1); + + const t = Math.max(Math.min(this.targetFrame_.time / 0.1, 1.0), 0.0); + pf.lerp(p2, t); + qf.slerp(q2, t); + + this.Parent.SetPosition(pf); + this.Parent.SetQuaternion(qf); + const controller = this.GetComponent('NPCController'); + controller.SetState(this.lastFrame_.transform[0]); } - }; + } +}; - return { - NetworkEntityController: NetworkEntityController, - }; -})(); \ No newline at end of file +export { NetworkEntityController } diff --git a/client/src/network-player-controller.ts b/client/src/network-player-controller.ts index 2eb28edd..ad0b4d8f 100644 --- a/client/src/network-player-controller.ts +++ b/client/src/network-player-controller.ts @@ -1,93 +1,91 @@ +import { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } from 'shared/src/constants'; import * as THREE from 'three'; -import {entity} from './entity.js'; - - - -export const network_player_controller = (() => { - - class NetworkEntityController extends Component { - constructor() { - super(); - this.updateTimer_ = 0.0; - this.loaded_ = false; - } - - InitComponent() { - this._RegisterHandler( - EVENT_TYPES.LOAD_CHARACTER, (m) => { this.OnLoaded_(m); }); - this._RegisterHandler( - EVENT_TYPES.INVENTORY_EQUIP, (m) => { this.OnEquipChanged_(m); }); - this._RegisterHandler( - 'network.update', (m) => { this.OnUpdate_(m); }); - this._RegisterHandler( - 'action.attack', (m) => { this.OnActionAttack_(m); }); - } - - InitEntity() { - this.net_ = this.FindEntity('network').GetComponent( - 'NetworkController'); - } - - OnEquipChanged_(msg) { - const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER).CreatePacket(); - - this.net_.SendInventoryChange_(inventory); +import { Component } from './entity'; + +class NetworkEntityController extends Component { + updateTimer_: number; + loaded_: boolean; + net_: any; + constructor(params?: any) { + super(); + this.updateTimer_ = 0.0; + this.loaded_ = false; + } + + InitComponent() { + this._RegisterHandler( + EVENT_TYPES.LOAD_CHARACTER, (m) => { this.OnLoaded_(m); }); + this._RegisterHandler( + EVENT_TYPES.INVENTORY_EQUIP, (m) => { this.OnEquipChanged_(m); }); + this._RegisterHandler( + EVENT_TYPES.NETWORK_UPDATE, (m) => { this.OnUpdate_(m); }); + this._RegisterHandler( + EVENT_TYPES.ACTION_ATTACK, (m) => { this.OnActionAttack_(m); }); + } + + InitEntity() { + this.net_ = this.FindEntity(KNOWN_ENTITIES.NETWORK).GetComponent( + NAMED_COMPONENTS.NETWORK_CONTROLLER); + } + + OnEquipChanged_(msg) { + const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER).CreatePacket(); + + this.net_.SendInventoryChange_(inventory); + } + + OnActionAttack_(msg) { + this.net_.SendActionAttack_(); + } + + OnUpdate_(msg) { + if (msg.transform) { + this.Parent.SetPosition(new THREE.Vector3(...msg.transform[1])); + this.Parent.SetQuaternion(new THREE.Quaternion(...msg.transform[2])); } - OnActionAttack_(msg) { - this.net_.SendActionAttack_(); + if (msg.stats) { + this.Broadcast({ + topic: EVENT_TYPES.STATS_NETWORK, + value: msg.stats, + }); } - OnUpdate_(msg) { - if (msg.transform) { - this.Parent.SetPosition(new THREE.Vector3(...msg.transform[1])); - this.Parent.SetQuaternion(new THREE.Quaternion(...msg.transform[2])); - } - - if (msg.stats) { + if (msg.events) { + if (msg.events.length > 0) { this.Broadcast({ - topic: 'stats.network', - value: msg.stats, + topic: EVENT_TYPES.EVENTS_NETWORK, + value: msg.events, }); } - - if (msg.events) { - if (msg.events.length > 0) { - this.Broadcast({ - topic: 'events.network', - value: msg.events, - }); - } - } } + } - OnLoaded_(_) { - this.loaded_ = true; - } + OnLoaded_(_) { + this.loaded_ = true; + } - CreateTransformPacket() { - const controller = this.GetComponent('BasicCharacterController'); + CreateTransformPacket() { + const controller = this.GetComponent('BasicCharacterController'); - // HACK - return [ - controller.stateMachine_._currentState.Name, - this.Parent.Position.toArray(), - this.Parent.Quaternion.toArray(), - ]; - } + // HACK + return [ + controller.stateMachine_._currentState.Name, + this.Parent.Position.toArray(), + this.Parent.Quaternion.toArray(), + ]; + } - Update(timeElapsed) { - this.updateTimer_ -= timeElapsed; - if (this.updateTimer_ <= 0.0 && this.loaded_) { - this.updateTimer_ = 0.1; + Update(timeElapsed) { + this.updateTimer_ -= timeElapsed; + if (this.updateTimer_ <= 0.0 && this.loaded_) { + this.updateTimer_ = 0.1; - this.net_.SendTransformUpdate(this.CreateTransformPacket()); - } + this.net_.SendTransformUpdate(this.CreateTransformPacket()); } - }; + } +}; + - return { - NetworkEntityController: NetworkEntityController, - }; -})(); \ No newline at end of file +export { NetworkEntityController } \ No newline at end of file diff --git a/client/src/npc-entity.ts b/client/src/npc-entity.ts index 7d0fa3b3..2b82b9c5 100644 --- a/client/src/npc-entity.ts +++ b/client/src/npc-entity.ts @@ -1,14 +1,19 @@ import * as THREE from 'three'; -import {entity} from './entity.js'; -import {player_entity} from './player-entity.js' - -import {defs} from '/shared/defs.mjs'; - - -export const npc_entity = (() => { +import { Component } from './entity'; +import {CharacterFSM, BasicCharacterControllerProxy} from './player-entity' +import {CHARACTER_MODELS} from 'shared/src/defs'; +import { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, STATE_TYPES } from 'shared/src/constants'; class NPCController extends Component { + params_: any; + group_: any; + animations_: {}; + queuedState_: any; + stateMachine_: any; + target_: any; + bones_: {}; + mixer_: THREE.AnimationMixer; constructor(params) { super(); this.params_ = params; @@ -61,9 +66,9 @@ export const npc_entity = (() => { // hack: should propogate attacks through the events on server // Right now, they're inferred from whatever animation we're running, blech - if (s == 'attack' && this.stateMachine_._currentState.Name != 'attack') { + if (s == STATE_TYPES.ATTACK && this.stateMachine_._currentState.Name != STATE_TYPES.ATTACK) { this.Broadcast({ - topic: 'action.attack', + topic: EVENT_TYPES.ACTION_ATTACK, }); } @@ -71,7 +76,7 @@ export const npc_entity = (() => { } OnDeath_(msg) { - this.SetState('death'); + this.SetState(STATE_TYPES.DEATH); } OnPosition_(m) { @@ -84,9 +89,9 @@ export const npc_entity = (() => { LoadModels_() { const classType = this.params_.desc.character.class; - const modelData = defs.CHARACTER_MODELS[classType]; + const modelData = CHARACTER_MODELS[classType]; - const loader = this.FindEntity('loader').GetComponent('LoadController'); + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); loader.LoadSkinnedGLB(modelData.path, modelData.base, (glb) => { this.target_ = glb.scene; this.target_.scale.setScalar(modelData.scale); @@ -129,23 +134,23 @@ export const npc_entity = (() => { return null; }; - this.animations_['idle'] = _FindAnim('Idle'); - this.animations_['walk'] = _FindAnim('Walk'); - this.animations_['run'] = _FindAnim('Run'); - this.animations_['death'] = _FindAnim('Death'); - this.animations_['attack'] = _FindAnim('Attack'); - this.animations_['dance'] = _FindAnim('Dance'); + this.animations_[STATE_TYPES.IDLE] = _FindAnim(ANIM_TYPES.IDLE); + this.animations_[STATE_TYPES.WALK] = _FindAnim(ANIM_TYPES.WALK) + this.animations_[STATE_TYPES.RUN] = _FindAnim(ANIM_TYPES.RUN) + this.animations_[STATE_TYPES.DEATH] = _FindAnim(ANIM_TYPES.DEATH); + this.animations_[STATE_TYPES.ATTACK] = _FindAnim(ANIM_TYPES.ATTACK); + this.animations_[STATE_TYPES.DANCE] = _FindAnim(ANIM_TYPES.DANCE); this.target_.visible = true; - this.stateMachine_ = new player_entity.CharacterFSM( - new player_entity.BasicCharacterControllerProxy(this.animations_)); + this.stateMachine_ = new CharacterFSM( + new BasicCharacterControllerProxy(this.animations_)); if (this.queuedState_) { this.stateMachine_.SetState(this.queuedState_) this.queuedState_ = null; } else { - this.stateMachine_.SetState('idle'); + this.stateMachine_.SetState(STATE_TYPES.IDLE); } this.Broadcast({ @@ -168,8 +173,7 @@ export const npc_entity = (() => { } }; - return { - NPCController: NPCController, - }; -})(); \ No newline at end of file +export { + NPCController +} \ No newline at end of file diff --git a/client/src/particle-system.ts b/client/src/particle-system.ts index 7515d8f2..981447a5 100644 --- a/client/src/particle-system.ts +++ b/client/src/particle-system.ts @@ -202,6 +202,7 @@ class ParticleSystem { geometry_: any; points_: any; emitters_: any[]; + constructor(params) { const uniforms = { diffuseTexture: { diff --git a/client/src/player-entity.ts b/client/src/player-entity.ts index f0e8c3e5..41802840 100644 --- a/client/src/player-entity.ts +++ b/client/src/player-entity.ts @@ -1,289 +1,297 @@ import * as THREE from 'three'; -import {entity} from './entity.js'; -import {finite_state_machine} from './finite-state-machine.js'; -import {player_state} from './player-state.js'; +import { Component } from './entity'; +import { FiniteStateMachine } from './finite-state-machine'; +import { IdleState, WalkState, RunState, AttackState, DanceState, DeathState } from './player-state'; +import { CHARACTER_MODELS } from 'shared/src/defs'; +import { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES } from 'shared/src/constants'; + +class CharacterFSM extends FiniteStateMachine { + _proxy: any; + constructor(proxy) { + super(); + this._proxy = proxy; + this.Init_(); + } + + Init_() { + this._AddState(STATE_TYPES.IDLE, IdleState); + this._AddState(STATE_TYPES.WALK, WalkState); + this._AddState(STATE_TYPES.RUN, RunState); + this._AddState(STATE_TYPES.ATTACK, AttackState); + this._AddState(STATE_TYPES.DEATH, DeathState); + this._AddState(STATE_TYPES.DANCE, DanceState); + } +}; + +class BasicCharacterControllerProxy { + animations_: any; + constructor(animations) { + this.animations_ = animations; + } + + get animations() { + return this.animations_; + } +}; + +class BasicCharacterController extends Component { + params_: any; + decceleration_: THREE.Vector3; + acceleration_: THREE.Vector3; + velocity_: THREE.Vector3; + group_: THREE.Group; + animations_: {}; + stateMachine_: any; + target_: any; + bones_: {}; + _mixer: THREE.AnimationMixer; + constructor(params) { + super(); + this.params_ = params; + } + + InitEntity() { + this.Init_(); + } + + Init_() { + this.decceleration_ = new THREE.Vector3(-0.0005, -0.0001, -5.0); + this.acceleration_ = new THREE.Vector3(1, 0.125, 100.0); + this.velocity_ = new THREE.Vector3(0, 0, 0); + this.group_ = new THREE.Group(); + + this.params_.scene.add(this.group_); + + this.animations_ = {}; + + this.LoadModels_(); + } + + InitComponent() { + this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); + this._RegisterHandler( + 'update.position', (m) => { this.OnUpdatePosition_(m); }); + this._RegisterHandler( + 'update.rotation', (m) => { this.OnUpdateRotation_(m); }); + } + + OnUpdatePosition_(msg) { + this.group_.position.copy(msg.value); + } + + OnUpdateRotation_(msg) { + this.group_.quaternion.copy(msg.value); + } + + OnDeath_(msg) { + this.stateMachine_.SetState(STATE_TYPES.DEATH); + } + + LoadModels_() { + const classType = this.params_.desc.character.class; + const modelData = CHARACTER_MODELS[classType]; + + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); + loader.LoadSkinnedGLB(modelData.path, modelData.base, (glb) => { + this.target_ = glb.scene; + this.target_.scale.setScalar(modelData.scale); + this.target_.visible = false; + + this.group_.add(this.target_); + + this.bones_ = {}; + this.target_.traverse(c => { + if (!c.skeleton) { + return; + } + for (let b of c.skeleton.bones) { + this.bones_[b.name] = b; + } + }); -import {defs} from '/shared/defs.mjs'; + this.target_.traverse(c => { + c.castShadow = true; + c.receiveShadow = true; + if (c.material && c.material.map) { + c.material.map.encoding = THREE.sRGBEncoding; + } + }); + this._mixer = new THREE.AnimationMixer(this.target_); -export const player_entity = (() => { + const _FindAnim = (animName) => { + for (let i = 0; i < glb.animations.length; i++) { + if (glb.animations[i].name.includes(animName)) { + const clip = glb.animations[i]; + const action = this._mixer.clipAction(clip); + return { + clip: clip, + action: action + } + } + } + return null; + }; - class CharacterFSM extends finite_state_machine.FiniteStateMachine { - constructor(proxy) { - super(); - this._proxy = proxy; - this.Init_(); - } - - Init_() { - this._AddState('idle', player_state.IdleState); - this._AddState('walk', player_state.WalkState); - this._AddState('run', player_state.RunState); - this._AddState('attack', player_state.AttackState); - this._AddState('death', player_state.DeathState); - this._AddState('dance', player_state.DanceState); - } - }; - - class BasicCharacterControllerProxy { - constructor(animations) { - this.animations_ = animations; - } - - get animations() { - return this.animations_; - } - }; + this.animations_[STATE_TYPES.IDLE] = _FindAnim(ANIM_TYPES.IDLE); + this.animations_[STATE_TYPES.WALK] = _FindAnim(ANIM_TYPES.WALK) + this.animations_[STATE_TYPES.RUN] = _FindAnim(ANIM_TYPES.RUN); + this.animations_[STATE_TYPES.DEATH] = _FindAnim(ANIM_TYPES.DEATH); + this.animations_[STATE_TYPES.ATTACK] = _FindAnim(ANIM_TYPES.ATTACK); + this.animations_[STATE_TYPES.DANCE] = _FindAnim(ANIM_TYPES.DANCE); - class BasicCharacterController extends Component { - constructor(params) { - super(); - this.params_ = params; - } + this.target_.visible = true; - InitEntity() { - this.Init_(); - } + this.stateMachine_ = new CharacterFSM( + new BasicCharacterControllerProxy(this.animations_)); - Init_() { - this.decceleration_ = new THREE.Vector3(-0.0005, -0.0001, -5.0); - this.acceleration_ = new THREE.Vector3(1, 0.125, 100.0); - this.velocity_ = new THREE.Vector3(0, 0, 0); - this.group_ = new THREE.Group(); + this.stateMachine_.SetState(STATE_TYPES.IDLE); - this.params_.scene.add(this.group_); + this.Broadcast({ + topic: EVENT_TYPES.LOAD_CHARACTER, + model: this.target_, + bones: this.bones_, + }); - this.animations_ = {}; - - this.LoadModels_(); - } + this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER).FadeoutLogin(); + }); + } - InitComponent() { - this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); - this._RegisterHandler( - 'update.position', (m) => { this.OnUpdatePosition_(m); }); - this._RegisterHandler( - 'update.rotation', (m) => { this.OnUpdateRotation_(m); }); - } + _FindIntersections(pos, oldPos) { + const _IsAlive = (c) => { + const h = c.entity.GetComponent('HealthComponent'); + if (!h) { + return true; + } + return h.Health > 0; + }; - OnUpdatePosition_(msg) { - this.group_.position.copy(msg.value); - } + const grid = this.GetComponent('SpatialGridController'); + const nearby = grid.FindNearbyEntities(5).filter(e => _IsAlive(e)); + const collisions = []; - OnUpdateRotation_(msg) { - this.group_.quaternion.copy(msg.value); - } + for (let i = 0; i < nearby.length; ++i) { + const e = nearby[i].entity; + const d = ((pos.x - e.Position.x) ** 2 + (pos.z - e.Position.z) ** 2) ** 0.5; - OnDeath_(msg) { - this.stateMachine_.SetState('death'); + // HARDCODED + if (d <= 4) { + const d2 = ((oldPos.x - e.Position.x) ** 2 + (oldPos.z - e.Position.z) ** 2) ** 0.5; + + // If they're already colliding, let them get untangled. + if (d2 <= 4) { + continue; + } else { + collisions.push(nearby[i].entity); + } + } } + return collisions; + } - LoadModels_() { - const classType = this.params_.desc.character.class; - const modelData = defs.CHARACTER_MODELS[classType]; - - const loader = this.FindEntity('loader').GetComponent('LoadController'); - loader.LoadSkinnedGLB(modelData.path, modelData.base, (glb) => { - this.target_ = glb.scene; - this.target_.scale.setScalar(modelData.scale); - this.target_.visible = false; - - this.group_.add(this.target_); - - this.bones_ = {}; - this.target_.traverse(c => { - if (!c.skeleton) { - return; - } - for (let b of c.skeleton.bones) { - this.bones_[b.name] = b; - } - }); - - this.target_.traverse(c => { - c.castShadow = true; - c.receiveShadow = true; - if (c.material && c.material.map) { - c.material.map.encoding = THREE.sRGBEncoding; - } - }); - - this._mixer = new THREE.AnimationMixer(this.target_); - - const _FindAnim = (animName) => { - for (let i = 0; i < glb.animations.length; i++) { - if (glb.animations[i].name.includes(animName)) { - const clip = glb.animations[i]; - const action = this._mixer.clipAction(clip); - return { - clip: clip, - action: action - } - } - } - return null; - }; - - this.animations_['idle'] = _FindAnim('Idle'); - this.animations_['walk'] = _FindAnim('Walk'); - this.animations_['run'] = _FindAnim('Run'); - this.animations_['death'] = _FindAnim('Death'); - this.animations_['attack'] = _FindAnim('Attack'); - this.animations_['dance'] = _FindAnim('Dance'); + Update(timeInSeconds) { + if (!this.stateMachine_) { + return; + } - this.target_.visible = true; + const input = this.GetComponent('BasicCharacterControllerInput'); + this.stateMachine_.Update(timeInSeconds, input); - this.stateMachine_ = new CharacterFSM( - new BasicCharacterControllerProxy(this.animations_)); + if (this._mixer) { + this._mixer.update(timeInSeconds); + } - this.stateMachine_.SetState('idle'); + // HARDCODED + this.Broadcast({ + topic: 'player.action', + action: this.stateMachine_._currentState.Name, + }); + + const currentState = this.stateMachine_._currentState; + if (currentState.Name != STATE_TYPES.WALK && + currentState.Name != STATE_TYPES.RUN && + currentState.Name != STATE_TYPES.IDLE) { + return; + } - this.Broadcast({ - topic: EVENT_TYPES.LOAD_CHARACTER, - model: this.target_, - bones: this.bones_, - }); + const velocity = this.velocity_; + const frameDecceleration = new THREE.Vector3( + velocity.x * this.decceleration_.x, + velocity.y * this.decceleration_.y, + velocity.z * this.decceleration_.z + ); + frameDecceleration.multiplyScalar(timeInSeconds); + frameDecceleration.z = Math.sign(frameDecceleration.z) * Math.min( + Math.abs(frameDecceleration.z), Math.abs(velocity.z)); + + velocity.add(frameDecceleration); + + const controlObject = this.group_; + const _Q = new THREE.Quaternion(); + const _A = new THREE.Vector3(); + const _R = controlObject.quaternion.clone(); + + const acc = this.acceleration_.clone(); + if (input._keys.shift) { + acc.multiplyScalar(2.0); + } - this.FindEntity('ui').GetComponent('UIController').FadeoutLogin(); - }); + if (input._keys.forward) { + velocity.z += acc.z * timeInSeconds; + } + if (input._keys.backward) { + velocity.z -= acc.z * timeInSeconds; + } + if (input._keys.left) { + _A.set(0, 1, 0); + _Q.setFromAxisAngle(_A, 4.0 * Math.PI * timeInSeconds * this.acceleration_.y); + _R.multiply(_Q); + } + if (input._keys.right) { + _A.set(0, 1, 0); + _Q.setFromAxisAngle(_A, 4.0 * -Math.PI * timeInSeconds * this.acceleration_.y); + _R.multiply(_Q); } - _FindIntersections(pos, oldPos) { - const _IsAlive = (c) => { - const h = c.entity.GetComponent('HealthComponent'); - if (!h) { - return true; - } - return h.Health > 0; - }; + controlObject.quaternion.copy(_R); - const grid = this.GetComponent('SpatialGridController'); - const nearby = grid.FindNearbyEntities(5).filter(e => _IsAlive(e)); - const collisions = []; + const oldPosition = new THREE.Vector3(); + oldPosition.copy(controlObject.position); - for (let i = 0; i < nearby.length; ++i) { - const e = nearby[i].entity; - const d = ((pos.x - e.Position.x) ** 2 + (pos.z - e.Position.z) ** 2) ** 0.5; + const forward = new THREE.Vector3(0, 0, 1); + forward.applyQuaternion(controlObject.quaternion); + forward.normalize(); - // HARDCODED - if (d <= 4) { - const d2 = ((oldPos.x - e.Position.x) ** 2 + (oldPos.z - e.Position.z) ** 2) ** 0.5; + const sideways = new THREE.Vector3(1, 0, 0); + sideways.applyQuaternion(controlObject.quaternion); + sideways.normalize(); - // If they're already colliding, let them get untangled. - if (d2 <= 4) { - continue; - } else { - collisions.push(nearby[i].entity); - } - } - } - return collisions; - } + sideways.multiplyScalar(velocity.x * timeInSeconds); + forward.multiplyScalar(velocity.z * timeInSeconds); - Update(timeInSeconds) { - if (!this.stateMachine_) { - return; - } + const pos = controlObject.position.clone(); + pos.add(forward); + pos.add(sideways); - const input = this.GetComponent('BasicCharacterControllerInput'); - this.stateMachine_.Update(timeInSeconds, input); + const collisions = this._FindIntersections(pos, oldPosition); + if (collisions.length > 0) { + return; + } - if (this._mixer) { - this._mixer.update(timeInSeconds); - } + const terrain = this.FindEntity(KNOWN_ENTITIES.TERRAIN).GetComponent('TerrainChunkManager'); + pos.y = terrain.GetHeight(pos)[0]; - // HARDCODED - this.Broadcast({ - topic: 'player.action', - action: this.stateMachine_._currentState.Name, - }); + controlObject.position.copy(pos); - const currentState = this.stateMachine_._currentState; - if (currentState.Name != 'walk' && - currentState.Name != 'run' && - currentState.Name != 'idle') { - return; - } - - const velocity = this.velocity_; - const frameDecceleration = new THREE.Vector3( - velocity.x * this.decceleration_.x, - velocity.y * this.decceleration_.y, - velocity.z * this.decceleration_.z - ); - frameDecceleration.multiplyScalar(timeInSeconds); - frameDecceleration.z = Math.sign(frameDecceleration.z) * Math.min( - Math.abs(frameDecceleration.z), Math.abs(velocity.z)); - - velocity.add(frameDecceleration); - - const controlObject = this.group_; - const _Q = new THREE.Quaternion(); - const _A = new THREE.Vector3(); - const _R = controlObject.quaternion.clone(); - - const acc = this.acceleration_.clone(); - if (input._keys.shift) { - acc.multiplyScalar(2.0); - } - - if (input._keys.forward) { - velocity.z += acc.z * timeInSeconds; - } - if (input._keys.backward) { - velocity.z -= acc.z * timeInSeconds; - } - if (input._keys.left) { - _A.set(0, 1, 0); - _Q.setFromAxisAngle(_A, 4.0 * Math.PI * timeInSeconds * this.acceleration_.y); - _R.multiply(_Q); - } - if (input._keys.right) { - _A.set(0, 1, 0); - _Q.setFromAxisAngle(_A, 4.0 * -Math.PI * timeInSeconds * this.acceleration_.y); - _R.multiply(_Q); - } - - controlObject.quaternion.copy(_R); - - const oldPosition = new THREE.Vector3(); - oldPosition.copy(controlObject.position); - - const forward = new THREE.Vector3(0, 0, 1); - forward.applyQuaternion(controlObject.quaternion); - forward.normalize(); - - const sideways = new THREE.Vector3(1, 0, 0); - sideways.applyQuaternion(controlObject.quaternion); - sideways.normalize(); - - sideways.multiplyScalar(velocity.x * timeInSeconds); - forward.multiplyScalar(velocity.z * timeInSeconds); - - const pos = controlObject.position.clone(); - pos.add(forward); - pos.add(sideways); - - const collisions = this._FindIntersections(pos, oldPosition); - if (collisions.length > 0) { - return; - } + this.Parent.SetPosition(controlObject.position); + this.Parent.SetQuaternion(controlObject.quaternion); + } +}; - const terrain = this.FindEntity('terrain').GetComponent('TerrainChunkManager'); - pos.y = terrain.GetHeight(pos)[0]; - controlObject.position.copy(pos); - - this.Parent.SetPosition(controlObject.position); - this.Parent.SetQuaternion(controlObject.quaternion); - } - }; - - return { - CharacterFSM: CharacterFSM, - BasicCharacterControllerProxy: BasicCharacterControllerProxy, - BasicCharacterController: BasicCharacterController, - }; - -})(); \ No newline at end of file +export { + CharacterFSM, + BasicCharacterControllerProxy, + BasicCharacterController, +} \ No newline at end of file diff --git a/client/src/player-input.ts b/client/src/player-input.ts index c10a7d08..b17316ef 100644 --- a/client/src/player-input.ts +++ b/client/src/player-input.ts @@ -1,142 +1,141 @@ +import { DOM_IDS, EVENT_TYPES } from 'shared/src/constants'; import * as THREE from 'three'; import { Component } from "./entity"; +class PickableComponent extends Component { + constructor() { + super(); + } + InitComponent() { + } +}; -export const player_input = (() => { +class BasicCharacterControllerInput extends Component { + _params: any; + _keys: { forward: boolean; backward: boolean; left: boolean; right: boolean; space: boolean; shift: boolean; backspace: boolean; }; + _raycaster: THREE.Raycaster; + constructor(params) { + super(); + this._params = params; + this._Init(); + } - class PickableComponent extends Component { - constructor() { - super(); - } + _Init() { + this._keys = { + forward: false, + backward: false, + left: false, + right: false, + space: false, + shift: false, + backspace: false, + }; + this._raycaster = new THREE.Raycaster(); + document.addEventListener('keydown', (e) => this._onKeyDown(e), false); + document.addEventListener('keyup', (e) => this._onKeyUp(e), false); + document.addEventListener('mouseup', (e) => this._onMouseUp(e), false); + } - InitComponent() { - } - }; + _onMouseUp(event) { + const rect = document.getElementById(DOM_IDS.THREEJS).getBoundingClientRect(); + const pos = { + x: ((event.clientX - rect.left) / rect.width) * 2 - 1, + y: ((event.clientY - rect.top) / rect.height) * -2 + 1, + }; - class BasicCharacterControllerInput extends Component { - constructor(params) { - super(); - this._params = params; - this._Init(); - } - - _Init() { - this._keys = { - forward: false, - backward: false, - left: false, - right: false, - space: false, - shift: false, - backspace: false, - }; - this._raycaster = new THREE.Raycaster(); - document.addEventListener('keydown', (e) => this._onKeyDown(e), false); - document.addEventListener('keyup', (e) => this._onKeyUp(e), false); - document.addEventListener('mouseup', (e) => this._onMouseUp(e), false); - } - - _onMouseUp(event) { - const rect = document.getElementById('threejs').getBoundingClientRect(); - const pos = { - x: ((event.clientX - rect.left) / rect.width) * 2 - 1, - y: ((event.clientY - rect.top ) / rect.height) * -2 + 1, - }; + this._raycaster.setFromCamera(pos, this._params.camera); - this._raycaster.setFromCamera(pos, this._params.camera); - - const pickables = this.Manager.Filter((e) => { - const p = e.GetComponent('PickableComponent'); - if (!p) { - return false; - } - return e._mesh; - }); + const pickables = this.Manager.Filter((e) => { + const p = e.GetComponent('PickableComponent'); + if (!p) { + return false; + } + return e._mesh; + }); - const ray = new THREE.Ray(); - ray.origin.setFromMatrixPosition(this._params.camera.matrixWorld); - ray.direction.set(pos.x, pos.y, 0.5).unproject( - this._params.camera).sub(ray.origin).normalize(); + const ray = new THREE.Ray(); + ray.origin.setFromMatrixPosition(this._params.camera.matrixWorld); + ray.direction.set(pos.x, pos.y, 0.5).unproject( + this._params.camera).sub(ray.origin).normalize(); - // hack - document.getElementById('quest-ui').style.visibility = 'hidden'; + // hack + document.getElementById(DOM_IDS.QUEST_UI).style.visibility = 'hidden'; - for (let p of pickables) { - // GOOD ENOUGH - const box = new THREE.Box3().setFromObject(p._mesh); + for (let p of pickables) { + // GOOD ENOUGH + const box = new THREE.Box3().setFromObject(p._mesh); - if (ray.intersectsBox(box)) { - p.Broadcast({ - topic: 'input.picked' - }); - break; - } + if (ray.intersectsBox(box)) { + p.Broadcast({ + topic: EVENT_TYPES.INPUT_PICKED + }); + break; } } + } - _onKeyDown(event) { - if (event.currentTarget.activeElement != document.body) { - return; - } - switch (event.keyCode) { - case 87: // w - this._keys.forward = true; - break; - case 65: // a - this._keys.left = true; - break; - case 83: // s - this._keys.backward = true; - break; - case 68: // d - this._keys.right = true; - break; - case 32: // SPACE - this._keys.space = true; - break; - case 16: // SHIFT - this._keys.shift = true; - break; - case 8: // BACKSPACE - this._keys.backspace = true; - break; - } + _onKeyDown(event) { + if (event.currentTarget.activeElement != document.body) { + return; } - - _onKeyUp(event) { - if (event.currentTarget.activeElement != document.body) { - return; - } - switch(event.keyCode) { - case 87: // w - this._keys.forward = false; - break; - case 65: // a - this._keys.left = false; - break; - case 83: // s - this._keys.backward = false; - break; - case 68: // d - this._keys.right = false; - break; - case 32: // SPACE - this._keys.space = false; - break; - case 16: // SHIFT - this._keys.shift = false; - break; - case 8: // BACKSPACE - this._keys.backspace = false; - break; - } + switch (event.keyCode) { + case 87: // w + this._keys.forward = true; + break; + case 65: // a + this._keys.left = true; + break; + case 83: // s + this._keys.backward = true; + break; + case 68: // d + this._keys.right = true; + break; + case 32: // SPACE + this._keys.space = true; + break; + case 16: // SHIFT + this._keys.shift = true; + break; + case 8: // BACKSPACE + this._keys.backspace = true; + break; + } + } + + _onKeyUp(event) { + if (event.currentTarget.activeElement != document.body) { + return; + } + switch (event.keyCode) { + case 87: // w + this._keys.forward = false; + break; + case 65: // a + this._keys.left = false; + break; + case 83: // s + this._keys.backward = false; + break; + case 68: // d + this._keys.right = false; + break; + case 32: // SPACE + this._keys.space = false; + break; + case 16: // SHIFT + this._keys.shift = false; + break; + case 8: // BACKSPACE + this._keys.backspace = false; + break; } - }; + } +}; - return { - BasicCharacterControllerInput: BasicCharacterControllerInput, - PickableComponent: PickableComponent, - }; -})(); \ No newline at end of file +export { + BasicCharacterControllerInput, + PickableComponent, +} \ No newline at end of file diff --git a/client/src/player-state.ts b/client/src/player-state.ts index caab32f7..8c4eabdd 100644 --- a/client/src/player-state.ts +++ b/client/src/player-state.ts @@ -1,312 +1,310 @@ +import { STATE_TYPES } from 'shared/src/constants'; import * as THREE from 'three'; +class State { + _parent: any; + constructor(parent) { + this._parent = parent; + } -export const player_state = (() => { +}; - class State { - constructor(parent) { - this._parent = parent; - } - - Enter() {} - Exit() {} - Update() {} - }; - - class DeathState extends State { - constructor(parent) { - super(parent); - - this._action = null; - } - - get Name() { - return 'death'; - } - - Enter(prevState) { - this._action = this._parent._proxy.animations['death'].action; +class DeathState extends State { + _action: any; + constructor(parent) { + super(parent); - this._action.reset(); - this._action.setLoop(THREE.LoopOnce, 1); - this._action.clampWhenFinished = true; + this._action = null; + } - if (prevState) { - const prevAction = this._parent._proxy.animations[prevState.Name].action; - - this._action.crossFadeFrom(prevAction, 0.2, true); - this._action.play(); - } else { - this._action.play(); - } + get Name() { + return STATE_TYPES.DEATH; + } + + Enter(prevState) { + this._action = this._parent._proxy.animations[STATE_TYPES.DEATH].action; + + this._action.reset(); + this._action.setLoop(THREE.LoopOnce, 1); + this._action.clampWhenFinished = true; + + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + + this._action.crossFadeFrom(prevAction, 0.2, true); + this._action.play(); + } else { + this._action.play(); } - - Exit() { + } + + Exit() { + } + + Update(arg0?: any, arg1?: any): void { + } +}; + +class DanceState extends State { + _action: any; + _FinishedCallback: () => void; + constructor(parent) { + super(parent); + + this._action = null; + + this._FinishedCallback = () => { + this._Finished(); } - - Update(_) { + } + + get Name() { + return STATE_TYPES.DANCE; + } + + Enter(prevState) { + this._action = this._parent._proxy.animations[STATE_TYPES.DANCE].action; + const mixer = this._action.getMixer(); + mixer.addEventListener('finished', this._FinishedCallback); + + this._action.reset(); + this._action.setLoop(THREE.LoopOnce, 1); + this._action.clampWhenFinished = true; + + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + + this._action.crossFadeFrom(prevAction, 0.2, true); + this._action.play(); + } else { + this._action.play(); } - }; - - class DanceState extends State { - constructor(parent) { - super(parent); - - this._action = null; - - this._FinishedCallback = () => { - this._Finished(); - } + } + + _Finished() { + this._Cleanup(); + this._parent.SetState(STATE_TYPES.IDLE); + } + + _Cleanup() { + if (this._action) { + this._action.getMixer().removeEventListener('finished', this._FinishedCallback); } - - get Name() { - return 'dance'; + } + + Exit() { + this._Cleanup(); + } + + Update() { + } +}; + +class AttackState extends State { + _action: any; + _FinishedCallback: () => void; + constructor(parent) { + super(parent); + + this._action = null; + + this._FinishedCallback = () => { + this._Finished(); } - - Enter(prevState) { - this._action = this._parent._proxy.animations['dance'].action; - const mixer = this._action.getMixer(); - mixer.addEventListener('finished', this._FinishedCallback); + } + + get Name() { + return STATE_TYPES.ATTACK; + } - this._action.reset(); + Enter(prevState) { + this._action = this._parent._proxy.animations[STATE_TYPES.ATTACK].action; + const mixer = this._action.getMixer(); + mixer.addEventListener('finished', this._FinishedCallback); + + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + + this._action.reset(); this._action.setLoop(THREE.LoopOnce, 1); this._action.clampWhenFinished = true; - - if (prevState) { - const prevAction = this._parent._proxy.animations[prevState.Name].action; - - this._action.crossFadeFrom(prevAction, 0.2, true); - this._action.play(); - } else { - this._action.play(); - } - } - - _Finished() { - this._Cleanup(); - this._parent.SetState('idle'); + this._action.crossFadeFrom(prevAction, 0.4, true); + this._action.play(); + } else { + this._action.play(); } - - _Cleanup() { - if (this._action) { - this._action.getMixer().removeEventListener('finished', this._FinishedCallback); - } - } - - Exit() { - this._Cleanup(); - } - - Update(_) { - } - }; - - class AttackState extends State { - constructor(parent) { - super(parent); - - this._action = null; - - this._FinishedCallback = () => { - this._Finished(); - } - } - - get Name() { - return 'attack'; - } - - Enter(prevState) { - this._action = this._parent._proxy.animations['attack'].action; - const mixer = this._action.getMixer(); - mixer.addEventListener('finished', this._FinishedCallback); - - if (prevState) { - const prevAction = this._parent._proxy.animations[prevState.Name].action; - - this._action.reset(); - this._action.setLoop(THREE.LoopOnce, 1); - this._action.clampWhenFinished = true; - this._action.crossFadeFrom(prevAction, 0.4, true); - this._action.play(); - } else { - this._action.play(); - } - } - - _Finished() { - this._Cleanup(); - this._parent.SetState('idle'); - } - - _Cleanup() { - if (this._action) { - this._action.getMixer().removeEventListener('finished', this._FinishedCallback); - } - } - - Exit() { - this._Cleanup(); - } - - Update(_) { - } - }; - - class WalkState extends State { - constructor(parent) { - super(parent); - } - - get Name() { - return 'walk'; + } + + _Finished() { + this._Cleanup(); + this._parent.SetState(STATE_TYPES.IDLE); + } + + _Cleanup() { + if (this._action) { + this._action.getMixer().removeEventListener('finished', this._FinishedCallback); } - - Enter(prevState) { - const curAction = this._parent._proxy.animations['walk'].action; - if (prevState) { - const prevAction = this._parent._proxy.animations[prevState.Name].action; - - curAction.enabled = true; - - if (prevState.Name == 'run') { - const ratio = curAction.getClip().duration / prevAction.getClip().duration; - curAction.time = prevAction.time * ratio; - } else { - curAction.time = 0.0; - curAction.setEffectiveTimeScale(1.0); - curAction.setEffectiveWeight(1.0); - } - - curAction.crossFadeFrom(prevAction, 0.1, true); - curAction.play(); + } + + Exit() { + this._Cleanup(); + } + + Update() { + } +}; + +class WalkState extends State { + constructor(parent) { + super(parent); + } + + get Name() { + return STATE_TYPES.WALK; + } + + Enter(prevState) { + const curAction = this._parent._proxy.animations[STATE_TYPES.WALK].action; + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + + curAction.enabled = true; + + if (prevState.Name == STATE_TYPES.RUN) { + const ratio = curAction.getClip().duration / prevAction.getClip().duration; + curAction.time = prevAction.time * ratio; } else { - curAction.play(); + curAction.time = 0.0; + curAction.setEffectiveTimeScale(1.0); + curAction.setEffectiveWeight(1.0); } + + curAction.crossFadeFrom(prevAction, 0.1, true); + curAction.play(); + } else { + curAction.play(); } - - Exit() { + } + + Exit() { + } + + Update(timeElapsed, input) { + if (!input) { + return; } - - Update(timeElapsed, input) { - if (!input) { - return; - } - - if (input._keys.forward || input._keys.backward) { - if (input._keys.shift) { - this._parent.SetState('run'); - } - return; + + if (input._keys.forward || input._keys.backward) { + if (input._keys.shift) { + this._parent.SetState(STATE_TYPES.RUN); } - - this._parent.SetState('idle'); + return; } - }; - - - class RunState extends State { - constructor(parent) { - super(parent); - } - - get Name() { - return 'run'; - } - - Enter(prevState) { - const curAction = this._parent._proxy.animations['run'].action; - if (prevState) { - const prevAction = this._parent._proxy.animations[prevState.Name].action; - - curAction.enabled = true; - - if (prevState.Name == 'walk') { - const ratio = curAction.getClip().duration / prevAction.getClip().duration; - curAction.time = prevAction.time * ratio; - } else { - curAction.time = 0.0; - curAction.setEffectiveTimeScale(1.0); - curAction.setEffectiveWeight(1.0); - } - - curAction.crossFadeFrom(prevAction, 0.1, true); - curAction.play(); + + this._parent.SetState(STATE_TYPES.IDLE); + } +}; + + +class RunState extends State { + constructor(parent) { + super(parent); + } + + get Name() { + return STATE_TYPES.RUN; + } + + Enter(prevState) { + const curAction = this._parent._proxy.animations[STATE_TYPES.RUN].action; + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + + curAction.enabled = true; + + if (prevState.Name == STATE_TYPES.WALK) { + const ratio = curAction.getClip().duration / prevAction.getClip().duration; + curAction.time = prevAction.time * ratio; } else { - curAction.play(); - } - } - - Exit() { - } - - Update(timeElapsed, input) { - if (!input) { - return; + curAction.time = 0.0; + curAction.setEffectiveTimeScale(1.0); + curAction.setEffectiveWeight(1.0); } - if (input._keys.forward || input._keys.backward) { - if (!input._keys.shift) { - this._parent.SetState('walk'); - } - return; - } - - this._parent.SetState('idle'); - } - }; - - - class IdleState extends State { - constructor(parent) { - super(parent); + curAction.crossFadeFrom(prevAction, 0.1, true); + curAction.play(); + } else { + curAction.play(); } - - get Name() { - return 'idle'; + } + + Exit() { + } + + Update(timeElapsed, input) { + if (!input) { + return; } - - Enter(prevState) { - const idleAction = this._parent._proxy.animations['idle'].action; - if (prevState) { - const prevAction = this._parent._proxy.animations[prevState.Name].action; - idleAction.time = 0.0; - idleAction.enabled = true; - idleAction.setEffectiveTimeScale(1.0); - idleAction.setEffectiveWeight(1.0); - idleAction.crossFadeFrom(prevAction, 0.25, true); - idleAction.play(); - } else { - idleAction.play(); + + if (input._keys.forward || input._keys.backward) { + if (!input._keys.shift) { + this._parent.SetState(STATE_TYPES.WALK); } + return; } - - Exit() { - } - - Update(_, input) { - if (!input) { - return; - } - - if (input._keys.forward || input._keys.backward) { - this._parent.SetState('walk'); - } else if (input._keys.space) { - this._parent.SetState('attack'); - } else if (input._keys.backspace) { - this._parent.SetState('dance'); - } + + this._parent.SetState(STATE_TYPES.IDLE); + } +}; + + +class IdleState extends State { + constructor(parent) { + super(parent); + } + + get Name() { + return STATE_TYPES.IDLE; + } + + Enter(prevState) { + const idleAction = this._parent._proxy.animations[STATE_TYPES.IDLE].action; + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + idleAction.time = 0.0; + idleAction.enabled = true; + idleAction.setEffectiveTimeScale(1.0); + idleAction.setEffectiveWeight(1.0); + idleAction.crossFadeFrom(prevAction, 0.25, true); + idleAction.play(); + } else { + idleAction.play(); + } + } + + Exit() { + } + + Update(_, input) { + if (!input) { + return; } - }; - - return { - State: State, - DanceState: DanceState, - AttackState: AttackState, - IdleState: IdleState, - WalkState: WalkState, - RunState: RunState, - DeathState: DeathState, - }; - -})(); \ No newline at end of file + + if (input._keys.forward || input._keys.backward) { + this._parent.SetState(STATE_TYPES.WALK); + } else if (input._keys.space) { + this._parent.SetState(STATE_TYPES.ATTACK); + } else if (input._keys.backspace) { + this._parent.SetState(STATE_TYPES.DANCE); + } + } +}; +export { + State, + DanceState, + AttackState, + IdleState, + WalkState, + RunState, + DeathState, +} \ No newline at end of file diff --git a/client/src/quadtree.ts b/client/src/quadtree.ts index 8b256f71..b598c7f4 100644 --- a/client/src/quadtree.ts +++ b/client/src/quadtree.ts @@ -1,174 +1,175 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.112.1/build/three.module.js'; +import * as THREE from 'three'; -export const quadtree = (function() { +class CubeQuadTree { + _params: any; + _sides: any[]; + constructor(params) { + this._params = params; + this._sides = []; - class CubeQuadTree { - constructor(params) { - this._params = params; - this._sides = []; + const r = params.radius; + let m; - const r = params.radius; - let m; + const transforms = []; - const transforms = []; - - // +Y - m = new THREE.Matrix4(); - m = + // +Y + m = new THREE.Matrix4(); + m = // m.makeRotationX(-Math.PI / 2); // m.premultiply(new THREE.Matrix4().makeTranslation(0, r, 0)); transforms.push(m); - // // -Y - // m = new THREE.Matrix4(); - // m.makeRotationX(Math.PI / 2); - // m.premultiply(new THREE.Matrix4().makeTranslation(0, -r, 0)); - // transforms.push(m); - - // // +X - // m = new THREE.Matrix4(); - // m.makeRotationY(Math.PI / 2); - // m.premultiply(new THREE.Matrix4().makeTranslation(r, 0, 0)); - // transforms.push(m); - - // // -X - // m = new THREE.Matrix4(); - // m.makeRotationY(-Math.PI / 2); - // m.premultiply(new THREE.Matrix4().makeTranslation(-r, 0, 0)); - // transforms.push(m); - - // // +Z - // m = new THREE.Matrix4(); - // m.premultiply(new THREE.Matrix4().makeTranslation(0, 0, r)); - // transforms.push(m); - - // // -Z - // m = new THREE.Matrix4(); - // m.makeRotationY(Math.PI); - // m.premultiply(new THREE.Matrix4().makeTranslation(0, 0, -r)); - // transforms.push(m); - - for (let t of transforms) { - this._sides.push({ - transform: t.clone(), - quadtree: new QuadTree({ - size: r, - min_node_size: params.min_node_size, - }), - }); - } - } + // // -Y + // m = new THREE.Matrix4(); + // m.makeRotationX(Math.PI / 2); + // m.premultiply(new THREE.Matrix4().makeTranslation(0, -r, 0)); + // transforms.push(m); + + // // +X + // m = new THREE.Matrix4(); + // m.makeRotationY(Math.PI / 2); + // m.premultiply(new THREE.Matrix4().makeTranslation(r, 0, 0)); + // transforms.push(m); + + // // -X + // m = new THREE.Matrix4(); + // m.makeRotationY(-Math.PI / 2); + // m.premultiply(new THREE.Matrix4().makeTranslation(-r, 0, 0)); + // transforms.push(m); + + // // +Z + // m = new THREE.Matrix4(); + // m.premultiply(new THREE.Matrix4().makeTranslation(0, 0, r)); + // transforms.push(m); + + // // -Z + // m = new THREE.Matrix4(); + // m.makeRotationY(Math.PI); + // m.premultiply(new THREE.Matrix4().makeTranslation(0, 0, -r)); + // transforms.push(m); + + for (let t of transforms) { + this._sides.push({ + transform: t.clone(), + quadtree: new QuadTree({ + size: r, + min_node_size: params.min_node_size, + }), + }); + } + } - GetChildren() { - const children = []; + GetChildren() { + const children = []; - for (let s of this._sides) { - const side = { - transform: s.transform, - children: s.quadtree.GetChildren(), - } - children.push(side); + for (let s of this._sides) { + const side = { + transform: s.transform, + children: s.quadtree.GetChildren(), } - return children; + children.push(side); } + return children; + } - Insert(pos) { - for (let s of this._sides) { - s.quadtree.Insert(pos); - } + Insert(pos) { + for (let s of this._sides) { + s.quadtree.Insert(pos); } } +} + +class QuadTree { + _root: { bounds: THREE.Box3; children: any[]; center: THREE.Vector3; size: THREE.Vector3; root: boolean; }; + _params: any; + constructor(params) { + const s = params.size; + const b = new THREE.Box3( + new THREE.Vector3(-s, 0, -s,), + new THREE.Vector3(s, 0, s)); + this._root = { + bounds: b, + children: [], + center: b.getCenter(new THREE.Vector3()), + size: b.getSize(new THREE.Vector3()), + root: true, + }; + + this._params = params; + } - class QuadTree { - constructor(params) { - const s = params.size; - const b = new THREE.Box3( - new THREE.Vector3(-s, 0, -s,), - new THREE.Vector3(s, 0, s)); - this._root = { - bounds: b, - children: [], - center: b.getCenter(new THREE.Vector3()), - size: b.getSize(new THREE.Vector3()), - root: true, - }; - - this._params = params; - } + GetChildren() { + const children = []; + this._GetChildren(this._root, children); + return children; + } - GetChildren() { - const children = []; - this._GetChildren(this._root, children); - return children; + _GetChildren(node, target) { + if (node.children.length == 0) { + target.push(node); + return; } - _GetChildren(node, target) { - if (node.children.length == 0) { - target.push(node); - return; - } - - for (let c of node.children) { - this._GetChildren(c, target); - } + for (let c of node.children) { + this._GetChildren(c, target); + } } - Insert(pos) { - this._Insert(this._root, pos); - } + Insert(pos) { + this._Insert(this._root, pos); + } - _Insert(child, pos) { - const distToChild = this._DistanceToChild(child, pos); + _Insert(child, pos) { + const distToChild = this._DistanceToChild(child, pos); - if (distToChild < child.size.x * 1.5 && child.size.x > this._params.min_node_size) { - child.children = this._CreateChildren(child); + if (distToChild < child.size.x * 1.5 && child.size.x > this._params.min_node_size) { + child.children = this._CreateChildren(child); - for (let c of child.children) { - this._Insert(c, pos); - } + for (let c of child.children) { + this._Insert(c, pos); } } + } - _DistanceToChild(child, pos) { - return child.center.distanceTo(pos); - } + _DistanceToChild(child, pos) { + return child.center.distanceTo(pos); + } - _CreateChildren(child) { - const midpoint = child.bounds.getCenter(new THREE.Vector3()); + _CreateChildren(child) { + const midpoint = child.bounds.getCenter(new THREE.Vector3()); - // Bottom left - const b1 = new THREE.Box3(child.bounds.min, midpoint); + // Bottom left + const b1 = new THREE.Box3(child.bounds.min, midpoint); - // Bottom right - const b2 = new THREE.Box3( - new THREE.Vector3(midpoint.x, 0, child.bounds.min.z), - new THREE.Vector3(child.bounds.max.x, 0, midpoint.z)); + // Bottom right + const b2 = new THREE.Box3( + new THREE.Vector3(midpoint.x, 0, child.bounds.min.z), + new THREE.Vector3(child.bounds.max.x, 0, midpoint.z)); - // Top left - const b3 = new THREE.Box3( - new THREE.Vector3(child.bounds.min.x, 0, midpoint.z), - new THREE.Vector3(midpoint.x, 0, child.bounds.max.z)); + // Top left + const b3 = new THREE.Box3( + new THREE.Vector3(child.bounds.min.x, 0, midpoint.z), + new THREE.Vector3(midpoint.x, 0, child.bounds.max.z)); - // Top right - const b4 = new THREE.Box3(midpoint, child.bounds.max); + // Top right + const b4 = new THREE.Box3(midpoint, child.bounds.max); - const children = [b1, b2, b3, b4].map( - b => { - return { - bounds: b, - children: [], - center: b.getCenter(new THREE.Vector3()), - size: b.getSize(new THREE.Vector3()) - }; - }); + const children = [b1, b2, b3, b4].map( + b => { + return { + bounds: b, + children: [], + center: b.getCenter(new THREE.Vector3()), + size: b.getSize(new THREE.Vector3()) + }; + }); - return children; - } + return children; } +} - return { - QuadTree: QuadTree, - CubeQuadTree: CubeQuadTree, - } -})(); +export { + QuadTree, + CubeQuadTree +} \ No newline at end of file diff --git a/client/src/quest-component.ts b/client/src/quest-component.ts index ae8a5662..f05429f8 100644 --- a/client/src/quest-component.ts +++ b/client/src/quest-component.ts @@ -1,3 +1,4 @@ +import { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } from "shared/src/constants"; import { Component } from "./entity"; @@ -10,12 +11,12 @@ export const quest_component = (() => { constructor() { super(); - const e = document.getElementById('quest-ui'); + const e = document.getElementById(DOM_IDS.QUEST_UI); e.style.visibility = 'hidden'; } InitComponent() { - this._RegisterHandler('input.picked', (m) => this._OnPicked(m)); + this._RegisterHandler(EVENT_TYPES.INPUT_PICKED, (m) => this._OnPicked(m)); } _OnPicked(msg) { @@ -29,12 +30,12 @@ export const quest_component = (() => { } _AddQuestToJournal(quest) { - const ui = this.FindEntity('ui').GetComponent('UIController'); + const ui = this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER); ui.AddQuest(quest); } }; return { - QuestComponent: QuestComponent, + QuestComponent: QuestComponent, }; })(); \ No newline at end of file diff --git a/client/src/render-component.ts b/client/src/render-component.ts index 0fe7a4d4..d63eeb6a 100644 --- a/client/src/render-component.ts +++ b/client/src/render-component.ts @@ -1,166 +1,164 @@ +import { KNOWN_ENTITIES } from 'shared/src/constants'; import * as THREE from 'three'; -import {GLTFLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/GLTFLoader.js'; -import {OBJLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/OBJLoader.js'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; +import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js'; + +import { Component } from './entity'; + +class RenderComponent extends Component { + group_: THREE.Group; + params_: any; + _target: any; + constructor(params) { + super(); + this.group_ = new THREE.Group(); + this.params_ = params; + this.params_.scene.add(this.group_); + } + + Destroy() { + this.group_.traverse((c: any) => { + if (c.material) { + c.material.dispose(); + } + if (c.geometry) { + c.geometry.dispose(); + } + }); + this.params_.scene.remove(this.group_); + } + + InitEntity() { + this._Init(this.params_); + } + + _Init(params) { + this.params_ = params; + + this._LoadModels(); + } + + InitComponent() { + this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + this._RegisterHandler('update.rotation', (m) => { this._OnRotation(m); }); + } + + _OnPosition(m) { + this.group_.position.copy(m.value); + } + + _OnRotation(m) { + this.group_.quaternion.copy(m.value); + } + + _LoadModels() { + if (this.params_.resourceName.endsWith('glb')) { + this._LoadGLB(); + } else if (this.params_.resourceName.endsWith('fbx')) { + this._LoadFBX(); + } else if (this.params_.resourceName.endsWith('obj')) { + this._LoadOBJ(); + } + } -import {entity} from './entity.js'; + _OnLoaded(obj) { + this._target = obj; + this.group_.add(this._target); + this._target.scale.setScalar(this.params_.scale); -export const render_component = (() => { + const textures = {}; + if (this.params_.textures) { + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); - class RenderComponent extends Component { - constructor(params) { - super(); - this.group_ = new THREE.Group(); - this.params_ = params; - this.params_.scene.add(this.group_); - } + for (let k in this.params_.textures.names) { + const t = loader.LoadTexture( + this.params_.textures.resourcePath, this.params_.textures.names[k]); + t.encoding = THREE.sRGBEncoding; - Destroy() { - this.group_.traverse(c => { - if (c.material) { - c.material.dispose(); + if (this.params_.textures.wrap) { + t.wrapS = THREE.RepeatWrapping; + t.wrapT = THREE.RepeatWrapping; } - if (c.geometry) { - c.geometry.dispose(); - } - }); - this.params_.scene.remove(this.group_); - } - - InitEntity() { - this._Init(this.params_); - } - - _Init(params) { - this.params_ = params; - - this._LoadModels(); - } - - InitComponent() { - this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); - this._RegisterHandler('update.rotation', (m) => { this._OnRotation(m); }); - } - - _OnPosition(m) { - this.group_.position.copy(m.value); - } - - _OnRotation(m) { - this.group_.quaternion.copy(m.value); - } - _LoadModels() { - if (this.params_.resourceName.endsWith('glb')) { - this._LoadGLB(); - } else if (this.params_.resourceName.endsWith('fbx')) { - this._LoadFBX(); - } else if (this.params_.resourceName.endsWith('obj')) { - this._LoadOBJ(); + textures[k] = t; } } - _OnLoaded(obj) { - this._target = obj; - this.group_.add(this._target); - - this._target.scale.setScalar(this.params_.scale); - - const textures = {}; - if (this.params_.textures) { - const loader = this.FindEntity('loader').GetComponent('LoadController'); - - for (let k in this.params_.textures.names) { - const t = loader.LoadTexture( - this.params_.textures.resourcePath, this.params_.textures.names[k]); - t.encoding = THREE.sRGBEncoding; - - if (this.params_.textures.wrap) { - t.wrapS = THREE.RepeatWrapping; - t.wrapT = THREE.RepeatWrapping; - } - - textures[k] = t; - } + this._target.traverse(c => { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; } - this._target.traverse(c => { - let materials = c.material; - if (!(c.material instanceof Array)) { - materials = [c.material]; - } - - if (c.geometry) { - c.geometry.computeBoundingBox(); - } + if (c.geometry) { + c.geometry.computeBoundingBox(); + } - for (let m of materials) { - if (m) { - if (this.params_.onMaterial) { - this.params_.onMaterial(m); - } - for (let k in textures) { - if (m.name.search(k) >= 0) { - m.map = textures[k]; - } - } - if (this.params_.specular) { - m.specular = this.params_.specular; - } - if (this.params_.emissive) { - m.emissive = this.params_.emissive; + for (let m of materials) { + if (m) { + if (this.params_.onMaterial) { + this.params_.onMaterial(m); + } + for (let k in textures) { + if (m.name.search(k) >= 0) { + m.map = textures[k]; } } + if (this.params_.specular) { + m.specular = this.params_.specular; + } + if (this.params_.emissive) { + m.emissive = this.params_.emissive; + } } - if (this.params_.receiveShadow != undefined) { - c.receiveShadow = this.params_.receiveShadow; - } - if (this.params_.castShadow != undefined) { - c.castShadow = this.params_.castShadow; - } - if (this.params_.visible != undefined) { - c.visible = this.params_.visible; - } - - this.Broadcast({ - topic: 'render.loaded', - value: this._target, - }) - }); - } - - _LoadGLB() { - const loader = new GLTFLoader(); - loader.setPath(this.params_.resourcePath); - loader.load(this.params_.resourceName, (glb) => { - this._OnLoaded(glb.scene); - }); - } - - _LoadFBX() { - const loader = this.FindEntity('loader').GetComponent('LoadController'); - loader.LoadFBX( - this.params_.resourcePath, this.params_.resourceName, (fbx) => { - this._OnLoaded(fbx); - }); - } + } + if (this.params_.receiveShadow != undefined) { + c.receiveShadow = this.params_.receiveShadow; + } + if (this.params_.castShadow != undefined) { + c.castShadow = this.params_.castShadow; + } + if (this.params_.visible != undefined) { + c.visible = this.params_.visible; + } - _LoadOBJ() { - const loader = new OBJLoader(); - loader.setPath(this.params_.resourcePath); - loader.load(this.params_.resourceName, (fbx) => { + this.Broadcast({ + topic: 'render.loaded', + value: this._target, + }) + }); + } + + _LoadGLB() { + const loader = new GLTFLoader(); + loader.setPath(this.params_.resourcePath); + loader.load(this.params_.resourceName, (glb) => { + this._OnLoaded(glb.scene); + }); + } + + _LoadFBX() { + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); + loader.LoadFBX( + this.params_.resourcePath, this.params_.resourceName, (fbx) => { this._OnLoaded(fbx); }); - } - - Update(timeInSeconds) { - } - }; - - - return { - RenderComponent: RenderComponent, - }; - -})(); \ No newline at end of file + } + + _LoadOBJ() { + const loader = new OBJLoader(); + loader.setPath(this.params_.resourcePath); + loader.load(this.params_.resourceName, (fbx) => { + this._OnLoaded(fbx); + }); + } + + Update(timeInSeconds) { + } +}; + +export { + RenderComponent +} \ No newline at end of file diff --git a/client/src/scenery-controller.ts b/client/src/scenery-controller.ts index 1a08105e..c5b67f92 100644 --- a/client/src/scenery-controller.ts +++ b/client/src/scenery-controller.ts @@ -1,276 +1,278 @@ import * as THREE from 'three'; -import {entity} from './entity.js'; -import {render_component} from './render-component.js'; -import {spatial_grid_controller} from './spatial-grid-controller.js'; +import { Entity, Component } from './entity'; +import { RenderComponent } from './render-component'; +import { SpatialGridController } from './spatial-grid-controller.js'; + +import { math } from 'shared/src/math'; +import { Noise } from 'shared/src/noise'; +import { KNOWN_ENTITIES } from 'shared/src/constants'; + + +const _SCENERY = { + birch1: { + base: 'Birch_1.fbx', + resourcePath: './resources/trees/FBX/', + names: { + Bark: 'Birch_Bark.png', + Leaves: 'Birch_Leaves_Yellow.png' + }, + scale: 0.075, + biomes: ['forest'], + collision: true, + }, + tree1: { + base: 'Tree_1.fbx', + resourcePath: './resources/trees/FBX/', + names: { + Bark: 'Tree_Bark.jpg', + Leaves: 'Leaves_Blue.png' + }, + scale: 0.1, + biomes: ['forest'], + collision: true, + }, + rock1: { + base: 'Rock_1.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.025, + biomes: ['arid', 'desert'], + }, + rockMoss1: { + base: 'Rock_Moss_1.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.025, + biomes: ['forest'], + }, + plant1: { + base: 'Plant_1.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest', 'arid'], + }, + grass1: { + base: 'Grass_1.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest', 'arid'], + }, + flowers1: { + base: 'Flowers.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest'], + }, +}; + +const _BIOMES = { + desert: 0.1, + forest: 0.8, + arid: 0.6, +}; + +const multiples = { + birch1: { name: 'Birch_', key: 'birch', num: 10 }, + tree1: { name: 'Tree_', key: 'tree', num: 10 }, + rock1: { name: 'Rock_', key: 'rock', num: 7 }, + rockMoss1: { name: 'Rock_Moss_', key: 'rockMoss', num: 7 }, + plant1: { name: 'Plant_', key: 'plant', num: 5 }, + grass1: { name: 'Grass_', key: 'grass', num: 2 }, +}; + +for (let k in multiples) { + for (let i = 2; i < multiples[k].num; ++i) { + _SCENERY[multiples[k].key + i] = { ..._SCENERY[k] }; + _SCENERY[multiples[k].key + i].base = multiples[k].name + i + '.fbx'; + } +} + +class SceneryController extends Component { + params_: any; + noise_: Noise; + center_: any; + crap_: any[]; + constructor(params) { + super(); + this.params_ = params; + + const noiseParams = { + octaves: 1, + persistence: 0.5, + lacunarity: 2.0, + exponentiation: 1.0, + scale: 1.0, + noiseType: 'simplex', + seed: 2, + height: 1.0, + }; + this.noise_ = new Noise(noiseParams); + + this.center_ = null; + this.crap_ = []; + } -import {math} from '/shared/math.mjs'; -import {noise} from '/shared/noise.mjs'; + InitEntity() { + this.SpawnClouds_(); + } + SpawnClouds_() { + for (let i = 0; i < 20; ++i) { + const index = math.rand_int(1, 3); + const pos = new THREE.Vector3( + (Math.random() * 2.0 - 1.0) * 5000, + 500, + (Math.random() * 2.0 - 1.0) * 5000); -export const scenery_controller = (() => { + const e = new Entity(); + e.AddComponent(new RenderComponent({ + scene: this.params_.scene, + resourcePath: './resources/nature2/GLTF/', + resourceName: 'Cloud' + index + '.glb', + scale: Math.random() * 20 + 40, + emissive: new THREE.Color(0x000000), + color: new THREE.Color(0x202020), + })); + e.SetPosition(pos); - const _SCENERY = { - birch1: { - base: 'Birch_1.fbx', - resourcePath: './resources/trees/FBX/', - names: { - Bark: 'Birch_Bark.png', - Leaves: 'Birch_Leaves_Yellow.png' - }, - scale: 0.075, - biomes: ['forest'], - collision: true, - }, - tree1: { - base: 'Tree_1.fbx', - resourcePath: './resources/trees/FBX/', - names: { - Bark: 'Tree_Bark.jpg', - Leaves: 'Leaves_Blue.png' - }, - scale: 0.1, - biomes: ['forest'], - collision: true, - }, - rock1: { - base: 'Rock_1.fbx', - resourcePath: './resources/nature/FBX/', - names: {}, - scale: 0.025, - biomes: ['arid', 'desert'], - }, - rockMoss1: { - base: 'Rock_Moss_1.fbx', - resourcePath: './resources/nature/FBX/', - names: {}, - scale: 0.025, - biomes: ['forest'], - }, - plant1: { - base: 'Plant_1.fbx', - resourcePath: './resources/nature/FBX/', - names: {}, - scale: 0.05, - biomes: ['forest', 'arid'], - }, - grass1: { - base: 'Grass_1.fbx', - resourcePath: './resources/nature/FBX/', - names: {}, - scale: 0.05, - biomes: ['forest', 'arid'], - }, - flowers1: { - base: 'Flowers.fbx', - resourcePath: './resources/nature/FBX/', - names: {}, - scale: 0.05, - biomes: ['forest'], - }, - }; - - const _BIOMES = { - desert: 0.1, - forest: 0.8, - arid: 0.6, - }; - - const multiples = { - birch1: {name: 'Birch_', key: 'birch', num: 10}, - tree1: {name: 'Tree_', key: 'tree', num: 10}, - rock1: {name: 'Rock_', key: 'rock', num: 7}, - rockMoss1: {name: 'Rock_Moss_', key: 'rockMoss', num: 7}, - plant1: {name: 'Plant_', key: 'plant', num: 5}, - grass1: {name: 'Grass_', key: 'grass', num: 2}, - }; - - for (let k in multiples) { - for (let i = 2; i < multiples[k].num; ++i) { - _SCENERY[multiples[k].key + i] = {..._SCENERY[k]}; - _SCENERY[multiples[k].key + i].base = multiples[k].name + i + '.fbx'; + const q = new THREE.Quaternion().setFromAxisAngle( + new THREE.Vector3(0, 1, 0), math.rand_range(0, 360)); + e.SetQuaternion(q); + + this.Manager.Add(e); + e.SetActive(false); } } - class SceneryController extends Component { - constructor(params) { - super(); - this.params_ = params; - - const noiseParams = { - octaves: 1, - persistence: 0.5, - lacunarity: 2.0, - exponentiation: 1.0, - scale: 1.0, - noiseType: 'simplex', - seed: 2, - height: 1.0, - }; - this.noise_ = new noise.Noise(noiseParams); - - this.center_ = null; - this.crap_ = []; - } + FindBiome_(terrain, pos) { + const biome = terrain.GetBiomeAt(pos); - InitEntity() { - this.SpawnClouds_(); - } + // HACK: duplicaed code from texture-splatter + const m = biome; + const h = math.sat(pos.y / 100.0); - SpawnClouds_() { - for (let i = 0; i < 20; ++i) { - const index = math.rand_int(1, 3); - const pos = new THREE.Vector3( - (Math.random() * 2.0 - 1.0) * 5000, - 500, - (Math.random() * 2.0 - 1.0) * 5000); - - const e = new entity.Entity(); - e.AddComponent(new render_component.RenderComponent({ - scene: this.params_.scene, - resourcePath: './resources/nature2/GLTF/', - resourceName: 'Cloud' + index + '.glb', - scale: Math.random() * 20 + 40, - emissive: new THREE.Color(0x000000), - color: new THREE.Color(0x202020), - })); - e.SetPosition(pos); - - const q = new THREE.Quaternion().setFromAxisAngle( - new THREE.Vector3(0, 1, 0), math.rand_range(0, 360)); - e.SetQuaternion(q); - - this.Manager.Add(e); - e.SetActive(false); - } + if (h < 0.05) { + return 'desert'; + } else if (m > 0.5) { + return 'forest'; + } else { + return 'arid'; } + } - FindBiome_(terrain, pos) { - const biome = terrain.GetBiomeAt(pos); - - // HACK: duplicaed code from texture-splatter - const m = biome; - const h = math.sat(pos.y / 100.0); - - if (h < 0.05) { - return 'desert'; - } else if (m > 0.5) { - return 'forest'; - } else { - return 'arid'; + SpawnAt_(biome, spawnPos) { + const matchingScenery = []; + for (let k in _SCENERY) { + if (_SCENERY[k].biomes.indexOf(biome) >= 0) { + matchingScenery.push(k); } } - SpawnAt_(biome, spawnPos) { - const matchingScenery = []; - for (let k in _SCENERY) { - if (_SCENERY[k].biomes.indexOf(biome) >= 0) { - matchingScenery.push(k); + const roll = this.noise_.Get(spawnPos.x, 3.0, spawnPos.z); + const randomProp = _SCENERY[ + matchingScenery[Math.round(roll * (matchingScenery.length - 1))]]; + + const e = new Entity(); + e.AddComponent(new RenderComponent({ + scene: this.params_.scene, + resourcePath: randomProp.resourcePath, + resourceName: randomProp.base, + textures: { + resourcePath: './resources/trees/Textures/', + names: randomProp.names, + wrap: true, + }, + emissive: new THREE.Color(0x000000), + specular: new THREE.Color(0x000000), + scale: randomProp.scale * (0.8 + this.noise_.Get(spawnPos.x, 4.0, spawnPos.z) * 0.4), + castShadow: true, + receiveShadow: true, + onMaterial: (m) => { + if (m.name.search('Leaves') >= 0) { + m.alphaTest = 0.5; } } + })); + if (randomProp.collision) { + e.AddComponent( + new SpatialGridController( + { grid: this.params_.grid })); + } - const roll = this.noise_.Get(spawnPos.x, 3.0, spawnPos.z); - const randomProp = _SCENERY[ - matchingScenery[Math.round(roll * (matchingScenery.length - 1))]]; - - const e = new entity.Entity(); - e.AddComponent(new render_component.RenderComponent({ - scene: this.params_.scene, - resourcePath: randomProp.resourcePath, - resourceName: randomProp.base, - textures: { - resourcePath: './resources/trees/Textures/', - names: randomProp.names, - wrap: true, - }, - emissive: new THREE.Color(0x000000), - specular: new THREE.Color(0x000000), - scale: randomProp.scale * (0.8 + this.noise_.Get(spawnPos.x, 4.0, spawnPos.z) * 0.4), - castShadow: true, - receiveShadow: true, - onMaterial: (m) => { - if (m.name.search('Leaves') >= 0) { - m.alphaTest = 0.5; - } - } - })); - if (randomProp.collision) { - e.AddComponent( - new spatial_grid_controller.SpatialGridController( - {grid: this.params_.grid})); - } + const q = new THREE.Quaternion().setFromAxisAngle( + new THREE.Vector3(0, 1, 0), this.noise_.Get(spawnPos.x, 5.0, spawnPos.z) * 360); + e.SetQuaternion(q); - const q = new THREE.Quaternion().setFromAxisAngle( - new THREE.Vector3(0, 1, 0), this.noise_.Get(spawnPos.x, 5.0, spawnPos.z) * 360); - e.SetQuaternion(q); + return e; + } - return e; + SpawnCrap_() { + const player = this.FindEntity('player'); + if (!player) { + return; } - SpawnCrap_() { - const player = this.FindEntity('player'); - if (!player) { - return; - } + const center = new THREE.Vector3().copy(player.Position); - const center = new THREE.Vector3().copy(player.Position); + center.x = Math.round(center.x / 50.0); + center.y = 0.0; + center.z = Math.round(center.z / 50.0); - center.x = Math.round(center.x / 50.0); - center.y = 0.0; - center.z = Math.round(center.z / 50.0); + if (this.center_ && this.center_.equals(center)) { + return; + } - if (this.center_ && this.center_.equals(center)) { - return; - } + this.center_ = center; - this.center_ = center; + const _P = new THREE.Vector3(); + const _V = new THREE.Vector3(); + const terrain = this.FindEntity(KNOWN_ENTITIES.TERRAIN).GetComponent('TerrainChunkManager'); - const _P = new THREE.Vector3(); - const _V = new THREE.Vector3(); - const terrain = this.FindEntity('terrain').GetComponent('TerrainChunkManager'); + for (let x = -10; x <= 10; ++x) { + for (let y = -10; y <= 10; ++y) { + _P.set(x, 0.0, y); + _P.add(center); + _P.multiplyScalar(50.0); - for (let x = -10; x <= 10; ++x) { - for (let y = -10; y <= 10; ++y) { - _P.set(x, 0.0, y); - _P.add(center); - _P.multiplyScalar(50.0); + const key = '__scenery__[' + _P.x + '][' + _P.z + ']'; + if (this.FindEntity(key)) { + continue; + } - const key = '__scenery__[' + _P.x + '][' + _P.z + ']'; - if (this.FindEntity(key)) { - continue; - } + _V.copy(_P); - _V.copy(_P); - - _P.x += (this.noise_.Get(_P.x, 0.0, _P.z) * 2.0 - 1.0) * 25.0; - _P.z += (this.noise_.Get(_P.x, 1.0, _P.z) * 2.0 - 1.0) * 25.0; - _P.y = terrain.GetHeight(_P)[0]; + _P.x += (this.noise_.Get(_P.x, 0.0, _P.z) * 2.0 - 1.0) * 25.0; + _P.z += (this.noise_.Get(_P.x, 1.0, _P.z) * 2.0 - 1.0) * 25.0; + _P.y = terrain.GetHeight(_P)[0]; - const biome = this.FindBiome_(terrain, _P); + const biome = this.FindBiome_(terrain, _P); - const roll = this.noise_.Get(_V.x, 2.0, _V.z); - if (roll > _BIOMES[biome]) { - continue; - } + const roll = this.noise_.Get(_V.x, 2.0, _V.z); + if (roll > _BIOMES[biome]) { + continue; + } - const e = this.SpawnAt_(biome, _P); + const e = this.SpawnAt_(biome, _P); - e.SetPosition(_P); + e.SetPosition(_P); - this.Manager.Add(e, key); + this.Manager.Add(e, key); - e.SetActive(false); - this.crap_.push(e); - } + e.SetActive(false); + this.crap_.push(e); } } + } - Update(_) { - this.SpawnCrap_(); - } - }; + Update(_) { + this.SpawnCrap_(); + } +}; - return { - SceneryController: SceneryController, - }; -})(); \ No newline at end of file +export { + SceneryController +} \ No newline at end of file diff --git a/client/src/sorceror-effect.ts b/client/src/sorceror-effect.ts index f681da1b..177ca364 100644 --- a/client/src/sorceror-effect.ts +++ b/client/src/sorceror-effect.ts @@ -1,123 +1,127 @@ import * as THREE from 'three'; -import {particle_system} from "./particle-system.js"; +import { ParticleEmitter, ParticleSystem } from "./particle-system"; import { Component } from "./entity"; +import { EVENT_TYPES } from 'shared/src/constants'; -export const sorceror_effect = (() => { +class SorcerorEffectEmitter extends ParticleEmitter { + parent_: any; + blend_: number; - class SorcerorEffectEmitter extends particle_system.ParticleEmitter { - constructor(parent) { - super(); - this.parent_ = parent; - this.blend_ = 0.0; - } + constructor(parent) { + super(); + this.parent_ = parent; + this.blend_ = 0.0; + } - OnUpdate_() { - this.parent_.updateMatrixWorld(true); + OnUpdate_() { + this.parent_.updateMatrixWorld(true); - this.SetEmissionRate(300.0 * (this.emitterLife_ / 3.0)); - } + this.SetEmissionRate(300.0 * (this.emitterLife_ / 3.0)); + } - CreateParticle_() { - const origin = new THREE.Vector3(0, 0, 0); - this.parent_.localToWorld(origin); - - const radius = 1.0; - const life = (Math.random() * 0.75 + 0.25) * 1.0; - const p = new THREE.Vector3( - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius); - - const d = p.clone().normalize(); - p.copy(d); - p.multiplyScalar(radius); - p.add(origin); - d.multiplyScalar(-1.0); - - return { - position: p, - size: (Math.random() * 0.5 + 0.5) * 1.0, - colour: new THREE.Color(), - alpha: 1.0, - life: life, - maxLife: life, - rotation: Math.random() * 2.0 * Math.PI, - velocity: d, - blend: this.blend_, - }; - } - }; - - class SorcerorEffect extends Component { - constructor(params) { - super(); - this.params_ = params; - - this.particles_ = new particle_system.ParticleSystem({ - camera: params.camera, - parent: params.scene, - texture: './resources/textures/fire.png', - }); - } + CreateParticle_() { + const origin = new THREE.Vector3(0, 0, 0); + this.parent_.localToWorld(origin); + + const radius = 1.0; + const life = (Math.random() * 0.75 + 0.25) * 1.0; + const p = new THREE.Vector3( + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius); + + const d = p.clone().normalize(); + p.copy(d); + p.multiplyScalar(radius); + p.add(origin); + d.multiplyScalar(-1.0); + + return { + position: p, + size: (Math.random() * 0.5 + 0.5) * 1.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: d, + blend: this.blend_, + }; + } +}; + +class SorcerorEffect extends Component { + params_: any; + particles_: any; + _bones: any; + constructor(params) { + super(); + this.params_ = params; + + this.particles_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/fire.png', + }); + } - Destroy() { - this.particles_.Destroy(); - } + Destroy() { + this.particles_.Destroy(); + } - InitComponent() { - this._RegisterHandler('action.attack', (m) => { this.OnAttack_(m); }); - this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); - } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.ACTION_ATTACK, (m) => { this.OnAttack_(m); }); + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); + } - OnCharacterLoaded_(msg) { - this._bones = msg.bones; - } + OnCharacterLoaded_(msg) { + this._bones = msg.bones; + } - OnAttack_() { - const hands = [this._bones['RightHandIndex1'], this._bones['LeftHandIndex1']]; - for (let h of hands) { - let emitter = new SorcerorEffectEmitter(h); - emitter.alphaSpline_.AddPoint(0.0, 0.0); - emitter.alphaSpline_.AddPoint(0.1, 1.0); - emitter.alphaSpline_.AddPoint(0.7, 1.0); - emitter.alphaSpline_.AddPoint(1.0, 0.0); - - emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x00FF00)); - emitter.colourSpline_.AddPoint(0.5, new THREE.Color(0x40C040)); - emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0xFF4040)); - - emitter.sizeSpline_.AddPoint(0.0, 0.5); - emitter.sizeSpline_.AddPoint(0.5, 2.5); - emitter.sizeSpline_.AddPoint(1.0, 0.0); - emitter.SetLife(2.5); - emitter.blend_ = 0.0; - - this.particles_.AddEmitter(emitter); - - emitter = new SorcerorEffectEmitter(h); - emitter.alphaSpline_.AddPoint(0.0, 0.0); - emitter.alphaSpline_.AddPoint(0.7, 1.0); - emitter.alphaSpline_.AddPoint(1.0, 0.0); - - emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x202020)); - emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x101010)); - - emitter.sizeSpline_.AddPoint(0.0, 0.5); - emitter.sizeSpline_.AddPoint(1.0, 4.0); - emitter.SetLife(2.5); - emitter.blend_ = 1.0; - - this.particles_.AddEmitter(emitter); - } + OnAttack_(m: any) { + const hands = [this._bones['RightHandIndex1'], this._bones['LeftHandIndex1']]; + for (let h of hands) { + let emitter = new SorcerorEffectEmitter(h); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.1, 1.0); + emitter.alphaSpline_.AddPoint(0.7, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x00FF00)); + emitter.colourSpline_.AddPoint(0.5, new THREE.Color(0x40C040)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0xFF4040)); + + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(0.5, 2.5); + emitter.sizeSpline_.AddPoint(1.0, 0.0); + emitter.SetLife(2.5); + emitter.blend_ = 0.0; + + this.particles_.AddEmitter(emitter); + + emitter = new SorcerorEffectEmitter(h); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.7, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x202020)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x101010)); + + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(1.0, 4.0); + emitter.SetLife(2.5); + emitter.blend_ = 1.0; + + this.particles_.AddEmitter(emitter); } + } - Update(timeElapsed) { - this.particles_.Update(timeElapsed); - } + Update(timeElapsed) { + this.particles_.Update(timeElapsed); } - - return { - SorcerorEffect: SorcerorEffect, - }; -})(); \ No newline at end of file +} + +export { + SorcerorEffect +} \ No newline at end of file diff --git a/client/src/spatial-grid-controller.ts b/client/src/spatial-grid-controller.ts index 411f9633..e1abfdb6 100644 --- a/client/src/spatial-grid-controller.ts +++ b/client/src/spatial-grid-controller.ts @@ -1,45 +1,44 @@ -import {entity} from './entity.js'; - - -export const spatial_grid_controller = (() => { - - class SpatialGridController extends Component { - constructor(params) { - super(); - - this.grid_ = params.grid; - } - - Destroy() { - this.grid_.Remove(this.client_); - this.client_ = null; - } - - InitComponent() { - const pos = [ - this.parent_._position.x, - this.parent_._position.z, - ]; - - this.client_ = this.grid_.NewClient(pos, [1, 1]); - this.client_.entity = this.parent_; - this._RegisterHandler('update.position', (m) => this._OnPosition(m)); - } - - _OnPosition(msg) { - this.client_.position = [msg.value.x, msg.value.z]; - this.grid_.UpdateClient(this.client_); - } - - FindNearbyEntities(range) { - const results = this.grid_.FindNear( - [this.parent_._position.x, this.parent_._position.z], [range, range]); - - return results.filter(c => c.entity != this.parent_); - } - }; - - return { - SpatialGridController: SpatialGridController, - }; -})(); \ No newline at end of file +import { Component } from './entity'; + +class SpatialGridController extends Component { + grid_: any; + client_: any; + constructor(params) { + super(params); + + this.grid_ = params.grid; + } + + Destroy() { + this.grid_.Remove(this.client_); + this.client_ = null; + } + + + InitComponent() { + const pos = [ + this.parent_._position.x, + this.parent_._position.z, + ]; + + this.client_ = this.grid_.NewClient(pos, [1, 1]); + this.client_.entity = this.parent_; + this._RegisterHandler('update.position', (m) => this._OnPosition(m)); + } + + _OnPosition(msg) { + this.client_.position = [msg.value.x, msg.value.z]; + this.grid_.UpdateClient(this.client_); + } + + FindNearbyEntities(range) { + const results = this.grid_.FindNear( + [this.parent_._position.x, this.parent_._position.z], [range, range]); + + return results.filter(c => c.entity != this.parent_); + } +}; + +export { + SpatialGridController +} \ No newline at end of file diff --git a/client/src/spawners.ts b/client/src/spawners.ts index bec6faf9..fc605c0e 100644 --- a/client/src/spawners.ts +++ b/client/src/spawners.ts @@ -1,143 +1,145 @@ -import {entity} from './entity.js'; +import { Component, Entity } from './entity'; -import {third_person_camera} from './third-person-camera.js'; -import {player_entity} from './player-entity.js' -import {health_component} from './health-component.js'; -import {player_input} from './player-input.js'; -import {spatial_grid_controller} from './spatial-grid-controller.js'; -import {inventory_controller} from './inventory-controller.js'; -import {equip_weapon_component} from './equip-weapon-component.js'; -import {attack_controller} from './attacker-controller.js'; +import { third_person_camera } from './third-person-camera'; +import { BasicCharacterController } from './player-entity' +import { HealthComponent } from './health-component'; +import { BasicCharacterControllerInput } from './player-input'; +import { SpatialGridController } from './spatial-grid-controller'; +import { InventoryController, UIInventoryController } from './inventory-controller'; +import { equip_weapon_component } from './equip-weapon-component'; +import { AttackController } from './attacker-controller'; -import {npc_entity} from './npc-entity.js'; -import {health_bar} from './health-bar.js'; -import {network_entity_controller} from './network-entity-controller.js'; -import {network_player_controller} from './network-player-controller.js'; -import {floating_name} from './floating-name.js'; -import {sorceror_effect} from './sorceror-effect.js'; -import {blood_effect} from './blood-effect.js'; +import { NPCController } from './npc-entity'; +import { NetworkEntityController } from './network-entity-controller'; +import { NetworkEntityController as NetworkPlayerController } from './network-player-controller'; +import { FloatingName } from './floating-name'; +import { SorcerorEffect } from './sorceror-effect'; +import { BloodEffect } from './blood-effect'; +import { CLASS_TYPES_ENUM } from 'shared/src/constants'; +class PlayerSpawner extends Component { + params_: any; + constructor(params) { + super(params); + this.params_ = params; + } -export const spawners = (() => { - - class PlayerSpawner extends Component { - constructor(params) { - super(); - this.params_ = params; - } + Spawn(playerParams) { + const params = { + camera: this.params_.camera, + scene: this.params_.scene, + desc: playerParams, + }; - Spawn(playerParams) { - const params = { + const player = new Entity(); + player.Account = playerParams.account; + player.AddComponent(new BasicCharacterControllerInput(params)); + player.AddComponent(new BasicCharacterController(params)); + player.AddComponent( + new equip_weapon_component.EquipWeapon({ desc: playerParams })); + player.AddComponent(new UIInventoryController(params)); + player.AddComponent(new InventoryController(params)); + player.AddComponent(new HealthComponent({ + updateUI: true, + health: 1, + maxHealth: 1, + strength: 1, + wisdomness: 1, + benchpress: 1, + curl: 1, + experience: 1, + level: 1, + desc: playerParams, + })); + player.AddComponent( + new SpatialGridController( + { grid: this.params_.grid })); + player.AddComponent( + new AttackController()); + player.AddComponent( + new third_person_camera.ThirdPersonCamera({ camera: this.params_.camera, - scene: this.params_.scene, - desc: playerParams, - }; - - const player = new entity.Entity(); - player.Account = playerParams.account; - player.AddComponent(new player_input.BasicCharacterControllerInput(params)); - player.AddComponent(new player_entity.BasicCharacterController(params)); - player.AddComponent( - new equip_weapon_component.EquipWeapon({desc: playerParams})); - player.AddComponent(new inventory_controller.UIInventoryController(params)); - player.AddComponent(new inventory_controller.InventoryController(params)); - player.AddComponent(new health_component.HealthComponent({ - updateUI: true, - health: 1, - maxHealth: 1, - strength: 1, - wisdomness: 1, - benchpress: 1, - curl: 1, - experience: 1, - level: 1, - desc: playerParams, + target: player })); - player.AddComponent( - new spatial_grid_controller.SpatialGridController( - {grid: this.params_.grid})); - player.AddComponent( - new attack_controller.AttackController()); - player.AddComponent( - new third_person_camera.ThirdPersonCamera({ - camera: this.params_.camera, - target: player})); - player.AddComponent( - new network_player_controller.NetworkEntityController({ - camera: this.params_.camera, - target: player})); - player.AddComponent(new blood_effect.BloodEffect({ - camera: this.params_.camera, - scene: this.params_.scene, + player.AddComponent( + new NetworkPlayerController({ + camera: this.params_.camera, + target: player })); - if (playerParams.character.class == 'sorceror') { - player.AddComponent( - new sorceror_effect.SorcerorEffect(params)); - } - this.Manager.Add(player, 'player'); - - return player; + player.AddComponent(new BloodEffect({ + camera: this.params_.camera, + scene: this.params_.scene, + })); + if (playerParams.character.class == CLASS_TYPES_ENUM.SORCEROR) { + player.AddComponent( + new SorcerorEffect(params)); } - }; + this.Manager.Add(player, 'player'); - class NetworkEntitySpawner extends Component { - constructor(params) { - super(); - this.params_ = params; - } + return player; + } +}; - Spawn(name, desc) { - const npc = new entity.Entity(); - npc.Account = desc.account; - npc.AddComponent(new npc_entity.NPCController({ - camera: this.params_.camera, - scene: this.params_.scene, - desc: desc, +class NetworkEntitySpawner extends Component { + params_: any; + constructor(params) { + super(); + this.params_ = params; + } + + Spawn(name, desc) { + const npc = new Entity(); + npc.Account = desc.account; + npc.AddComponent(new NPCController({ + camera: this.params_.camera, + scene: this.params_.scene, + desc: desc, + })); + npc.AddComponent( + new HealthComponent({ + health: 50, + maxHealth: 50, + strength: 2, + wisdomness: 2, + benchpress: 3, + curl: 1, + experience: 0, + level: 1, + desc: desc, })); + npc.AddComponent( + new SpatialGridController( + { grid: this.params_.grid })); + npc.AddComponent( + new NetworkEntityController()); + if (desc.account.name) { npc.AddComponent( - new health_component.HealthComponent({ - health: 50, - maxHealth: 50, - strength: 2, - wisdomness: 2, - benchpress: 3, - curl: 1, - experience: 0, - level: 1, - desc: desc, - })); - npc.AddComponent( - new spatial_grid_controller.SpatialGridController( - {grid: this.params_.grid})); - npc.AddComponent( - new network_entity_controller.NetworkEntityController()); - if (desc.account.name) { - npc.AddComponent( - new floating_name.FloatingName({desc: desc})); - } + new FloatingName({ desc: desc })); + } + npc.AddComponent( + new equip_weapon_component.EquipWeapon({ desc: desc })); + npc.AddComponent(new InventoryController()); + npc.AddComponent(new BloodEffect({ + camera: this.params_.camera, + scene: this.params_.scene, + })); + if (desc.character.class == CLASS_TYPES_ENUM.SORCEROR) { npc.AddComponent( - new equip_weapon_component.EquipWeapon({desc: desc})); - npc.AddComponent(new inventory_controller.InventoryController()); - npc.AddComponent(new blood_effect.BloodEffect({ + new SorcerorEffect({ camera: this.params_.camera, scene: this.params_.scene, - })); - if (desc.character.class == 'sorceror') { - npc.AddComponent( - new sorceror_effect.SorcerorEffect({ - camera: this.params_.camera, - scene: this.params_.scene, - })); - } + })); + } - this.Manager.Add(npc, name); + this.Manager.Add(npc, name); - return npc; - } + return npc; } +} + + - return { - PlayerSpawner: PlayerSpawner, - NetworkEntitySpawner: NetworkEntitySpawner, - }; -})(); \ No newline at end of file +export { + PlayerSpawner, + NetworkEntitySpawner +} \ No newline at end of file diff --git a/client/src/terrain-builder-threaded-worker.ts b/client/src/terrain-builder-threaded-worker.ts index 6ee41a0d..c42c6daa 100644 --- a/client/src/terrain-builder-threaded-worker.ts +++ b/client/src/terrain-builder-threaded-worker.ts @@ -1,30 +1,31 @@ import * as THREE from 'three'; -import {texture_splatter} from './texture-splatter.js' ; +import { texture_splatter } from './texture-splatter'; -import {math} from '/shared/math.mjs'; -import {noise} from '/shared/noise.mjs'; -import {terrain_height} from '/shared/terrain-height.mjs' ; +import { math } from 'shared/src/math'; +import { Noise } from 'shared/src/noise'; +import { HeightGenerator } from 'shared/src/terrain-height'; class _TerrainBuilderThreadedWorker { + _params: any; constructor() { } Init(params) { this._params = params; this._params.offset = new THREE.Vector3( - params.offset[0], params.offset[1], params.offset[2]); - this._params.noise = new noise.Noise(params.noiseParams); - this._params.heightGenerators = [new terrain_height.HeightGenerator()]; + params.offset[0], params.offset[1], params.offset[2]); + this._params.noise = new Noise(params.noiseParams); + this._params.heightGenerators = [new HeightGenerator()]; - this._params.biomeGenerator = new noise.Noise(params.biomesParams); - this._params.colourNoise = new noise.Noise(params.colourNoiseParams); + this._params.biomeGenerator = new Noise(params.biomesParams); + this._params.colourNoise = new Noise(params.colourNoiseParams); this._params.colourGenerator = new texture_splatter.TextureSplatter( - { - biomeGenerator: this._params.biomeGenerator, - colourNoise: this._params.colourNoise - }); + { + biomeGenerator: this._params.biomeGenerator, + colourNoise: this._params.colourNoise + }); } _GenerateHeight(v) { @@ -104,22 +105,22 @@ class _TerrainBuilderThreadedWorker { for (let i = 0; i < resolution; i++) { for (let j = 0; j < resolution; j++) { indices.push( - i * (resolution + 1) + j, - (i + 1) * (resolution + 1) + j + 1, - i * (resolution + 1) + j + 1); + i * (resolution + 1) + j, + (i + 1) * (resolution + 1) + j + 1, + i * (resolution + 1) + j + 1); indices.push( - (i + 1) * (resolution + 1) + j, - (i + 1) * (resolution + 1) + j + 1, - i * (resolution + 1) + j); + (i + 1) * (resolution + 1) + j, + (i + 1) * (resolution + 1) + j + 1, + i * (resolution + 1) + j); } } const normals = new Array(up.length).fill(0.0); - for (let i = 0, n = indices.length; i < n; i+= 3) { + for (let i = 0, n = indices.length; i < n; i += 3) { const i1 = indices[i] * 3; - const i2 = indices[i+1] * 3; - const i3 = indices[i+2] * 3; + const i2 = indices[i + 1] * 3; + const i3 = indices[i + 2] * 3; _N1.fromArray(positions, i1); _N2.fromArray(positions, i2); @@ -133,13 +134,13 @@ class _TerrainBuilderThreadedWorker { normals[i2] += _D1.x; normals[i3] += _D1.x; - normals[i1+1] += _D1.y; - normals[i2+1] += _D1.y; - normals[i3+1] += _D1.y; + normals[i1 + 1] += _D1.y; + normals[i2 + 1] += _D1.y; + normals[i3 + 1] += _D1.y; - normals[i1+2] += _D1.z; - normals[i2+2] += _D1.z; - normals[i3+2] += _D1.z; + normals[i1 + 2] += _D1.z; + normals[i2 + 2] += _D1.z; + normals[i3 + 2] += _D1.z; } // Fix the skirt @@ -167,19 +168,19 @@ class _TerrainBuilderThreadedWorker { _ApplyFix(x, resolution, x, resolution - 1); } - for (let i = 0, n = normals.length; i < n; i+=3) { + for (let i = 0, n = normals.length; i < n; i += 3) { _N.fromArray(normals, i); _N.normalize(); normals[i] = _N.x; - normals[i+1] = _N.y; - normals[i+2] = _N.z; + normals[i + 1] = _N.y; + normals[i + 2] = _N.z; } - for (let i = 0, n = indices.length; i < n; i+=3) { - const splats = []; + for (let i = 0, n = indices.length; i < n; i += 3) { + const splats: object[] = []; const i1 = indices[i] * 3; - const i2 = indices[i+1] * 3; - const i3 = indices[i+2] * 3; + const i2 = indices[i + 1] * 3; + const i3 = indices[i + 2] * 3; const indexes = [i1, i2, i3]; for (let j = 0; j < 3; j++) { const j1 = indexes[j]; @@ -192,7 +193,7 @@ class _TerrainBuilderThreadedWorker { const splatStrengths = {}; for (let k in splats[0]) { - splatStrengths[k] = {key: k, strength: 0.0}; + splatStrengths[k] = { key: k, strength: 0.0 }; } for (let curSplat of splats) { for (let k in curSplat) { @@ -200,8 +201,8 @@ class _TerrainBuilderThreadedWorker { } } - let typeValues = Object.values(splatStrengths); - typeValues.sort((a, b) => { + let typeValues: any = Object.values(splatStrengths) as {}[]; + typeValues.sort((a: any, b: any) => { if (a.strength < b.strength) { return 1; } @@ -212,15 +213,15 @@ class _TerrainBuilderThreadedWorker { }); const w1 = indices[i] * 4; - const w2 = indices[i+1] * 4; - const w3 = indices[i+2] * 4; + const w2 = indices[i + 1] * 4; + const w3 = indices[i + 2] * 4; for (let s = 0; s < 3; s++) { let total = ( - splats[s][typeValues[0].key].strength + - splats[s][typeValues[1].key].strength + - splats[s][typeValues[2].key].strength + - splats[s][typeValues[3].key].strength); + splats?.[s]?.[typeValues?.[0]?.key]?.strength + + splats[s][typeValues?.[1].key].strength + + splats[s][typeValues[2].key].strength + + splats[s][typeValues[3].key].strength); const normalization = 1.0 / total; splats[s][typeValues[0].key].strength *= normalization; @@ -262,10 +263,10 @@ class _TerrainBuilderThreadedWorker { function _Unindex(src, stride) { const dst = []; - for (let i = 0, n = indices.length; i < n; i+= 3) { + for (let i = 0, n = indices.length; i < n; i += 3) { const i1 = indices[i] * stride; - const i2 = indices[i+1] * stride; - const i3 = indices[i+2] * stride; + const i2 = indices[i + 1] * stride; + const i3 = indices[i + 2] * stride; for (let j = 0; j < stride; j++) { dst.push(src[i1 + j]); @@ -290,19 +291,19 @@ class _TerrainBuilderThreadedWorker { const bytesInFloat32 = 4; const positionsArray = new Float32Array( - new SharedArrayBuffer(bytesInFloat32 * uiPositions.length)); + new SharedArrayBuffer(bytesInFloat32 * uiPositions.length)); const coloursArray = new Float32Array( - new SharedArrayBuffer(bytesInFloat32 * uiColours.length)); + new SharedArrayBuffer(bytesInFloat32 * uiColours.length)); const normalsArray = new Float32Array( - new SharedArrayBuffer(bytesInFloat32 * uiNormals.length)); + new SharedArrayBuffer(bytesInFloat32 * uiNormals.length)); const coordsArray = new Float32Array( - new SharedArrayBuffer(bytesInFloat32 * uiCoords.length)); + new SharedArrayBuffer(bytesInFloat32 * uiCoords.length)); const uvsArray = new Float32Array( - new SharedArrayBuffer(bytesInFloat32 * uiUVs.length)); + new SharedArrayBuffer(bytesInFloat32 * uiUVs.length)); const weights1Array = new Float32Array( - new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); + new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); const weights2Array = new Float32Array( - new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); + new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); positionsArray.set(uiPositions, 0); coloursArray.set(uiColours, 0); @@ -331,6 +332,6 @@ self.onmessage = (msg) => { _CHUNK.Init(msg.data.params); const rebuiltData = _CHUNK.Rebuild(); - self.postMessage({subject: 'build_chunk_result', data: rebuiltData}); + self.postMessage({ subject: 'build_chunk_result', data: rebuiltData }, null); } } \ No newline at end of file diff --git a/client/src/terrain-builder-threaded.ts b/client/src/terrain-builder-threaded.ts index 91fea96a..10ef27ed 100644 --- a/client/src/terrain-builder-threaded.ts +++ b/client/src/terrain-builder-threaded.ts @@ -1,171 +1,179 @@ -import {terrain_chunk} from './terrain-chunk.js'; +import { TerrainChunk } from './terrain-chunk'; -export const terrain_builder_threaded = (function() { +const _NUM_WORKERS = 4; - const _NUM_WORKERS = 4; +let _IDs = 0; - let _IDs = 0; +class WorkerThread { + _worker: Worker; + _resolve: any; + _id: number; - class WorkerThread { - constructor(s) { - this._worker = new Worker(s, {type: 'module'}); - this._worker.onmessage = (e) => { - this._OnMessage(e); - }; - this._resolve = null; - this._id = _IDs++; - } + constructor(s) { + this._worker = new Worker(s, { type: 'module' }); + this._worker.onmessage = (e) => { + this._OnMessage(e); + }; + this._resolve = null; + this._id = _IDs++; + } - _OnMessage(e) { - const resolve = this._resolve; - this._resolve = null; - resolve(e.data); - } + _OnMessage(e) { + const resolve = this._resolve; + this._resolve = null; + resolve(e.data); + } - get id() { - return this._id; - } + get id() { + return this._id; + } - postMessage(s, resolve) { - this._resolve = resolve; - this._worker.postMessage(s); - } + postMessage(s, resolve) { + this._resolve = resolve; + this._worker.postMessage(s); + } +} + +class WorkerThreadPool { + _workers: WorkerThread[]; + _free: any[]; + _busy: {}; + _queue: any[]; + constructor(sz, entry) { + this._workers = [...Array(sz)].map(_ => new WorkerThread(entry)); + this._free = [...this._workers]; + this._busy = {}; + this._queue = []; } - class WorkerThreadPool { - constructor(sz, entry) { - this._workers = [...Array(sz)].map(_ => new WorkerThread(entry)); - this._free = [...this._workers]; - this._busy = {}; - this._queue = []; - } + get length() { + return this._workers.length; + } - get length() { - return this._workers.length; - } + get Busy() { + return this._queue.length > 0 || Object.keys(this._busy).length > 0; + } - get Busy() { - return this._queue.length > 0 || Object.keys(this._busy).length > 0; - } + Enqueue(workItem, resolve) { + this._queue.push([workItem, resolve]); + this._PumpQueue(); + } + + _PumpQueue() { + while (this._free.length > 0 && this._queue.length > 0) { + const w = this._free.pop(); + this._busy[w.id] = w; - Enqueue(workItem, resolve) { - this._queue.push([workItem, resolve]); - this._PumpQueue(); + const [workItem, workResolve] = this._queue.shift(); + + w.postMessage(workItem, (v) => { + delete this._busy[w.id]; + this._free.push(w); + workResolve(v); + this._PumpQueue(); + }); } + } +} - _PumpQueue() { - while (this._free.length > 0 && this._queue.length > 0) { - const w = this._free.pop(); - this._busy[w.id] = w; +class TerrainChunkRebuilder_Threaded { + _pool: {}; + _old: any[]; + _workerPool: WorkerThreadPool; + _params: any; + constructor(params) { + this._pool = {}; + this._old = []; - const [workItem, workResolve] = this._queue.shift(); + this._workerPool = new WorkerThreadPool( + _NUM_WORKERS, 'src/terrain-builder-threaded-worker.js'); - w.postMessage(workItem, (v) => { - delete this._busy[w.id]; - this._free.push(w); - workResolve(v); - this._PumpQueue(); - }); - } + this._params = params; + } + + _OnResult(chunk, msg) { + if (msg.subject == 'build_chunk_result') { + chunk.RebuildMeshFromData(msg.data); + chunk.Show(); } } - class _TerrainChunkRebuilder_Threaded { - constructor(params) { - this._pool = {}; - this._old = []; + AllocateChunk(params) { + const w = params.width; - this._workerPool = new WorkerThreadPool( - _NUM_WORKERS, 'src/terrain-builder-threaded-worker.js'); - - this._params = params; + if (!(w in this._pool)) { + this._pool[w] = []; } - _OnResult(chunk, msg) { - if (msg.subject == 'build_chunk_result') { - chunk.RebuildMeshFromData(msg.data); - chunk.Show(); - } + let c = null; + if (this._pool[w].length > 0) { + c = this._pool[w].pop(); + c._params = params; + } else { + c = new TerrainChunk(params); } - AllocateChunk(params) { - const w = params.width; - - if (!(w in this._pool)) { - this._pool[w] = []; - } + c.Hide(); - let c = null; - if (this._pool[w].length > 0) { - c = this._pool[w].pop(); - c._params = params; - } else { - c = new terrain_chunk.TerrainChunk(params); - } + const threadedParams = { + noiseParams: params.noiseParams, + colourNoiseParams: params.colourNoiseParams, + biomesParams: params.biomesParams, + colourGeneratorParams: params.colourGeneratorParams, + heightGeneratorsParams: params.heightGeneratorsParams, + width: params.width, + offset: [params.offset.x, params.offset.y, params.offset.z], + // origin: params.origin, + radius: params.radius, + resolution: params.resolution, + worldMatrix: params.transform, + }; - c.Hide(); - - const threadedParams = { - noiseParams: params.noiseParams, - colourNoiseParams: params.colourNoiseParams, - biomesParams: params.biomesParams, - colourGeneratorParams: params.colourGeneratorParams, - heightGeneratorsParams: params.heightGeneratorsParams, - width: params.width, - offset: [params.offset.x, params.offset.y, params.offset.z], - // origin: params.origin, - radius: params.radius, - resolution: params.resolution, - worldMatrix: params.transform, - }; - - const msg = { - subject: 'build_chunk', - params: threadedParams, - }; - - this._workerPool.Enqueue(msg, (m) => { - this._OnResult(c, m); - }); + const msg = { + subject: 'build_chunk', + params: threadedParams, + }; - return c; - } + this._workerPool.Enqueue(msg, (m) => { + this._OnResult(c, m); + }); - RetireChunks(chunks) { - this._old.push(...chunks); - } + return c; + } - _RecycleChunks(chunks) { - for (let c of chunks) { - if (!(c.chunk._params.width in this._pool)) { - this._pool[c.chunk._params.width] = []; - } + RetireChunks(chunks) { + this._old.push(...chunks); + } - c.chunk.Destroy(); + _RecycleChunks(chunks) { + for (let c of chunks) { + if (!(c.chunk._params.width in this._pool)) { + this._pool[c.chunk._params.width] = []; } - } - get Busy() { - return this._workerPool.Busy; + c.chunk.Destroy(); } + } - Rebuild(chunks) { - for (let k in chunks) { - this._workerPool.Enqueue(chunks[k].chunk._params); - } - } + get Busy() { + return this._workerPool.Busy; + } - Update() { - if (!this.Busy) { - this._RecycleChunks(this._old); - this._old = []; - } + Rebuild(chunks) { + for (let k in chunks) { + this._workerPool.Enqueue(chunks[k].chunk._params, null); } } - return { - TerrainChunkRebuilder_Threaded: _TerrainChunkRebuilder_Threaded + Update() { + if (!this.Busy) { + this._RecycleChunks(this._old); + this._old = []; + } } -})(); +} +export { + TerrainChunkRebuilder_Threaded +} \ No newline at end of file diff --git a/client/src/terrain-builder.ts b/client/src/terrain-builder.ts index b51d4697..a4aea110 100644 --- a/client/src/terrain-builder.ts +++ b/client/src/terrain-builder.ts @@ -1,100 +1,103 @@ -import {terrain_chunk} from './terrain-chunk.js'; - +import { TerrainChunk } from './terrain-chunk'; + +class TerrainChunkRebuilder { + _pool: {}; + _params: any; + _queued: any; + _old: any; + _active: any; + _new: any[]; + + constructor(params) { + this._pool = {}; + this._params = params; + this._Reset(); + } -export const terrain_builder = (function() { + AllocateChunk(params) { + const w = params.width; - class _TerrainChunkRebuilder { - constructor(params) { - this._pool = {}; - this._params = params; - this._Reset(); + if (!(w in this._pool)) { + this._pool[w] = []; } - AllocateChunk(params) { - const w = params.width; + let c = null; + if (this._pool[w].length > 0) { + c = this._pool[w].pop(); + c._params = params; + } else { + c = new TerrainChunk(params); + } - if (!(w in this._pool)) { - this._pool[w] = []; - } + c.Hide(); - let c = null; - if (this._pool[w].length > 0) { - c = this._pool[w].pop(); - c._params = params; - } else { - c = new terrain_chunk.TerrainChunk(params); - } + this._queued.push(c); - c.Hide(); + return c; + } - this._queued.push(c); + RetireChunks(chunks) { + this._old.push(...chunks); + } - return c; - } + _RecycleChunks(chunks) { + for (let c of chunks) { + if (!(c.chunk._params.width in this._pool)) { + this._pool[c.chunk._params.width] = []; + } - RetireChunks(chunks) { - this._old.push(...chunks); + c.chunk.Destroy(); } + } - _RecycleChunks(chunks) { - for (let c of chunks) { - if (!(c.chunk._params.width in this._pool)) { - this._pool[c.chunk._params.width] = []; - } + _Reset() { + this._active = null; + this._queued = []; + this._old = []; + this._new = []; + } - c.chunk.Destroy(); - } - } + get Busy() { + return this._active || this._queued.length > 0; + } - _Reset() { - this._active = null; - this._queued = []; - this._old = []; - this._new = []; + Rebuild(chunks) { + if (this.Busy) { + return; } - - get Busy() { - return this._active || this._queued.length > 0; + for (let k in chunks) { + this._queued.push(chunks[k].chunk); } + } - Rebuild(chunks) { - if (this.Busy) { - return; + Update() { + if (this._active) { + const r = this._active.next(); + if (r.done) { + this._active = null; } - for (let k in chunks) { - this._queued.push(chunks[k].chunk); + } else { + const b = this._queued.pop(); + if (b) { + this._active = b._Rebuild(); + this._new.push(b); } } - Update() { - if (this._active) { - const r = this._active.next(); - if (r.done) { - this._active = null; - } - } else { - const b = this._queued.pop(); - if (b) { - this._active = b._Rebuild(); - this._new.push(b); - } - } - - if (this._active) { - return; - } + if (this._active) { + return; + } - if (!this._queued.length) { - this._RecycleChunks(this._old); - for (let b of this._new) { - b.Show(); - } - this._Reset(); + if (!this._queued.length) { + this._RecycleChunks(this._old); + for (let b of this._new) { + b.Show(); } + this._Reset(); } } +} - return { - TerrainChunkRebuilder: _TerrainChunkRebuilder - } -})(); +export { + TerrainChunkRebuilder +} \ No newline at end of file diff --git a/client/src/terrain-chunk.ts b/client/src/terrain-chunk.ts index f45479e8..45c60232 100644 --- a/client/src/terrain-chunk.ts +++ b/client/src/terrain-chunk.ts @@ -1,64 +1,66 @@ import * as THREE from 'three'; -export const terrain_chunk = (function() { +class TerrainChunk { + _params: any; + _geometry: THREE.BufferGeometry; + _plane: THREE.Mesh; - class TerrainChunk { - constructor(params) { - this._params = params; - this._Init(params); - } - - Destroy() { - this._params.group.remove(this._plane); - } + constructor(params) { + this._params = params; + this._Init(params); + } + + Destroy() { + this._params.group.remove(this._plane); + } - Hide() { - this._plane.visible = false; - } - Show() { - this._plane.visible = true; - } + Hide() { + this._plane.visible = false; + } - _Init(params) { - this._geometry = new THREE.BufferGeometry(); - this._plane = new THREE.Mesh(this._geometry, params.material); - this._plane.castShadow = false; - this._plane.receiveShadow = true; - this._plane.frustumCulled = false; - this._params.group.add(this._plane); - this.Reinit(params); - } + Show() { + this._plane.visible = true; + } - Update(cameraPosition) { - // this._plane.position.copy(this._params.origin); - // this._plane.position.sub(cameraPosition); - } + _Init(params) { + this._geometry = new THREE.BufferGeometry(); + this._plane = new THREE.Mesh(this._geometry, params.material); + this._plane.castShadow = false; + this._plane.receiveShadow = true; + this._plane.frustumCulled = false; + this._params.group.add(this._plane); + this.Reinit(params); + } - Reinit(params) { - this._params = params; - this._plane.position.set(0, 0, 0); - } + Update(cameraPosition) { + // this._plane.position.copy(this._params.origin); + // this._plane.position.sub(cameraPosition); + } - RebuildMeshFromData(data) { - this._geometry.setAttribute( - 'position', new THREE.Float32BufferAttribute(data.positions, 3)); - this._geometry.setAttribute( - 'color', new THREE.Float32BufferAttribute(data.colours, 3)); - this._geometry.setAttribute( - 'normal', new THREE.Float32BufferAttribute(data.normals, 3)); - this._geometry.setAttribute( - 'coords', new THREE.Float32BufferAttribute(data.coords, 3)); - this._geometry.setAttribute( - 'weights1', new THREE.Float32BufferAttribute(data.weights1, 4)); - this._geometry.setAttribute( - 'weights2', new THREE.Float32BufferAttribute(data.weights2, 4)); - this._geometry.computeBoundingBox(); - } + Reinit(params) { + this._params = params; + this._plane.position.set(0, 0, 0); } - return { - TerrainChunk: TerrainChunk + RebuildMeshFromData(data) { + this._geometry.setAttribute( + 'position', new THREE.Float32BufferAttribute(data.positions, 3)); + this._geometry.setAttribute( + 'color', new THREE.Float32BufferAttribute(data.colours, 3)); + this._geometry.setAttribute( + 'normal', new THREE.Float32BufferAttribute(data.normals, 3)); + this._geometry.setAttribute( + 'coords', new THREE.Float32BufferAttribute(data.coords, 3)); + this._geometry.setAttribute( + 'weights1', new THREE.Float32BufferAttribute(data.weights1, 4)); + this._geometry.setAttribute( + 'weights2', new THREE.Float32BufferAttribute(data.weights2, 4)); + this._geometry.computeBoundingBox(); } -})(); +} + +export { + TerrainChunk +} \ No newline at end of file diff --git a/client/src/terrain.ts b/client/src/terrain.ts index d3be9a74..0f548aca 100644 --- a/client/src/terrain.ts +++ b/client/src/terrain.ts @@ -1,6 +1,6 @@ import * as THREE from 'three'; -import {entity} from './entity.js'; +import { Component } from './entity'; import {quadtree} from './quadtree.js'; import {terrain_shader} from './terrain-shader.js'; import {terrain_builder_threaded} from './terrain-builder-threaded.js'; @@ -11,7 +11,7 @@ import {utils} from './utils.js'; import {terrain_constants} from '/shared/terrain-constants.mjs'; import {terrain_height} from '/shared/terrain-height.mjs'; -import {noise} from '/shared/noise.mjs'; +import {noise} from 'shared/src/noise'; export const terrain = (function() { diff --git a/client/src/texture-splatter.ts b/client/src/texture-splatter.ts index 9797af6a..11336c1f 100644 --- a/client/src/texture-splatter.ts +++ b/client/src/texture-splatter.ts @@ -1,7 +1,7 @@ import * as THREE from 'three'; -import {math} from '/shared/math.mjs'; +import {math} from 'shared/src/math'; import {spline} from '/shared/spline.mjs'; import {terrain_constants} from '/shared/terrain-constants.mjs'; diff --git a/client/src/third-person-camera.ts b/client/src/third-person-camera.ts index d3f26a8b..03b217ae 100644 --- a/client/src/third-person-camera.ts +++ b/client/src/third-person-camera.ts @@ -1,5 +1,5 @@ import * as THREE from 'three'; -import {entity} from './entity.js'; +import { Component } from './entity'; export const third_person_camera = (() => { @@ -20,7 +20,7 @@ export const third_person_camera = (() => { idealOffset.applyQuaternion(this._params.target._rotation); idealOffset.add(this._params.target._position); - const terrain = this.FindEntity('terrain').GetComponent('TerrainChunkManager'); + const terrain = this.FindEntity(KNOWN_ENTITIES.TERRAIN).GetComponent('TerrainChunkManager'); idealOffset.y = Math.max(idealOffset.y, terrain.GetHeight(idealOffset)[0] + 5.0); return idealOffset; diff --git a/client/src/thre.ts_component.ts b/client/src/threejs_component.ts similarity index 99% rename from client/src/thre.ts_component.ts rename to client/src/threejs_component.ts index ec7b363f..b374c740 100644 --- a/client/src/thre.ts_component.ts +++ b/client/src/threejs_component.ts @@ -92,7 +92,7 @@ export const threejs_component = (() => { this.threejs_.shadowMap.type = THREE.PCFSoftShadowMap; this.threejs_.setPixelRatio(window.devicePixelRatio); this.threejs_.setSize(window.innerWidth, window.innerHeight); - this.threejs_.domElement.id = 'threejs'; + this.threejs_.domElement.id = DOM_IDS.THREEJS; document.getElementById('container').appendChild(this.threejs_.domElement); diff --git a/client/src/ui-controller.ts b/client/src/ui-controller.ts index 89ac26a4..74b7bcb8 100644 --- a/client/src/ui-controller.ts +++ b/client/src/ui-controller.ts @@ -1,161 +1,160 @@ -import {entity} from './entity.js'; - - -export const ui_controller = (() => { - - class UIController extends Component { - constructor(params) { - super(); - this._params = params; - this._quests = {}; - } - - InitComponent() { - this.iconBar_ = { - stats: document.getElementById('icon-bar-stats'), - inventory: document.getElementById('icon-bar-inventory'), - quests: document.getElementById('icon-bar-quests'), - }; - - this._ui = { - inventory: document.getElementById('inventory'), - stats: document.getElementById('stats'), - quests: document.getElementById('quest-journal'), - }; - - const e = document.getElementById('quest-ui'); - e.style.visibility = 'hidden'; - - this.iconBar_.inventory.onclick = (m) => { this.OnInventoryClicked_(m); }; - this.iconBar_.stats.onclick = (m) => { this.OnStatsClicked_(m); }; - this.iconBar_.quests.onclick = (m) => { this.OnQuestsClicked_(m); }; - this.HideUI_(); - - this.chatElement_ = document.getElementById('chat-input'); - this.chatElement_.addEventListener( - 'keydown', (e) => this.OnChatKeyDown_(e), false); +import { Component } from './entity'; + +class UIController extends Component { + _params: any; + _quests: {}; + iconBar_: { stats: HTMLElement; inventory: HTMLElement; quests: HTMLElement; }; + _ui: { inventory: HTMLElement; stats: HTMLElement; quests: HTMLElement; }; + chatElement_: HTMLInputElement; + + constructor(params) { + super(); + this._params = params; + this._quests = {}; + } + + InitComponent() { + this.iconBar_ = { + stats: document.getElementById('icon-bar-stats'), + inventory: document.getElementById('icon-bar-inventory'), + quests: document.getElementById('icon-bar-quests'), + }; + + this._ui = { + inventory: document.getElementById('inventory'), + stats: document.getElementById('stats'), + quests: document.getElementById('quest-journal'), + }; + + const e = document.getElementById(DOM_IDS.QUEST_UI); + e.style.visibility = 'hidden'; + + this.iconBar_.inventory.onclick = (m) => { this.OnInventoryClicked_(m); }; + this.iconBar_.stats.onclick = (m) => { this.OnStatsClicked_(m); }; + this.iconBar_.quests.onclick = (m) => { this.OnQuestsClicked_(m); }; + this.HideUI_(); + + this.chatElement_ = document.getElementById('chat-input') as HTMLInputElement; + this.chatElement_.addEventListener( + 'keydown', (e) => this.OnChatKeyDown_(e), false); + } + + FadeoutLogin() { + const loginElement = document.getElementById(DOM_IDS.LOGIN_UI); + if (loginElement.classList.contains('fadeOut')) { + return; } - FadeoutLogin() { - const loginElement = document.getElementById('login-ui'); - if (loginElement.classList.contains('fadeOut')) { - return; - } - - loginElement.classList.toggle('fadeOut'); - document.getElementById('game-ui').style.visibility = 'visible'; - } - - OnChatKeyDown_(evt) { - if (evt.keyCode === 13) { - evt.preventDefault(); - const msg = this.chatElement_.value; - if (msg != '') { - const net = this.FindEntity('network').GetComponent( - 'NetworkController'); - net.SendChat(msg); - } - this.chatElement_.value = ''; + loginElement.classList.toggle('fadeOut'); + document.getElementById('game-ui').style.visibility = 'visible'; + } + + OnChatKeyDown_(evt) { + if (evt.keyCode === 13) { + evt.preventDefault(); + const msg = this.chatElement_.value; + if (msg != '') { + const net = this.FindEntity(KNOWN_ENTITIES.NETWORK).GetComponent( + NAMED_COMPONENTS.NETWORK_CONTROLLER); + net.SendChat(msg); } - evt.stopPropagation(); + this.chatElement_.value = ''; } + evt.stopPropagation(); + } - AddQuest(quest) { - if (quest.id in this._quests) { - return; - } - - const e = document.createElement('DIV'); - e.className = 'quest-entry'; - e.id = 'quest-entry-' + quest.id; - e.innerText = quest.title; - e.onclick = (evt) => { - this.OnQuestSelected_(e.id); - }; - document.getElementById('quest-journal').appendChild(e); - - this._quests[quest.id] = quest; - this.OnQuestSelected_(quest.id); + AddQuest(quest) { + if (quest.id in this._quests) { + return; } - AddEventMessages(events) { - for (let e of events) { - if (e.type != 'attack') { - continue; - } - if (e.attacker.Name != 'player' && e.target.Name != 'player') { - continue; - } - - const attackerName = e.attacker.Name == 'player' ? 'You' : e.attacker.Account.name; - const targetName = e.target.Name == 'player' ? 'you' : e.target.Account.name; - - this.AddChatMessage({ - name: '', - text: attackerName + ' hit ' + targetName + ' for ' + e.amount + ' damage!', - action: true, - }); + const e = document.createElement('DIV'); + e.className = 'quest-entry'; + e.id = 'quest-entry-' + quest.id; + e.innerText = quest.title; + e.onclick = (evt) => { + this.OnQuestSelected_(e.id); + }; + document.getElementById('quest-journal').appendChild(e); + + this._quests[quest.id] = quest; + this.OnQuestSelected_(quest.id); + } + + AddEventMessages(events) { + for (let e of events) { + if (e.type != STATE_TYPES.ATTACK) { + continue; } - } - - AddChatMessage(msg) { - const e = document.createElement('div'); - e.className = 'chat-text'; - if (msg.server) { - e.className += ' chat-text-server'; - } else if (msg.action) { - e.className += ' chat-text-action'; - } else { - e.innerText = '[' + msg.name + ']: '; + if (e.attacker.Name != 'player' && e.target.Name != 'player') { + continue; } - e.innerText += msg.text; - const chatElement = document.getElementById('chat-ui-text-area'); - chatElement.insertBefore(e, document.getElementById('chat-input')); - } - - OnQuestSelected_(id) { - const quest = this._quests[id]; - const e = document.getElementById('quest-ui'); - e.style.visibility = ''; + const attackerName = e.attacker.Name == 'player' ? 'You' : e.attacker.Account.name; + const targetName = e.target.Name == 'player' ? 'you' : e.target.Account.name; - const text = document.getElementById('quest-text'); - text.innerText = quest.text; - - const title = document.getElementById('quest-text-title'); - title.innerText = quest.title; - } - - HideUI_() { - this._ui.inventory.style.visibility = 'hidden'; - this._ui.stats.style.visibility = 'hidden'; - this._ui.quests.style.visibility = 'hidden'; + this.AddChatMessage({ + name: '', + text: attackerName + ' hit ' + targetName + ' for ' + e.amount + ' damage!', + action: true, + }); } - - OnQuestsClicked_(msg) { - const visibility = this._ui.quests.style.visibility; - this.HideUI_(); - this._ui.quests.style.visibility = (visibility ? '' : 'hidden'); + } + + AddChatMessage(msg) { + const e = document.createElement('div'); + e.className = 'chat-text'; + if (msg.server) { + e.className += ' chat-text-server'; + } else if (msg.action) { + e.className += ' chat-text-action'; + } else { + e.innerText = '[' + msg.name + ']: '; } - - OnStatsClicked_(msg) { - const visibility = this._ui.stats.style.visibility; - this.HideUI_(); - this._ui.stats.style.visibility = (visibility ? '' : 'hidden'); - } - - OnInventoryClicked_(msg) { - const visibility = this._ui.inventory.style.visibility; - this.HideUI_(); - this._ui.inventory.style.visibility = (visibility ? '' : 'hidden'); - } - - Update(timeInSeconds) { - } - }; - - return { - UIController: UIController, - }; - -})(); \ No newline at end of file + e.innerText += msg.text; + const chatElement = document.getElementById('chat-ui-text-area'); + chatElement.insertBefore(e, document.getElementById('chat-input')); + } + + OnQuestSelected_(id) { + const quest = this._quests[id]; + + const e = document.getElementById(DOM_IDS.QUEST_UI); + e.style.visibility = ''; + + const text = document.getElementById('quest-text'); + text.innerText = quest.text; + + const title = document.getElementById('quest-text-title'); + title.innerText = quest.title; + } + + HideUI_() { + this._ui.inventory.style.visibility = 'hidden'; + this._ui.stats.style.visibility = 'hidden'; + this._ui.quests.style.visibility = 'hidden'; + } + + OnQuestsClicked_(msg) { + const visibility = this._ui.quests.style.visibility; + this.HideUI_(); + this._ui.quests.style.visibility = (visibility ? '' : 'hidden'); + } + + OnStatsClicked_(msg) { + const visibility = this._ui.stats.style.visibility; + this.HideUI_(); + this._ui.stats.style.visibility = (visibility ? '' : 'hidden'); + } + + OnInventoryClicked_(msg) { + const visibility = this._ui.inventory.style.visibility; + this.HideUI_(); + this._ui.inventory.style.visibility = (visibility ? '' : 'hidden'); + } + + Update(timeInSeconds) { + } +}; + +export { UIController } \ No newline at end of file diff --git a/server/dist/scripts/world-client.js b/server/dist/scripts/world-client.js index f22d5c41..075e2e1e 100644 --- a/server/dist/scripts/world-client.js +++ b/server/dist/scripts/world-client.js @@ -191,7 +191,7 @@ class AIState_JustSitThere extends AIState { } Update(timeElapsed) { this.timer_ += timeElapsed; - this.entity.SetState('idle'); + this.entity.SetState(STATE_TYPES.IDLE); if (this.timer_ > 5.0) { this.UpdateLogic_(); this.timer_ = 0.0; @@ -205,7 +205,7 @@ class AIState_FollowToAttack extends AIState { this.target_ = target; } UpdateMovement_(timeElapsed) { - this.entity.state_ = 'walk'; + this.entity.state_ = STATE_TYPES.WALK; const direction = vec3.create(); const forward = vec3.fromValues(0, 0, 1); vec3.sub(direction, this.target_.position_, this.entity.position_); @@ -241,7 +241,7 @@ class AIState_WaitAttackDone extends AIState { this.target_ = target; } Update(_) { - this.entity.state_ = 'attack'; + this.entity.state_ = STATE_TYPES.ATTACK; if (this.entity.action_) { return; } diff --git a/server/dist/scripts/world-manager.js b/server/dist/scripts/world-manager.js index ddf97528..818019ba 100644 --- a/server/dist/scripts/world-manager.js +++ b/server/dist/scripts/world-manager.js @@ -72,7 +72,7 @@ class WorldManager { this.entities_.push(e); } Add(client, params) { - const models = ['sorceror', 'paladin']; + const models = [CLASS_TYPES_ENUM.SORCEROR, 'paladin']; const randomClass = models[Math.floor(Math.random() * models.length)]; // Hack const e = new WorldEntity({ diff --git a/server/src/scripts/world-client.ts b/server/src/scripts/world-client.ts index eabc65cb..9e1d32bb 100644 --- a/server/src/scripts/world-client.ts +++ b/server/src/scripts/world-client.ts @@ -246,7 +246,7 @@ class AIState_JustSitThere extends AIState { Update(timeElapsed) { this.timer_ += timeElapsed; - this.entity.SetState('idle'); + this.entity.SetState(STATE_TYPES.IDLE); if (this.timer_ > 5.0) { this.UpdateLogic_(); @@ -262,7 +262,7 @@ class AIState_FollowToAttack extends AIState { } UpdateMovement_(timeElapsed) { - this.entity.state_ = 'walk'; + this.entity.state_ = STATE_TYPES.WALK; const direction = vec3.create(); const forward = vec3.fromValues(0, 0, 1); @@ -309,7 +309,7 @@ class AIState_WaitAttackDone extends AIState { } Update(_) { - this.entity.state_ = 'attack'; + this.entity.state_ = STATE_TYPES.ATTACK; if (this.entity.action_) { return; } diff --git a/shared/src/constants.ts b/shared/src/constants.ts index 6e15ee5a..1b4c1db8 100644 --- a/shared/src/constants.ts +++ b/shared/src/constants.ts @@ -1,10 +1,19 @@ enum STATE_TYPES { + ATTACK = 'attack', + DANCE = 'dance', DEATH = 'death', IDLE = 'idle', - ATTACK = 'attack', - WALK = 'walk', RUN = 'run', - DANCE = 'dance', + WALK = 'walk', +} + +enum ANIM_TYPES { + ATTACK = 'Attack', + DANCE = 'Dance', + DEATH = 'Death', + IDLE = 'Idle', + RUN = 'Run', + WALK = 'Walk', } enum EVENT_TYPES { @@ -23,37 +32,56 @@ enum EVENT_TYPES { LOAD_CHARACTER = 'load.character', LOAD_WEAPON = 'load.weapon', LOGIN_COMMIT = 'login.commit', + NETWORK_INVENTORY = 'network.inventory', PLAYER_ACTION = 'player.action', STATS_NETWORK = 'stats.network', WORLD_INVENTORY = 'world.inventory', WORLD_PLAYER = 'world.player', WORLD_STATS = 'world.stats', WORLD_UPDATE = 'world.update', + CONNECT = 'connect', + NETWORK_UPDATE = 'network.update', + EVENTS_NETWORK = 'events.network', } enum KNOWN_ENTITIES { - INVENTORY_CONTROLLER = 'InventoryController', DATABASE = 'database', + INVENTORY_CONTROLLER = 'InventoryController', INVENTORY_DATABASE_CONTROLLER = 'InventoryDatabaseController', - LEVEL_UP_SPAWNER = 'level-up-spawner' + LEVEL_UP_SPAWNER = 'level-up-spawner', + SPAWNERS = 'spawners', + LOADER = 'loader', + SCENERY = 'scenery', + TERRAIN = 'terrain', + UI = 'ui', + NETWORK = 'network' } enum NAMED_COMPONENTS { LEVEL_UP_SPAWNER = 'LevelUpComponentSpawner', + PLAYER_SPAWNER = 'PlayerSpawner', + NETWORK_ENTITY_SPAWNER = 'NetworkEntitySpawner', + UI_CONTROLLER = 'UIController', + THREEJS_CONTROLLER = 'ThreeJSController', + NETWORK_CONTROLLER = 'NetworkController', +} +enum INVENTORY_TYPES { + DEFAULT_PREFIX = 'inventory-', + EQUIP_PREFIX = 'inventory-equip-' } enum CLASS_TYPES_ENUM { - SORCEROR = 'sorceror', PALADIN = 'paladin', + SORCEROR = 'sorceror', WARROK = 'warrok', - ZOMBIE = 'zombie' + ZOMBIE = 'zombie', } enum WEAPON_TYPES_ENUM { AXE = 'weapon.axe1', + HAMMER = 'weapon.hammer1', SWORD = 'weapon.sword1', - HAMMER = 'weapon.hammer1' } const CLASS_TYPES = [CLASS_TYPES_ENUM.SORCEROR, CLASS_TYPES_ENUM.PALADIN]; @@ -66,22 +94,29 @@ const _TIMEOUT:number = 600.0; enum DOM_IDS { HEALTH_BAR = 'health-bar', - STATS_STRENGTH = 'stats-strength', STATS_BENCHPRESS = 'stats-benchpress', STATS_CURL = 'stats-curl', STATS_EXPERIENCE = 'stats-experience', - STATS_WISDOMNESS = 'stats-wisdomness' + STATS_STRENGTH = 'stats-strength', + STATS_WISDOMNESS = 'stats-wisdomness', + LOGIN_INPUT = 'login-input', + LOGIN_UI = 'login-ui', + LOGIN_BUTTON = 'login-button', + THREEJS = 'threejs', + QUEST_UI = 'quest-ui', } export { _TIMEOUT, ATTACK_TYPES, - CLASS_TYPES, CLASS_TYPES_ENUM, + CLASS_TYPES, + DOM_IDS, EVENT_TYPES, + INVENTORY_TYPES, KNOWN_ENTITIES, + NAMED_COMPONENTS, STATE_TYPES, WEAPON_TYPES_ENUM, - NAMED_COMPONENTS, - DOM_IDS + ANIM_TYPES, } \ No newline at end of file From a128840810ed4069e04bb7b2b99b1b49afc2060e Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Wed, 31 Mar 2021 14:54:11 -0400 Subject: [PATCH 09/13] moved files and changed the import structure --- client/package.json | 14 - client/src/blood-effect.ts | 241 -- client/src/gltf-component.ts | 243 -- client/src/health-component.ts | 129 - client/src/load-controller.ts | 109 - client/src/npc-entity.ts | 179 - client/src/quest-component.ts | 41 - client/src/terrain.ts | 291 -- client/src/test.ts | 5 - client/src/texture-splatter.ts | 157 - client/src/textures.ts | 91 - client/src/third-person-camera.ts | 56 - client/src/threejs_component.ts | 193 - package.json | 4 +- {client => packages/client}/LICENSE | 0 packages/client/dist/attacker-controller.js | 26 + packages/client/dist/blood-effect.js | 182 + packages/client/dist/entity.js | 127 + .../client/dist/equip-weapon-component.js | 107 + packages/client/dist/finite-state-machine.js | 28 + packages/client/dist/floating-name.js | 66 + packages/client/dist/gltf-component.js | 195 + packages/client/dist/health-bar.js | 106 + packages/client/dist/health-component.js | 89 + packages/client/dist/index.js | 937 +++++ packages/client/dist/inventory-controller.js | 171 + packages/client/dist/level-up-component.js | 48 + packages/client/dist/load-controller.js | 84 + packages/client/dist/loading-manager.js | 22 + packages/client/dist/main.js | 131 + packages/client/dist/network-controller.js | 135 + .../client/dist/network-entity-controller.js | 90 + .../client/dist/network-player-controller.js | 68 + packages/client/dist/npc-entity.js | 138 + packages/client/dist/particle-system.js | 256 ++ packages/client/dist/player-entity.js | 222 + packages/client/dist/player-input.js | 122 + packages/client/dist/player-state.js | 252 ++ packages/client/dist/quadtree.js | 129 + packages/client/dist/quest-component.js | 30 + packages/client/dist/render-component.js | 135 + packages/client/dist/scenery-controller.js | 226 ++ packages/client/dist/sorceror-effect.js | 95 + .../client/dist/spatial-grid-controller.js | 30 + packages/client/dist/spawners.js | 115 + .../dist/terrain-builder-threaded-worker.js | 266 ++ .../client/dist/terrain-builder-threaded.js | 132 + packages/client/dist/terrain-builder.js | 79 + packages/client/dist/terrain-chunk.js | 43 + packages/client/dist/terrain-shader.js | 455 +++ packages/client/dist/terrain.js | 226 ++ packages/client/dist/test.js | 2 + packages/client/dist/texture-splatter.js | 119 + packages/client/dist/textures.js | 68 + packages/client/dist/third-person-camera.js | 39 + packages/client/dist/threejs_component.js | 164 + packages/client/dist/ui-controller.js | 131 + packages/client/dist/utils.js | 20 + {client => packages/client}/index.html | 2 +- packages/client/package.json | 24 + .../client}/resources/background-2.jpg | Bin .../client}/resources/background-3.png | Bin .../client}/resources/background.jpg | Bin .../client}/resources/characters/guard.glb | Bin .../client}/resources/characters/paladin.glb | Bin .../client}/resources/characters/readme.txt | 0 .../client}/resources/characters/sorceror.glb | Bin .../client}/resources/characters/warrok.glb | Bin .../resources/characters/zombie-guy.glb | Bin .../client}/resources/characters/zombie.glb | Bin .../client}/resources/icons/readme.txt | 0 .../client}/resources/icons/ui/backpack.png | Bin .../client}/resources/icons/ui/health-bar.png | Bin .../icons/ui/inventory-character.png | Bin .../client}/resources/icons/ui/skills.png | Bin .../resources/icons/ui/tied-scroll.png | Bin .../resources/icons/weapons/hammer-64.png | Bin .../icons/weapons/pointy-sword-64.png | Bin .../resources/icons/weapons/pointy-sword.png | Bin .../resources/icons/weapons/thor-hammer.png | Bin .../resources/icons/weapons/war-axe-64.png | Bin .../resources/icons/weapons/war-axe.png | Bin .../resources/nature/Blends/BirchTree_1.blend | Bin .../resources/nature/Blends/BirchTree_2.blend | Bin .../resources/nature/Blends/BirchTree_3.blend | Bin .../resources/nature/Blends/BirchTree_4.blend | Bin .../resources/nature/Blends/BirchTree_5.blend | Bin .../nature/Blends/BirchTree_Autumn_1.blend | Bin .../nature/Blends/BirchTree_Autumn_2.blend | Bin .../nature/Blends/BirchTree_Autumn_3.blend | Bin .../nature/Blends/BirchTree_Autumn_4.blend | Bin .../nature/Blends/BirchTree_Autumn_5.blend | Bin .../nature/Blends/BirchTree_Dead_1.blend | Bin .../nature/Blends/BirchTree_Dead_2.blend | Bin .../nature/Blends/BirchTree_Dead_3.blend | Bin .../nature/Blends/BirchTree_Dead_4.blend | Bin .../nature/Blends/BirchTree_Dead_5.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_1.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_2.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_3.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_4.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_5.blend | Bin .../nature/Blends/BirchTree_Snow_1.blend | Bin .../nature/Blends/BirchTree_Snow_2.blend | Bin .../nature/Blends/BirchTree_Snow_3.blend | Bin .../nature/Blends/BirchTree_Snow_4.blend | Bin .../nature/Blends/BirchTree_Snow_5.blend | Bin .../nature/Blends/BushBerries_1.blend | Bin .../nature/Blends/BushBerries_2.blend | Bin .../resources/nature/Blends/Bush_1.blend | Bin .../resources/nature/Blends/Bush_2.blend | Bin .../resources/nature/Blends/Bush_Snow_1.blend | Bin .../resources/nature/Blends/Bush_Snow_2.blend | Bin .../nature/Blends/CactusFlower_1.blend | Bin .../nature/Blends/CactusFlowers_2.blend | Bin .../nature/Blends/CactusFlowers_3.blend | Bin .../nature/Blends/CactusFlowers_4.blend | Bin .../nature/Blends/CactusFlowers_5.blend | Bin .../resources/nature/Blends/Cactus_1.blend | Bin .../resources/nature/Blends/Cactus_2.blend | Bin .../resources/nature/Blends/Cactus_3.blend | Bin .../resources/nature/Blends/Cactus_4.blend | Bin .../resources/nature/Blends/Cactus_5.blend | Bin .../nature/Blends/CommonTree_1.blend | Bin .../nature/Blends/CommonTree_2.blend | Bin .../nature/Blends/CommonTree_3.blend | Bin .../nature/Blends/CommonTree_4.blend | Bin .../nature/Blends/CommonTree_5.blend | Bin .../nature/Blends/CommonTree_Autumn_1.blend | Bin .../nature/Blends/CommonTree_Autumn_2.blend | Bin .../nature/Blends/CommonTree_Autumn_3.blend | Bin .../nature/Blends/CommonTree_Autumn_4.blend | Bin .../nature/Blends/CommonTree_Autumn_5.blend | Bin .../nature/Blends/CommonTree_Dead_1.blend | Bin .../nature/Blends/CommonTree_Dead_2.blend | Bin .../nature/Blends/CommonTree_Dead_3.blend | Bin .../nature/Blends/CommonTree_Dead_4.blend | Bin .../nature/Blends/CommonTree_Dead_5.blend | Bin .../Blends/CommonTree_Dead_Snow_1.blend | Bin .../Blends/CommonTree_Dead_Snow_2.blend | Bin .../Blends/CommonTree_Dead_Snow_3.blend | Bin .../Blends/CommonTree_Dead_Snow_4.blend | Bin .../Blends/CommonTree_Dead_Snow_5.blend | Bin .../nature/Blends/CommonTree_Snow_1.blend | Bin .../nature/Blends/CommonTree_Snow_2.blend | Bin .../nature/Blends/CommonTree_Snow_3.blend | Bin .../nature/Blends/CommonTree_Snow_4.blend | Bin .../nature/Blends/CommonTree_Snow_5.blend | Bin .../resources/nature/Blends/Corn_1.blend | Bin .../resources/nature/Blends/Corn_2.blend | Bin .../resources/nature/Blends/Flowers.blend | Bin .../resources/nature/Blends/Grass.blend | Bin .../resources/nature/Blends/Grass_2.blend | Bin .../resources/nature/Blends/Grass_Short.blend | Bin .../resources/nature/Blends/Lilypad.blend | Bin .../resources/nature/Blends/PalmTree_1.blend | Bin .../resources/nature/Blends/PalmTree_2.blend | Bin .../resources/nature/Blends/PalmTree_3.blend | Bin .../resources/nature/Blends/PalmTree_4.blend | Bin .../resources/nature/Blends/PineTree_1.blend | Bin .../resources/nature/Blends/PineTree_2.blend | Bin .../resources/nature/Blends/PineTree_3.blend | Bin .../resources/nature/Blends/PineTree_4.blend | Bin .../resources/nature/Blends/PineTree_5.blend | Bin .../nature/Blends/PineTree_Autumn_1.blend | Bin .../nature/Blends/PineTree_Autumn_2.blend | Bin .../nature/Blends/PineTree_Autumn_3.blend | Bin .../nature/Blends/PineTree_Autumn_4.blend | Bin .../nature/Blends/PineTree_Autumn_5.blend | Bin .../nature/Blends/PineTree_Snow_1.blend | Bin .../nature/Blends/PineTree_Snow_2.blend | Bin .../nature/Blends/PineTree_Snow_3.blend | Bin .../nature/Blends/PineTree_Snow_4.blend | Bin .../nature/Blends/PineTree_Snow_5.blend | Bin .../resources/nature/Blends/Plant_1.blend | Bin .../resources/nature/Blends/Plant_2.blend | Bin .../resources/nature/Blends/Plant_3.blend | Bin .../resources/nature/Blends/Plant_4.blend | Bin .../resources/nature/Blends/Plant_5.blend | Bin .../resources/nature/Blends/Rock_1.blend | Bin .../resources/nature/Blends/Rock_2.blend | Bin .../resources/nature/Blends/Rock_3.blend | Bin .../resources/nature/Blends/Rock_4.blend | Bin .../resources/nature/Blends/Rock_5.blend | Bin .../resources/nature/Blends/Rock_6.blend | Bin .../resources/nature/Blends/Rock_7.blend | Bin .../resources/nature/Blends/Rock_Moss_1.blend | Bin .../resources/nature/Blends/Rock_Moss_2.blend | Bin .../resources/nature/Blends/Rock_Moss_3.blend | Bin .../resources/nature/Blends/Rock_Moss_4.blend | Bin .../resources/nature/Blends/Rock_Moss_5.blend | Bin .../resources/nature/Blends/Rock_Moss_6.blend | Bin .../resources/nature/Blends/Rock_Moss_7.blend | Bin .../resources/nature/Blends/Rock_Snow_1.blend | Bin .../resources/nature/Blends/Rock_Snow_2.blend | Bin .../resources/nature/Blends/Rock_Snow_3.blend | Bin .../resources/nature/Blends/Rock_Snow_4.blend | Bin .../resources/nature/Blends/Rock_Snow_5.blend | Bin .../resources/nature/Blends/Rock_Snow_6.blend | Bin .../resources/nature/Blends/Rock_Snow_7.blend | Bin .../resources/nature/Blends/TreeStump.blend | Bin .../nature/Blends/TreeStump_Moss.blend | Bin .../nature/Blends/TreeStump_Snow.blend | Bin .../resources/nature/Blends/Wheat.blend | Bin .../resources/nature/Blends/Willow_1.blend | Bin .../resources/nature/Blends/Willow_2.blend | Bin .../resources/nature/Blends/Willow_3.blend | Bin .../resources/nature/Blends/Willow_4.blend | Bin .../resources/nature/Blends/Willow_5.blend | Bin .../nature/Blends/Willow_Autumn_1.blend | Bin .../nature/Blends/Willow_Autumn_2.blend | Bin .../nature/Blends/Willow_Autumn_3.blend | Bin .../nature/Blends/Willow_Autumn_4.blend | Bin .../nature/Blends/Willow_Autumn_5.blend | Bin .../nature/Blends/Willow_Dead_1.blend | Bin .../nature/Blends/Willow_Dead_2.blend | Bin .../nature/Blends/Willow_Dead_3.blend | Bin .../nature/Blends/Willow_Dead_4.blend | Bin .../nature/Blends/Willow_Dead_5.blend | Bin .../nature/Blends/Willow_Dead_Snow_1.blend | Bin .../nature/Blends/Willow_Dead_Snow_2.blend | Bin .../nature/Blends/Willow_Dead_Snow_3.blend | Bin .../nature/Blends/Willow_Dead_Snow_4.blend | Bin .../nature/Blends/Willow_Dead_Snow_5.blend | Bin .../nature/Blends/Willow_Snow_1.blend | Bin .../nature/Blends/Willow_Snow_2.blend | Bin .../nature/Blends/Willow_Snow_3.blend | Bin .../nature/Blends/Willow_Snow_4.blend | Bin .../nature/Blends/Willow_Snow_5.blend | Bin .../resources/nature/Blends/WoodLog.blend | Bin .../nature/Blends/WoodLog_Moss.blend | Bin .../nature/Blends/WoodLog_Snow.blend | Bin .../resources/nature/FBX/BirchTree_1.fbx | Bin .../resources/nature/FBX/BirchTree_2.fbx | Bin .../resources/nature/FBX/BirchTree_3.fbx | Bin .../resources/nature/FBX/BirchTree_4.fbx | Bin .../resources/nature/FBX/BirchTree_5.fbx | Bin .../nature/FBX/BirchTree_Autumn_1.fbx | Bin .../nature/FBX/BirchTree_Autumn_2.fbx | Bin .../nature/FBX/BirchTree_Autumn_3.fbx | Bin .../nature/FBX/BirchTree_Autumn_4.fbx | Bin .../nature/FBX/BirchTree_Autumn_5.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_1.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_2.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_3.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_4.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_5.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_1.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_2.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_3.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_4.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_5.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_1.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_2.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_3.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_4.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_5.fbx | Bin .../resources/nature/FBX/BushBerries_1.fbx | Bin .../resources/nature/FBX/BushBerries_2.fbx | Bin .../client}/resources/nature/FBX/Bush_1.fbx | Bin .../client}/resources/nature/FBX/Bush_2.fbx | Bin .../resources/nature/FBX/Bush_Snow_1.fbx | Bin .../resources/nature/FBX/Bush_Snow_2.fbx | Bin .../resources/nature/FBX/CactusFlower_1.fbx | Bin .../resources/nature/FBX/CactusFlowers_2.fbx | Bin .../resources/nature/FBX/CactusFlowers_3.fbx | Bin .../resources/nature/FBX/CactusFlowers_4.fbx | Bin .../resources/nature/FBX/CactusFlowers_5.fbx | Bin .../client}/resources/nature/FBX/Cactus_1.fbx | Bin .../client}/resources/nature/FBX/Cactus_2.fbx | Bin .../client}/resources/nature/FBX/Cactus_3.fbx | Bin .../client}/resources/nature/FBX/Cactus_4.fbx | Bin .../client}/resources/nature/FBX/Cactus_5.fbx | Bin .../resources/nature/FBX/CommonTree_1.fbx | Bin .../resources/nature/FBX/CommonTree_2.fbx | Bin .../resources/nature/FBX/CommonTree_3.fbx | Bin .../resources/nature/FBX/CommonTree_4.fbx | Bin .../resources/nature/FBX/CommonTree_5.fbx | Bin .../nature/FBX/CommonTree_Autumn_1.fbx | Bin .../nature/FBX/CommonTree_Autumn_2.fbx | Bin .../nature/FBX/CommonTree_Autumn_3.fbx | Bin .../nature/FBX/CommonTree_Autumn_4.fbx | Bin .../nature/FBX/CommonTree_Autumn_5.fbx | Bin .../nature/FBX/CommonTree_Dead_1.fbx | Bin .../nature/FBX/CommonTree_Dead_2.fbx | Bin .../nature/FBX/CommonTree_Dead_3.fbx | Bin .../nature/FBX/CommonTree_Dead_4.fbx | Bin .../nature/FBX/CommonTree_Dead_5.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_1.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_2.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_3.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_4.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_5.fbx | Bin .../nature/FBX/CommonTree_Snow_1.fbx | Bin .../nature/FBX/CommonTree_Snow_2.fbx | Bin .../nature/FBX/CommonTree_Snow_3.fbx | Bin .../nature/FBX/CommonTree_Snow_4.fbx | Bin .../nature/FBX/CommonTree_Snow_5.fbx | Bin .../client}/resources/nature/FBX/Corn_1.fbx | Bin .../client}/resources/nature/FBX/Corn_2.fbx | Bin .../client}/resources/nature/FBX/Flowers.fbx | Bin .../client}/resources/nature/FBX/Grass_1.fbx | Bin .../client}/resources/nature/FBX/Grass_2.fbx | Bin .../resources/nature/FBX/Grass_Short.fbx | Bin .../client}/resources/nature/FBX/Lilypad.fbx | Bin .../resources/nature/FBX/PalmTree_1.fbx | Bin .../resources/nature/FBX/PalmTree_2.fbx | Bin .../resources/nature/FBX/PalmTree_3.fbx | Bin .../resources/nature/FBX/PalmTree_4.fbx | Bin .../resources/nature/FBX/PineTree_1.fbx | Bin .../resources/nature/FBX/PineTree_2.fbx | Bin .../resources/nature/FBX/PineTree_3.fbx | Bin .../resources/nature/FBX/PineTree_4.fbx | Bin .../resources/nature/FBX/PineTree_5.fbx | Bin .../nature/FBX/PineTree_Autumn_1.fbx | Bin .../nature/FBX/PineTree_Autumn_2.fbx | Bin .../nature/FBX/PineTree_Autumn_3.fbx | Bin .../nature/FBX/PineTree_Autumn_4.fbx | Bin .../nature/FBX/PineTree_Autumn_5.fbx | Bin .../resources/nature/FBX/PineTree_Snow_1.fbx | Bin .../resources/nature/FBX/PineTree_Snow_2.fbx | Bin .../resources/nature/FBX/PineTree_Snow_3.fbx | Bin .../resources/nature/FBX/PineTree_Snow_4.fbx | Bin .../resources/nature/FBX/PineTree_Snow_5.fbx | Bin .../client}/resources/nature/FBX/Plant_1.fbx | Bin .../client}/resources/nature/FBX/Plant_2.fbx | Bin .../client}/resources/nature/FBX/Plant_3.fbx | Bin .../client}/resources/nature/FBX/Plant_4.fbx | Bin .../client}/resources/nature/FBX/Plant_5.fbx | Bin .../client}/resources/nature/FBX/Rock_1.fbx | Bin .../client}/resources/nature/FBX/Rock_2.fbx | Bin .../client}/resources/nature/FBX/Rock_3.fbx | Bin .../client}/resources/nature/FBX/Rock_4.fbx | Bin .../client}/resources/nature/FBX/Rock_5.fbx | Bin .../client}/resources/nature/FBX/Rock_6.fbx | Bin .../client}/resources/nature/FBX/Rock_7.fbx | Bin .../resources/nature/FBX/Rock_Moss_1.fbx | Bin .../resources/nature/FBX/Rock_Moss_2.fbx | Bin .../resources/nature/FBX/Rock_Moss_3.fbx | Bin .../resources/nature/FBX/Rock_Moss_4.fbx | Bin .../resources/nature/FBX/Rock_Moss_5.fbx | Bin .../resources/nature/FBX/Rock_Moss_6.fbx | Bin .../resources/nature/FBX/Rock_Moss_7.fbx | Bin .../resources/nature/FBX/Rock_Snow_1.fbx | Bin .../resources/nature/FBX/Rock_Snow_2.fbx | Bin .../resources/nature/FBX/Rock_Snow_3.fbx | Bin .../resources/nature/FBX/Rock_Snow_4.fbx | Bin .../resources/nature/FBX/Rock_Snow_5.fbx | Bin .../resources/nature/FBX/Rock_Snow_6.fbx | Bin .../resources/nature/FBX/Rock_Snow_7.fbx | Bin .../resources/nature/FBX/TreeStump.fbx | Bin .../resources/nature/FBX/TreeStump_Moss.fbx | Bin .../resources/nature/FBX/TreeStump_Snow.fbx | Bin .../client}/resources/nature/FBX/Wheat.fbx | Bin .../client}/resources/nature/FBX/Willow_1.fbx | Bin .../client}/resources/nature/FBX/Willow_2.fbx | Bin .../client}/resources/nature/FBX/Willow_3.fbx | Bin .../client}/resources/nature/FBX/Willow_4.fbx | Bin .../client}/resources/nature/FBX/Willow_5.fbx | Bin .../resources/nature/FBX/Willow_Autumn_1.fbx | Bin .../resources/nature/FBX/Willow_Autumn_2.fbx | Bin .../resources/nature/FBX/Willow_Autumn_3.fbx | Bin .../resources/nature/FBX/Willow_Autumn_4.fbx | Bin .../resources/nature/FBX/Willow_Autumn_5.fbx | Bin .../resources/nature/FBX/Willow_Dead_1.fbx | Bin .../resources/nature/FBX/Willow_Dead_2.fbx | Bin .../resources/nature/FBX/Willow_Dead_3.fbx | Bin .../resources/nature/FBX/Willow_Dead_4.fbx | Bin .../resources/nature/FBX/Willow_Dead_5.fbx | Bin .../nature/FBX/Willow_Dead_Snow_1.fbx | Bin .../nature/FBX/Willow_Dead_Snow_2.fbx | Bin .../nature/FBX/Willow_Dead_Snow_3.fbx | Bin .../nature/FBX/Willow_Dead_Snow_4.fbx | Bin .../nature/FBX/Willow_Dead_Snow_5.fbx | Bin .../resources/nature/FBX/Willow_Snow_1.fbx | Bin .../resources/nature/FBX/Willow_Snow_2.fbx | Bin .../resources/nature/FBX/Willow_Snow_3.fbx | Bin .../resources/nature/FBX/Willow_Snow_4.fbx | Bin .../resources/nature/FBX/Willow_Snow_5.fbx | Bin .../client}/resources/nature/FBX/WoodLog.fbx | Bin .../resources/nature/FBX/WoodLog_Moss.fbx | Bin .../resources/nature/FBX/WoodLog_Snow.fbx | Bin .../client}/resources/nature/License.txt | 0 .../resources/nature/OBJ/BirchTree_1.mtl | 0 .../resources/nature/OBJ/BirchTree_1.obj | 0 .../resources/nature/OBJ/BirchTree_2.mtl | 0 .../resources/nature/OBJ/BirchTree_2.obj | 0 .../resources/nature/OBJ/BirchTree_3.mtl | 0 .../resources/nature/OBJ/BirchTree_3.obj | 0 .../resources/nature/OBJ/BirchTree_4.mtl | 0 .../resources/nature/OBJ/BirchTree_4.obj | 0 .../resources/nature/OBJ/BirchTree_5.mtl | 0 .../resources/nature/OBJ/BirchTree_5.obj | 0 .../nature/OBJ/BirchTree_Autumn_1.mtl | 0 .../nature/OBJ/BirchTree_Autumn_1.obj | 0 .../nature/OBJ/BirchTree_Autumn_2.mtl | 0 .../nature/OBJ/BirchTree_Autumn_2.obj | 0 .../nature/OBJ/BirchTree_Autumn_3.mtl | 0 .../nature/OBJ/BirchTree_Autumn_3.obj | 0 .../nature/OBJ/BirchTree_Autumn_4.mtl | 0 .../nature/OBJ/BirchTree_Autumn_4.obj | 0 .../nature/OBJ/BirchTree_Autumn_5.mtl | 0 .../nature/OBJ/BirchTree_Autumn_5.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_1.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_1.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_2.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_2.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_3.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_3.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_4.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_4.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_5.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_5.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_1.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_1.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_2.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_2.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_3.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_3.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_4.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_4.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_5.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_5.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_1.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_1.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_2.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_2.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_3.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_3.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_4.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_4.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_5.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_5.obj | 0 .../resources/nature/OBJ/BushBerries_1.mtl | 0 .../resources/nature/OBJ/BushBerries_1.obj | 0 .../resources/nature/OBJ/BushBerries_2.mtl | 0 .../resources/nature/OBJ/BushBerries_2.obj | 0 .../client}/resources/nature/OBJ/Bush_1.mtl | 0 .../client}/resources/nature/OBJ/Bush_1.obj | 0 .../client}/resources/nature/OBJ/Bush_2.mtl | 0 .../client}/resources/nature/OBJ/Bush_2.obj | 0 .../resources/nature/OBJ/Bush_Snow_1.mtl | 0 .../resources/nature/OBJ/Bush_Snow_1.obj | 0 .../resources/nature/OBJ/Bush_Snow_2.mtl | 0 .../resources/nature/OBJ/Bush_Snow_2.obj | 0 .../resources/nature/OBJ/CactusFlower_1.mtl | 0 .../resources/nature/OBJ/CactusFlower_1.obj | 0 .../resources/nature/OBJ/CactusFlowers_2.mtl | 0 .../resources/nature/OBJ/CactusFlowers_2.obj | 0 .../resources/nature/OBJ/CactusFlowers_3.mtl | 0 .../resources/nature/OBJ/CactusFlowers_3.obj | 0 .../resources/nature/OBJ/CactusFlowers_4.mtl | 0 .../resources/nature/OBJ/CactusFlowers_4.obj | 0 .../resources/nature/OBJ/CactusFlowers_5.mtl | 0 .../resources/nature/OBJ/CactusFlowers_5.obj | 0 .../client}/resources/nature/OBJ/Cactus_1.mtl | 0 .../client}/resources/nature/OBJ/Cactus_1.obj | 0 .../client}/resources/nature/OBJ/Cactus_2.mtl | 0 .../client}/resources/nature/OBJ/Cactus_2.obj | 0 .../client}/resources/nature/OBJ/Cactus_3.mtl | 0 .../client}/resources/nature/OBJ/Cactus_3.obj | 0 .../client}/resources/nature/OBJ/Cactus_4.mtl | 0 .../client}/resources/nature/OBJ/Cactus_4.obj | 0 .../client}/resources/nature/OBJ/Cactus_5.mtl | 0 .../client}/resources/nature/OBJ/Cactus_5.obj | 0 .../resources/nature/OBJ/CommonTree_1.mtl | 0 .../resources/nature/OBJ/CommonTree_1.obj | 0 .../resources/nature/OBJ/CommonTree_2.mtl | 0 .../resources/nature/OBJ/CommonTree_2.obj | 0 .../resources/nature/OBJ/CommonTree_3.mtl | 0 .../resources/nature/OBJ/CommonTree_3.obj | 0 .../resources/nature/OBJ/CommonTree_4.mtl | 0 .../resources/nature/OBJ/CommonTree_4.obj | 0 .../resources/nature/OBJ/CommonTree_5.mtl | 0 .../resources/nature/OBJ/CommonTree_5.obj | 0 .../nature/OBJ/CommonTree_Autumn_1.mtl | 0 .../nature/OBJ/CommonTree_Autumn_1.obj | 0 .../nature/OBJ/CommonTree_Autumn_2.mtl | 0 .../nature/OBJ/CommonTree_Autumn_2.obj | 0 .../nature/OBJ/CommonTree_Autumn_3.mtl | 0 .../nature/OBJ/CommonTree_Autumn_3.obj | 0 .../nature/OBJ/CommonTree_Autumn_4.mtl | 0 .../nature/OBJ/CommonTree_Autumn_4.obj | 0 .../nature/OBJ/CommonTree_Autumn_5.mtl | 0 .../nature/OBJ/CommonTree_Autumn_5.obj | 0 .../nature/OBJ/CommonTree_Dead_1.mtl | 0 .../nature/OBJ/CommonTree_Dead_1.obj | 0 .../nature/OBJ/CommonTree_Dead_2.mtl | 0 .../nature/OBJ/CommonTree_Dead_2.obj | 0 .../nature/OBJ/CommonTree_Dead_3.mtl | 0 .../nature/OBJ/CommonTree_Dead_3.obj | 0 .../nature/OBJ/CommonTree_Dead_4.mtl | 0 .../nature/OBJ/CommonTree_Dead_4.obj | 0 .../nature/OBJ/CommonTree_Dead_5.mtl | 0 .../nature/OBJ/CommonTree_Dead_5.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_1.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_1.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_2.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_2.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_3.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_3.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_4.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_4.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_5.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_5.obj | 0 .../nature/OBJ/CommonTree_Snow_1.mtl | 0 .../nature/OBJ/CommonTree_Snow_1.obj | 0 .../nature/OBJ/CommonTree_Snow_2.mtl | 0 .../nature/OBJ/CommonTree_Snow_2.obj | 0 .../nature/OBJ/CommonTree_Snow_3.mtl | 0 .../nature/OBJ/CommonTree_Snow_3.obj | 0 .../nature/OBJ/CommonTree_Snow_4.mtl | 0 .../nature/OBJ/CommonTree_Snow_4.obj | 0 .../nature/OBJ/CommonTree_Snow_5.mtl | 0 .../nature/OBJ/CommonTree_Snow_5.obj | 0 .../client}/resources/nature/OBJ/Corn_1.mtl | 0 .../client}/resources/nature/OBJ/Corn_1.obj | 0 .../client}/resources/nature/OBJ/Corn_2.mtl | 0 .../client}/resources/nature/OBJ/Corn_2.obj | 0 .../client}/resources/nature/OBJ/Flowers.mtl | 0 .../client}/resources/nature/OBJ/Flowers.obj | 0 .../client}/resources/nature/OBJ/Grass.mtl | 0 .../client}/resources/nature/OBJ/Grass.obj | 0 .../client}/resources/nature/OBJ/Grass_2.mtl | 0 .../client}/resources/nature/OBJ/Grass_2.obj | 0 .../resources/nature/OBJ/Grass_Short.mtl | 0 .../resources/nature/OBJ/Grass_Short.obj | 0 .../client}/resources/nature/OBJ/Lilypad.mtl | 0 .../client}/resources/nature/OBJ/Lilypad.obj | 0 .../resources/nature/OBJ/PalmTree_1.mtl | 0 .../resources/nature/OBJ/PalmTree_1.obj | 0 .../resources/nature/OBJ/PalmTree_2.mtl | 0 .../resources/nature/OBJ/PalmTree_2.obj | 0 .../resources/nature/OBJ/PalmTree_3.mtl | 0 .../resources/nature/OBJ/PalmTree_3.obj | 0 .../resources/nature/OBJ/PalmTree_4.mtl | 0 .../resources/nature/OBJ/PalmTree_4.obj | 0 .../resources/nature/OBJ/PineTree_1.mtl | 0 .../resources/nature/OBJ/PineTree_1.obj | 0 .../resources/nature/OBJ/PineTree_2.mtl | 0 .../resources/nature/OBJ/PineTree_2.obj | 0 .../resources/nature/OBJ/PineTree_3.mtl | 0 .../resources/nature/OBJ/PineTree_3.obj | 0 .../resources/nature/OBJ/PineTree_4.mtl | 0 .../resources/nature/OBJ/PineTree_4.obj | 0 .../resources/nature/OBJ/PineTree_5.mtl | 0 .../resources/nature/OBJ/PineTree_5.obj | 0 .../nature/OBJ/PineTree_Autumn_1.mtl | 0 .../nature/OBJ/PineTree_Autumn_1.obj | 0 .../nature/OBJ/PineTree_Autumn_2.mtl | 0 .../nature/OBJ/PineTree_Autumn_2.obj | 0 .../nature/OBJ/PineTree_Autumn_3.mtl | 0 .../nature/OBJ/PineTree_Autumn_3.obj | 0 .../nature/OBJ/PineTree_Autumn_4.mtl | 0 .../nature/OBJ/PineTree_Autumn_4.obj | 0 .../nature/OBJ/PineTree_Autumn_5.mtl | 0 .../nature/OBJ/PineTree_Autumn_5.obj | 0 .../resources/nature/OBJ/PineTree_Snow_1.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_1.obj | 0 .../resources/nature/OBJ/PineTree_Snow_2.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_2.obj | 0 .../resources/nature/OBJ/PineTree_Snow_3.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_3.obj | 0 .../resources/nature/OBJ/PineTree_Snow_4.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_4.obj | 0 .../resources/nature/OBJ/PineTree_Snow_5.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_5.obj | 0 .../client}/resources/nature/OBJ/Plant_1.mtl | 0 .../client}/resources/nature/OBJ/Plant_1.obj | 0 .../client}/resources/nature/OBJ/Plant_2.mtl | 0 .../client}/resources/nature/OBJ/Plant_2.obj | 0 .../client}/resources/nature/OBJ/Plant_3.mtl | 0 .../client}/resources/nature/OBJ/Plant_3.obj | 0 .../client}/resources/nature/OBJ/Plant_4.mtl | 0 .../client}/resources/nature/OBJ/Plant_4.obj | 0 .../client}/resources/nature/OBJ/Plant_5.mtl | 0 .../client}/resources/nature/OBJ/Plant_5.obj | 0 .../client}/resources/nature/OBJ/Rock_1.mtl | 0 .../client}/resources/nature/OBJ/Rock_1.obj | 0 .../client}/resources/nature/OBJ/Rock_2.mtl | 0 .../client}/resources/nature/OBJ/Rock_2.obj | 0 .../client}/resources/nature/OBJ/Rock_3.mtl | 0 .../client}/resources/nature/OBJ/Rock_3.obj | 0 .../client}/resources/nature/OBJ/Rock_4.mtl | 0 .../client}/resources/nature/OBJ/Rock_4.obj | 0 .../client}/resources/nature/OBJ/Rock_5.mtl | 0 .../client}/resources/nature/OBJ/Rock_5.obj | 0 .../client}/resources/nature/OBJ/Rock_6.mtl | 0 .../client}/resources/nature/OBJ/Rock_6.obj | 0 .../client}/resources/nature/OBJ/Rock_7.mtl | 0 .../client}/resources/nature/OBJ/Rock_7.obj | 0 .../resources/nature/OBJ/Rock_Moss_1.mtl | 0 .../resources/nature/OBJ/Rock_Moss_1.obj | 0 .../resources/nature/OBJ/Rock_Moss_2.mtl | 0 .../resources/nature/OBJ/Rock_Moss_2.obj | 0 .../resources/nature/OBJ/Rock_Moss_3.mtl | 0 .../resources/nature/OBJ/Rock_Moss_3.obj | 0 .../resources/nature/OBJ/Rock_Moss_4.mtl | 0 .../resources/nature/OBJ/Rock_Moss_4.obj | 0 .../resources/nature/OBJ/Rock_Moss_5.mtl | 0 .../resources/nature/OBJ/Rock_Moss_5.obj | 0 .../resources/nature/OBJ/Rock_Moss_6.mtl | 0 .../resources/nature/OBJ/Rock_Moss_6.obj | 0 .../resources/nature/OBJ/Rock_Moss_7.mtl | 0 .../resources/nature/OBJ/Rock_Moss_7.obj | 0 .../resources/nature/OBJ/Rock_Snow_1.mtl | 0 .../resources/nature/OBJ/Rock_Snow_1.obj | 0 .../resources/nature/OBJ/Rock_Snow_2.mtl | 0 .../resources/nature/OBJ/Rock_Snow_2.obj | 0 .../resources/nature/OBJ/Rock_Snow_3.mtl | 0 .../resources/nature/OBJ/Rock_Snow_3.obj | 0 .../resources/nature/OBJ/Rock_Snow_4.mtl | 0 .../resources/nature/OBJ/Rock_Snow_4.obj | 0 .../resources/nature/OBJ/Rock_Snow_5.mtl | 0 .../resources/nature/OBJ/Rock_Snow_5.obj | 0 .../resources/nature/OBJ/Rock_Snow_6.mtl | 0 .../resources/nature/OBJ/Rock_Snow_6.obj | 0 .../resources/nature/OBJ/Rock_Snow_7.mtl | 0 .../resources/nature/OBJ/Rock_Snow_7.obj | 0 .../resources/nature/OBJ/TreeStump.mtl | 0 .../resources/nature/OBJ/TreeStump.obj | 0 .../resources/nature/OBJ/TreeStump_Moss.mtl | 0 .../resources/nature/OBJ/TreeStump_Moss.obj | 0 .../resources/nature/OBJ/TreeStump_Snow.mtl | 0 .../resources/nature/OBJ/TreeStump_Snow.obj | 0 .../client}/resources/nature/OBJ/Wheat.mtl | 0 .../client}/resources/nature/OBJ/Wheat.obj | 0 .../client}/resources/nature/OBJ/Willow_1.mtl | 0 .../client}/resources/nature/OBJ/Willow_1.obj | 0 .../client}/resources/nature/OBJ/Willow_2.mtl | 0 .../client}/resources/nature/OBJ/Willow_2.obj | 0 .../client}/resources/nature/OBJ/Willow_3.mtl | 0 .../client}/resources/nature/OBJ/Willow_3.obj | 0 .../client}/resources/nature/OBJ/Willow_4.mtl | 0 .../client}/resources/nature/OBJ/Willow_4.obj | 0 .../client}/resources/nature/OBJ/Willow_5.mtl | 0 .../client}/resources/nature/OBJ/Willow_5.obj | 0 .../resources/nature/OBJ/Willow_Autumn_1.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_1.obj | 0 .../resources/nature/OBJ/Willow_Autumn_2.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_2.obj | 0 .../resources/nature/OBJ/Willow_Autumn_3.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_3.obj | 0 .../resources/nature/OBJ/Willow_Autumn_4.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_4.obj | 0 .../resources/nature/OBJ/Willow_Autumn_5.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_5.obj | 0 .../resources/nature/OBJ/Willow_Dead_1.mtl | 0 .../resources/nature/OBJ/Willow_Dead_1.obj | 0 .../resources/nature/OBJ/Willow_Dead_2.mtl | 0 .../resources/nature/OBJ/Willow_Dead_2.obj | 0 .../resources/nature/OBJ/Willow_Dead_3.mtl | 0 .../resources/nature/OBJ/Willow_Dead_3.obj | 0 .../resources/nature/OBJ/Willow_Dead_4.mtl | 0 .../resources/nature/OBJ/Willow_Dead_4.obj | 0 .../resources/nature/OBJ/Willow_Dead_5.mtl | 0 .../resources/nature/OBJ/Willow_Dead_5.obj | 0 .../nature/OBJ/Willow_Dead_Snow_1.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_1.obj | 0 .../nature/OBJ/Willow_Dead_Snow_2.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_2.obj | 0 .../nature/OBJ/Willow_Dead_Snow_3.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_3.obj | 0 .../nature/OBJ/Willow_Dead_Snow_4.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_4.obj | 0 .../nature/OBJ/Willow_Dead_Snow_5.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_5.obj | 0 .../resources/nature/OBJ/Willow_Snow_1.mtl | 0 .../resources/nature/OBJ/Willow_Snow_1.obj | 0 .../resources/nature/OBJ/Willow_Snow_2.mtl | 0 .../resources/nature/OBJ/Willow_Snow_2.obj | 0 .../resources/nature/OBJ/Willow_Snow_3.mtl | 0 .../resources/nature/OBJ/Willow_Snow_3.obj | 0 .../resources/nature/OBJ/Willow_Snow_4.mtl | 0 .../resources/nature/OBJ/Willow_Snow_4.obj | 0 .../resources/nature/OBJ/Willow_Snow_5.mtl | 0 .../resources/nature/OBJ/Willow_Snow_5.obj | 0 .../client}/resources/nature/OBJ/WoodLog.mtl | 0 .../client}/resources/nature/OBJ/WoodLog.obj | 0 .../resources/nature/OBJ/WoodLog_Moss.mtl | 0 .../resources/nature/OBJ/WoodLog_Moss.obj | 0 .../resources/nature/OBJ/WoodLog_Snow.mtl | 0 .../resources/nature/OBJ/WoodLog_Snow.obj | 0 .../client}/resources/nature/Preview.jpg | Bin .../resources/nature2/Blends/BigBush.blend | Bin .../nature2/Blends/BigTreeWithLeaves.blend | Bin .../resources/nature2/Blends/BushTexture.png | Bin .../resources/nature2/Blends/Cloud1.blend | Bin .../resources/nature2/Blends/Cloud1.blend1 | Bin .../resources/nature2/Blends/Cloud2.blend | Bin .../resources/nature2/Blends/Cloud3.blend | Bin .../resources/nature2/Blends/EveryModel.blend | Bin .../nature2/Blends/MoreNature.blend1 | Bin .../resources/nature2/Blends/SmallBush.blend | Bin .../nature2/Blends/SmallTreeWithLeave.blend | Bin .../nature2/Blends/TreeNoLeavesBig.blend | Bin .../nature2/Blends/TreeNoLeavesBig.blend1 | Bin .../nature2/Blends/TreeNoLeavesSmall.blend | Bin .../nature2/Blends/TreeNoLeavesSmall.blend1 | Bin .../resources/nature2/Blends/TreeTexture.png | Bin .../client}/resources/nature2/GLTF/Cloud1.glb | Bin .../client}/resources/nature2/GLTF/Cloud2.glb | Bin .../client}/resources/nature2/GLTF/Cloud3.glb | Bin .../client}/resources/nature2/License.txt | 0 .../client}/resources/nature2/OBJ/BigBush.mtl | 0 .../client}/resources/nature2/OBJ/BigBush.obj | 0 .../nature2/OBJ/BigTreeWithLeaves.mtl | 0 .../nature2/OBJ/BigTreeWithLeaves.obj | 0 .../client}/resources/nature2/OBJ/Cloud1.mtl | 0 .../client}/resources/nature2/OBJ/Cloud1.obj | 0 .../client}/resources/nature2/OBJ/Cloud2.mtl | 0 .../client}/resources/nature2/OBJ/Cloud2.obj | 0 .../client}/resources/nature2/OBJ/Cloud3.mtl | 0 .../client}/resources/nature2/OBJ/Cloud3.obj | 0 .../resources/nature2/OBJ/EveryModel.mtl | 0 .../resources/nature2/OBJ/EveryModel.obj | 0 .../resources/nature2/OBJ/SmallBush.mtl | 0 .../resources/nature2/OBJ/SmallBush.obj | 0 .../nature2/OBJ/SmallTreeWithLeave.mtl | 0 .../nature2/OBJ/SmallTreeWithLeave.obj | 0 .../resources/nature2/OBJ/TreeNoLeavesBig.mtl | 0 .../resources/nature2/OBJ/TreeNoLeavesBig.obj | 0 .../nature2/OBJ/TreeNoLeavesSmall.mtl | 0 .../nature2/OBJ/TreeNoLeavesSmall.obj | 0 .../client}/resources/terrain/README.txt | 0 .../resources/terrain/bark1-albedo.jpg | Bin .../resources/terrain/bark1-albedo.png | Bin .../resources/terrain/bark1-normal3.jpg | Bin .../resources/terrain/bark1-normal3.png | Bin .../terrain/dirt_01_diffuse-1024.png | Bin .../resources/terrain/dirt_01_normal-1024.jpg | Bin .../resources/terrain/grass1-albedo-512.jpg | Bin .../resources/terrain/grass1-albedo3-1024.png | Bin .../resources/terrain/grass1-normal-1024.jpg | Bin .../terrain/rock-snow-ice-albedo-1024.png | Bin .../terrain/rock-snow-ice-normal-1024.jpg | Bin .../terrain/rough-wet-cobble-albedo-1024.png | Bin .../terrain/rough-wet-cobble-normal-1024.jpg | Bin .../terrain/sandy-rocks1-albedo-1024.png | Bin .../terrain/sandy-rocks1-normal-1024.jpg | Bin .../terrain/sandyground-albedo-1024.png | Bin .../terrain/sandyground-normal-1024.jpg | Bin .../resources/terrain/simplex-noise.png | Bin .../terrain/snow-packed-albedo-1024.png | Bin .../terrain/snow-packed-normal-1024.jpg | Bin .../client}/resources/terrain/space-negx.jpg | Bin .../client}/resources/terrain/space-negy.jpg | Bin .../client}/resources/terrain/space-negz.jpg | Bin .../client}/resources/terrain/space-posx.jpg | Bin .../client}/resources/terrain/space-posy.jpg | Bin .../client}/resources/terrain/space-posz.jpg | Bin .../terrain/worn-bumpy-rock-albedo-1024.png | Bin .../terrain/worn-bumpy-rock-albedo-512.jpg | Bin .../terrain/worn-bumpy-rock-normal-1024.jpg | Bin .../client}/resources/textures/ball.png | Bin .../client}/resources/textures/fire.png | Bin .../resources/textures/whitePuff14.png | Bin .../resources/trees/Blends/Birch_1.blend | Bin .../resources/trees/Blends/Birch_10.blend | Bin .../resources/trees/Blends/Birch_2.blend | Bin .../resources/trees/Blends/Birch_3.blend | Bin .../resources/trees/Blends/Birch_4.blend | Bin .../resources/trees/Blends/Birch_5.blend | Bin .../resources/trees/Blends/Birch_6.blend | Bin .../resources/trees/Blends/Birch_7.blend | Bin .../resources/trees/Blends/Birch_8.blend | Bin .../resources/trees/Blends/Birch_9.blend | Bin .../resources/trees/Blends/DeadBirch_1.blend | Bin .../resources/trees/Blends/DeadBirch_10.blend | Bin .../resources/trees/Blends/DeadBirch_2.blend | Bin .../resources/trees/Blends/DeadBirch_3.blend | Bin .../resources/trees/Blends/DeadBirch_4.blend | Bin .../resources/trees/Blends/DeadBirch_5.blend | Bin .../resources/trees/Blends/DeadBirch_6.blend | Bin .../resources/trees/Blends/DeadBirch_7.blend | Bin .../resources/trees/Blends/DeadBirch_8.blend | Bin .../resources/trees/Blends/DeadBirch_9.blend | Bin .../resources/trees/Blends/DeadTree_1.blend | Bin .../resources/trees/Blends/DeadTree_10.blend | Bin .../resources/trees/Blends/DeadTree_2.blend | Bin .../resources/trees/Blends/DeadTree_3.blend | Bin .../resources/trees/Blends/DeadTree_4.blend | Bin .../resources/trees/Blends/DeadTree_5.blend | Bin .../resources/trees/Blends/DeadTree_6.blend | Bin .../resources/trees/Blends/DeadTree_7.blend | Bin .../resources/trees/Blends/DeadTree_8.blend | Bin .../resources/trees/Blends/DeadTree_9.blend | Bin .../resources/trees/Blends/Pine_1.blend | Bin .../resources/trees/Blends/Pine_2.blend | Bin .../resources/trees/Blends/Pine_3.blend | Bin .../resources/trees/Blends/Pine_4.blend | Bin .../resources/trees/Blends/Pine_5.blend | Bin .../resources/trees/Blends/Tree_1.blend | Bin .../resources/trees/Blends/Tree_10.blend | Bin .../resources/trees/Blends/Tree_2.blend | Bin .../resources/trees/Blends/Tree_3.blend | Bin .../resources/trees/Blends/Tree_4.blend | Bin .../resources/trees/Blends/Tree_5.blend | Bin .../resources/trees/Blends/Tree_6.blend | Bin .../resources/trees/Blends/Tree_7.blend | Bin .../resources/trees/Blends/Tree_8.blend | Bin .../resources/trees/Blends/Tree_9.blend | Bin .../client}/resources/trees/FBX/Birch_1.fbx | Bin .../client}/resources/trees/FBX/Birch_10.fbx | Bin .../client}/resources/trees/FBX/Birch_2.fbx | Bin .../client}/resources/trees/FBX/Birch_3.fbx | Bin .../client}/resources/trees/FBX/Birch_4.fbx | Bin .../client}/resources/trees/FBX/Birch_5.fbx | Bin .../client}/resources/trees/FBX/Birch_6.fbx | Bin .../client}/resources/trees/FBX/Birch_7.fbx | Bin .../client}/resources/trees/FBX/Birch_8.fbx | Bin .../client}/resources/trees/FBX/Birch_9.fbx | Bin .../resources/trees/FBX/DeadBirch_1.fbx | Bin .../resources/trees/FBX/DeadBirch_10.fbx | Bin .../resources/trees/FBX/DeadBirch_2.fbx | Bin .../resources/trees/FBX/DeadBirch_3.fbx | Bin .../resources/trees/FBX/DeadBirch_4.fbx | Bin .../resources/trees/FBX/DeadBirch_5.fbx | Bin .../resources/trees/FBX/DeadBirch_6.fbx | Bin .../resources/trees/FBX/DeadBirch_7.fbx | Bin .../resources/trees/FBX/DeadBirch_8.fbx | Bin .../resources/trees/FBX/DeadBirch_9.fbx | Bin .../resources/trees/FBX/DeadTree_1.fbx | Bin .../resources/trees/FBX/DeadTree_10.fbx | Bin .../resources/trees/FBX/DeadTree_2.fbx | Bin .../resources/trees/FBX/DeadTree_3.fbx | Bin .../resources/trees/FBX/DeadTree_4.fbx | Bin .../resources/trees/FBX/DeadTree_5.fbx | Bin .../resources/trees/FBX/DeadTree_6.fbx | Bin .../resources/trees/FBX/DeadTree_7.fbx | Bin .../resources/trees/FBX/DeadTree_8.fbx | Bin .../resources/trees/FBX/DeadTree_9.fbx | Bin .../client}/resources/trees/FBX/Pine_1.fbx | Bin .../client}/resources/trees/FBX/Pine_2.fbx | Bin .../client}/resources/trees/FBX/Pine_3.fbx | Bin .../client}/resources/trees/FBX/Pine_4.fbx | Bin .../client}/resources/trees/FBX/Pine_5.fbx | Bin .../client}/resources/trees/FBX/Tree_1.fbx | Bin .../client}/resources/trees/FBX/Tree_10.fbx | Bin .../client}/resources/trees/FBX/Tree_2.fbx | Bin .../client}/resources/trees/FBX/Tree_3.fbx | Bin .../client}/resources/trees/FBX/Tree_4.fbx | Bin .../client}/resources/trees/FBX/Tree_5.fbx | Bin .../client}/resources/trees/FBX/Tree_6.fbx | Bin .../client}/resources/trees/FBX/Tree_7.fbx | Bin .../client}/resources/trees/FBX/Tree_8.fbx | Bin .../client}/resources/trees/FBX/Tree_9.fbx | Bin .../client}/resources/trees/License.txt | 0 .../client}/resources/trees/OBJ/Birch_1.mtl | 0 .../client}/resources/trees/OBJ/Birch_1.obj | 0 .../client}/resources/trees/OBJ/Birch_10.mtl | 0 .../client}/resources/trees/OBJ/Birch_10.obj | 0 .../client}/resources/trees/OBJ/Birch_2.mtl | 0 .../client}/resources/trees/OBJ/Birch_2.obj | 0 .../client}/resources/trees/OBJ/Birch_3.mtl | 0 .../client}/resources/trees/OBJ/Birch_3.obj | 0 .../client}/resources/trees/OBJ/Birch_4.mtl | 0 .../client}/resources/trees/OBJ/Birch_4.obj | 0 .../client}/resources/trees/OBJ/Birch_5.mtl | 0 .../client}/resources/trees/OBJ/Birch_5.obj | 0 .../client}/resources/trees/OBJ/Birch_6.mtl | 0 .../client}/resources/trees/OBJ/Birch_6.obj | 0 .../client}/resources/trees/OBJ/Birch_7.mtl | 0 .../client}/resources/trees/OBJ/Birch_7.obj | 0 .../client}/resources/trees/OBJ/Birch_8.mtl | 0 .../client}/resources/trees/OBJ/Birch_8.obj | 0 .../client}/resources/trees/OBJ/Birch_9.mtl | 0 .../client}/resources/trees/OBJ/Birch_9.obj | 0 .../resources/trees/OBJ/DeadBirch_1.mtl | 0 .../resources/trees/OBJ/DeadBirch_1.obj | 0 .../resources/trees/OBJ/DeadBirch_10.mtl | 0 .../resources/trees/OBJ/DeadBirch_10.obj | 0 .../resources/trees/OBJ/DeadBirch_2.mtl | 0 .../resources/trees/OBJ/DeadBirch_2.obj | 0 .../resources/trees/OBJ/DeadBirch_3.mtl | 0 .../resources/trees/OBJ/DeadBirch_3.obj | 0 .../resources/trees/OBJ/DeadBirch_4.mtl | 0 .../resources/trees/OBJ/DeadBirch_4.obj | 0 .../resources/trees/OBJ/DeadBirch_5.mtl | 0 .../resources/trees/OBJ/DeadBirch_5.obj | 0 .../resources/trees/OBJ/DeadBirch_6.mtl | 0 .../resources/trees/OBJ/DeadBirch_6.obj | 0 .../resources/trees/OBJ/DeadBirch_7.mtl | 0 .../resources/trees/OBJ/DeadBirch_7.obj | 0 .../resources/trees/OBJ/DeadBirch_8.mtl | 0 .../resources/trees/OBJ/DeadBirch_8.obj | 0 .../resources/trees/OBJ/DeadBirch_9.mtl | 0 .../resources/trees/OBJ/DeadBirch_9.obj | 0 .../resources/trees/OBJ/DeadTree_1.mtl | 0 .../resources/trees/OBJ/DeadTree_1.obj | 0 .../resources/trees/OBJ/DeadTree_10.mtl | 0 .../resources/trees/OBJ/DeadTree_10.obj | 0 .../resources/trees/OBJ/DeadTree_2.mtl | 0 .../resources/trees/OBJ/DeadTree_2.obj | 0 .../resources/trees/OBJ/DeadTree_3.mtl | 0 .../resources/trees/OBJ/DeadTree_3.obj | 0 .../resources/trees/OBJ/DeadTree_4.mtl | 0 .../resources/trees/OBJ/DeadTree_4.obj | 0 .../resources/trees/OBJ/DeadTree_5.mtl | 0 .../resources/trees/OBJ/DeadTree_5.obj | 0 .../resources/trees/OBJ/DeadTree_6.mtl | 0 .../resources/trees/OBJ/DeadTree_6.obj | 0 .../resources/trees/OBJ/DeadTree_7.mtl | 0 .../resources/trees/OBJ/DeadTree_7.obj | 0 .../resources/trees/OBJ/DeadTree_8.mtl | 0 .../resources/trees/OBJ/DeadTree_8.obj | 0 .../resources/trees/OBJ/DeadTree_9.mtl | 0 .../resources/trees/OBJ/DeadTree_9.obj | 0 .../client}/resources/trees/OBJ/Pine_1.mtl | 0 .../client}/resources/trees/OBJ/Pine_1.obj | 0 .../client}/resources/trees/OBJ/Pine_2.mtl | 0 .../client}/resources/trees/OBJ/Pine_2.obj | 0 .../client}/resources/trees/OBJ/Pine_3.mtl | 0 .../client}/resources/trees/OBJ/Pine_3.obj | 0 .../client}/resources/trees/OBJ/Pine_4.mtl | 0 .../client}/resources/trees/OBJ/Pine_4.obj | 0 .../client}/resources/trees/OBJ/Pine_5.mtl | 0 .../client}/resources/trees/OBJ/Pine_5.obj | 0 .../client}/resources/trees/OBJ/Tree_1.mtl | 0 .../client}/resources/trees/OBJ/Tree_1.obj | 0 .../client}/resources/trees/OBJ/Tree_10.mtl | 0 .../client}/resources/trees/OBJ/Tree_10.obj | 0 .../client}/resources/trees/OBJ/Tree_2.mtl | 0 .../client}/resources/trees/OBJ/Tree_2.obj | 0 .../client}/resources/trees/OBJ/Tree_3.mtl | 0 .../client}/resources/trees/OBJ/Tree_3.obj | 0 .../client}/resources/trees/OBJ/Tree_4.mtl | 0 .../client}/resources/trees/OBJ/Tree_4.obj | 0 .../client}/resources/trees/OBJ/Tree_5.mtl | 0 .../client}/resources/trees/OBJ/Tree_5.obj | 0 .../client}/resources/trees/OBJ/Tree_6.mtl | 0 .../client}/resources/trees/OBJ/Tree_6.obj | 0 .../client}/resources/trees/OBJ/Tree_7.mtl | 0 .../client}/resources/trees/OBJ/Tree_7.obj | 0 .../client}/resources/trees/OBJ/Tree_8.mtl | 0 .../client}/resources/trees/OBJ/Tree_8.obj | 0 .../client}/resources/trees/OBJ/Tree_9.mtl | 0 .../client}/resources/trees/OBJ/Tree_9.obj | 0 .../client}/resources/trees/Preview.jpg | Bin .../resources/trees/Textures/Birch_Bark.png | Bin .../trees/Textures/Birch_Leaves_Green.png | Bin .../trees/Textures/Birch_Leaves_Yellow.png | Bin .../Textures/Color Variations/Bark_Dead.png | Bin .../Color Variations/Birch_Bark_Dead.png | Bin .../Textures/Color Variations/Leaves_Cyan.png | Bin .../Color Variations/Leaves_DarkRed.png | Bin .../Color Variations/Leaves_Light.png | Bin .../Color Variations/Leaves_Orange.png | Bin .../Textures/Color Variations/Leaves_Pink.png | Bin .../Color Variations/Leaves_Purple.png | Bin .../Textures/Color Variations/Leaves_Red.png | Bin .../Color Variations/Pine_Leaves_Light.png | Bin .../Color Variations/Pine_Leaves_Red.png | Bin .../resources/trees/Textures/Leaves_Blue.png | Bin .../resources/trees/Textures/Pine_Leaves.png | Bin .../resources/trees/Textures/Tree_Bark.jpg | Bin .../resources/trees/Textures/Tree_Leaves.png | Bin .../resources/weapons/Blends/Arrow.blend | Bin .../resources/weapons/Blends/Axe.blend | Bin .../resources/weapons/Blends/Axe_Double.blend | Bin .../resources/weapons/Blends/Axe_Small.blend | Bin .../resources/weapons/Blends/Bow_Evil.blend | Bin .../resources/weapons/Blends/Bow_Golden.blend | Bin .../resources/weapons/Blends/Bow_Wooden.blend | Bin .../weapons/Blends/Bow_Wooden2.blend | Bin .../resources/weapons/Blends/Claymore.blend | Bin .../resources/weapons/Blends/Dagger.blend | Bin .../resources/weapons/Blends/Dagger_2.blend | Bin .../weapons/Blends/Hammer_Double.blend | Bin .../weapons/Blends/Hammer_Small.blend | Bin .../resources/weapons/Blends/Scythe.blend | Bin .../weapons/Blends/Shield_Celtic_Golden.blend | Bin .../weapons/Blends/Shield_Heater.blend | Bin .../weapons/Blends/Shield_Heater_2.blend | Bin .../weapons/Blends/Shield_Round.blend | Bin .../weapons/Blends/Shield_Round_2.blend | Bin .../resources/weapons/Blends/Spear.blend | Bin .../resources/weapons/Blends/Sword.blend | Bin .../resources/weapons/Blends/Sword_2.blend | Bin .../resources/weapons/Blends/Sword_Big.blend | Bin .../weapons/Blends/Sword_Golden.blend | Bin .../client}/resources/weapons/FBX/Arrow.fbx | Bin .../client}/resources/weapons/FBX/Axe.fbx | Bin .../resources/weapons/FBX/Axe_Double.fbx | Bin .../resources/weapons/FBX/Axe_Small.fbx | Bin .../resources/weapons/FBX/Bow_Evil.fbx | Bin .../resources/weapons/FBX/Bow_Golden.fbx | Bin .../resources/weapons/FBX/Bow_Wooden.fbx | Bin .../resources/weapons/FBX/Bow_Wooden2.fbx | Bin .../resources/weapons/FBX/Claymore.fbx | Bin .../client}/resources/weapons/FBX/Dagger.fbx | Bin .../resources/weapons/FBX/Dagger_2.fbx | Bin .../resources/weapons/FBX/Hammer_Double.fbx | Bin .../resources/weapons/FBX/Hammer_Small.fbx | Bin .../client}/resources/weapons/FBX/Scythe.fbx | Bin .../weapons/FBX/Shield_Celtic_Golden.fbx | Bin .../resources/weapons/FBX/Shield_Heater.fbx | Bin .../resources/weapons/FBX/Shield_Heater_2.fbx | Bin .../resources/weapons/FBX/Shield_Round.fbx | Bin .../resources/weapons/FBX/Shield_Round_2.fbx | Bin .../client}/resources/weapons/FBX/Spear.fbx | Bin .../client}/resources/weapons/FBX/Sword.fbx | Bin .../client}/resources/weapons/FBX/Sword_2.fbx | Bin .../resources/weapons/FBX/Sword_Big.fbx | Bin .../resources/weapons/FBX/Sword_Golden.fbx | Bin .../client}/resources/weapons/License.txt | 0 .../client}/resources/weapons/OBJ/Arrow.mtl | 0 .../client}/resources/weapons/OBJ/Arrow.obj | 0 .../client}/resources/weapons/OBJ/Axe.mtl | 0 .../client}/resources/weapons/OBJ/Axe.obj | 0 .../resources/weapons/OBJ/Axe_Double.mtl | 0 .../resources/weapons/OBJ/Axe_Double.obj | 0 .../resources/weapons/OBJ/Axe_Small.mtl | 0 .../resources/weapons/OBJ/Axe_Small.obj | 0 .../resources/weapons/OBJ/Bow_Evil.mtl | 0 .../resources/weapons/OBJ/Bow_Evil.obj | 0 .../resources/weapons/OBJ/Bow_Golden.mtl | 0 .../resources/weapons/OBJ/Bow_Golden.obj | 0 .../resources/weapons/OBJ/Bow_Wooden.mtl | 0 .../resources/weapons/OBJ/Bow_Wooden.obj | 0 .../resources/weapons/OBJ/Bow_Wooden2.mtl | 0 .../resources/weapons/OBJ/Bow_Wooden2.obj | 0 .../resources/weapons/OBJ/Claymore.mtl | 0 .../resources/weapons/OBJ/Claymore.obj | 0 .../client}/resources/weapons/OBJ/Dagger.mtl | 0 .../client}/resources/weapons/OBJ/Dagger.obj | 0 .../resources/weapons/OBJ/Dagger_2.mtl | 0 .../resources/weapons/OBJ/Dagger_2.obj | 0 .../resources/weapons/OBJ/Hammer_Double.mtl | 0 .../resources/weapons/OBJ/Hammer_Double.obj | 0 .../resources/weapons/OBJ/Hammer_Small.mtl | 0 .../resources/weapons/OBJ/Hammer_Small.obj | 0 .../client}/resources/weapons/OBJ/Scythe.mtl | 0 .../client}/resources/weapons/OBJ/Scythe.obj | 0 .../weapons/OBJ/Shield_Celtic_Golden.mtl | 0 .../weapons/OBJ/Shield_Celtic_Golden.obj | 0 .../resources/weapons/OBJ/Shield_Heater.mtl | 0 .../resources/weapons/OBJ/Shield_Heater.obj | 0 .../resources/weapons/OBJ/Shield_Heater_2.mtl | 0 .../resources/weapons/OBJ/Shield_Heater_2.obj | 0 .../resources/weapons/OBJ/Shield_Round.mtl | 0 .../resources/weapons/OBJ/Shield_Round.obj | 0 .../resources/weapons/OBJ/Shield_Round_2.mtl | 0 .../resources/weapons/OBJ/Shield_Round_2.obj | 0 .../client}/resources/weapons/OBJ/Spear.mtl | 0 .../client}/resources/weapons/OBJ/Spear.obj | 0 .../client}/resources/weapons/OBJ/Sword.mtl | 0 .../client}/resources/weapons/OBJ/Sword.obj | 0 .../client}/resources/weapons/OBJ/Sword_2.mtl | 0 .../client}/resources/weapons/OBJ/Sword_2.obj | 0 .../resources/weapons/OBJ/Sword_Big.mtl | 0 .../resources/weapons/OBJ/Sword_Big.obj | 0 .../resources/weapons/OBJ/Sword_Golden.mtl | 0 .../resources/weapons/OBJ/Sword_Golden.obj | 0 .../client}/resources/weapons/Preview.png | Bin .../client}/src/attacker-controller.ts | 6 +- packages/client/src/blood-effect.ts | 244 ++ {client => packages/client}/src/entity.ts | 0 .../client}/src/equip-weapon-component.ts | 7 +- .../client}/src/finite-state-machine.ts | 0 .../client}/src/floating-name.ts | 7 +- packages/client/src/gltf-component.ts | 236 ++ {client => packages/client}/src/health-bar.ts | 2 +- packages/client/src/health-component.ts | 131 + {client => packages/client}/src/index.ts | 6 +- .../client}/src/inventory-controller.ts | 4 +- .../client}/src/level-up-component.ts | 0 packages/client/src/load-controller.ts | 106 + .../client}/src/loading-manager.ts | 0 {client => packages/client}/src/main.ts | 26 +- .../client}/src/network-controller.ts | 5 +- .../client}/src/network-entity-controller.ts | 4 +- .../client}/src/network-player-controller.ts | 4 +- packages/client/src/npc-entity.ts | 180 + .../client}/src/particle-system.ts | 0 .../client}/src/player-entity.ts | 5 +- .../client}/src/player-input.ts | 5 +- .../client}/src/player-state.ts | 5 +- {client => packages/client}/src/quadtree.ts | 0 packages/client/src/quest-component.ts | 37 + .../client}/src/render-component.ts | 9 +- .../client}/src/scenery-controller.ts | 9 +- .../client}/src/sorceror-effect.ts | 4 +- .../client}/src/spatial-grid-controller.ts | 0 {client => packages/client}/src/spawners.ts | 10 +- .../src/terrain-builder-threaded-worker.ts | 10 +- .../client}/src/terrain-builder-threaded.ts | 4 +- .../client}/src/terrain-builder.ts | 2 +- .../client}/src/terrain-chunk.ts | 3 +- .../client}/src/terrain-shader.ts | 37 +- packages/client/src/terrain.ts | 303 ++ packages/client/src/test.ts | 5 + packages/client/src/texture-splatter.ts | 155 + packages/client/src/textures.ts | 95 + packages/client/src/third-person-camera.ts | 58 + packages/client/src/threejs_component.ts | 199 + .../client}/src/ui-controller.ts | 3 + {client => packages/client}/src/utils.ts | 0 {client => packages/client}/styles/base.css | 0 {client => packages/client}/tsconfig.json | 6 +- {server => packages/server}/dist/index.js | 0 .../server}/dist/scripts/login-queue.js | 0 .../server}/dist/scripts/world-client.js | 0 .../server}/dist/scripts/world-entity.js | 0 .../server}/dist/scripts/world-manager.js | 0 .../server}/dist/scripts/world-server.js | 0 {server => packages/server}/package-lock.json | 0 {server => packages/server}/package.json | 0 {server => packages/server}/src/index.ts | 0 .../server}/src/scripts/login-queue.ts | 15 +- .../server}/src/scripts/world-client.ts | 26 +- .../server}/src/scripts/world-entity.ts | 11 +- .../server}/src/scripts/world-manager.ts | 6 +- .../server}/src/scripts/world-server.ts | 2 +- {server => packages/server}/tsconfig.json | 6 +- {shared => packages/shared}/package.json | 2 +- .../shared}/src/OrbitControls.ts | 0 {shared => packages/shared}/src/constants.ts | 3 +- packages/shared/src/dat.gui.module.ts | 3576 +++++++++++++++++ {shared => packages/shared}/src/defs.ts | 0 .../shared}/src/entity-manager.ts | 0 .../shared}/src/globaltypes.ts | 0 packages/shared/src/index.ts | 27 + packages/shared/src/math.ts | 51 + {shared => packages/shared}/src/noise.ts | 0 .../shared}/src/simplex-noise.ts | 0 .../shared}/src/spatial-hash-grid.ts | 2 +- {shared => packages/shared}/src/spline.ts | 0 .../shared}/src/terrain-constants.ts | 0 .../shared}/src/terrain-height.ts | 0 {shared => packages/shared}/tsconfig.json | 8 +- .../shared}/tsconfig.tsbuildinfo | 0 shared/dist/OrbitControls.d.ts | 4 - shared/dist/OrbitControls.d.ts.map | 1 - shared/dist/OrbitControls.js | 751 ---- shared/dist/OrbitControls.js.map | 1 - shared/dist/constants.d.ts | 26 - shared/dist/constants.d.ts.map | 1 - shared/dist/constants.js | 29 - shared/dist/constants.js.map | 1 - shared/dist/defs.d.ts | 145 - shared/dist/defs.d.ts.map | 1 - shared/dist/defs.js | 147 - shared/dist/defs.js.map | 1 - shared/dist/entity-manager.d.ts | 14 - shared/dist/entity-manager.d.ts.map | 1 - shared/dist/entity-manager.js | 64 - shared/dist/entity-manager.js.map | 1 - shared/dist/globaltypes.d.ts | 15 - shared/dist/globaltypes.d.ts.map | 1 - shared/dist/globaltypes.js | 2 - shared/dist/globaltypes.js.map | 1 - shared/dist/index.d.ts | 3 - shared/dist/index.d.ts.map | 1 - shared/dist/index.js | 3 - shared/dist/index.js.map | 1 - shared/dist/math.d.ts | 12 - shared/dist/math.d.ts.map | 1 - shared/dist/math.js | 35 - shared/dist/math.js.map | 1 - shared/dist/noise.d.ts | 9 - shared/dist/noise.d.ts.map | 1 - shared/dist/noise.js | 32 - shared/dist/noise.js.map | 1 - shared/dist/simplex-noise.d.ts | 7 - shared/dist/simplex-noise.d.ts.map | 1 - shared/dist/simplex-noise.js | 483 --- shared/dist/simplex-noise.js.map | 1 - shared/dist/spatial-hash-grid.d.ts | 24 - shared/dist/spatial-hash-grid.d.ts.map | 1 - shared/dist/spatial-hash-grid.js | 119 - shared/dist/spatial-hash-grid.js.map | 1 - shared/dist/spline.d.ts | 16 - shared/dist/spline.d.ts.map | 1 - shared/dist/spline.js | 51 - shared/dist/spline.js.map | 1 - shared/dist/terrain-constants.d.ts | 16 - shared/dist/terrain-constants.d.ts.map | 1 - shared/dist/terrain-constants.js | 19 - shared/dist/terrain-constants.js.map | 1 - shared/dist/terrain-height.d.ts | 8 - shared/dist/terrain-height.d.ts.map | 1 - shared/dist/terrain-height.js | 13 - shared/dist/terrain-height.js.map | 1 - shared/src/index.ts | 3 - shared/src/math.ts | 42 - yarn-error.log | 1406 +++++++ yarn.lock | 251 +- 1188 files changed, 13334 insertions(+), 3993 deletions(-) delete mode 100644 client/package.json delete mode 100644 client/src/blood-effect.ts delete mode 100644 client/src/gltf-component.ts delete mode 100644 client/src/health-component.ts delete mode 100644 client/src/load-controller.ts delete mode 100644 client/src/npc-entity.ts delete mode 100644 client/src/quest-component.ts delete mode 100644 client/src/terrain.ts delete mode 100644 client/src/test.ts delete mode 100644 client/src/texture-splatter.ts delete mode 100644 client/src/textures.ts delete mode 100644 client/src/third-person-camera.ts delete mode 100644 client/src/threejs_component.ts rename {client => packages/client}/LICENSE (100%) create mode 100644 packages/client/dist/attacker-controller.js create mode 100644 packages/client/dist/blood-effect.js create mode 100644 packages/client/dist/entity.js create mode 100644 packages/client/dist/equip-weapon-component.js create mode 100644 packages/client/dist/finite-state-machine.js create mode 100644 packages/client/dist/floating-name.js create mode 100644 packages/client/dist/gltf-component.js create mode 100644 packages/client/dist/health-bar.js create mode 100644 packages/client/dist/health-component.js create mode 100644 packages/client/dist/index.js create mode 100644 packages/client/dist/inventory-controller.js create mode 100644 packages/client/dist/level-up-component.js create mode 100644 packages/client/dist/load-controller.js create mode 100644 packages/client/dist/loading-manager.js create mode 100644 packages/client/dist/main.js create mode 100644 packages/client/dist/network-controller.js create mode 100644 packages/client/dist/network-entity-controller.js create mode 100644 packages/client/dist/network-player-controller.js create mode 100644 packages/client/dist/npc-entity.js create mode 100644 packages/client/dist/particle-system.js create mode 100644 packages/client/dist/player-entity.js create mode 100644 packages/client/dist/player-input.js create mode 100644 packages/client/dist/player-state.js create mode 100644 packages/client/dist/quadtree.js create mode 100644 packages/client/dist/quest-component.js create mode 100644 packages/client/dist/render-component.js create mode 100644 packages/client/dist/scenery-controller.js create mode 100644 packages/client/dist/sorceror-effect.js create mode 100644 packages/client/dist/spatial-grid-controller.js create mode 100644 packages/client/dist/spawners.js create mode 100644 packages/client/dist/terrain-builder-threaded-worker.js create mode 100644 packages/client/dist/terrain-builder-threaded.js create mode 100644 packages/client/dist/terrain-builder.js create mode 100644 packages/client/dist/terrain-chunk.js create mode 100644 packages/client/dist/terrain-shader.js create mode 100644 packages/client/dist/terrain.js create mode 100644 packages/client/dist/test.js create mode 100644 packages/client/dist/texture-splatter.js create mode 100644 packages/client/dist/textures.js create mode 100644 packages/client/dist/third-person-camera.js create mode 100644 packages/client/dist/threejs_component.js create mode 100644 packages/client/dist/ui-controller.js create mode 100644 packages/client/dist/utils.js rename {client => packages/client}/index.html (97%) create mode 100644 packages/client/package.json rename {client => packages/client}/resources/background-2.jpg (100%) rename {client => packages/client}/resources/background-3.png (100%) rename {client => packages/client}/resources/background.jpg (100%) rename {client => packages/client}/resources/characters/guard.glb (100%) rename {client => packages/client}/resources/characters/paladin.glb (100%) rename {client => packages/client}/resources/characters/readme.txt (100%) rename {client => packages/client}/resources/characters/sorceror.glb (100%) rename {client => packages/client}/resources/characters/warrok.glb (100%) rename {client => packages/client}/resources/characters/zombie-guy.glb (100%) rename {client => packages/client}/resources/characters/zombie.glb (100%) rename {client => packages/client}/resources/icons/readme.txt (100%) rename {client => packages/client}/resources/icons/ui/backpack.png (100%) rename {client => packages/client}/resources/icons/ui/health-bar.png (100%) rename {client => packages/client}/resources/icons/ui/inventory-character.png (100%) rename {client => packages/client}/resources/icons/ui/skills.png (100%) rename {client => packages/client}/resources/icons/ui/tied-scroll.png (100%) rename {client => packages/client}/resources/icons/weapons/hammer-64.png (100%) rename {client => packages/client}/resources/icons/weapons/pointy-sword-64.png (100%) rename {client => packages/client}/resources/icons/weapons/pointy-sword.png (100%) rename {client => packages/client}/resources/icons/weapons/thor-hammer.png (100%) rename {client => packages/client}/resources/icons/weapons/war-axe-64.png (100%) rename {client => packages/client}/resources/icons/weapons/war-axe.png (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Autumn_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Autumn_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Autumn_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Autumn_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Autumn_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_Snow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_Snow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Dead_Snow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Snow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Snow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/BirchTree_Snow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/BushBerries_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/BushBerries_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Bush_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Bush_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Bush_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Bush_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/CactusFlower_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/CactusFlowers_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/CactusFlowers_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/CactusFlowers_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/CactusFlowers_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Cactus_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Cactus_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Cactus_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Cactus_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Cactus_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Autumn_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Autumn_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Autumn_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Autumn_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Autumn_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_Snow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_Snow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Dead_Snow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Snow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Snow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/CommonTree_Snow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Corn_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Corn_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Flowers.blend (100%) rename {client => packages/client}/resources/nature/Blends/Grass.blend (100%) rename {client => packages/client}/resources/nature/Blends/Grass_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Grass_Short.blend (100%) rename {client => packages/client}/resources/nature/Blends/Lilypad.blend (100%) rename {client => packages/client}/resources/nature/Blends/PalmTree_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/PalmTree_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/PalmTree_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/PalmTree_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Autumn_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Autumn_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Autumn_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Autumn_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Autumn_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Snow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Snow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/PineTree_Snow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Plant_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Plant_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Plant_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Plant_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Plant_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_6.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_7.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Moss_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Moss_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Moss_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Moss_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Moss_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Moss_6.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Moss_7.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Snow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Snow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Snow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Snow_6.blend (100%) rename {client => packages/client}/resources/nature/Blends/Rock_Snow_7.blend (100%) rename {client => packages/client}/resources/nature/Blends/TreeStump.blend (100%) rename {client => packages/client}/resources/nature/Blends/TreeStump_Moss.blend (100%) rename {client => packages/client}/resources/nature/Blends/TreeStump_Snow.blend (100%) rename {client => packages/client}/resources/nature/Blends/Wheat.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Autumn_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Autumn_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Autumn_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Autumn_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Autumn_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_Snow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_Snow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Dead_Snow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Snow_1.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Snow_2.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Snow_3.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Snow_4.blend (100%) rename {client => packages/client}/resources/nature/Blends/Willow_Snow_5.blend (100%) rename {client => packages/client}/resources/nature/Blends/WoodLog.blend (100%) rename {client => packages/client}/resources/nature/Blends/WoodLog_Moss.blend (100%) rename {client => packages/client}/resources/nature/Blends/WoodLog_Snow.blend (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Autumn_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Autumn_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Autumn_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Autumn_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Autumn_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Snow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Snow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BirchTree_Snow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BushBerries_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/BushBerries_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Bush_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Bush_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Bush_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Bush_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CactusFlower_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CactusFlowers_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CactusFlowers_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CactusFlowers_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CactusFlowers_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Cactus_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Cactus_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Cactus_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Cactus_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Cactus_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Autumn_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Autumn_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Autumn_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Autumn_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Autumn_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Snow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Snow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/CommonTree_Snow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Corn_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Corn_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Flowers.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Grass_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Grass_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Grass_Short.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Lilypad.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PalmTree_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PalmTree_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PalmTree_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PalmTree_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Autumn_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Autumn_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Autumn_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Autumn_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Autumn_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Snow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Snow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/PineTree_Snow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Plant_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Plant_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Plant_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Plant_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Plant_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_6.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_7.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Moss_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Moss_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Moss_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Moss_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Moss_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Moss_6.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Moss_7.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Snow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Snow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Snow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Snow_6.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Rock_Snow_7.fbx (100%) rename {client => packages/client}/resources/nature/FBX/TreeStump.fbx (100%) rename {client => packages/client}/resources/nature/FBX/TreeStump_Moss.fbx (100%) rename {client => packages/client}/resources/nature/FBX/TreeStump_Snow.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Wheat.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Autumn_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Autumn_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Autumn_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Autumn_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Autumn_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_Snow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_Snow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Dead_Snow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Snow_1.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Snow_2.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Snow_3.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Snow_4.fbx (100%) rename {client => packages/client}/resources/nature/FBX/Willow_Snow_5.fbx (100%) rename {client => packages/client}/resources/nature/FBX/WoodLog.fbx (100%) rename {client => packages/client}/resources/nature/FBX/WoodLog_Moss.fbx (100%) rename {client => packages/client}/resources/nature/FBX/WoodLog_Snow.fbx (100%) rename {client => packages/client}/resources/nature/License.txt (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Autumn_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BirchTree_Snow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BushBerries_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BushBerries_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/BushBerries_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/BushBerries_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Bush_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Bush_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Bush_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Bush_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Bush_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Bush_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Bush_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Bush_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlower_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlower_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlowers_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlowers_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlowers_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlowers_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlowers_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlowers_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlowers_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CactusFlowers_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Cactus_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Autumn_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/CommonTree_Snow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Corn_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Corn_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Corn_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Corn_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Flowers.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Flowers.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Grass.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Grass.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Grass_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Grass_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Grass_Short.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Grass_Short.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Lilypad.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Lilypad.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PalmTree_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PalmTree_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PalmTree_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PalmTree_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PalmTree_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PalmTree_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PalmTree_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PalmTree_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Autumn_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/PineTree_Snow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Plant_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_6.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_6.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_7.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_7.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_6.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_6.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_7.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Moss_7.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_6.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_6.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_7.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Rock_Snow_7.obj (100%) rename {client => packages/client}/resources/nature/OBJ/TreeStump.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/TreeStump.obj (100%) rename {client => packages/client}/resources/nature/OBJ/TreeStump_Moss.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/TreeStump_Moss.obj (100%) rename {client => packages/client}/resources/nature/OBJ/TreeStump_Snow.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/TreeStump_Snow.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Wheat.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Wheat.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Autumn_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Dead_Snow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_1.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_1.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_2.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_2.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_3.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_3.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_4.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_4.obj (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_5.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/Willow_Snow_5.obj (100%) rename {client => packages/client}/resources/nature/OBJ/WoodLog.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/WoodLog.obj (100%) rename {client => packages/client}/resources/nature/OBJ/WoodLog_Moss.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/WoodLog_Moss.obj (100%) rename {client => packages/client}/resources/nature/OBJ/WoodLog_Snow.mtl (100%) rename {client => packages/client}/resources/nature/OBJ/WoodLog_Snow.obj (100%) rename {client => packages/client}/resources/nature/Preview.jpg (100%) rename {client => packages/client}/resources/nature2/Blends/BigBush.blend (100%) rename {client => packages/client}/resources/nature2/Blends/BigTreeWithLeaves.blend (100%) rename {client => packages/client}/resources/nature2/Blends/BushTexture.png (100%) rename {client => packages/client}/resources/nature2/Blends/Cloud1.blend (100%) rename {client => packages/client}/resources/nature2/Blends/Cloud1.blend1 (100%) rename {client => packages/client}/resources/nature2/Blends/Cloud2.blend (100%) rename {client => packages/client}/resources/nature2/Blends/Cloud3.blend (100%) rename {client => packages/client}/resources/nature2/Blends/EveryModel.blend (100%) rename {client => packages/client}/resources/nature2/Blends/MoreNature.blend1 (100%) rename {client => packages/client}/resources/nature2/Blends/SmallBush.blend (100%) rename {client => packages/client}/resources/nature2/Blends/SmallTreeWithLeave.blend (100%) rename {client => packages/client}/resources/nature2/Blends/TreeNoLeavesBig.blend (100%) rename {client => packages/client}/resources/nature2/Blends/TreeNoLeavesBig.blend1 (100%) rename {client => packages/client}/resources/nature2/Blends/TreeNoLeavesSmall.blend (100%) rename {client => packages/client}/resources/nature2/Blends/TreeNoLeavesSmall.blend1 (100%) rename {client => packages/client}/resources/nature2/Blends/TreeTexture.png (100%) rename {client => packages/client}/resources/nature2/GLTF/Cloud1.glb (100%) rename {client => packages/client}/resources/nature2/GLTF/Cloud2.glb (100%) rename {client => packages/client}/resources/nature2/GLTF/Cloud3.glb (100%) rename {client => packages/client}/resources/nature2/License.txt (100%) rename {client => packages/client}/resources/nature2/OBJ/BigBush.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/BigBush.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/BigTreeWithLeaves.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/BigTreeWithLeaves.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/Cloud1.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/Cloud1.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/Cloud2.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/Cloud2.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/Cloud3.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/Cloud3.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/EveryModel.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/EveryModel.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/SmallBush.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/SmallBush.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/SmallTreeWithLeave.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/SmallTreeWithLeave.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/TreeNoLeavesBig.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/TreeNoLeavesBig.obj (100%) rename {client => packages/client}/resources/nature2/OBJ/TreeNoLeavesSmall.mtl (100%) rename {client => packages/client}/resources/nature2/OBJ/TreeNoLeavesSmall.obj (100%) rename {client => packages/client}/resources/terrain/README.txt (100%) rename {client => packages/client}/resources/terrain/bark1-albedo.jpg (100%) rename {client => packages/client}/resources/terrain/bark1-albedo.png (100%) rename {client => packages/client}/resources/terrain/bark1-normal3.jpg (100%) rename {client => packages/client}/resources/terrain/bark1-normal3.png (100%) rename {client => packages/client}/resources/terrain/dirt_01_diffuse-1024.png (100%) rename {client => packages/client}/resources/terrain/dirt_01_normal-1024.jpg (100%) rename {client => packages/client}/resources/terrain/grass1-albedo-512.jpg (100%) rename {client => packages/client}/resources/terrain/grass1-albedo3-1024.png (100%) rename {client => packages/client}/resources/terrain/grass1-normal-1024.jpg (100%) rename {client => packages/client}/resources/terrain/rock-snow-ice-albedo-1024.png (100%) rename {client => packages/client}/resources/terrain/rock-snow-ice-normal-1024.jpg (100%) rename {client => packages/client}/resources/terrain/rough-wet-cobble-albedo-1024.png (100%) rename {client => packages/client}/resources/terrain/rough-wet-cobble-normal-1024.jpg (100%) rename {client => packages/client}/resources/terrain/sandy-rocks1-albedo-1024.png (100%) rename {client => packages/client}/resources/terrain/sandy-rocks1-normal-1024.jpg (100%) rename {client => packages/client}/resources/terrain/sandyground-albedo-1024.png (100%) rename {client => packages/client}/resources/terrain/sandyground-normal-1024.jpg (100%) rename {client => packages/client}/resources/terrain/simplex-noise.png (100%) rename {client => packages/client}/resources/terrain/snow-packed-albedo-1024.png (100%) rename {client => packages/client}/resources/terrain/snow-packed-normal-1024.jpg (100%) rename {client => packages/client}/resources/terrain/space-negx.jpg (100%) rename {client => packages/client}/resources/terrain/space-negy.jpg (100%) rename {client => packages/client}/resources/terrain/space-negz.jpg (100%) rename {client => packages/client}/resources/terrain/space-posx.jpg (100%) rename {client => packages/client}/resources/terrain/space-posy.jpg (100%) rename {client => packages/client}/resources/terrain/space-posz.jpg (100%) rename {client => packages/client}/resources/terrain/worn-bumpy-rock-albedo-1024.png (100%) rename {client => packages/client}/resources/terrain/worn-bumpy-rock-albedo-512.jpg (100%) rename {client => packages/client}/resources/terrain/worn-bumpy-rock-normal-1024.jpg (100%) rename {client => packages/client}/resources/textures/ball.png (100%) rename {client => packages/client}/resources/textures/fire.png (100%) rename {client => packages/client}/resources/textures/whitePuff14.png (100%) rename {client => packages/client}/resources/trees/Blends/Birch_1.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_10.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_2.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_3.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_4.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_5.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_6.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_7.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_8.blend (100%) rename {client => packages/client}/resources/trees/Blends/Birch_9.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_1.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_10.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_2.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_3.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_4.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_5.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_6.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_7.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_8.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadBirch_9.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_1.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_10.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_2.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_3.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_4.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_5.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_6.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_7.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_8.blend (100%) rename {client => packages/client}/resources/trees/Blends/DeadTree_9.blend (100%) rename {client => packages/client}/resources/trees/Blends/Pine_1.blend (100%) rename {client => packages/client}/resources/trees/Blends/Pine_2.blend (100%) rename {client => packages/client}/resources/trees/Blends/Pine_3.blend (100%) rename {client => packages/client}/resources/trees/Blends/Pine_4.blend (100%) rename {client => packages/client}/resources/trees/Blends/Pine_5.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_1.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_10.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_2.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_3.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_4.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_5.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_6.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_7.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_8.blend (100%) rename {client => packages/client}/resources/trees/Blends/Tree_9.blend (100%) rename {client => packages/client}/resources/trees/FBX/Birch_1.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_10.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_2.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_3.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_4.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_5.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_6.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_7.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_8.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Birch_9.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_1.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_10.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_2.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_3.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_4.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_5.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_6.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_7.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_8.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadBirch_9.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_1.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_10.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_2.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_3.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_4.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_5.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_6.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_7.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_8.fbx (100%) rename {client => packages/client}/resources/trees/FBX/DeadTree_9.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Pine_1.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Pine_2.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Pine_3.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Pine_4.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Pine_5.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_1.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_10.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_2.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_3.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_4.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_5.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_6.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_7.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_8.fbx (100%) rename {client => packages/client}/resources/trees/FBX/Tree_9.fbx (100%) rename {client => packages/client}/resources/trees/License.txt (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_1.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_1.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_10.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_10.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_2.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_2.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_3.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_3.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_4.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_4.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_5.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_5.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_6.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_6.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_7.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_7.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_8.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_8.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_9.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Birch_9.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_1.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_1.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_10.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_10.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_2.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_2.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_3.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_3.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_4.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_4.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_5.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_5.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_6.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_6.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_7.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_7.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_8.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_8.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_9.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadBirch_9.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_1.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_1.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_10.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_10.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_2.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_2.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_3.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_3.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_4.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_4.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_5.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_5.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_6.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_6.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_7.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_7.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_8.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_8.obj (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_9.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/DeadTree_9.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_1.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_1.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_2.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_2.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_3.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_3.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_4.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_4.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_5.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Pine_5.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_1.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_1.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_10.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_10.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_2.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_2.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_3.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_3.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_4.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_4.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_5.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_5.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_6.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_6.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_7.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_7.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_8.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_8.obj (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_9.mtl (100%) rename {client => packages/client}/resources/trees/OBJ/Tree_9.obj (100%) rename {client => packages/client}/resources/trees/Preview.jpg (100%) rename {client => packages/client}/resources/trees/Textures/Birch_Bark.png (100%) rename {client => packages/client}/resources/trees/Textures/Birch_Leaves_Green.png (100%) rename {client => packages/client}/resources/trees/Textures/Birch_Leaves_Yellow.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Bark_Dead.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Leaves_Cyan.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Leaves_DarkRed.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Leaves_Light.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Leaves_Orange.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Leaves_Pink.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Leaves_Purple.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Leaves_Red.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png (100%) rename {client => packages/client}/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png (100%) rename {client => packages/client}/resources/trees/Textures/Leaves_Blue.png (100%) rename {client => packages/client}/resources/trees/Textures/Pine_Leaves.png (100%) rename {client => packages/client}/resources/trees/Textures/Tree_Bark.jpg (100%) rename {client => packages/client}/resources/trees/Textures/Tree_Leaves.png (100%) rename {client => packages/client}/resources/weapons/Blends/Arrow.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Axe.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Axe_Double.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Axe_Small.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Bow_Evil.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Bow_Golden.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Bow_Wooden.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Bow_Wooden2.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Claymore.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Dagger.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Dagger_2.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Hammer_Double.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Hammer_Small.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Scythe.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Shield_Celtic_Golden.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Shield_Heater.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Shield_Heater_2.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Shield_Round.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Shield_Round_2.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Spear.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Sword.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Sword_2.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Sword_Big.blend (100%) rename {client => packages/client}/resources/weapons/Blends/Sword_Golden.blend (100%) rename {client => packages/client}/resources/weapons/FBX/Arrow.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Axe.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Axe_Double.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Axe_Small.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Bow_Evil.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Bow_Golden.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Bow_Wooden.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Bow_Wooden2.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Claymore.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Dagger.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Dagger_2.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Hammer_Double.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Hammer_Small.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Scythe.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Shield_Celtic_Golden.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Shield_Heater.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Shield_Heater_2.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Shield_Round.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Shield_Round_2.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Spear.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Sword.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Sword_2.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Sword_Big.fbx (100%) rename {client => packages/client}/resources/weapons/FBX/Sword_Golden.fbx (100%) rename {client => packages/client}/resources/weapons/License.txt (100%) rename {client => packages/client}/resources/weapons/OBJ/Arrow.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Arrow.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Axe.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Axe.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Axe_Double.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Axe_Double.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Axe_Small.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Axe_Small.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Bow_Evil.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Bow_Evil.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Bow_Golden.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Bow_Golden.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Bow_Wooden.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Bow_Wooden.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Bow_Wooden2.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Bow_Wooden2.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Claymore.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Claymore.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Dagger.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Dagger.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Dagger_2.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Dagger_2.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Hammer_Double.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Hammer_Double.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Hammer_Small.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Hammer_Small.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Scythe.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Scythe.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Celtic_Golden.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Celtic_Golden.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Heater.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Heater.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Heater_2.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Heater_2.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Round.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Round.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Round_2.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Shield_Round_2.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Spear.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Spear.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Sword.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Sword.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Sword_2.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Sword_2.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Sword_Big.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Sword_Big.obj (100%) rename {client => packages/client}/resources/weapons/OBJ/Sword_Golden.mtl (100%) rename {client => packages/client}/resources/weapons/OBJ/Sword_Golden.obj (100%) rename {client => packages/client}/resources/weapons/Preview.png (100%) rename {client => packages/client}/src/attacker-controller.ts (77%) create mode 100644 packages/client/src/blood-effect.ts rename {client => packages/client}/src/entity.ts (100%) rename {client => packages/client}/src/equip-weapon-component.ts (92%) rename {client => packages/client}/src/finite-state-machine.ts (100%) rename {client => packages/client}/src/floating-name.ts (93%) create mode 100644 packages/client/src/gltf-component.ts rename {client => packages/client}/src/health-bar.ts (94%) create mode 100644 packages/client/src/health-component.ts rename {client => packages/client}/src/index.ts (95%) rename {client => packages/client}/src/inventory-controller.ts (93%) rename {client => packages/client}/src/level-up-component.ts (100%) create mode 100644 packages/client/src/load-controller.ts rename {client => packages/client}/src/loading-manager.ts (100%) rename {client => packages/client}/src/main.ts (82%) rename {client => packages/client}/src/network-controller.ts (97%) rename {client => packages/client}/src/network-entity-controller.ts (97%) rename {client => packages/client}/src/network-player-controller.ts (95%) create mode 100644 packages/client/src/npc-entity.ts rename {client => packages/client}/src/particle-system.ts (100%) rename {client => packages/client}/src/player-entity.ts (97%) rename {client => packages/client}/src/player-input.ts (97%) rename {client => packages/client}/src/player-state.ts (98%) rename {client => packages/client}/src/quadtree.ts (100%) create mode 100644 packages/client/src/quest-component.ts rename {client => packages/client}/src/render-component.ts (96%) rename {client => packages/client}/src/scenery-controller.ts (97%) rename {client => packages/client}/src/sorceror-effect.ts (97%) rename {client => packages/client}/src/spatial-grid-controller.ts (100%) rename {client => packages/client}/src/spawners.ts (95%) rename {client => packages/client}/src/terrain-builder-threaded-worker.ts (97%) rename {client => packages/client}/src/terrain-builder-threaded.ts (99%) rename {client => packages/client}/src/terrain-builder.ts (99%) rename {client => packages/client}/src/terrain-chunk.ts (99%) rename {client => packages/client}/src/terrain-shader.ts (98%) create mode 100644 packages/client/src/terrain.ts create mode 100644 packages/client/src/test.ts create mode 100644 packages/client/src/texture-splatter.ts create mode 100644 packages/client/src/textures.ts create mode 100644 packages/client/src/third-person-camera.ts create mode 100644 packages/client/src/threejs_component.ts rename {client => packages/client}/src/ui-controller.ts (94%) rename {client => packages/client}/src/utils.ts (100%) rename {client => packages/client}/styles/base.css (100%) rename {client => packages/client}/tsconfig.json (56%) rename {server => packages/server}/dist/index.js (100%) rename {server => packages/server}/dist/scripts/login-queue.js (100%) rename {server => packages/server}/dist/scripts/world-client.js (100%) rename {server => packages/server}/dist/scripts/world-entity.js (100%) rename {server => packages/server}/dist/scripts/world-manager.js (100%) rename {server => packages/server}/dist/scripts/world-server.js (100%) rename {server => packages/server}/package-lock.json (100%) rename {server => packages/server}/package.json (100%) rename {server => packages/server}/src/index.ts (100%) rename {server => packages/server}/src/scripts/login-queue.ts (90%) rename {server => packages/server}/src/scripts/world-client.ts (91%) rename {server => packages/server}/src/scripts/world-entity.ts (96%) rename {server => packages/server}/src/scripts/world-manager.ts (96%) rename {server => packages/server}/src/scripts/world-server.ts (97%) rename {server => packages/server}/tsconfig.json (57%) rename {shared => packages/shared}/package.json (87%) rename {shared => packages/shared}/src/OrbitControls.ts (100%) rename {shared => packages/shared}/src/constants.ts (98%) create mode 100644 packages/shared/src/dat.gui.module.ts rename {shared => packages/shared}/src/defs.ts (100%) rename {shared => packages/shared}/src/entity-manager.ts (100%) rename {shared => packages/shared}/src/globaltypes.ts (100%) create mode 100644 packages/shared/src/index.ts create mode 100644 packages/shared/src/math.ts rename {shared => packages/shared}/src/noise.ts (100%) rename {shared => packages/shared}/src/simplex-noise.ts (100%) rename {shared => packages/shared}/src/spatial-hash-grid.ts (95%) rename {shared => packages/shared}/src/spline.ts (100%) rename {shared => packages/shared}/src/terrain-constants.ts (100%) rename {shared => packages/shared}/src/terrain-height.ts (100%) rename {shared => packages/shared}/tsconfig.json (66%) rename {shared => packages/shared}/tsconfig.tsbuildinfo (100%) delete mode 100644 shared/dist/OrbitControls.d.ts delete mode 100644 shared/dist/OrbitControls.d.ts.map delete mode 100644 shared/dist/OrbitControls.js delete mode 100644 shared/dist/OrbitControls.js.map delete mode 100644 shared/dist/constants.d.ts delete mode 100644 shared/dist/constants.d.ts.map delete mode 100644 shared/dist/constants.js delete mode 100644 shared/dist/constants.js.map delete mode 100644 shared/dist/defs.d.ts delete mode 100644 shared/dist/defs.d.ts.map delete mode 100644 shared/dist/defs.js delete mode 100644 shared/dist/defs.js.map delete mode 100644 shared/dist/entity-manager.d.ts delete mode 100644 shared/dist/entity-manager.d.ts.map delete mode 100644 shared/dist/entity-manager.js delete mode 100644 shared/dist/entity-manager.js.map delete mode 100644 shared/dist/globaltypes.d.ts delete mode 100644 shared/dist/globaltypes.d.ts.map delete mode 100644 shared/dist/globaltypes.js delete mode 100644 shared/dist/globaltypes.js.map delete mode 100644 shared/dist/index.d.ts delete mode 100644 shared/dist/index.d.ts.map delete mode 100644 shared/dist/index.js delete mode 100644 shared/dist/index.js.map delete mode 100644 shared/dist/math.d.ts delete mode 100644 shared/dist/math.d.ts.map delete mode 100644 shared/dist/math.js delete mode 100644 shared/dist/math.js.map delete mode 100644 shared/dist/noise.d.ts delete mode 100644 shared/dist/noise.d.ts.map delete mode 100644 shared/dist/noise.js delete mode 100644 shared/dist/noise.js.map delete mode 100644 shared/dist/simplex-noise.d.ts delete mode 100644 shared/dist/simplex-noise.d.ts.map delete mode 100644 shared/dist/simplex-noise.js delete mode 100644 shared/dist/simplex-noise.js.map delete mode 100644 shared/dist/spatial-hash-grid.d.ts delete mode 100644 shared/dist/spatial-hash-grid.d.ts.map delete mode 100644 shared/dist/spatial-hash-grid.js delete mode 100644 shared/dist/spatial-hash-grid.js.map delete mode 100644 shared/dist/spline.d.ts delete mode 100644 shared/dist/spline.d.ts.map delete mode 100644 shared/dist/spline.js delete mode 100644 shared/dist/spline.js.map delete mode 100644 shared/dist/terrain-constants.d.ts delete mode 100644 shared/dist/terrain-constants.d.ts.map delete mode 100644 shared/dist/terrain-constants.js delete mode 100644 shared/dist/terrain-constants.js.map delete mode 100644 shared/dist/terrain-height.d.ts delete mode 100644 shared/dist/terrain-height.d.ts.map delete mode 100644 shared/dist/terrain-height.js delete mode 100644 shared/dist/terrain-height.js.map delete mode 100644 shared/src/index.ts delete mode 100644 shared/src/math.ts create mode 100644 yarn-error.log diff --git a/client/package.json b/client/package.json deleted file mode 100644 index 3e6c3feb..00000000 --- a/client/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "client", - "version": "0.0.1", - "devDependencies": { - "cross-env": "^5.0.5", - "nodemon": "^2.0.7", - "tsc-watch": "^4.2.9" - }, - "dependencies": { - "socket.io-client": "^4.0.0", - "three": "^0.124", - "typescript": "^4.2.3" - } -} diff --git a/client/src/blood-effect.ts b/client/src/blood-effect.ts deleted file mode 100644 index dd36e04f..00000000 --- a/client/src/blood-effect.ts +++ /dev/null @@ -1,241 +0,0 @@ -import * as THREE from 'three'; - -import { ParticleEmitter, ParticleSystem } from "./particle-system"; -import { Component } from "./entity"; -import { CLASS_TYPES_ENUM, EVENT_TYPES, STATE_TYPES } from 'shared/src/constants'; - class BloodEffectEmitter extends ParticleEmitter { - parent_: any; - blend_: number; - emitterLife_: number; - alphaSpline_: any; - colourSpline_: any; - sizeSpline_: any; - constructor(parent) { - super(); - this.parent_ = parent; - this.blend_ = 0.0; - } - - OnUpdate_() { - this.parent_.updateMatrixWorld(true); - - this.SetEmissionRate(300.0 * (this.emitterLife_ / 3.0)); - } - - CreateParticle_() { - const origin = new THREE.Vector3(0, 0, 0); - this.parent_.localToWorld(origin); - - const radius = 1.0; - const life = (Math.random() * 0.75 + 0.25) * 0.5; - const p = new THREE.Vector3( - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius); - - const d = p.clone().normalize(); - p.copy(d); - p.multiplyScalar(radius); - p.add(origin); - d.multiplyScalar(0.0); - - return { - position: p, - size: (Math.random() * 0.5 + 0.5) * 1.0, - colour: new THREE.Color(), - alpha: 1.0, - life: life, - maxLife: life, - rotation: Math.random() * 2.0 * Math.PI, - velocity: d, - blend: this.blend_, - }; - } - }; - - - class FireFXEmitter extends ParticleEmitter { - parent_: any; - blend_: number; - particles_: any; - alphaSpline_: any; - colourSpline_: any; - sizeSpline_: any; - constructor(parent) { - super(); - this.parent_ = parent; - this.blend_ = 0.0; - } - - OnUpdate_() { - this.parent_.updateMatrixWorld(true); - } - - AddParticles(num) { - for (let i = 0; i < num; ++i) { - this.particles_.push(this.CreateParticle_()); - } - } - - CreateParticle_() { - const origin = new THREE.Vector3(0, 0, 0); - this.parent_.localToWorld(origin); - - const radius = 1.0; - const life = (Math.random() * 0.75 + 0.25) * 1.5; - const p = new THREE.Vector3( - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius, - (Math.random() * 2 - 1) * radius); - - const d = p.clone().normalize(); - p.copy(d); - p.multiplyScalar(radius); - p.add(origin); - d.multiplyScalar(3.0); - - return { - position: p, - size: (Math.random() * 0.5 + 0.5) * 1.0, - colour: new THREE.Color(), - alpha: 1.0, - life: life, - maxLife: life, - rotation: Math.random() * 2.0 * Math.PI, - velocity: d, - blend: this.blend_, - }; - } - }; - - - class BloodEffect extends Component { - params_: any; - bloodFX_: ParticleSystem; - fireFX_: ParticleSystem; - bones_: any; - constructor(params) { - super(); - this.params_ = params; - - this.bloodFX_ = new ParticleSystem({ - camera: params.camera, - parent: params.scene, - texture: './resources/textures/whitePuff14.png', - }); - this.fireFX_ = new ParticleSystem({ - camera: params.camera, - parent: params.scene, - texture: './resources/textures/fire.png', - }); - } - - Destroy() { - this.bloodFX_.Destroy(); - this.fireFX_.Destroy(); - } - - InitComponent() { - this._RegisterHandler(EVENT_TYPES.EVENTS_NETWORK, (m) => { this.OnEvents_(m); }); - this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); - } - - OnCharacterLoaded_(msg) { - this.bones_ = msg.bones; - } - - OnEvents_(msg) { - if (!this.bones_) { - return; - } - - for (let e of msg.value) { - if (e.type != STATE_TYPES.ATTACK) { - continue; - } - - // Another hack - const hc = e.attacker.GetComponent('HealthComponent'); - - if (hc.stats_.desc.character.class != CLASS_TYPES_ENUM.SORCEROR) { - this.EmitBloodFX_(); - } else { - this.EmitFireFX_(); - } - } - } - - EmitFireFX_() { - // dem hips - const targets = ['Head', 'Hips']; - for (let t of targets) { - const b = this.bones_[t]; - let emitter = new FireFXEmitter(b); - emitter.alphaSpline_.AddPoint(0.0, 0.0); - emitter.alphaSpline_.AddPoint(0.5, 1.0); - emitter.alphaSpline_.AddPoint(1.0, 0.0); - - emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x00FF00)); - emitter.colourSpline_.AddPoint(0.3, new THREE.Color(0x00FF00)); - emitter.colourSpline_.AddPoint(0.4, new THREE.Color(0xdeec42)); - emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0xf4a776)); - - emitter.sizeSpline_.AddPoint(0.0, 0.5); - emitter.sizeSpline_.AddPoint(0.5, 3.0); - emitter.sizeSpline_.AddPoint(1.0, 0.5); - emitter.blend_ = 0.0; - emitter.AddParticles(200); - - this.fireFX_.AddEmitter(emitter); - - emitter = new FireFXEmitter(b); - emitter.alphaSpline_.AddPoint(0.0, 0.0); - emitter.alphaSpline_.AddPoint(0.7, 1.0); - emitter.alphaSpline_.AddPoint(1.0, 0.0); - - emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x000000)); - emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x000000)); - - emitter.sizeSpline_.AddPoint(0.0, 0.5); - emitter.sizeSpline_.AddPoint(0.5, 4.0); - emitter.sizeSpline_.AddPoint(1.0, 10.0); - emitter.blend_ = 1.0; - emitter.AddParticles(100); - - this.fireFX_.AddEmitter(emitter); - } - } - - EmitBloodFX_() { - // hack shoudl check if this was legit anything else than damage - const targets = ['Head', 'Hips']; - for (let t of targets) { - const b = this.bones_[t]; - const emitter = new BloodEffectEmitter(b); - emitter.alphaSpline_.AddPoint(0.0, 0.0); - emitter.alphaSpline_.AddPoint(0.7, 1.0); - emitter.alphaSpline_.AddPoint(1.0, 0.0); - - emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0xbb2909)); - emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x701a08)); - - emitter.sizeSpline_.AddPoint(0.0, 0.5); - emitter.sizeSpline_.AddPoint(0.5, 1.0); - emitter.sizeSpline_.AddPoint(1.0, 0.5); - emitter.SetLife(0.5); - emitter.SetEmissionRate(500); - emitter.blend_ = 1.0; - - this.bloodFX_.AddEmitter(emitter); - } - } - - Update(timeElapsed) { - this.bloodFX_.Update(timeElapsed); - this.fireFX_.Update(timeElapsed); - } - } - - - -export {BloodEffect, FireFXEmitter, BloodEffectEmitter} \ No newline at end of file diff --git a/client/src/gltf-component.ts b/client/src/gltf-component.ts deleted file mode 100644 index bfa59625..00000000 --- a/client/src/gltf-component.ts +++ /dev/null @@ -1,243 +0,0 @@ -import * as THREE from 'three'; - -import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader'; -import {FBXLoader} from 'three/examples/jsm/loaders/FBXLoader'; - -import {Component} from './entity'; -import { EVENT_TYPES } from 'shared/src/constants'; - - -export const gltf_component = (() => { - - class StaticModelComponent extends Component { - _params: any; - _target: any; - constructor(params) { - super(); - this._Init(params); - } - - _Init(params) { - this._params = params; - - this._LoadModels(); - } - - InitComponent() { - this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); - } - - _OnPosition(m) { - if (this._target) { - this._target.position.copy(m.value); - } - } - - _LoadModels() { - if (this._params.resourceName.endsWith('glb') || this._params.resourceName.endsWith('gltf')) { - this._LoadGLB(); - } else if (this._params.resourceName.endsWith('fbx')) { - this._LoadFBX(); - } - } - - _OnLoaded(obj) { - this._target = obj; - this._params.scene.add(this._target); - - this._target.scale.setScalar(this._params.scale); - this._target.position.copy(this.parent_._position); - - let texture = null; - if (this._params.resourceTexture) { - const texLoader = new THREE.TextureLoader(); - texture = texLoader.load(this._params.resourceTexture); - texture.encoding = THREE.sRGBEncoding; - } - - this._target.traverse(c => { - let materials = c.material; - if (!(c.material instanceof Array)) { - materials = [c.material]; - } - - for (let m of materials) { - if (m) { - if (texture) { - m.map = texture; - } - if (this._params.specular) { - m.specular = this._params.specular; - } - if (this._params.emissive) { - m.emissive = this._params.emissive; - } - } - } - if (this._params.receiveShadow != undefined) { - c.receiveShadow = this._params.receiveShadow; - } - if (this._params.castShadow != undefined) { - c.castShadow = this._params.castShadow; - } - if (this._params.visible != undefined) { - c.visible = this._params.visible; - } - }); - } - - _LoadGLB() { - const loader = new GLTFLoader(); - loader.setPath(this._params.resourcePath); - loader.load(this._params.resourceName, (glb) => { - this._OnLoaded(glb.scene); - }); - } - - _LoadFBX() { - const loader = new FBXLoader(); - loader.setPath(this._params.resourcePath); - loader.load(this._params.resourceName, (fbx) => { - this._OnLoaded(fbx); - }); - } - - Update(timeInSeconds) { - } - }; - - - class AnimatedModelComponent extends Component { - _target: any; - _params: any; - _parent: any; - _mixer: any; - constructor(params) { - super(); - this._Init(params); - } - - InitComponent() { - this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); - } - - _OnPosition(m) { - if (this._target) { - this._target.position.copy(m.value); - this._target.position.y = 0.35; - } - } - - _Init(params) { - this._params = params; - - this._LoadModels(); - } - - _LoadModels() { - if (this._params.resourceName.endsWith('glb') || this._params.resourceName.endsWith('gltf')) { - this._LoadGLB(); - } else if (this._params.resourceName.endsWith('fbx')) { - this._LoadFBX(); - } - } - - _OnLoaded(obj, animations) { - this._target = obj; - this._params.scene.add(this._target); - - this._target.scale.setScalar(this._params.scale); - this._target.position.copy(this._parent._position); - - this.Broadcast({ - topic: 'update.position', - value: this._parent._position, - }); - - let texture = null; - if (this._params.resourceTexture) { - const texLoader = new THREE.TextureLoader(); - texture = texLoader.load(this._params.resourceTexture); - texture.encoding = THREE.sRGBEncoding; - } - - this._target.traverse(c => { - let materials = c.material; - if (!(c.material instanceof Array)) { - materials = [c.material]; - } - - for (let m of materials) { - if (m) { - if (texture) { - m.map = texture; - } - if (this._params.specular) { - m.specular = this._params.specular; - } - if (this._params.emissive) { - m.emissive = this._params.emissive; - } - } - } - if (this._params.receiveShadow != undefined) { - c.receiveShadow = this._params.receiveShadow; - } - if (this._params.castShadow != undefined) { - c.castShadow = this._params.castShadow; - } - if (this._params.visible != undefined) { - c.visible = this._params.visible; - } - }); - - const _OnLoad = (anim) => { - const clip = anim.animations[0]; - const action = this._mixer.clipAction(clip); - - action.play(); - }; - - const loader = new FBXLoader(); - loader.setPath(this._params.resourcePath); - loader.load(this._params.resourceAnimation, (a) => { _OnLoad(a); }); - - this._mixer = new THREE.AnimationMixer(this._target); - - this._parent._mesh = this._target; - this.Broadcast({ - topic: EVENT_TYPES.LOAD_CHARACTER, - model: this._target, - }); - } - - _LoadGLB() { - const loader = new GLTFLoader(); - loader.setPath(this._params.resourcePath); - loader.load(this._params.resourceName, (glb) => { - this._OnLoaded(glb.scene, glb.animations); - }); - } - - _LoadFBX() { - const loader = new FBXLoader(); - loader.setPath(this._params.resourcePath); - loader.load(this._params.resourceName, (fbx) => { - this._OnLoaded(fbx, null); - }); - } - - Update(timeInSeconds) { - if (this._mixer) { - this._mixer.update(timeInSeconds); - } - } - }; - - - return { - StaticModelComponent: StaticModelComponent, - AnimatedModelComponent: AnimatedModelComponent, - }; - -})(); \ No newline at end of file diff --git a/client/src/health-component.ts b/client/src/health-component.ts deleted file mode 100644 index 92941ea3..00000000 --- a/client/src/health-component.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } from "shared/src/constants"; -import { Component } from "./entity"; - - class HealthComponent extends Component { - stats_: { - level: number, - updateUI: boolean, - health: number, - maxHealth: number, - strength: number, - wisdomness: number, - benchpress: number, - curl: number, - experience: number, - - }; - constructor(params) { - super(); - this.stats_ = params; - } - - InitComponent() { - this._RegisterHandler( - EVENT_TYPES.HEALTH_DAMAGE, (m) => this.OnDamage_(m)); - this._RegisterHandler( - EVENT_TYPES.STATS_NETWORK, (m) => this.OnNetworkUpdate_(m)); - this._RegisterHandler( - EVENT_TYPES.HEALTH_ADD_EXPERIENCE, (m) => this.OnAddExperience_(m)); - - this.UpdateUI_(); - } - - IsAlive() { - return this.stats_.health > 0; - } - - get Health() { - return this.stats_.health; - } - - UpdateUI_() { - if (!this.stats_.updateUI) { - return; - } - - const bar = document.getElementById(DOM_IDS.HEALTH_BAR); - - const healthAsPercentage = this.stats_.health / this.stats_.maxHealth; - bar.style.width = Math.floor(200 * healthAsPercentage) + 'px'; - - document.getElementById(DOM_IDS.STATS_STRENGTH).innerText = this.stats_.strength?.toString?.(); - document.getElementById(DOM_IDS.STATS_WISDOMNESS).innerText = this.stats_.wisdomness?.toString?.(); - document.getElementById(DOM_IDS.STATS_BENCHPRESS).innerText = this.stats_.benchpress?.toString?.(); - document.getElementById(DOM_IDS.STATS_CURL).innerText = this.stats_.curl?.toString?.(); - document.getElementById(DOM_IDS.STATS_EXPERIENCE).innerText = this.stats_.experience?.toString?.(); - } - - _ComputeLevelXPRequirement() { - const level = this.stats_.level; - // Blah just something easy - const xpRequired = Math.round(2 ** (level - 1) * 100); - return xpRequired; - } - - OnAddExperience_(msg) { - this.stats_.experience += msg.value; - const requiredExperience = this._ComputeLevelXPRequirement(); - if (this.stats_.experience < requiredExperience) { - return; - } - - this.stats_.level += 1; - this.stats_.strength += 1; - this.stats_.wisdomness += 1; - this.stats_.benchpress += 1; - this.stats_.curl += 2; - - const spawner = this.FindEntity( - KNOWN_ENTITIES.LEVEL_UP_SPAWNER).GetComponent(NAMED_COMPONENTS.LEVEL_UP_SPAWNER); - spawner.Spawn(this.Parent.Position); - - this.Broadcast({ - topic: EVENT_TYPES.HEALTH_LEVEL, - value: this.stats_.level, - }); - - this.UpdateUI_(); - } - - _OnDeath() { - this.Broadcast({ - topic: EVENT_TYPES.HEALTH_DEATH, - }); - } - - OnHealthChanged_() { - if (this.stats_.health == 0) { - this._OnDeath(); - } - - this.Broadcast({ - topic: EVENT_TYPES.HEALTH_UPDATE, - health: this.stats_.health, - maxHealth: this.stats_.maxHealth, - }); - - this.UpdateUI_(); - } - - - OnNetworkUpdate_(msg) { - const newStats = msg.value[1]; - for (let k in newStats) { - this.stats_[k] = newStats[k]; - } - - this.OnHealthChanged_(); - } - - OnDamage_(msg: {value: number}) { - this.stats_.health = Math.max(0.0, this.stats_.health - msg.value); - - this.OnHealthChanged_(); - } - }; - -export { - HealthComponent -} \ No newline at end of file diff --git a/client/src/load-controller.ts b/client/src/load-controller.ts deleted file mode 100644 index 1b051c72..00000000 --- a/client/src/load-controller.ts +++ /dev/null @@ -1,109 +0,0 @@ -import * as THREE from 'three'; - - - -import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader'; -import {FBXLoader} from 'three/examples/jsm/loaders/FBXLoader'; -import {SkeletonUtils} from 'three/examples/jsm/utils/SkeletonUtils.js'; - -import { Component } from "./entity"; - - -export const load_controller = (() => { - - class LoadController extends Component { - textures_: {}; - models_: {}; - constructor() { - super(); - - this.textures_ = {}; - this.models_ = {}; - } - - LoadTexture(path, name) { - if (!(name in this.textures_)) { - const loader = new THREE.TextureLoader(); - loader.setPath(path); - - this.textures_[name] = {loader: loader, texture: loader.load(name)}; - this.textures_[name].encoding = THREE.sRGBEncoding; - } - - return this.textures_[name].texture; - } - - LoadFBX(path, name, onLoad) { - if (!(name in this.models_)) { - const loader = new FBXLoader(); - loader.setPath(path); - - this.models_[name] = {loader: loader, asset: null, queue: [onLoad]}; - this.models_[name].loader.load(name, (fbx) => { - this.models_[name].asset = fbx; - - const queue = this.models_[name].queue; - this.models_[name].queue = null; - for (let q of queue) { - const clone = this.models_[name].asset.clone(); - q(clone); - } - }); - } else if (this.models_[name].asset == null) { - this.models_[name].queue.push(onLoad); - } else { - const clone = this.models_[name].asset.clone(); - onLoad(clone); - } - } - - LoadSkinnedGLB(path, name, onLoad) { - if (!(name in this.models_)) { - const loader = new GLTFLoader(); - loader.setPath(path); - - this.models_[name] = {loader: loader, asset: null, queue: [onLoad]}; - this.models_[name].loader.load(name, (glb) => { - this.models_[name].asset = glb; - - glb.scene.traverse(c => { - // HAHAHAH - c.frustumCulled = false; - // Apparently this doesn't work, so just disable frustum culling. - // Bugs... so many bugs... - - // if (c.geometry) { - // // Just make our own, super crappy, super big box - // c.geometry.boundingBox = new THREE.Box3( - // new THREE.Vector3(-50, -50, -50), - // new THREE.Vector3(50, 50, 50)); - // c.geometry.boundingSphere = new THREE.Sphere(); - // c.geometry.boundingBox.getBoundingSphere(c.geometry.boundingSphere); - // } - }); - - const queue = this.models_[name].queue; - this.models_[name].queue = null; - for (let q of queue) { - const clone = {...glb}; - clone.scene = SkeletonUtils.clone(clone.scene); - - q(clone); - } - }); - } else if (this.models_[name].asset == null) { - this.models_[name].queue.push(onLoad); - } else { - const clone = {...this.models_[name].asset}; - clone.scene = SkeletonUtils.clone(clone.scene); - - onLoad(clone); - } - - } - } - - return { - LoadController: LoadController, - }; -})(); \ No newline at end of file diff --git a/client/src/npc-entity.ts b/client/src/npc-entity.ts deleted file mode 100644 index 2b82b9c5..00000000 --- a/client/src/npc-entity.ts +++ /dev/null @@ -1,179 +0,0 @@ -import * as THREE from 'three'; - -import { Component } from './entity'; -import {CharacterFSM, BasicCharacterControllerProxy} from './player-entity' -import {CHARACTER_MODELS} from 'shared/src/defs'; -import { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, STATE_TYPES } from 'shared/src/constants'; - - class NPCController extends Component { - params_: any; - group_: any; - animations_: {}; - queuedState_: any; - stateMachine_: any; - target_: any; - bones_: {}; - mixer_: THREE.AnimationMixer; - constructor(params) { - super(); - this.params_ = params; - } - - Destroy() { - this.group_.traverse(c => { - if (c.material) { - let materials = c.material; - if (!(c.material instanceof Array)) { - materials = [c.material]; - } - for (let m of materials) { - m.dispose(); - } - } - - if (c.geometry) { - c.geometry.dispose(); - } - }); - this.params_.scene.remove(this.group_); - } - - InitEntity() { - this._Init(); - } - - _Init() { - this.animations_ = {}; - this.group_ = new THREE.Group(); - - this.params_.scene.add(this.group_); - this.queuedState_ = null; - - this.LoadModels_(); - } - - InitComponent() { - this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); - this._RegisterHandler('update.position', (m) => { this.OnPosition_(m); }); - this._RegisterHandler('update.rotation', (m) => { this.OnRotation_(m); }); - } - - SetState(s) { - if (!this.stateMachine_) { - this.queuedState_ = s; - return; - } - - // hack: should propogate attacks through the events on server - // Right now, they're inferred from whatever animation we're running, blech - if (s == STATE_TYPES.ATTACK && this.stateMachine_._currentState.Name != STATE_TYPES.ATTACK) { - this.Broadcast({ - topic: EVENT_TYPES.ACTION_ATTACK, - }); - } - - this.stateMachine_.SetState(s); - } - - OnDeath_(msg) { - this.SetState(STATE_TYPES.DEATH); - } - - OnPosition_(m) { - this.group_.position.copy(m.value); - } - - OnRotation_(m) { - this.group_.quaternion.copy(m.value); - } - - LoadModels_() { - const classType = this.params_.desc.character.class; - const modelData = CHARACTER_MODELS[classType]; - - const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); - loader.LoadSkinnedGLB(modelData.path, modelData.base, (glb) => { - this.target_ = glb.scene; - this.target_.scale.setScalar(modelData.scale); - this.target_.visible = false; - - this.group_.add(this.target_); - - this.bones_ = {}; - this.target_.traverse(c => { - if (!c.skeleton) { - return; - } - for (let b of c.skeleton.bones) { - this.bones_[b.name] = b; - } - }); - - this.target_.traverse(c => { - c.castShadow = true; - c.receiveShadow = true; - if (c.material && c.material.map) { - c.material.map.encoding = THREE.sRGBEncoding; - } - }); - - this.mixer_ = new THREE.AnimationMixer(this.target_); - - - const _FindAnim = (animName) => { - for (let i = 0; i < glb.animations.length; i++) { - if (glb.animations[i].name.includes(animName)) { - const clip = glb.animations[i]; - const action = this.mixer_.clipAction(clip); - return { - clip: clip, - action: action - } - } - } - return null; - }; - - this.animations_[STATE_TYPES.IDLE] = _FindAnim(ANIM_TYPES.IDLE); - this.animations_[STATE_TYPES.WALK] = _FindAnim(ANIM_TYPES.WALK) - this.animations_[STATE_TYPES.RUN] = _FindAnim(ANIM_TYPES.RUN) - this.animations_[STATE_TYPES.DEATH] = _FindAnim(ANIM_TYPES.DEATH); - this.animations_[STATE_TYPES.ATTACK] = _FindAnim(ANIM_TYPES.ATTACK); - this.animations_[STATE_TYPES.DANCE] = _FindAnim(ANIM_TYPES.DANCE); - - this.target_.visible = true; - - this.stateMachine_ = new CharacterFSM( - new BasicCharacterControllerProxy(this.animations_)); - - if (this.queuedState_) { - this.stateMachine_.SetState(this.queuedState_) - this.queuedState_ = null; - } else { - this.stateMachine_.SetState(STATE_TYPES.IDLE); - } - - this.Broadcast({ - topic: EVENT_TYPES.LOAD_CHARACTER, - model: this.group_, - bones: this.bones_, - }); - }); - } - - Update(timeInSeconds) { - if (!this.stateMachine_) { - return; - } - this.stateMachine_.Update(timeInSeconds, null); - - if (this.mixer_) { - this.mixer_.update(timeInSeconds); - } - } - }; - - -export { - NPCController -} \ No newline at end of file diff --git a/client/src/quest-component.ts b/client/src/quest-component.ts deleted file mode 100644 index f05429f8..00000000 --- a/client/src/quest-component.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } from "shared/src/constants"; -import { Component } from "./entity"; - - -export const quest_component = (() => { - - const _TITLE = 'Welcome Adventurer!'; - const _TEXT = `Welcome to Honeywood adventurer, I see you're the chosen one and also the dragon born and whatever else, you're going to save the world! Also bring the rings back to mordor and defeat the evil dragon, and all the other things. But first, I must test you with some meaningless bullshit tasks that every rpg makes you do to waste time. Go kill like uh 30 ghosts and collect their eyeballs or something. Also go get my drycleaning and pick up my kids from daycare.`; - - class QuestComponent extends Component { - constructor() { - super(); - - const e = document.getElementById(DOM_IDS.QUEST_UI); - e.style.visibility = 'hidden'; - } - - InitComponent() { - this._RegisterHandler(EVENT_TYPES.INPUT_PICKED, (m) => this._OnPicked(m)); - } - - _OnPicked(msg) { - // HARDCODE A QUEST - const quest = { - id: 'foo', - title: _TITLE, - text: _TEXT, - }; - this._AddQuestToJournal(quest); - } - - _AddQuestToJournal(quest) { - const ui = this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER); - ui.AddQuest(quest); - } - }; - - return { - QuestComponent: QuestComponent, - }; -})(); \ No newline at end of file diff --git a/client/src/terrain.ts b/client/src/terrain.ts deleted file mode 100644 index 0f548aca..00000000 --- a/client/src/terrain.ts +++ /dev/null @@ -1,291 +0,0 @@ -import * as THREE from 'three'; - -import { Component } from './entity'; -import {quadtree} from './quadtree.js'; -import {terrain_shader} from './terrain-shader.js'; -import {terrain_builder_threaded} from './terrain-builder-threaded.js'; -import {texture_splatter} from './texture-splatter.js'; -import {textures} from './textures.js'; -import {utils} from './utils.js'; - -import {terrain_constants} from '/shared/terrain-constants.mjs'; -import {terrain_height} from '/shared/terrain-height.mjs'; - -import {noise} from 'shared/src/noise'; - - -export const terrain = (function() { - - class TerrainChunkManager extends Component { - constructor(params) { - super(); - this._Init(params); - } - - _Init(params) { - this._params = params; - - const loader = new THREE.TextureLoader(); - - const noiseTexture = loader.load('./resources/terrain/simplex-noise.png'); - noiseTexture.wrapS = THREE.RepeatWrapping; - noiseTexture.wrapT = THREE.RepeatWrapping; - - const diffuse = new textures.TextureAtlas(params); - diffuse.Load('diffuse', [ - './resources/terrain/dirt_01_diffuse-1024.png', - './resources/terrain/grass1-albedo3-1024.png', - './resources/terrain/sandyground-albedo-1024.png', - './resources/terrain/worn-bumpy-rock-albedo-1024.png', - './resources/terrain/rock-snow-ice-albedo-1024.png', - './resources/terrain/snow-packed-albedo-1024.png', - './resources/terrain/rough-wet-cobble-albedo-1024.png', - // './resources/terrain/sandy-rocks1-albedo-1024.png', - './resources/terrain/bark1-albedo.jpg', - ]); - - - const normal = new textures.TextureAtlas(params); - normal.Load('normal', [ - './resources/terrain/dirt_01_normal-1024.jpg', - './resources/terrain/grass1-normal-1024.jpg', - './resources/terrain/sandyground-normal-1024.jpg', - './resources/terrain/worn-bumpy-rock-normal-1024.jpg', - './resources/terrain/rock-snow-ice-normal-1024.jpg', - './resources/terrain/snow-packed-normal-1024.jpg', - './resources/terrain/rough-wet-cobble-normal-1024.jpg', - // './resources/terrain/sandy-rocks1-normal-1024.jpg', - './resources/terrain/bark1-normal3.jpg', - ]); - - this._material = new THREE.MeshStandardMaterial({ - side: THREE.BackSide, - vertexColors: true, - }); - - this._material.onBeforeCompile = (s) => { - let a = 0; - let vsh = s.vertexShader; - vsh = terrain_shader.VS1 + s.vertexShader; - const vi1 = vsh.search('#include '); - vsh = [vsh.slice(0, vi1) + terrain_shader.VS2 + vsh.slice(vi1)].join(''); - s.vertexShader = vsh; - - s.fragmentShader = terrain_shader.PS1 + s.fragmentShader; - const fi1 = s.fragmentShader.search('#include '); - s.fragmentShader = [s.fragmentShader.slice(0, fi1) + terrain_shader.PS2 + s.fragmentShader.slice(fi1)].join(''); - - s.uniforms.TRIPLANAR_normalMap = {value: normal.Info['normal'].atlas}; - s.uniforms.TRIPLANAR_diffuseMap = {value: diffuse.Info['diffuse'].atlas}; - s.uniforms.TRIPLANAR_noiseMap = {value: noiseTexture}; - - diffuse.onLoad = () => { - s.uniforms.TRIPLANAR_diffuseMap.value = diffuse.Info['diffuse'].atlas; - }; - normal.onLoad = () => { - s.uniforms.TRIPLANAR_normalMap.value = normal.Info['normal'].atlas; - }; - - // s.fragmentShader += 'poop'; - }; - - this._builder = new terrain_builder_threaded.TerrainChunkRebuilder_Threaded(); - // this._builder = new terrain_builder.TerrainChunkRebuilder(); - - this._InitNoise(); - this._InitBiomes(params); - this._InitTerrain(params); - } - - _InitNoise() { - this.heightGenerator_ = new terrain_height.HeightGenerator(); - } - - _InitBiomes(params) { - params.guiParams.biomes = { - octaves: 2, - persistence: 0.5, - lacunarity: 2.0, - scale: 1024.0, - noiseType: 'simplex', - seed: 2, - exponentiation: 2, - height: 1.0 - }; - - const onNoiseChanged = () => { - this._builder.Rebuild(this._chunks); - }; - - const noiseRollup = params.gui.addFolder('Terrain.Biomes'); - noiseRollup.add(params.guiParams.biomes, "scale", 64.0, 4096.0).onChange( - onNoiseChanged); - noiseRollup.add(params.guiParams.biomes, "octaves", 1, 20, 1).onChange( - onNoiseChanged); - noiseRollup.add(params.guiParams.biomes, "persistence", 0.01, 1.0).onChange( - onNoiseChanged); - noiseRollup.add(params.guiParams.biomes, "lacunarity", 0.01, 4.0).onChange( - onNoiseChanged); - noiseRollup.add(params.guiParams.biomes, "exponentiation", 0.1, 10.0).onChange( - onNoiseChanged); - - this._biomes = new noise.Noise(params.guiParams.biomes); - this._biomesParams = params.guiParams.biomes; - - const colourParams = { - octaves: 1, - persistence: 0.5, - lacunarity: 2.0, - exponentiation: 1.0, - scale: 256.0, - noiseType: 'simplex', - seed: 2, - height: 1.0, - }; - this._colourNoise = new noise.Noise(colourParams); - this._colourNoiseParams = colourParams; - } - - _InitTerrain(params) { - params.guiParams.terrain= { - wireframe: false, - }; - - this._groups = [...new Array(6)].map(_ => new THREE.Group()); - params.scene.add(...this._groups); - - const terrainRollup = params.gui.addFolder('Terrain'); - terrainRollup.add(params.guiParams.terrain, "wireframe").onChange(() => { - for (let k in this._chunks) { - this._chunks[k].chunk._plane.material.wireframe = params.guiParams.terrain.wireframe; - } - }); - - this._chunks = {}; - this._params = params; - } - - _CreateTerrainChunk(group, groupTransform, offset, width, resolution) { - const params = { - group: group, - transform: groupTransform, - material: this._material, - width: width, - offset: offset, - // origin: this._params.camera.position.clone(), - radius: terrain_constants.PLANET_RADIUS, - resolution: resolution, - biomeGenerator: this._biomes, - colourGenerator: new texture_splatter.TextureSplatter( - {biomeGenerator: this._biomes, colourNoise: this._colourNoise}), - heightGenerators: [this.heightGenerator_], - noiseParams: terrain_constants.NOISE_PARAMS, - colourNoiseParams: this._colourNoiseParams, - biomesParams: this._biomesParams, - colourGeneratorParams: { - biomeGeneratorParams: this._biomesParams, - colourNoiseParams: this._colourNoiseParams, - }, - heightGeneratorsParams: { - min: 100000, - max: 100000 + 1, - } - }; - - return this._builder.AllocateChunk(params); - } - - GetHeight(pos) { - return this.heightGenerator_.Get(pos.x, 0.0, pos.z); - } - - GetBiomeAt(pos) { - return this._biomes.Get(pos.x, 0.0, pos.z); - } - - Update(_) { - const target = this.FindEntity(this._params.target); - if (!target) { - return; - } - - this._builder.Update(); - if (!this._builder.Busy) { - this._UpdateVisibleChunks_Quadtree(target); - } - - for (let k in this._chunks) { - this._chunks[k].chunk.Update(target.Position); - } - for (let c of this._builder._old) { - c.chunk.Update(target.Position); - } - - // this._params.scattering.uniforms.planetRadius.value = terrain_constants.PLANET_RADIUS; - // this._params.scattering.uniforms.atmosphereRadius.value = terrain_constants.PLANET_RADIUS * 1.01; - } - - _UpdateVisibleChunks_Quadtree(target) { - function _Key(c) { - return c.position[0] + '/' + c.position[2] + ' [' + c.size + ']'; - } - - const q = new quadtree.CubeQuadTree({ - radius: terrain_constants.PLANET_RADIUS, - min_node_size: terrain_constants.QT_MIN_CELL_SIZE, - }); - q.Insert(target.Position); - - const sides = q.GetChildren(); - - let newTerrainChunks = {}; - const center = new THREE.Vector3(); - const dimensions = new THREE.Vector3(); - for (let i = 0; i < sides.length; i++) { - for (let c of sides[i].children) { - c.bounds.getCenter(center); - c.bounds.getSize(dimensions); - - const child = { - index: i, - group: this._groups[i], - transform: sides[i].transform, - position: [center.x, center.y, center.z], - bounds: c.bounds, - size: dimensions.x, - }; - - const k = _Key(child); - newTerrainChunks[k] = child; - } - } - - const intersection = utils.DictIntersection(this._chunks, newTerrainChunks); - const difference = utils.DictDifference(newTerrainChunks, this._chunks); - const recycle = Object.values(utils.DictDifference(this._chunks, newTerrainChunks)); - - this._builder.RetireChunks(recycle); - - newTerrainChunks = intersection; - - for (let k in difference) { - const [xp, yp, zp] = difference[k].position; - - const offset = new THREE.Vector3(xp, yp, zp); - newTerrainChunks[k] = { - position: [xp, zp], - chunk: this._CreateTerrainChunk( - difference[k].group, difference[k].transform, - offset, difference[k].size, - terrain_constants.QT_MIN_CELL_RESOLUTION), - }; - } - - this._chunks = newTerrainChunks; - } - } - - return { - TerrainChunkManager: TerrainChunkManager - } -})(); diff --git a/client/src/test.ts b/client/src/test.ts deleted file mode 100644 index 2b935e15..00000000 --- a/client/src/test.ts +++ /dev/null @@ -1,5 +0,0 @@ - - - - -// We got nothing. \ No newline at end of file diff --git a/client/src/texture-splatter.ts b/client/src/texture-splatter.ts deleted file mode 100644 index 11336c1f..00000000 --- a/client/src/texture-splatter.ts +++ /dev/null @@ -1,157 +0,0 @@ -import * as THREE from 'three'; - - -import {math} from 'shared/src/math'; -import {spline} from '/shared/spline.mjs'; -import {terrain_constants} from '/shared/terrain-constants.mjs'; - - -export const texture_splatter = (function() { - - const _HEIGHT_NORMALIZATION = terrain_constants.NOISE_HEIGHT / 10.0; - - const _WHITE = new THREE.Color(0x808080); - - const _DEEP_OCEAN = new THREE.Color(0x20020FF); - const _SHALLOW_OCEAN = new THREE.Color(0x8080FF); - const _BEACH = new THREE.Color(0xd9d592); - const _SNOW = new THREE.Color(0xFFFFFF); - const _FOREST_BOREAL = new THREE.Color(0x29c100); - - const _GREEN = new THREE.Color(0x80FF80); - const _RED = new THREE.Color(0xFF8080); - const _BLACK = new THREE.Color(0x000000); - - - class TextureSplatter { - constructor(params) { - const _colourLerp = (t, p0, p1) => { - const c = p0.clone(); - - return c.lerp(p1, t); - }; - this._colourSpline = [ - new spline.LinearSpline(_colourLerp), - new spline.LinearSpline(_colourLerp) - ]; - - // Arid - this._colourSpline[0].AddPoint(0.0, new THREE.Color(0xb7a67d)); - this._colourSpline[0].AddPoint(0.5, new THREE.Color(0xf1e1bc)); - this._colourSpline[0].AddPoint(1.0, _SNOW); - - // Humid - this._colourSpline[1].AddPoint(0.0, _FOREST_BOREAL); - this._colourSpline[1].AddPoint(0.5, new THREE.Color(0x8a9343)); - this._colourSpline[1].AddPoint(1.0, _SNOW); - // this._colourSpline[1].AddPoint(0.5, new THREE.Color(0x8a9343)); - // this._colourSpline[1].AddPoint(1.0, _SNOW); - - this._oceanSpline = new spline.LinearSpline(_colourLerp); - this._oceanSpline.AddPoint(0, _DEEP_OCEAN); - this._oceanSpline.AddPoint(0.03, _SHALLOW_OCEAN); - this._oceanSpline.AddPoint(0.05, _SHALLOW_OCEAN); - - this._params = params; - } - - _BaseColour(x, y, z) { - const m = this._params.biomeGenerator.Get(x, y, z); - const h = math.sat(z / 100.0); - - const c1 = this._colourSpline[0].Get(h); - const c2 = this._colourSpline[1].Get(h); - - let c = c1.lerp(c2, m); - - if (h < 0.1) { - c = c.lerp(new THREE.Color(0x54380e), 1.0 - math.sat(h / 0.05)); - } - return c; - } - - _Colour(x, y, z) { - const c = this._BaseColour(x, y, z); - const r = this._params.colourNoise.Get(x, y, z) * 2.0 - 1.0; - - c.offsetHSL(0.0, 0.0, r * 0.2); - return c; - } - - _GetTextureWeights(p, n, up) { - const m = this._params.biomeGenerator.Get(p.x, p.y, p.z); - const h = p.z / _HEIGHT_NORMALIZATION; - - const types = { - dirt: {index: 0, strength: 0.0}, - grass: {index: 1, strength: 0.0}, - gravel: {index: 2, strength: 0.0}, - rock: {index: 3, strength: 0.0}, - snow: {index: 4, strength: 0.0}, - snowrock: {index: 5, strength: 0.0}, - cobble: {index: 6, strength: 0.0}, - sandyrock: {index: 7, strength: 0.0}, - }; - - function _ApplyWeights(dst, v, m) { - for (let k in types) { - types[k].strength *= m; - } - types[dst].strength = v; - }; - - types.grass.strength = 1.0; - _ApplyWeights('gravel', 1.0 - m, m); - - if (h < 0.2) { - const s = 1.0 - math.sat((h - 0.1) / 0.05); - _ApplyWeights('cobble', s, 1.0 - s); - - if (h < 0.1) { - const s = 1.0 - math.sat((h - 0.05) / 0.05); - _ApplyWeights('sandyrock', s, 1.0 - s); - } - } else { - if (h > 0.125) { - const s = (math.sat((h - 0.125) / 1.25)); - _ApplyWeights('rock', s, 1.0 - s); - } - - if (h > 1.5) { - const s = math.sat((h - 0.75) / 2.0); - _ApplyWeights('snow', s, 1.0 - s); - } - } - - // In case nothing gets set. - types.dirt.strength = 0.01; - - let total = 0.0; - for (let k in types) { - total += types[k].strength; - } - if (total < 0.01) { - const a = 0; - } - const normalization = 1.0 / total; - - for (let k in types) { - types[k].strength / normalization; - } - - return types; - } - - GetColour(position) { - return this._Colour(position.x, position.y, position.z); - } - - GetSplat(position, normal, up) { - return this._GetTextureWeights(position, normal, up); - } - } - - return { - TextureSplatter: TextureSplatter, - } -})(); diff --git a/client/src/textures.ts b/client/src/textures.ts deleted file mode 100644 index 3fb344de..00000000 --- a/client/src/textures.ts +++ /dev/null @@ -1,91 +0,0 @@ -import * as THREE from 'three'; - - -export const textures = (function() { - - // Taken from https://github.com/mrdoob/three.js/issues/758 - function _GetImageData( image ) { - var canvas = document.createElement('canvas'); - canvas.width = image.width; - canvas.height = image.height; - - var context = canvas.getContext('2d'); - context.drawImage( image, 0, 0 ); - - return context.getImageData( 0, 0, image.width, image.height ); - } - - return { - TextureAtlas: class { - constructor(params) { - this._threejs = params.threejs; - this._Create(); - this.onLoad = () => {}; - } - - Load(atlas, names) { - this._LoadAtlas(atlas, names); - } - - _Create() { - this._manager = new THREE.LoadingManager(); - this._loader = new THREE.TextureLoader(this._manager); - this._textures = {}; - - this._manager.onLoad = () => { - this._OnLoad(); - }; - } - - get Info() { - return this._textures; - } - - _LoadTexture(n) { - const t = this._loader.load(n); - t.encoding = THREE.sRGBEncoding; - return t; - } - - _OnLoad() { - for (let k in this._textures) { - const atlas = this._textures[k]; - const data = new Uint8Array(atlas.textures.length * 4 * 1024 * 1024); - - for (let t = 0; t < atlas.textures.length; t++) { - const curTexture = atlas.textures[t]; - const curData = _GetImageData(curTexture.image); - const offset = t * (4 * 1024 * 1024); - - data.set(curData.data, offset); - } - - const diffuse = new THREE.DataTexture2DArray(data, 1024, 1024, atlas.textures.length); - diffuse.format = THREE.RGBAFormat; - diffuse.type = THREE.UnsignedByteType; - diffuse.minFilter = THREE.LinearMipMapLinearFilter; - diffuse.magFilter = THREE.LinearFilter; - diffuse.wrapS = THREE.RepeatWrapping; - diffuse.wrapT = THREE.RepeatWrapping; - diffuse.generateMipmaps = true; - - const caps = this._threejs.capabilities; - const aniso = caps.getMaxAnisotropy(); - - diffuse.anisotropy = 4; - - atlas.atlas = diffuse; - } - - this.onLoad(); - } - - _LoadAtlas(atlas, names) { - this._textures[atlas] = { - textures: names.map(n => this._LoadTexture(n) ), - atlas: null, - }; - } - } - }; -})(); diff --git a/client/src/third-person-camera.ts b/client/src/third-person-camera.ts deleted file mode 100644 index 03b217ae..00000000 --- a/client/src/third-person-camera.ts +++ /dev/null @@ -1,56 +0,0 @@ -import * as THREE from 'three'; -import { Component } from './entity'; - - -export const third_person_camera = (() => { - - class ThirdPersonCamera extends Component { - constructor(params) { - super(); - - this._params = params; - this._camera = params.camera; - - this._currentPosition = new THREE.Vector3(); - this._currentLookat = new THREE.Vector3(); - } - - _CalculateIdealOffset() { - const idealOffset = new THREE.Vector3(-0, 10, -15); - idealOffset.applyQuaternion(this._params.target._rotation); - idealOffset.add(this._params.target._position); - - const terrain = this.FindEntity(KNOWN_ENTITIES.TERRAIN).GetComponent('TerrainChunkManager'); - idealOffset.y = Math.max(idealOffset.y, terrain.GetHeight(idealOffset)[0] + 5.0); - - return idealOffset; - } - - _CalculateIdealLookat() { - const idealLookat = new THREE.Vector3(0, 5, 20); - idealLookat.applyQuaternion(this._params.target._rotation); - idealLookat.add(this._params.target._position); - return idealLookat; - } - - Update(timeElapsed) { - const idealOffset = this._CalculateIdealOffset(); - const idealLookat = this._CalculateIdealLookat(); - - // const t = 0.05; - // const t = 4.0 * timeElapsed; - const t = 1.0 - Math.pow(0.01, timeElapsed); - - this._currentPosition.lerp(idealOffset, t); - this._currentLookat.lerp(idealLookat, t); - - this._camera.position.copy(this._currentPosition); - this._camera.lookAt(this._currentLookat); - } - } - - return { - ThirdPersonCamera: ThirdPersonCamera - }; - -})(); \ No newline at end of file diff --git a/client/src/threejs_component.ts b/client/src/threejs_component.ts deleted file mode 100644 index b374c740..00000000 --- a/client/src/threejs_component.ts +++ /dev/null @@ -1,193 +0,0 @@ -import * as THREE from 'three'; - -import { Component } from "./entity"; - -export const threejs_component = (() => { - - - const _VS = ` - varying vec3 vWorldPosition; - - void main() { - vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); - vWorldPosition = worldPosition.xyz; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`; - - - const _FS = ` - uniform vec3 topColor; - uniform vec3 bottomColor; - uniform float offset; - uniform float exponent; - uniform samplerCube background; - - varying vec3 vWorldPosition; - - void main() { - vec3 viewDirection = normalize(vWorldPosition - cameraPosition); - vec3 stars = textureCube(background, viewDirection).xyz; - - float h = normalize(vWorldPosition + offset).y; - float t = max(pow(max(h, 0.0), exponent), 0.0); - - float f = exp(min(0.0, -vWorldPosition.y * 0.00125)); - - vec3 sky = mix(stars, bottomColor, f); - gl_FragColor = vec4(sky, 1.0); - }`; - - class ThreeJSController extends Component { - constructor() { - super(); - } - - InitEntity() { - THREE.ShaderChunk.fog_fragment = ` - #ifdef USE_FOG - vec3 fogOrigin = cameraPosition; - vec3 fogDirection = normalize(vWorldPosition - fogOrigin); - float fogDepth = distance(vWorldPosition, fogOrigin); - - fogDepth *= fogDepth; - - float heightFactor = 0.05; - float fogFactor = heightFactor * exp(-fogOrigin.y * fogDensity) * ( - 1.0 - exp(-fogDepth * fogDirection.y * fogDensity)) / fogDirection.y; - fogFactor = saturate(fogFactor); - - gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); - #endif`; - - THREE.ShaderChunk.fog_pars_fragment = ` - #ifdef USE_FOG - uniform float fogTime; - uniform vec3 fogColor; - varying vec3 vWorldPosition; - #ifdef FOG_EXP2 - uniform float fogDensity; - #else - uniform float fogNear; - uniform float fogFar; - #endif - #endif`; - - THREE.ShaderChunk.fog_vertex = ` - #ifdef USE_FOG - vWorldPosition = (modelMatrix * vec4(transformed, 1.0 )).xyz; - #endif`; - - THREE.ShaderChunk.fog_pars_vertex = ` - #ifdef USE_FOG - varying vec3 vWorldPosition; - #endif`; - - this.threejs_ = new THREE.WebGLRenderer({ - antialias: false, - }); - this.threejs_.outputEncoding = THREE.sRGBEncoding; - this.threejs_.gammaFactor = 2.2; - this.threejs_.shadowMap.enabled = true; - this.threejs_.shadowMap.type = THREE.PCFSoftShadowMap; - this.threejs_.setPixelRatio(window.devicePixelRatio); - this.threejs_.setSize(window.innerWidth, window.innerHeight); - this.threejs_.domElement.id = DOM_IDS.THREEJS; - - document.getElementById('container').appendChild(this.threejs_.domElement); - - window.addEventListener('resize', () => { - this._OnWindowResize(); - }, false); - - const fov = 60; - const aspect = 1920 / 1080; - const near = 1.0; - const far = 10000.0; - this.camera_ = new THREE.PerspectiveCamera(fov, aspect, near, far); - this.camera_.position.set(25, 10, 25); - - this.scene_ = new THREE.Scene(); - this.scene_.fog = new THREE.FogExp2(0x89b2eb, 0.00002); - - let light = new THREE.DirectionalLight(0x8088b3, 0.7); - light.position.set(-10, 500, 10); - light.target.position.set(0, 0, 0); - light.castShadow = true; - light.shadow.bias = -0.001; - light.shadow.mapSize.width = 4096; - light.shadow.mapSize.height = 4096; - light.shadow.camera.near = 0.1; - light.shadow.camera.far = 1000.0; - light.shadow.camera.left = 100; - light.shadow.camera.right = -100; - light.shadow.camera.top = 100; - light.shadow.camera.bottom = -100; - this.scene_.add(light); - - this.sun_ = light; - - this.LoadSky_(); - } - - LoadSky_() { - const hemiLight = new THREE.HemisphereLight(0x424a75, 0x6a88b5, 0.7); - // hemiLight.color.setHSL(0.6, 1, 0.4); - // hemiLight.groundColor.setHSL(0.095, 1, 0.5); - this.scene_.add(hemiLight); - - - const loader = new THREE.CubeTextureLoader(); - const texture = loader.load([ - './resources/terrain/space-posx.jpg', - './resources/terrain/space-negx.jpg', - './resources/terrain/space-posy.jpg', - './resources/terrain/space-negy.jpg', - './resources/terrain/space-posz.jpg', - './resources/terrain/space-negz.jpg', - ]); - texture.encoding = THREE.sRGBEncoding; - - const uniforms = { - "topColor": { value: new THREE.Color(0x000000) }, - "bottomColor": { value: new THREE.Color(0x5d679e) }, - "offset": { value: -500 }, - "exponent": { value: 0.3 }, - "background": { value: texture }, - }; - // uniforms["topColor"].value.copy(hemiLight.color); - - this.scene_.fog.color.copy(uniforms["bottomColor"].value); - - - const skyGeo = new THREE.SphereBufferGeometry(5000, 32, 15); - const skyMat = new THREE.ShaderMaterial({ - uniforms: uniforms, - vertexShader: _VS, - fragmentShader: _FS, - side: THREE.BackSide - }); - - const sky = new THREE.Mesh(skyGeo, skyMat); - this.scene_.add(sky); - } - - Update(_) { - const player = this.FindEntity('player'); - if (!player) { - return; - } - const pos = player._position; - - this.sun_.position.copy(pos); - this.sun_.position.add(new THREE.Vector3(-50, 200, -10)); - this.sun_.target.position.copy(pos); - this.sun_.updateMatrixWorld(); - this.sun_.target.updateMatrixWorld(); - } - } - - return { - ThreeJSController: ThreeJSController, - }; -})(); \ No newline at end of file diff --git a/package.json b/package.json index dd0a4e04..a16c014a 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,7 @@ { "private": true, "workspaces": [ - "client", - "server", - "shared" + "packages/*" ], "dependencies": { "typescript": "^4.2.3" diff --git a/client/LICENSE b/packages/client/LICENSE similarity index 100% rename from client/LICENSE rename to packages/client/LICENSE diff --git a/packages/client/dist/attacker-controller.js b/packages/client/dist/attacker-controller.js new file mode 100644 index 00000000..4322d9cd --- /dev/null +++ b/packages/client/dist/attacker-controller.js @@ -0,0 +1,26 @@ +import { Component } from './entity'; +import { Constants } from 'shared'; +const { EVENT_TYPES } = Object.assign({}, Constants); +class AttackController extends Component { + constructor() { + super(); + this.action_ = null; + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.PLAYER_ACTION, (m) => { this._OnAnimAction(m); }); + } + _OnAnimAction(m) { + if (m.action != EVENT_TYPES.ATTACK) { + this.action_ = m.action; + return; + } + else if (m.action != this.action_) { + this.action_ = m.action; + this.Broadcast({ + topic: EVENT_TYPES.ACTION_ATTACK, + }); + } + } +} +; +export { AttackController }; diff --git a/packages/client/dist/blood-effect.js b/packages/client/dist/blood-effect.js new file mode 100644 index 00000000..a67fac8b --- /dev/null +++ b/packages/client/dist/blood-effect.js @@ -0,0 +1,182 @@ +import * as THREE from 'three'; +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; +import { Constants } from 'shared'; +const { CLASS_TYPES_ENUM, EVENT_TYPES, STATE_TYPES } = Constants; +class BloodEffectEmitter extends ParticleEmitter { + constructor(parent) { + super(); + this.parent_ = parent; + this.blend_ = 0.0; + } + OnUpdate_() { + this.parent_.updateMatrixWorld(true); + this.SetEmissionRate(300.0 * (this.emitterLife_ / 3.0)); + } + CreateParticle_() { + const origin = new THREE.Vector3(0, 0, 0); + this.parent_.localToWorld(origin); + const radius = 1.0; + const life = (Math.random() * 0.75 + 0.25) * 0.5; + const p = new THREE.Vector3((Math.random() * 2 - 1) * radius, (Math.random() * 2 - 1) * radius, (Math.random() * 2 - 1) * radius); + const d = p.clone().normalize(); + p.copy(d); + p.multiplyScalar(radius); + p.add(origin); + d.multiplyScalar(0.0); + return { + position: p, + size: (Math.random() * 0.5 + 0.5) * 1.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: d, + blend: this.blend_, + }; + } +} +; +class FireFXEmitter extends ParticleEmitter { + constructor(parent) { + super(); + this.parent_ = parent; + this.blend_ = 0.0; + } + OnUpdate_() { + this.parent_.updateMatrixWorld(true); + } + AddParticles(num) { + for (let i = 0; i < num; ++i) { + this.particles_.push(this.CreateParticle_()); + } + } + CreateParticle_() { + const origin = new THREE.Vector3(0, 0, 0); + this.parent_.localToWorld(origin); + const radius = 1.0; + const life = (Math.random() * 0.75 + 0.25) * 1.5; + const p = new THREE.Vector3((Math.random() * 2 - 1) * radius, (Math.random() * 2 - 1) * radius, (Math.random() * 2 - 1) * radius); + const d = p.clone().normalize(); + p.copy(d); + p.multiplyScalar(radius); + p.add(origin); + d.multiplyScalar(3.0); + return { + position: p, + size: (Math.random() * 0.5 + 0.5) * 1.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: d, + blend: this.blend_, + }; + } +} +; +class BloodEffect extends Component { + constructor(params) { + super(); + this.params_ = params; + this.bloodFX_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/whitePuff14.png', + }); + this.fireFX_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/fire.png', + }); + } + Destroy() { + this.bloodFX_.Destroy(); + this.fireFX_.Destroy(); + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.EVENTS_NETWORK, (m) => { this.OnEvents_(m); }); + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); + } + OnCharacterLoaded_(msg) { + this.bones_ = msg.bones; + } + OnEvents_(msg) { + if (!this.bones_) { + return; + } + for (let e of msg.value) { + if (e.type != STATE_TYPES.ATTACK) { + continue; + } + // Another hack + const hc = e.attacker.GetComponent('HealthComponent'); + if (hc.stats_.desc.character.class != CLASS_TYPES_ENUM.SORCEROR) { + this.EmitBloodFX_(); + } + else { + this.EmitFireFX_(); + } + } + } + EmitFireFX_() { + // dem hips + const targets = ['Head', 'Hips']; + for (let t of targets) { + const b = this.bones_[t]; + let emitter = new FireFXEmitter(b); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.5, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x00FF00)); + emitter.colourSpline_.AddPoint(0.3, new THREE.Color(0x00FF00)); + emitter.colourSpline_.AddPoint(0.4, new THREE.Color(0xdeec42)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0xf4a776)); + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(0.5, 3.0); + emitter.sizeSpline_.AddPoint(1.0, 0.5); + emitter.blend_ = 0.0; + emitter.AddParticles(200); + this.fireFX_.AddEmitter(emitter); + emitter = new FireFXEmitter(b); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.7, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x000000)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x000000)); + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(0.5, 4.0); + emitter.sizeSpline_.AddPoint(1.0, 10.0); + emitter.blend_ = 1.0; + emitter.AddParticles(100); + this.fireFX_.AddEmitter(emitter); + } + } + EmitBloodFX_() { + // hack shoudl check if this was legit anything else than damage + const targets = ['Head', 'Hips']; + for (let t of targets) { + const b = this.bones_[t]; + const emitter = new BloodEffectEmitter(b); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.7, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0xbb2909)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x701a08)); + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(0.5, 1.0); + emitter.sizeSpline_.AddPoint(1.0, 0.5); + emitter.SetLife(0.5); + emitter.SetEmissionRate(500); + emitter.blend_ = 1.0; + this.bloodFX_.AddEmitter(emitter); + } + } + Update(timeElapsed) { + this.bloodFX_.Update(timeElapsed); + this.fireFX_.Update(timeElapsed); + } +} +export { BloodEffect, FireFXEmitter, BloodEffectEmitter }; diff --git a/packages/client/dist/entity.js b/packages/client/dist/entity.js new file mode 100644 index 00000000..91a480a0 --- /dev/null +++ b/packages/client/dist/entity.js @@ -0,0 +1,127 @@ +import * as THREE from 'three'; +class Entity { + constructor() { + this._name = null; + this._components = {}; + this._position = new THREE.Vector3(); + this._rotation = new THREE.Quaternion(); + this._handlers = {}; + this.parent_ = null; + this.dead_ = false; + } + Destroy() { + for (let k in this._components) { + this._components[k].Destroy(); + } + this._components = null; + this.parent_ = null; + this._handlers = null; + } + _RegisterHandler(n, h) { + if (!(n in this._handlers)) { + this._handlers[n] = []; + } + this._handlers[n].push(h); + } + SetParent(p) { + this.parent_ = p; + } + SetName(n) { + this._name = n; + } + get Name() { + return this._name; + } + get Manager() { + return this.parent_; + } + SetActive(b) { + this.parent_.SetActive(this, b); + } + SetDead() { + this.dead_ = true; + } + AddComponent(c) { + c.SetParent(this); + this._components[c.constructor.name] = c; + c.InitComponent(); + } + InitEntity() { + for (let k in this._components) { + this._components[k].InitEntity(); + } + } + GetComponent(n) { + return this._components[n]; + } + FindEntity(n) { + return this.parent_.Get(n); + } + Broadcast(msg) { + if (!(msg.topic in this._handlers)) { + return; + } + for (let curHandler of this._handlers[msg.topic]) { + curHandler(msg); + } + } + SetPosition(p) { + this._position.copy(p); + this.Broadcast({ + topic: 'update.position', + value: this._position, + }); + } + SetQuaternion(r) { + this._rotation.copy(r); + this.Broadcast({ + topic: 'update.rotation', + value: this._rotation, + }); + } + get Position() { + return this._position; + } + get Quaternion() { + return this._rotation; + } + Update(timeElapsed) { + for (let k in this._components) { + this._components[k].Update(timeElapsed); + } + } +} +; +class Component { + constructor(params) { + this.parent_ = null; + } + Destroy() { + } + SetParent(p) { + this.parent_ = p; + } + InitComponent() { } + InitEntity() { } + GetComponent(n) { + return this.parent_.GetComponent(n); + } + get Manager() { + return this.parent_.Manager; + } + get Parent() { + return this.parent_; + } + FindEntity(n) { + return this.parent_.FindEntity(n); + } + Broadcast(m) { + this.parent_.Broadcast(m); + } + Update(_) { } + _RegisterHandler(n, h) { + this.parent_._RegisterHandler(n, h); + } +} +; +export { Entity, Component }; diff --git a/packages/client/dist/equip-weapon-component.js b/packages/client/dist/equip-weapon-component.js new file mode 100644 index 00000000..18e2bf24 --- /dev/null +++ b/packages/client/dist/equip-weapon-component.js @@ -0,0 +1,107 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Defs, Constants } from 'shared'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; +const { CHARACTER_MODELS } = Defs; +const { EVENT_TYPES, KNOWN_ENTITIES } = Constants; +export const equip_weapon_component = (() => { + class EquipWeapon extends Component { + constructor(params) { + super(); + this.params_ = params; + this.target_ = null; + this.name_ = null; + const classType = this.params_.desc.character.class; + const modelData = CHARACTER_MODELS[classType]; + this.anchor_ = modelData.anchors.rightHand; + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this._OnCharacterLoaded(m)); + this._RegisterHandler(EVENT_TYPES.INVENTORY_EQUIP, (m) => this._OnEquip(m)); + } + _OnCharacterLoaded(msg) { + this._bones = msg.bones; + this._AttachTarget(); + } + _AttachTarget() { + if (this._bones && this.target_) { + this._bones[this.anchor_].add(this.target_); + } + } + GetItemDefinition_(name) { + const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent(KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); + return database.Find(name); + } + _OnEquip(msg) { + if (msg.value == this.name_) { + return; + } + if (this.target_) { + this._UnloadModels(); + } + const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER); + const item = this.GetItemDefinition_(msg.value); + this.name_ = msg.value; + if (item) { + this._LoadModels(item, () => { + this._AttachTarget(); + }); + } + } + _UnloadModels() { + if (this.target_) { + this.target_.parent.remove(this.target_); + // Probably need to free the memory properly, whatever + this.target_ = null; + } + } + _LoadModels(item, cb) { + const loader = new FBXLoader(); + loader.setPath('./resources/weapons/FBX/'); + loader.load(item.renderParams.name + '.fbx', (fbx) => { + this.target_ = fbx; + this.target_.scale.setScalar(item.renderParams.scale); + // this.target_.rotateY(Math.PI); + this.target_.rotateX(Math.PI / 2); + // this.target_.rotateY(-1); + this.target_.traverse(c => { + c.castShadow = true; + c.receiveShadow = true; + // Do this instead of something smart like re-exporting. + let materials = c.material; + let newMaterials = []; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + for (let m of materials) { + if (m) { + const c = new THREE.Color().copy(m.color); + c.multiplyScalar(0.75); + newMaterials.push(new THREE.MeshStandardMaterial({ + color: c, + name: m.name, + metalness: 1.0, + })); + } + } + if (!(c.material instanceof Array)) { + c.material = newMaterials[0]; + } + else { + c.material = newMaterials; + } + }); + cb(); + this.Broadcast({ + topic: EVENT_TYPES.LOAD_WEAPON, + model: this.target_, + bones: this._bones, + }); + }); + } + } + ; + return { + EquipWeapon: EquipWeapon, + }; +})(); diff --git a/packages/client/dist/finite-state-machine.js b/packages/client/dist/finite-state-machine.js new file mode 100644 index 00000000..2931c6d2 --- /dev/null +++ b/packages/client/dist/finite-state-machine.js @@ -0,0 +1,28 @@ +class FiniteStateMachine { + constructor() { + this._states = {}; + this._currentState = null; + } + _AddState(name, type) { + this._states[name] = type; + } + SetState(name) { + const prevState = this._currentState; + if (prevState) { + if (prevState.Name == name) { + return; + } + prevState.Exit(); + } + const state = new this._states[name](this); + this._currentState = state; + state.Enter(prevState); + } + Update(timeElapsed, input) { + if (this._currentState) { + this._currentState.Update(timeElapsed, input); + } + } +} +; +export { FiniteStateMachine }; diff --git a/packages/client/dist/floating-name.js b/packages/client/dist/floating-name.js new file mode 100644 index 00000000..7bb59c07 --- /dev/null +++ b/packages/client/dist/floating-name.js @@ -0,0 +1,66 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants, Defs } from 'shared'; +const { EVENT_TYPES, CHARACTER_MODELS } = Object.assign(Object.assign({}, Constants), Defs); +class FloatingName extends Component { + constructor(params) { + super(); + this.params_ = params; + this.visible_ = true; + } + Destroy() { + if (!this.sprite_) { + this.visible_ = false; + return; + } + this.sprite_.traverse(c => { + if (c.material) { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + for (let m of materials) { + m.dispose(); + } + } + if (c.geometry) { + c.geometry.dispose(); + } + }); + if (this.sprite_.parent) { + this.sprite_.parent.remove(this.sprite_); + } + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => { this.CreateSprite_(m); }); + this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); + } + OnDeath_(e) { + this.Destroy(); + } + CreateSprite_(msg) { + if (!this.visible_) { + return; + } + const modelData = CHARACTER_MODELS[this.params_.desc.character.class]; + this.element_ = document.createElement('canvas'); + this.context2d_ = this.element_.getContext('2d'); + this.context2d_.canvas.width = 256; + this.context2d_.canvas.height = 128; + this.context2d_.fillStyle = '#FFF'; + this.context2d_.font = "18pt Helvetica"; + this.context2d_.shadowOffsetX = 3; + this.context2d_.shadowOffsetY = 3; + this.context2d_.shadowColor = "rgba(0,0,0,0.3)"; + this.context2d_.shadowBlur = 4; + this.context2d_.textAlign = 'center'; + this.context2d_.fillText(this.params_.desc.account.name, 128, 64); + const map = new THREE.CanvasTexture(this.context2d_.canvas); + this.sprite_ = new THREE.Sprite(new THREE.SpriteMaterial({ map: map, color: 0xffffff, fog: false })); + this.sprite_.scale.set(10, 5, 1); + this.sprite_.position.y += modelData.nameOffset; + msg.model.add(this.sprite_); + } +} +; +export { FloatingName }; diff --git a/packages/client/dist/gltf-component.js b/packages/client/dist/gltf-component.js new file mode 100644 index 00000000..6f6b3775 --- /dev/null +++ b/packages/client/dist/gltf-component.js @@ -0,0 +1,195 @@ +import * as THREE from 'three'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; +import { Component } from './entity'; +import { Constants } from 'shared'; +const { EVENT_TYPES } = Constants; +class StaticModelComponent extends Component { + constructor(params) { + super(); + this._Init(params); + } + _Init(params) { + this._params = params; + this._LoadModels(); + } + InitComponent() { + this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + } + _OnPosition(m) { + if (this._target) { + this._target.position.copy(m.value); + } + } + _LoadModels() { + if (this._params.resourceName.endsWith('glb') || this._params.resourceName.endsWith('gltf')) { + this._LoadGLB(); + } + else if (this._params.resourceName.endsWith('fbx')) { + this._LoadFBX(); + } + } + _OnLoaded(obj) { + this._target = obj; + this._params.scene.add(this._target); + this._target.scale.setScalar(this._params.scale); + this._target.position.copy(this.parent_._position); + let texture = null; + if (this._params.resourceTexture) { + const texLoader = new THREE.TextureLoader(); + texture = texLoader.load(this._params.resourceTexture); + texture.encoding = THREE.sRGBEncoding; + } + this._target.traverse(c => { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + for (let m of materials) { + if (m) { + if (texture) { + m.map = texture; + } + if (this._params.specular) { + m.specular = this._params.specular; + } + if (this._params.emissive) { + m.emissive = this._params.emissive; + } + } + } + if (this._params.receiveShadow != undefined) { + c.receiveShadow = this._params.receiveShadow; + } + if (this._params.castShadow != undefined) { + c.castShadow = this._params.castShadow; + } + if (this._params.visible != undefined) { + c.visible = this._params.visible; + } + }); + } + _LoadGLB() { + const loader = new GLTFLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceName, (glb) => { + this._OnLoaded(glb.scene); + }); + } + _LoadFBX() { + const loader = new FBXLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceName, (fbx) => { + this._OnLoaded(fbx); + }); + } + Update(timeInSeconds) { + } +} +; +class AnimatedModelComponent extends Component { + constructor(params) { + super(); + this._Init(params); + } + InitComponent() { + this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + } + _OnPosition(m) { + if (this._target) { + this._target.position.copy(m.value); + this._target.position.y = 0.35; + } + } + _Init(params) { + this._params = params; + this._LoadModels(); + } + _LoadModels() { + if (this._params.resourceName.endsWith('glb') || this._params.resourceName.endsWith('gltf')) { + this._LoadGLB(); + } + else if (this._params.resourceName.endsWith('fbx')) { + this._LoadFBX(); + } + } + _OnLoaded(obj, animations) { + this._target = obj; + this._params.scene.add(this._target); + this._target.scale.setScalar(this._params.scale); + this._target.position.copy(this._parent._position); + this.Broadcast({ + topic: 'update.position', + value: this._parent._position, + }); + let texture = null; + if (this._params.resourceTexture) { + const texLoader = new THREE.TextureLoader(); + texture = texLoader.load(this._params.resourceTexture); + texture.encoding = THREE.sRGBEncoding; + } + this._target.traverse(c => { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + for (let m of materials) { + if (m) { + if (texture) { + m.map = texture; + } + if (this._params.specular) { + m.specular = this._params.specular; + } + if (this._params.emissive) { + m.emissive = this._params.emissive; + } + } + } + if (this._params.receiveShadow != undefined) { + c.receiveShadow = this._params.receiveShadow; + } + if (this._params.castShadow != undefined) { + c.castShadow = this._params.castShadow; + } + if (this._params.visible != undefined) { + c.visible = this._params.visible; + } + }); + const _OnLoad = (anim) => { + const clip = anim.animations[0]; + const action = this._mixer.clipAction(clip); + action.play(); + }; + const loader = new FBXLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceAnimation, (a) => { _OnLoad(a); }); + this._mixer = new THREE.AnimationMixer(this._target); + this._parent._mesh = this._target; + this.Broadcast({ + topic: EVENT_TYPES.LOAD_CHARACTER, + model: this._target, + }); + } + _LoadGLB() { + const loader = new GLTFLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceName, (glb) => { + this._OnLoaded(glb.scene, glb.animations); + }); + } + _LoadFBX() { + const loader = new FBXLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceName, (fbx) => { + this._OnLoaded(fbx, null); + }); + } + Update(timeInSeconds) { + if (this._mixer) { + this._mixer.update(timeInSeconds); + } + } +} +; +export { StaticModelComponent, AnimatedModelComponent }; diff --git a/packages/client/dist/health-bar.js b/packages/client/dist/health-bar.js new file mode 100644 index 00000000..1bb86ddb --- /dev/null +++ b/packages/client/dist/health-bar.js @@ -0,0 +1,106 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Math as math } from 'shared'; +const _VS = ` +varying vec2 vUV; + +void main() { + vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); + gl_Position = projectionMatrix * mvPosition; + vUV = uv; +} +`; +const _PS = ` +uniform vec3 colour; +uniform float health; + +varying vec2 vUV; + +void main() { + gl_FragColor = vec4(mix(colour, vec3(0.0), step(health, vUV.y)), 1.0); +} +`; +class HealthBar extends Component { + constructor(params) { + super(); + this.params_ = params; + this.Initialize_(); + } + Destroy() { + this.material_.dispose(); + this.geometry_.dispose(); + } + Initialize_() { + const uniforms = { + colour: { + value: new THREE.Color(0, 1, 0), + }, + health: { + value: 1.0, + }, + }; + this.material_ = new THREE.ShaderMaterial({ + uniforms: uniforms, + vertexShader: _VS, + fragmentShader: _PS, + blending: THREE.NormalBlending, + transparent: true, + depthTest: false, + depthWrite: false, + side: THREE.DoubleSide, + }); + this.geometry_ = new THREE.BufferGeometry(); + this.bar_ = new THREE.Mesh(this.geometry_, this.material_); + this.bar_.frustumCulled = false; + this.bar_.scale.set(2, 0.125, 1); + this.realHealth_ = 1.0; + this.animHealth_ = 1.0; + this.params_.parent.add(this.bar_); + this.GenerateBuffers_(); + } + InitComponent() { + this._RegisterHandler('health.update', (m) => { this.OnHealth_(m); }); + } + OnHealth_(msg) { + const healthPercent = (msg.health / msg.maxHealth); + this.realHealth_ = healthPercent; + } + Update(timeElapsed) { + const t = 1.0 - Math.pow(0.001, timeElapsed); + this.animHealth_ = math.lerp(t, this.animHealth_, this.realHealth_); + const _R = new THREE.Color(1.0, 0, 0); + const _G = new THREE.Color(0.0, 1.0, 0.0); + const c = _R.clone(); + c.lerpHSL(_G, this.animHealth_); + this.material_.uniforms.health.value = this.animHealth_; + this.material_.uniforms.colour.value = c; + this.bar_.position.copy(this.parent_.Position); + this.bar_.position.y += 8.0; + this.bar_.quaternion.copy(this.params_.camera.quaternion); + } + GenerateBuffers_() { + const indices = []; + const positions = []; + const uvs = []; + const square = [0, 1, 2, 2, 3, 0]; + indices.push(...square); + const p1 = new THREE.Vector3(-1, -1, 0); + const p2 = new THREE.Vector3(-1, 1, 0); + const p3 = new THREE.Vector3(1, 1, 0); + const p4 = new THREE.Vector3(1, -1, 0); + uvs.push(0.0, 0.0); + uvs.push(1.0, 0.0); + uvs.push(1.0, 1.0); + uvs.push(0.0, 1.0); + positions.push(p1.x, p1.y, p1.z); + positions.push(p2.x, p2.y, p2.z); + positions.push(p3.x, p3.y, p3.z); + positions.push(p4.x, p4.y, p4.z); + this.geometry_.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3)); + this.geometry_.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2)); + this.geometry_.setIndex(new THREE.BufferAttribute(new Uint32Array(indices), 1)); + this.geometry_.attributes.position.needsUpdate = true; + } +} +; +export { HealthBar }; diff --git a/packages/client/dist/health-component.js b/packages/client/dist/health-component.js new file mode 100644 index 00000000..41a9265d --- /dev/null +++ b/packages/client/dist/health-component.js @@ -0,0 +1,89 @@ +import { Constants } from "shared"; +import { Component } from "./entity"; +const { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; +class HealthComponent extends Component { + constructor(params) { + super(); + this.stats_ = params; + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.HEALTH_DAMAGE, (m) => this.OnDamage_(m)); + this._RegisterHandler(EVENT_TYPES.STATS_NETWORK, (m) => this.OnNetworkUpdate_(m)); + this._RegisterHandler(EVENT_TYPES.HEALTH_ADD_EXPERIENCE, (m) => this.OnAddExperience_(m)); + this.UpdateUI_(); + } + IsAlive() { + return this.stats_.health > 0; + } + get Health() { + return this.stats_.health; + } + UpdateUI_() { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; + if (!this.stats_.updateUI) { + return; + } + const bar = document.getElementById(DOM_IDS.HEALTH_BAR); + const healthAsPercentage = this.stats_.health / this.stats_.maxHealth; + bar.style.width = Math.floor(200 * healthAsPercentage) + 'px'; + document.getElementById(DOM_IDS.STATS_STRENGTH).innerText = (_b = (_a = this.stats_.strength) === null || _a === void 0 ? void 0 : _a.toString) === null || _b === void 0 ? void 0 : _b.call(_a); + document.getElementById(DOM_IDS.STATS_WISDOMNESS).innerText = (_d = (_c = this.stats_.wisdomness) === null || _c === void 0 ? void 0 : _c.toString) === null || _d === void 0 ? void 0 : _d.call(_c); + document.getElementById(DOM_IDS.STATS_BENCHPRESS).innerText = (_f = (_e = this.stats_.benchpress) === null || _e === void 0 ? void 0 : _e.toString) === null || _f === void 0 ? void 0 : _f.call(_e); + document.getElementById(DOM_IDS.STATS_CURL).innerText = (_h = (_g = this.stats_.curl) === null || _g === void 0 ? void 0 : _g.toString) === null || _h === void 0 ? void 0 : _h.call(_g); + document.getElementById(DOM_IDS.STATS_EXPERIENCE).innerText = (_k = (_j = this.stats_.experience) === null || _j === void 0 ? void 0 : _j.toString) === null || _k === void 0 ? void 0 : _k.call(_j); + } + _ComputeLevelXPRequirement() { + const level = this.stats_.level; + // Blah just something easy + const xpRequired = Math.round(Math.pow(2, (level - 1)) * 100); + return xpRequired; + } + OnAddExperience_(msg) { + this.stats_.experience += msg.value; + const requiredExperience = this._ComputeLevelXPRequirement(); + if (this.stats_.experience < requiredExperience) { + return; + } + this.stats_.level += 1; + this.stats_.strength += 1; + this.stats_.wisdomness += 1; + this.stats_.benchpress += 1; + this.stats_.curl += 2; + const spawner = this.FindEntity(KNOWN_ENTITIES.LEVEL_UP_SPAWNER).GetComponent(NAMED_COMPONENTS.LEVEL_UP_SPAWNER); + spawner.Spawn(this.Parent.Position); + this.Broadcast({ + topic: EVENT_TYPES.HEALTH_LEVEL, + value: this.stats_.level, + }); + this.UpdateUI_(); + } + _OnDeath() { + this.Broadcast({ + topic: EVENT_TYPES.HEALTH_DEATH, + }); + } + OnHealthChanged_() { + if (this.stats_.health == 0) { + this._OnDeath(); + } + this.Broadcast({ + topic: EVENT_TYPES.HEALTH_UPDATE, + health: this.stats_.health, + maxHealth: this.stats_.maxHealth, + }); + this.UpdateUI_(); + } + OnNetworkUpdate_(msg) { + const newStats = msg.value[1]; + for (let k in newStats) { + this.stats_[k] = newStats[k]; + } + this.OnHealthChanged_(); + } + OnDamage_(msg) { + this.stats_.health = Math.max(0.0, this.stats_.health - msg.value); + this.OnHealthChanged_(); + } +} +; +export { HealthComponent }; diff --git a/packages/client/dist/index.js b/packages/client/dist/index.js new file mode 100644 index 00000000..3a218f22 --- /dev/null +++ b/packages/client/dist/index.js @@ -0,0 +1,937 @@ +import * as THREE from 'three'; +// Not sure why latest three.js package is missing these. Might be making a huge mistake updating. lol +import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; +import { io } from 'socket.io-client'; +import { Constants } from 'shared'; +const { EVENT_TYPES, STATE_TYPES } = Constants; +const _CHARACTER_MODELS = { + zombie: { + base: 'mremireh_o_desbiens.fbx', + path: '../resources/characters/zombie/', + animations: { + idle: 'idle.fbx', + walk: 'walk.fbx', + run: 'run.fbx', + dance: 'dance.fbx', + }, + nameOffset: 25, + }, + guard: { + base: 'castle_guard_01.fbx', + path: '../resources/characters/guard/', + animations: { + idle: 'Sword And Shield Idle.fbx', + walk: 'Sword And Shield Walk.fbx', + run: 'Sword And Shield Run.fbx', + dance: 'Macarena Dance.fbx', + }, + nameOffset: 20, + } +}; +class FloatingName { + constructor(params) { + this.params_ = params; + this.Init_(); + } + Destroy() { + this.element_ = null; + } + Init_() { + const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; + this.element_ = document.createElement('canvas'); + this.context2d_ = this.element_.getContext('2d'); + this.context2d_.canvas.width = 256; + this.context2d_.canvas.height = 128; + this.context2d_.fillStyle = '#FFF'; + this.context2d_.font = "18pt Helvetica"; + this.context2d_.shadowOffsetX = 3; + this.context2d_.shadowOffsetY = 3; + this.context2d_.shadowColor = "rgba(0,0,0,0.3)"; + this.context2d_.shadowBlur = 4; + this.context2d_.textAlign = 'center'; + this.context2d_.fillText(this.params_.desc.account.name, 128, 64); + const map = new THREE.CanvasTexture(this.context2d_.canvas); + this.sprite_ = new THREE.Sprite(new THREE.SpriteMaterial({ map: map, color: 0xffffff })); + this.sprite_.scale.set(20, 10, 1); + this.sprite_.position.y += modelData.nameOffset; + this.params_.parent.add(this.sprite_); + } +} +; +class OurLoadingManager { + constructor(loader) { + this.loader_ = loader; + this.files_ = new Set(); + this.onLoad = () => { }; + } + load(file, cb) { + this.files_.add(file); + this.loader_.load(file, (result) => { + this.files_.delete(file); + cb(result); + if (this.files_.size == 0) { + this.onLoad(); + } + }); + } +} +; +class BasicCharacterControllerProxy { + constructor(animations) { + this.animations_ = animations; + } + get animations() { + return this.animations_; + } +} +; +class AnimatedMesh { + constructor(params) { + this.params_ = params; + this.group_ = new THREE.Group(); + this.params_.scene.add(this.group_); + this.target_ = null; + this.animations_ = {}; + this.mixer_ = null; + this.onLoad = () => { }; + this.Load_(); + } + Destroy() { + if (this.target_) { + this.target_.traverse(c => { + if (c.material) { + c.material.dispose(); + } + if (c.geometry) { + c.geometry.dispose(); + } + }); + } + this.params_.scene.remove(this.group_); + } + get position() { + return this.group_.position; + } + get quaternion() { + return this.group_.quaternion; + } + Load_() { + const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; + // kadajett. Had to add param null. expected "manager" + const loader = new FBXLoader(null); + loader.setPath(modelData.path); + loader.load(modelData.base, (fbx) => { + fbx.scale.setScalar(0.1); + fbx.traverse(c => { + c.castShadow = true; + }); + this.target_ = fbx; + this.group_.add(this.target_); + this.mixer_ = new THREE.AnimationMixer(this.target_); + const _OnLoad = (animName, anim) => { + const clip = anim.animations[0]; + const action = this.mixer_.clipAction(clip); + this.animations_[animName] = { + clip: clip, + action: action, + }; + }; + // LoadingManager seems to be broken when you attempt to load multiple + // resources multiple times, only first onLoad is called. + // So roll our own. + const loader = new FBXLoader(null); + loader.setPath(modelData.path); + this.manager_ = new OurLoadingManager(loader); + this.manager_.load(modelData.animations.idle, (a) => { _OnLoad(STATE_TYPES.IDLE, a); }); + this.manager_.load(modelData.animations.walk, (a) => { _OnLoad(STATE_TYPES.WALK, a); }); + this.manager_.load(modelData.animations.run, (a) => { _OnLoad(STATE_TYPES.RUN, a); }); + this.manager_.load(modelData.animations.dance, (a) => { _OnLoad(STATE_TYPES.DANCE, a); }); + this.manager_.onLoad = () => { + this.onLoad(); + }; + }); + } + Update(timeElapsed) { + if (this.mixer_) { + this.mixer_.update(timeElapsed); + } + } +} +; +class BasicCharacterController { + constructor(params) { + this._Init(params); + } + _Init(params) { + this.params_ = params; + this.decceleration_ = new THREE.Vector3(-0.0005, -0.0001, -5.0); + this.acceleration_ = new THREE.Vector3(1, 0.25, 50.0); + this.velocity_ = new THREE.Vector3(0, 0, 0); + this.position_ = new THREE.Vector3(); + this.quaternion_ = new THREE.Quaternion(); + this.loaded_ = false; + this._input = new BasicCharacterControllerInput(); + this.target_ = new AnimatedMesh({ + scene: params.scene, + desc: params.desc, + }); + this.target_.onLoad = () => { + this.loaded_ = true; + this.stateMachine_.SetState(STATE_TYPES.IDLE); + }; + this.stateMachine_ = new CharacterFSM(new BasicCharacterControllerProxy(this.target_.animations_)); + } + get IsLoaded() { + return this.loaded_; + } + get Position() { + return this.position_; + } + get Rotation() { + return this.quaternion_; + } + SetTransform(p, q) { + this.position_.copy(p); + this.quaternion_.copy(q); + this.target_.group_.position.copy(this.position_); + this.target_.group_.quaternion.copy(this.quaternion_); + } + CreateTransformPacket() { + return [ + this.stateMachine_.currentState_.Name, + this.position_.toArray(), + this.quaternion_.toArray(), + ]; + } + Update(timeInSeconds) { + if (!this.stateMachine_.currentState_) { + return; + } + this.stateMachine_.Update(timeInSeconds, this._input); + const velocity = this.velocity_; + const frameDecceleration = new THREE.Vector3(velocity.x * this.decceleration_.x, velocity.y * this.decceleration_.y, velocity.z * this.decceleration_.z); + frameDecceleration.multiplyScalar(timeInSeconds); + frameDecceleration.z = Math.sign(frameDecceleration.z) * Math.min(Math.abs(frameDecceleration.z), Math.abs(velocity.z)); + velocity.add(frameDecceleration); + const controlObject = this.target_; + const _Q = new THREE.Quaternion(); + const _A = new THREE.Vector3(); + const _R = controlObject.quaternion.clone(); + const acc = this.acceleration_.clone(); + if (this._input._keys.shift) { + acc.multiplyScalar(2.0); + } + if (this.stateMachine_.currentState_.Name == STATE_TYPES.DANCE) { + acc.multiplyScalar(0.0); + } + if (this._input._keys.forward) { + velocity.z += acc.z * timeInSeconds; + } + if (this._input._keys.backward) { + velocity.z -= acc.z * timeInSeconds; + } + if (this._input._keys.left) { + _A.set(0, 1, 0); + _Q.setFromAxisAngle(_A, 4.0 * Math.PI * timeInSeconds * this.acceleration_.y); + _R.multiply(_Q); + } + if (this._input._keys.right) { + _A.set(0, 1, 0); + _Q.setFromAxisAngle(_A, 4.0 * -Math.PI * timeInSeconds * this.acceleration_.y); + _R.multiply(_Q); + } + controlObject.quaternion.copy(_R); + const oldPosition = new THREE.Vector3(); + oldPosition.copy(controlObject.position); + const forward = new THREE.Vector3(0, 0, 1); + forward.applyQuaternion(controlObject.quaternion); + forward.normalize(); + const sideways = new THREE.Vector3(1, 0, 0); + sideways.applyQuaternion(controlObject.quaternion); + sideways.normalize(); + sideways.multiplyScalar(velocity.x * timeInSeconds); + forward.multiplyScalar(velocity.z * timeInSeconds); + controlObject.position.add(forward); + controlObject.position.add(sideways); + this.position_.copy(controlObject.position); + this.quaternion_.copy(controlObject.quaternion); + this.target_.Update(timeInSeconds); + } +} +; +class BasicCharacterControllerInput { + constructor() { + this._Init(); + } + _Init() { + this._keys = { + forward: false, + backward: false, + left: false, + right: false, + space: false, + shift: false, + }; + document.addEventListener('keydown', (e) => this.OnKeyDown_(e), false); + document.addEventListener('keyup', (e) => this._onKeyUp(e), false); + } + // extract this typedef into a shared interface + OnKeyDown_(event) { + var _a; + const activeElement = (_a = event === null || event === void 0 ? void 0 : event.currentTarget) === null || _a === void 0 ? void 0 : _a.activeElement; + if (activeElement != document.body) { + return; + } + switch (event.keyCode) { + case 87: // w + this._keys.forward = true; + break; + case 65: // a + this._keys.left = true; + break; + case 83: // s + this._keys.backward = true; + break; + case 68: // d + this._keys.right = true; + break; + case 32: // SPACE + this._keys.space = true; + break; + case 16: // SHIFT + this._keys.shift = true; + break; + } + } + _onKeyUp(event) { + if (event.currentTarget.activeElement != document.body) { + return; + } + switch (event.keyCode) { + case 87: // w + this._keys.forward = false; + break; + case 65: // a + this._keys.left = false; + break; + case 83: // s + this._keys.backward = false; + break; + case 68: // d + this._keys.right = false; + break; + case 32: // SPACE + this._keys.space = false; + break; + case 16: // SHIFT + this._keys.shift = false; + break; + } + } +} +; +class FiniteStateMachine { + constructor() { + this._states = {}; + this.currentState_ = null; + } + _AddState(name, type) { + this._states[name] = type; + } + SetState(name) { + const prevState = this.currentState_; + if (prevState) { + if (prevState.Name == name) { + return; + } + prevState.Exit(); + } + const state = new this._states[name](this); + this.currentState_ = state; + state.Enter(prevState); + } + Update(timeElapsed, input) { + if (this.currentState_) { + this.currentState_.Update(timeElapsed, input); + } + } +} +; +class CharacterFSM extends FiniteStateMachine { + constructor(proxy) { + super(); + this._proxy = proxy; + this._Init(); + } + _Init() { + this._AddState(STATE_TYPES.IDLE, IdleState); + this._AddState(STATE_TYPES.WALK, WalkState); + this._AddState(STATE_TYPES.RUN, RunState); + this._AddState(STATE_TYPES.DANCE, DanceState); + } +} +; +class State { + constructor(parent) { + this._parent = parent; + } + Enter(_) { } + Exit() { } + Update(a, b) { } +} +; +class DanceState extends State { + constructor(parent) { + super(parent); + this._FinishedCallback = () => { + this._Finished(); + }; + } + get Name() { + return STATE_TYPES.DANCE; + } + Enter(prevState) { + const curAction = this._parent._proxy.animations_[STATE_TYPES.DANCE].action; + const mixer = curAction.getMixer(); + mixer.addEventListener('finished', this._FinishedCallback); + if (prevState) { + const prevAction = this._parent._proxy.animations_[prevState.Name].action; + curAction.reset(); + curAction.setLoop(THREE.LoopOnce, 1); + curAction.clampWhenFinished = true; + curAction.crossFadeFrom(prevAction, 0.2, true); + curAction.play(); + } + else { + curAction.play(); + } + } + _Finished() { + this._Cleanup(); + this._parent.SetState(STATE_TYPES.IDLE); + } + _Cleanup() { + const action = this._parent._proxy.animations_[STATE_TYPES.DANCE].action; + action.getMixer().removeEventListener('finished', this._CleanupCallback); + } + Exit() { + this._Cleanup(); + } + Update(_) { + } +} +; +class WalkState extends State { + constructor(parent) { + super(parent); + } + get Name() { + return STATE_TYPES.WALK; + } + Enter(prevState) { + const curAction = this._parent._proxy.animations_[STATE_TYPES.WALK].action; + if (prevState) { + const prevAction = this._parent._proxy.animations_[prevState.Name].action; + curAction.enabled = true; + if (prevState.Name == STATE_TYPES.RUN) { + const ratio = curAction.getClip().duration / prevAction.getClip().duration; + curAction.time = prevAction.time * ratio; + } + else { + curAction.time = 0.0; + curAction.setEffectiveTimeScale(1.0); + curAction.setEffectiveWeight(1.0); + } + curAction.crossFadeFrom(prevAction, 0.5, true); + curAction.play(); + } + else { + curAction.play(); + } + } + Exit() { + } + Update(timeElapsed, input) { + if (!input) { + return; + } + if (input._keys.forward || input._keys.backward) { + if (input._keys.shift) { + this._parent.SetState(STATE_TYPES.RUN); + } + return; + } + this._parent.SetState(STATE_TYPES.IDLE); + } +} +; +class RunState extends State { + constructor(parent) { + super(parent); + } + get Name() { + return STATE_TYPES.RUN; + } + Enter(prevState) { + const curAction = this._parent._proxy.animations_[STATE_TYPES.RUN].action; + if (prevState) { + const prevAction = this._parent._proxy.animations_[prevState.Name].action; + curAction.enabled = true; + if (prevState.Name == STATE_TYPES.WALK) { + const ratio = curAction.getClip().duration / prevAction.getClip().duration; + curAction.time = prevAction.time * ratio; + } + else { + curAction.time = 0.0; + curAction.setEffectiveTimeScale(1.0); + curAction.setEffectiveWeight(1.0); + } + curAction.crossFadeFrom(prevAction, 0.5, true); + curAction.play(); + } + else { + curAction.play(); + } + } + Exit() { + } + Update(timeElapsed, input) { + if (!input) { + return; + } + if (input._keys.forward || input._keys.backward) { + if (!input._keys.shift) { + this._parent.SetState(STATE_TYPES.WALK); + } + return; + } + this._parent.SetState(STATE_TYPES.IDLE); + } +} +; +class IdleState extends State { + constructor(parent) { + super(parent); + } + get Name() { + return STATE_TYPES.IDLE; + } + Enter(prevState) { + const idleAction = this._parent._proxy.animations_[STATE_TYPES.IDLE].action; + if (prevState) { + const prevAction = this._parent._proxy.animations_[prevState.Name].action; + idleAction.time = 0.0; + idleAction.enabled = true; + idleAction.setEffectiveTimeScale(1.0); + idleAction.setEffectiveWeight(1.0); + idleAction.crossFadeFrom(prevAction, 0.5, true); + idleAction.play(); + } + else { + idleAction.play(); + } + } + Exit() { + } + Update(_, input) { + if (!input) { + return; + } + if (input._keys.forward || input._keys.backward) { + this._parent.SetState(STATE_TYPES.WALK); + } + else if (input._keys.space) { + this._parent.SetState(STATE_TYPES.DANCE); + } + } +} +; +class ThirdPersonCamera { + constructor(params) { + this.params_ = params; + this._camera = params.camera; + this._currentPosition = new THREE.Vector3(); + this._currentLookat = new THREE.Vector3(); + } + _CalculateIdealOffset() { + const idealOffset = new THREE.Vector3(-15, 20, -30); + idealOffset.applyQuaternion(this.params_.target.Rotation); + idealOffset.add(this.params_.target.Position); + return idealOffset; + } + _CalculateIdealLookat() { + const idealLookat = new THREE.Vector3(0, 10, 50); + idealLookat.applyQuaternion(this.params_.target.Rotation); + idealLookat.add(this.params_.target.Position); + return idealLookat; + } + Update(timeElapsed) { + const idealOffset = this._CalculateIdealOffset(); + const idealLookat = this._CalculateIdealLookat(); + // const t = 0.05; + // const t = 4.0 * timeElapsed; + const t = 1.0 - Math.pow(0.001, timeElapsed); + this._currentPosition.lerp(idealOffset, t); + this._currentLookat.lerp(idealLookat, t); + this._camera.position.copy(this._currentPosition); + this._camera.lookAt(this._currentLookat); + } +} +class PlayerEntity { + constructor(params) { + this.params_ = params; + this.Init_(); + } + Init_() { + } + CreateFromDesc(desc) { + const params = { + camera: this.params_.camera, + scene: this.params_.scene, + desc: desc, + }; + this.controls_ = new BasicCharacterController(params); + this.thirdPersonCamera_ = new ThirdPersonCamera({ + camera: this.params_.camera, + target: this.controls_, + }); + this.updateTimer_ = 0.0; + } + UpdateTransform(data) { + const s = data[0]; + const p = data[1]; + const q = data[2]; + this.controls_.SetTransform(new THREE.Vector3(...p), new THREE.Quaternion(...q)); + } + Update(timeElapsed) { + this.controls_.Update(timeElapsed); + this.thirdPersonCamera_.Update(timeElapsed); + this.SendTransform_(timeElapsed); + } + SendTransform_(timeElapsed) { + this.updateTimer_ -= timeElapsed; + if (this.updateTimer_ <= 0.0 && this.controls_.IsLoaded) { + this.updateTimer_ = 0.1; + this.params_.socket.emit(EVENT_TYPES.WORLD_UPDATE, this.controls_.CreateTransformPacket()); + } + } +} +; +class NetworkCharacterController { + constructor(params) { + this._Init(params); + } + Destroy() { + var _a, _b, _c, _d; + (_b = (_a = this.name_) === null || _a === void 0 ? void 0 : _a.Destroy) === null || _b === void 0 ? void 0 : _b.call(_a); + this.name_ = null; + (_d = (_c = this.target_) === null || _c === void 0 ? void 0 : _c.Destroy) === null || _d === void 0 ? void 0 : _d.call(_c); + this.target_ = null; + } + _Init(params) { + this.params_ = params; + this.target_ = new AnimatedMesh({ + scene: params.scene, + desc: params.desc, + }); + this.target_.onLoad = () => { + this.stateMachine_ = new CharacterFSM(new BasicCharacterControllerProxy(this.target_.animations_)); + this.stateMachine_.SetState(STATE_TYPES.IDLE); + }; + this.name_ = new FloatingName({ + parent: this.target_.group_, + desc: params.desc, + }); + } + get position() { + return this.target_.position; + } + get quaternion() { + return this.target_.quaternion; + } + SetState(s) { + if (!this.stateMachine_) { + return; + } + this.stateMachine_.SetState(s); + } + Update(timeInSeconds) { + if (!this.stateMachine_) { + return; + } + this.stateMachine_.Update(timeInSeconds, null); + this.target_.Update(timeInSeconds); + } +} +; +class NetworkEntity { + constructor(params) { + this.params_ = params; + this.transformUpdates_ = []; + this.targetFrame_ = null; + this.lastFrame_ = null; + this.Init_(); + } + Destroy() { + var _a, _b; + (_b = (_a = this.controller_) === null || _a === void 0 ? void 0 : _a.Destroy) === null || _b === void 0 ? void 0 : _b.call(_a); + } + Init_() { + } + CreateFromDesc(desc, transform) { + this.controller_ = new NetworkCharacterController({ + scene: this.params_.scene, + desc: desc, + }); + this.controller_.position.set(...transform[1]); + this.controller_.quaternion.set(...transform[2]); + this.targetFrame_ = { time: 0.1, transform: transform }; + } + UpdateTransform(data) { + this.transformUpdates_.push({ time: 0.1, transform: data }); + } + Update(timeElapsed) { + this.controller_.Update(timeElapsed); + this.ApplyLCT_(timeElapsed); + } + ApplyLCT_(timeElapsed) { + if (this.transformUpdates_.length == 0) { + return; + } + for (let i = 0; i < this.transformUpdates_.length; ++i) { + this.transformUpdates_[i].time -= timeElapsed; + } + while (this.transformUpdates_.length > 0 && + this.transformUpdates_[0].time <= 0.0) { + this.lastFrame_ = { + transform: [ + this.targetFrame_.transform[0], + this.controller_.position.toArray(), + this.controller_.quaternion.toArray() + ] + }; + this.targetFrame_ = this.transformUpdates_.shift(); + this.targetFrame_.time = 0.0; + } + if (this.targetFrame_ && this.lastFrame_) { + this.targetFrame_.time += timeElapsed; + const p1 = new THREE.Vector3(...this.lastFrame_.transform[1]); + const p2 = new THREE.Vector3(...this.targetFrame_.transform[1]); + const q1 = new THREE.Quaternion(...this.lastFrame_.transform[2]); + const q2 = new THREE.Quaternion(...this.targetFrame_.transform[2]); + this.controller_.position.copy(p1); + this.controller_.quaternion.copy(q1); + const t = Math.max(Math.min(this.targetFrame_.time / 0.1, 1.0), 0.0); + this.controller_.position.lerp(p2, t); + this.controller_.quaternion.slerp(q2, t); + this.controller_.SetState(this.lastFrame_.transform[0]); + } + } +} +class Chatbox { + constructor(params) { + this.params_ = params; + this.OnChat = () => { }; + this.Init_(); + } + Init_() { + this.element_ = document.getElementById('chat-input'); + this.element_.addEventListener('keydown', (e) => this.OnKeyDown_(e), false); + } + OnKeyDown_(evt) { + if (evt.keyCode === 13) { + evt.preventDefault(); + const msg = this.element_.value; + if (msg != '') { + this.OnChat(msg); + } + this.element_.value = ''; + } + } + AddMessage(msg) { + const e = document.createElement('div'); + e.className = 'chat-text'; + e.innerText = '[' + msg.name + ']: ' + msg.text; + const chatElement = document.getElementById('chat-ui-text-area'); + chatElement.insertBefore(e, document.getElementById('chat-input')); + } +} +; +class BasicMMODemo { + constructor() { + this._Initialize(); + } + _Initialize() { + this.threejs_ = new THREE.WebGLRenderer({ + antialias: true, + }); + this.threejs_.outputEncoding = THREE.sRGBEncoding; + this.threejs_.gammaFactor = 2.2; + this.threejs_.shadowMap.enabled = true; + this.threejs_.shadowMap.type = THREE.PCFSoftShadowMap; + this.threejs_.setPixelRatio(window.devicePixelRatio); + this.threejs_.setSize(window.innerWidth, window.innerHeight); + document.getElementById('container').appendChild(this.threejs_.domElement); + window.addEventListener('resize', () => { + this.OnWindowResize_(); + }, false); + const fov = 60; + const aspect = 1920 / 1080; + const near = 1.0; + const far = 1000.0; + this.camera_ = new THREE.PerspectiveCamera(fov, aspect, near, far); + this.camera_.position.set(75, 20, 0); + this.scene_ = new THREE.Scene(); + let light = new THREE.DirectionalLight(0xFFFFFF, 1.0); + light.position.set(20, 100, 10); + light.target.position.set(0, 0, 0); + light.castShadow = true; + light.shadow.bias = -0.001; + light.shadow.mapSize.width = 2048; + light.shadow.mapSize.height = 2048; + light.shadow.camera.near = 0.1; + light.shadow.camera.far = 500.0; + light.shadow.camera.near = 0.5; + light.shadow.camera.far = 500.0; + light.shadow.camera.left = 100; + light.shadow.camera.right = -100; + light.shadow.camera.top = 100; + light.shadow.camera.bottom = -100; + this.scene_.add(light); + let light2 = new THREE.AmbientLight(0x101010); + this.scene_.add(light2); + const controls = new OrbitControls(this.camera_, this.threejs_.domElement); + controls.target.set(0, 20, 0); + controls.update(); + const loader = new THREE.CubeTextureLoader(); + const texture = loader.load([ + '../resources/posx.jpg', + '../resources/negx.jpg', + '../resources/posy.jpg', + '../resources/negy.jpg', + '../resources/posz.jpg', + '../resources/negz.jpg', + ]); + texture.encoding = THREE.sRGBEncoding; + this.scene_.background = texture; + const plane = new THREE.Mesh(new THREE.PlaneGeometry(100, 100, 10, 10), new THREE.MeshStandardMaterial({ + color: 0x808080, + })); + plane.castShadow = false; + plane.receiveShadow = true; + plane.rotation.x = -Math.PI / 2; + this.scene_.add(plane); + this.SetupSocket_(); + this.entities_ = {}; + this.chatbox_ = new Chatbox(null); + this.chatbox_.OnChat = (txt) => { this.OnChat_(txt); }; + this.previousRAF_ = null; + this.RAF_(); + } + GenerateRandomName_() { + const names1 = [ + 'Aspiring', 'Nameless', 'Cautionary', 'Excited', + 'Modest', 'Maniacal', 'Caffeinated', 'Sleepy', + 'Passionate', 'Masochistic', 'Aging', 'Pedantic', + 'Talkative', + ]; + const names2 = [ + 'Coder', 'Mute', 'Giraffe', 'Snowman', + 'Machinist', 'Fondler', 'Typist', + 'Noodler', 'Arborist', 'Peeper', 'Ghost', + ]; + const n1 = names1[Math.floor(Math.random() * names1.length)]; + const n2 = names2[Math.floor(Math.random() * names2.length)]; + return n1 + ' ' + n2; + } + SetupSocket_() { + this.socket_ = io('ws://localhost:3000', { + reconnection: false, + transports: ['websocket'], + }); + // The socket.io TS definition is wrong I think. This is a hack. + this.socket_.on(EVENT_TYPES.CONNECT, () => { + console.log(this.socket_.id); + const randomName = this.GenerateRandomName_(); + this.socket_.emit(EVENT_TYPES.LOGIN_COMMIT, randomName); + }); + this.socket_.on("disconnect", () => { + console.log('DISCONNECTED: ' + this.socket_.id); // undefined + }); + this.socket_.onAny((e, d) => { + this.OnMessage_(e, d); + }); + } + OnChat_(txt) { + this.socket_.emit(EVENT_TYPES.CHAT_MSG, txt); + } + OnMessage_(e, d) { + if (e == EVENT_TYPES.WORLD_PLAYER) { + this.playerID_ = d.id; + const e = new PlayerEntity({ + scene: this.scene_, + camera: this.camera_, + socket: this.socket_ + }); + e.CreateFromDesc(d.desc); + e.UpdateTransform(d.transform); + this.entities_[d.id] = e; + console.log('entering world: ' + d.id); + } + else if (e == EVENT_TYPES.WORLD_UPDATE) { + const updates = d; + const alive = {}; + alive[this.playerID_] = this.entities_[this.playerID_]; + for (let u of updates) { + if ('desc' in u) { + const e = new NetworkEntity({ scene: this.scene_ }); + e.CreateFromDesc(u.desc, u.transform); + this.entities_[u.id] = e; + } + else { + this.entities_[u.id].UpdateTransform(u.transform); + } + alive[u.id] = this.entities_[u.id]; + } + const dead = []; + for (let k in this.entities_) { + if (!(k in alive)) { + dead.push(this.entities_[k]); + } + } + this.entities_ = alive; + for (let i = 0; i < dead.length; ++i) { + dead[i].Destroy(); + } + } + else if (e == 'chat.message') { + this.chatbox_.AddMessage(d); + } + } + OnWindowResize_() { + this.camera_.aspect = window.innerWidth / window.innerHeight; + this.camera_.updateProjectionMatrix(); + this.threejs_.setSize(window.innerWidth, window.innerHeight); + } + RAF_() { + requestAnimationFrame((t) => { + if (this.previousRAF_ == null) { + this.previousRAF_ = t; + } + this.Update_((t - this.previousRAF_) * 0.001); + this.threejs_.render(this.scene_, this.camera_); + this.previousRAF_ = t; + this.RAF_(); + }); + } + Update_(timeElapsed) { + for (let k in this.entities_) { + this.entities_[k].Update(timeElapsed); + } + } +} +let _APP = null; +window.addEventListener('DOMContentLoaded', () => { + _APP = new BasicMMODemo(); +}); diff --git a/packages/client/dist/inventory-controller.js b/packages/client/dist/inventory-controller.js new file mode 100644 index 00000000..cde95af5 --- /dev/null +++ b/packages/client/dist/inventory-controller.js @@ -0,0 +1,171 @@ +import { Constants } from 'shared'; +import { Component } from './entity'; +const { EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES } = Constants; +class InventoryDatabaseController extends Component { + constructor() { + super(); + this.items_ = {}; + } + AddItem(name, item) { + this.items_[name] = item; + } + Find(name) { + return this.items_[name]; + } +} +; +class UIInventoryController extends Component { + constructor(params) { + super(params); + } + InitEntity() { + this._RegisterHandler(EVENT_TYPES.INVENTORY_UPDATED, () => this.OnInventoryUpdated_()); + this.inventory_ = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER); + const _SetupElement = (n) => { + const element = document.getElementById(n); + element.ondragstart = (ev) => { + ev.dataTransfer.setData('text/plain', n); + }; + element.ondragover = (ev) => { + ev.preventDefault(); + }; + element.ondrop = (ev) => { + ev.preventDefault(); + const data = ev.dataTransfer.getData('text/plain'); + const other = document.getElementById(data); + this.OnItemDropped_(other, element); + }; + }; + for (let k in this.inventory_.Inventory) { + _SetupElement(k); + } + } + OnInventoryUpdated_() { + const items = this.inventory_.Inventory; + for (let k in items) { + this.SetItemAtSlot_(k, items[k].value); + } + } + OnItemDropped_(oldElement, newElement) { + const oldItem = this.inventory_.Inventory[oldElement.id]; + const newItem = this.inventory_.Inventory[newElement.id]; + const oldValue = oldItem.value; + const newValue = newItem.value; + this.SetItemAtSlot_(oldElement.id, newValue); + this.SetItemAtSlot_(newElement.id, oldValue); + this.inventory_.SetItemAtSlot_(oldElement.id, newValue); + this.inventory_.SetItemAtSlot_(newElement.id, oldValue); + } + GetItemDefinition_(name) { + const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent(KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); + return database.Find(name); + } + SetItemAtSlot_(slot, itemName) { + var _a; + const div = document.getElementById(slot); + const item = this.GetItemDefinition_(itemName); + if ((_a = item === null || item === void 0 ? void 0 : item.renderParams) === null || _a === void 0 ? void 0 : _a.icon) { + const path = './resources/icons/weapons/' + item.renderParams.icon; + div.style.backgroundImage = "url('" + path + "')"; + } + else { + div.style.backgroundImage = ''; + } + } +} +; +class InventoryController extends Component { + constructor(params) { + super(); + this.inventory_ = this.CreateEmpty_(); + } + CreateEmpty_() { + const inventory = {}; + for (let i = 1; i <= 24; ++i) { + inventory[INVENTORY_TYPES.DEFAULT_PREFIX + i] = { + type: 'inventory', + value: null, + }; + } + for (let i = 1; i <= 8; ++i) { + inventory[INVENTORY_TYPES.EQUIP_PREFIX + i] = { + type: 'equip', + value: null, + }; + } + return inventory; + } + get Inventory() { + return this.inventory_; + } + InitComponent() { + // Hack + this._RegisterHandler(EVENT_TYPES.NETWORK_INVENTORY, (m) => this.OnNetworkUpdate_(m)); + } + OnNetworkUpdate_(msg) { + const inventory = this.CreateEmpty_(); + for (let k in msg.inventory) { + inventory[k].value = msg.inventory[k]; + } + let changed = false; + for (let k in inventory) { + if (inventory[k].value != this.inventory_[k].value) { + this.SetItemAtSlot_(k, inventory[k].value); + } + } + if (inventory) { + this.Broadcast({ + topic: EVENT_TYPES.INVENTORY_UPDATED + }); + } + } + CreatePacket() { + // Meh + const packet = {}; + for (let k in this.inventory_) { + if (this.inventory_[k].value) { + packet[k] = this.inventory_[k].value; + } + } + return packet; + } + GetItemDefinition_(name) { + const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent(KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); + return database.Find(name); + } + SetItemAtSlot_(slot, itemName) { + const oldValue = this.inventory_[slot].value; + this.inventory_[slot].value = itemName; + // @TODO: Figure out all the inventory slot types. Is there only equip? + if (this.inventory_[slot].type == 'equip' && oldValue != itemName) { + this.Broadcast({ + topic: EVENT_TYPES.INVENTORY_EQUIP, + value: itemName, + }); + } + } + GetItemByName(name) { + for (let k in this.inventory_) { + if (this.inventory_[k].value == name) { + return this.FindEntity(name); + } + } + return null; + } +} +; +class InventoryItem extends Component { + constructor(params) { + super(); + this._params = params; + } + InitComponent() { } + get Params() { + return this._params; + } + get RenderParams() { + return this._params.renderParams; + } +} +; +export { InventoryDatabaseController, UIInventoryController, InventoryController, InventoryItem }; diff --git a/packages/client/dist/level-up-component.js b/packages/client/dist/level-up-component.js new file mode 100644 index 00000000..cc80050b --- /dev/null +++ b/packages/client/dist/level-up-component.js @@ -0,0 +1,48 @@ +import * as THREE from 'three'; +import { ParticleSystem } from "./particle-system"; +import { Component, Entity } from "./entity"; +class LevelUpComponentSpawner extends Component { + constructor(params) { + super(); + this._params = params; + } + Spawn(pos) { + const e = new Entity(); + e.SetPosition(pos); + e.AddComponent(new LevelUpComponent(this._params)); + this.Manager.Add(e); + return e; + } +} +; +class LevelUpComponent extends Component { + constructor(params) { + super(); + this._params = params; + this._particles = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/ball.png', + }); + this._particles._alphaSpline.AddPoint(0.0, 0.0); + this._particles._alphaSpline.AddPoint(0.1, 1.0); + this._particles._alphaSpline.AddPoint(0.7, 1.0); + this._particles._alphaSpline.AddPoint(1.0, 0.0); + this._particles._colourSpline.AddPoint(0.0, new THREE.Color(0x00FF00)); + this._particles._colourSpline.AddPoint(0.5, new THREE.Color(0x40C040)); + this._particles._colourSpline.AddPoint(1.0, new THREE.Color(0xFF4040)); + this._particles._sizeSpline.AddPoint(0.0, 0.05); + this._particles._sizeSpline.AddPoint(0.5, 0.25); + this._particles._sizeSpline.AddPoint(1.0, 0.0); + } + InitComponent() { + this._particles.AddParticles(this.Parent.Position, 300); + } + Update(timeElapsed) { + this._particles.Step(timeElapsed); + if (this._particles._particles.length == 0) { + this.Parent.SetActive(false); + } + } +} +export { LevelUpComponent, LevelUpComponentSpawner, }; diff --git a/packages/client/dist/load-controller.js b/packages/client/dist/load-controller.js new file mode 100644 index 00000000..038a8f33 --- /dev/null +++ b/packages/client/dist/load-controller.js @@ -0,0 +1,84 @@ +import * as THREE from 'three'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; +import { SkeletonUtils } from 'three/examples/jsm/utils/SkeletonUtils'; +import { Component } from "./entity"; +class LoadController extends Component { + constructor() { + super(); + this.textures_ = {}; + this.models_ = {}; + } + LoadTexture(path, name) { + if (!(name in this.textures_)) { + const loader = new THREE.TextureLoader(); + loader.setPath(path); + this.textures_[name] = { loader: loader, texture: loader.load(name) }; + this.textures_[name].encoding = THREE.sRGBEncoding; + } + return this.textures_[name].texture; + } + LoadFBX(path, name, onLoad) { + if (!(name in this.models_)) { + const loader = new FBXLoader(); + loader.setPath(path); + this.models_[name] = { loader: loader, asset: null, queue: [onLoad] }; + this.models_[name].loader.load(name, (fbx) => { + this.models_[name].asset = fbx; + const queue = this.models_[name].queue; + this.models_[name].queue = null; + for (let q of queue) { + const clone = this.models_[name].asset.clone(); + q(clone); + } + }); + } + else if (this.models_[name].asset == null) { + this.models_[name].queue.push(onLoad); + } + else { + const clone = this.models_[name].asset.clone(); + onLoad(clone); + } + } + LoadSkinnedGLB(path, name, onLoad) { + if (!(name in this.models_)) { + const loader = new GLTFLoader(); + loader.setPath(path); + this.models_[name] = { loader: loader, asset: null, queue: [onLoad] }; + this.models_[name].loader.load(name, (glb) => { + this.models_[name].asset = glb; + glb.scene.traverse(c => { + // HAHAHAH + c.frustumCulled = false; + // Apparently this doesn't work, so just disable frustum culling. + // Bugs... so many bugs... + // if (c.geometry) { + // // Just make our own, super crappy, super big box + // c.geometry.boundingBox = new THREE.Box3( + // new THREE.Vector3(-50, -50, -50), + // new THREE.Vector3(50, 50, 50)); + // c.geometry.boundingSphere = new THREE.Sphere(); + // c.geometry.boundingBox.getBoundingSphere(c.geometry.boundingSphere); + // } + }); + const queue = this.models_[name].queue; + this.models_[name].queue = null; + for (let q of queue) { + const clone = Object.assign({}, glb); + clone.scene = SkeletonUtils.clone(clone.scene); + q(clone); + } + }); + } + else if (this.models_[name].asset == null) { + this.models_[name].queue.push(onLoad); + } + else { + const clone = Object.assign({}, this.models_[name].asset); + clone.scene = SkeletonUtils.clone(clone.scene); + onLoad(clone); + } + } +} +export { LoadController }; diff --git a/packages/client/dist/loading-manager.js b/packages/client/dist/loading-manager.js new file mode 100644 index 00000000..314bef3d --- /dev/null +++ b/packages/client/dist/loading-manager.js @@ -0,0 +1,22 @@ +// LoadingManager seems to be broken when you attempt to load multiple +// resources multiple times, only first onLoad is called. +// So roll our own. +class OurLoadingManager { + constructor(loader) { + this.loader_ = loader; + this.files_ = new Set(); + this.onLoad = () => { }; + } + load(file, cb) { + this.files_.add(file); + this.loader_.load(file, (result) => { + this.files_.delete(file); + cb(result); + if (this.files_.size == 0) { + this.onLoad(); + } + }); + } +} +; +export { OurLoadingManager }; diff --git a/packages/client/dist/main.js b/packages/client/dist/main.js new file mode 100644 index 00000000..d791787a --- /dev/null +++ b/packages/client/dist/main.js @@ -0,0 +1,131 @@ +import { GUI } from 'shared'; +import { Entity } from './entity'; +import { UIController } from './ui-controller'; +import { LevelUpComponentSpawner } from './level-up-component'; +import { NetworkController } from './network-controller'; +import { SceneryController } from './scenery-controller'; +import { LoadController } from './load-controller'; +import { PlayerSpawner, NetworkEntitySpawner } from './spawners'; +import { TerrainChunkManager } from './terrain'; +import { InventoryDatabaseController } from './inventory-controller'; +import { Constants, Defs, EntityManager as aEntityManager, SpatialHashGrid as aSpatialHashGrid } from 'shared'; +import { ThreeJSController } from './threejs_component'; +const { WEAPONS_DATA, DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, EntityManager, SpatialHashGrid } = Object.assign(Object.assign(Object.assign(Object.assign({}, Constants), Defs), aEntityManager), aSpatialHashGrid); +class CrappyMMOAttempt { + constructor() { + this._Initialize(); + } + _Initialize() { + this.entityManager_ = new EntityManager(); + document.getElementById(DOM_IDS.LOGIN_UI).style.visibility = 'visible'; + document.getElementById(DOM_IDS.LOGIN_BUTTON).onclick = () => { + this.OnGameStarted_(); + }; + } + OnGameStarted_() { + this.CreateGUI_(); + this.grid_ = new SpatialHashGrid([[-1000, -1000], [1000, 1000]], [100, 100]); + this.LoadControllers_(); + this.LoadPlayer_(); + this.previousRAF_ = null; + this.RAF_(); + } + CreateGUI_() { + this._guiParams = { + general: {}, + }; + this._gui = new GUI.GUI(null); + const generalRollup = this._gui.addFolder('General'); + this._gui.close(); + } + LoadControllers_() { + const threejs = new Entity(); + threejs.AddComponent(new ThreeJSController()); + this.entityManager_.Add(threejs, null); + // Hack + this.scene_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).scene_; + this.camera_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).camera_; + this.threejs_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).threejs_; + const ui = new Entity(); + ui.AddComponent(new UIController(null)); + this.entityManager_.Add(ui, KNOWN_ENTITIES.UI); + const network = new Entity(); + network.AddComponent(new NetworkController(null)); + this.entityManager_.Add(network, KNOWN_ENTITIES.NETWORK); + const t = new Entity(); + t.AddComponent(new TerrainChunkManager({ + scene: this.scene_, + target: 'player', + gui: this._gui, + guiParams: this._guiParams, + threejs: this.threejs_, + })); + this.entityManager_.Add(t, KNOWN_ENTITIES.TERRAIN); + const l = new Entity(); + l.AddComponent(new LoadController()); + this.entityManager_.Add(l, KNOWN_ENTITIES.LOADER); + const scenery = new Entity(); + scenery.AddComponent(new SceneryController({ + scene: this.scene_, + grid: this.grid_, + })); + this.entityManager_.Add(scenery, KNOWN_ENTITIES.SCENERY); + const spawner = new Entity(); + spawner.AddComponent(new PlayerSpawner({ + grid: this.grid_, + scene: this.scene_, + camera: this.camera_, + })); + spawner.AddComponent(new NetworkEntitySpawner({ + grid: this.grid_, + scene: this.scene_, + camera: this.camera_, + })); + this.entityManager_.Add(spawner, KNOWN_ENTITIES.SPAWNERS); + const database = new Entity(); + database.AddComponent(new InventoryDatabaseController()); + this.entityManager_.Add(database, KNOWN_ENTITIES.DATABASE); + // HACK + for (let k in WEAPONS_DATA) { + database.GetComponent(KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER).AddItem(k, WEAPONS_DATA[k]); + } + } + LoadPlayer_() { + const params = { + camera: this.camera_, + scene: this.scene_, + }; + const levelUpSpawner = new Entity(); + levelUpSpawner.AddComponent(new LevelUpComponentSpawner({ + camera: this.camera_, + scene: this.scene_, + })); + this.entityManager_.Add(levelUpSpawner, KNOWN_ENTITIES.LEVEL_UP_SPAWNER); + } + _OnWindowResize() { + this.camera_.aspect = window.innerWidth / window.innerHeight; + this.camera_.updateProjectionMatrix(); + this.threejs_.setSize(window.innerWidth, window.innerHeight); + } + RAF_() { + requestAnimationFrame((t) => { + if (this.previousRAF_ === null) { + this.previousRAF_ = t; + } + this.threejs_.render(this.scene_, this.camera_); + this.Step_(t - this.previousRAF_); + this.previousRAF_ = t; + setTimeout(() => { + this.RAF_(); + }, 1); + }); + } + Step_(timeElapsed) { + const timeElapsedS = Math.min(1.0 / 30.0, timeElapsed * 0.001); + this.entityManager_.Update(timeElapsedS); + } +} +let _APP = null; +window.addEventListener('DOMContentLoaded', () => { + _APP = new CrappyMMOAttempt(); +}); diff --git a/packages/client/dist/network-controller.js b/packages/client/dist/network-controller.js new file mode 100644 index 00000000..2f8ef7ac --- /dev/null +++ b/packages/client/dist/network-controller.js @@ -0,0 +1,135 @@ +import { Constants } from 'shared'; +import { io } from 'socket.io-client'; +const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; +import { Component } from './entity'; +class NetworkController extends Component { + constructor(params) { + super(); + this.playerID_ = null; + this.SetupSocket_(); + } + GenerateRandomName_() { + const names1 = [ + 'Aspiring', 'Nameless', 'Cautionary', 'Excited', + 'Modest', 'Maniacal', 'Caffeinated', 'Sleepy', + 'Passionate', 'Medical', + ]; + const names2 = [ + 'Painter', 'Cheese Guy', 'Giraffe', 'Snowman', + 'Doberwolf', 'Cocktail', 'Fondler', 'Typist', + 'Noodler', 'Arborist', 'Peeper' + ]; + const n1 = names1[Math.floor(Math.random() * names1.length)]; + const n2 = names2[Math.floor(Math.random() * names2.length)]; + return n1 + ' ' + n2; + } + SetupSocket_() { + this.socket_ = io('ws://localhost:3000', { + reconnection: false, + transports: ['websocket'], + timeout: 10000, + }); + this.socket_.on(EVENT_TYPES.CONNECT, () => { + console.log(this.socket_.id); + const randomName = this.GenerateRandomName_(); + // Input validation is for losers + this.socket_.emit(EVENT_TYPES.LOGIN_COMMIT, document.getElementById('login-input').value); + }); + this.socket_.on("disconnect", () => { + console.log('DISCONNECTED: ' + this.socket_.id); // undefined + }); + this.socket_.onAny((e, d) => { + this.OnMessage_(e, d); + }); + } + SendChat(txt) { + this.socket_.emit(EVENT_TYPES.CHAT_MSG, txt); + } + SendTransformUpdate(transform) { + this.socket_.emit(EVENT_TYPES.WORLD_UPDATE, transform); + } + SendActionAttack_() { + this.socket_.emit(EVENT_TYPES.ACTION_ATTACK); + } + SendInventoryChange_(packet) { + this.socket_.emit(EVENT_TYPES.WORLD_INVENTORY, packet); + } + GetEntityID_(serverID) { + if (serverID == this.playerID_) { + return 'player'; + } + else { + return '__npc__' + serverID; + } + } + OnMessage_(e, d) { + if (e == EVENT_TYPES.WORLD_PLAYER) { + const spawner = this.FindEntity(KNOWN_ENTITIES.SPAWNERS).GetComponent(NAMED_COMPONENTS.PLAYER_SPAWNER); + const player = spawner.Spawn(d.desc); + player.Broadcast({ + topic: EVENT_TYPES.NETWORK_UPDATE, + transform: d.transform, + }); + player.Broadcast({ + topic: EVENT_TYPES.NETWORK_INVENTORY, + inventory: d.desc.character.inventory, + }); + console.log('entering world: ' + d.id); + this.playerID_ = d.id; + } + else if (e == EVENT_TYPES.WORLD_UPDATE) { + const updates = d; + const spawner = this.FindEntity(KNOWN_ENTITIES.SPAWNERS).GetComponent(NAMED_COMPONENTS.NETWORK_ENTITY_SPAWNER); + const ui = this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER); + for (let u of updates) { + const id = this.GetEntityID_(u.id); + let npc = null; + if ('desc' in u) { + npc = spawner.Spawn(id, u.desc); + npc.Broadcast({ + topic: EVENT_TYPES.NETWORK_INVENTORY, + inventory: u.desc.character.inventory, + }); + } + else { + npc = this.FindEntity(id); + } + // Translate events, hardcoded, bad, sorry + let events = []; + if (u.events) { + for (let e of u.events) { + events.push({ + type: e.type, + target: this.FindEntity(this.GetEntityID_(e.target)), + attacker: this.FindEntity(this.GetEntityID_(e.attacker)), + amount: e.amount, + }); + } + } + ui.AddEventMessages(events); + npc.Broadcast({ + topic: EVENT_TYPES.NETWORK_UPDATE, + transform: u.transform, + stats: u.stats, + events: events, + }); + } + } + else if (e == 'chat.message') { + this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER).AddChatMessage(d); + } + else if (e == EVENT_TYPES.WORLD_INVENTORY) { + const id = this.GetEntityID_(d[0]); + const e = this.FindEntity(id); + if (!e) { + return; + } + e.Broadcast({ + topic: EVENT_TYPES.NETWORK_INVENTORY, + inventory: d[1], + }); + } + } +} +; +export { NetworkController }; diff --git a/packages/client/dist/network-entity-controller.js b/packages/client/dist/network-entity-controller.js new file mode 100644 index 00000000..a7fed0e7 --- /dev/null +++ b/packages/client/dist/network-entity-controller.js @@ -0,0 +1,90 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants } from 'shared'; +const { EVENT_TYPES } = Constants; +class NetworkEntityController extends Component { + constructor(params) { + super(); + this.transformUpdates_ = []; + this.targetFrame_ = null; + this.lastFrame_ = null; + this.lastUpdate_ = 0.0; + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.NETWORK_UPDATE, (m) => { this.OnNetworkUpdate_(m); }); + } + SetTransform_(transform) { + this.parent_.SetPosition(new THREE.Vector3(...transform[1])); + this.parent_.SetQuaternion(new THREE.Quaternion(...transform[2])); + this.targetFrame_ = { time: 0.1, transform: transform }; + } + OnNetworkUpdate_(msg) { + if ('transform' in msg) { + this.lastUpdate_ = 0.0; + this.transformUpdates_.push({ time: 0.1, transform: msg.transform }); + // First update + if (this.targetFrame_ == null) { + this.SetTransform_(msg.transform); + } + } + // All of this should be LCT'd, but whatever + if ('stats' in msg) { + this.Broadcast({ + topic: EVENT_TYPES.STATS_NETWORK, + value: msg.stats, + }); + } + if ('events' in msg) { + if (msg.events.length > 0) { + this.Broadcast({ + topic: EVENT_TYPES.EVENTS_NETWORK, + value: msg.events, + }); + } + } + } + Update(timeElapsed) { + this.lastUpdate_ += timeElapsed; + if (this.lastUpdate_ >= 10.0) { + this.Parent.SetDead(); + } + if (this.transformUpdates_.length == 0) { + return; + } + for (let i = 0; i < this.transformUpdates_.length; ++i) { + this.transformUpdates_[i].time -= timeElapsed; + } + while (this.transformUpdates_.length > 0 && + this.transformUpdates_[0].time <= 0.0) { + this.lastFrame_ = { + transform: [ + this.targetFrame_.transform[0], + this.Parent.Position.toArray(), + this.Parent.Quaternion.toArray() + ] + }; + this.targetFrame_ = this.transformUpdates_.shift(); + this.targetFrame_.time = 0.0; + } + if (this.targetFrame_ && this.lastFrame_) { + this.targetFrame_.time += timeElapsed; + const p1 = new THREE.Vector3(...this.lastFrame_.transform[1]); + const p2 = new THREE.Vector3(...this.targetFrame_.transform[1]); + const q1 = new THREE.Quaternion(...this.lastFrame_.transform[2]); + const q2 = new THREE.Quaternion(...this.targetFrame_.transform[2]); + const pf = new THREE.Vector3(); + const qf = new THREE.Quaternion(); + pf.copy(p1); + qf.copy(q1); + const t = Math.max(Math.min(this.targetFrame_.time / 0.1, 1.0), 0.0); + pf.lerp(p2, t); + qf.slerp(q2, t); + this.Parent.SetPosition(pf); + this.Parent.SetQuaternion(qf); + const controller = this.GetComponent('NPCController'); + controller.SetState(this.lastFrame_.transform[0]); + } + } +} +; +export { NetworkEntityController }; diff --git a/packages/client/dist/network-player-controller.js b/packages/client/dist/network-player-controller.js new file mode 100644 index 00000000..7310102f --- /dev/null +++ b/packages/client/dist/network-player-controller.js @@ -0,0 +1,68 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants } from 'shared'; +const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; +class NetworkEntityController extends Component { + constructor(params) { + super(); + this.updateTimer_ = 0.0; + this.loaded_ = false; + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => { this.OnLoaded_(m); }); + this._RegisterHandler(EVENT_TYPES.INVENTORY_EQUIP, (m) => { this.OnEquipChanged_(m); }); + this._RegisterHandler(EVENT_TYPES.NETWORK_UPDATE, (m) => { this.OnUpdate_(m); }); + this._RegisterHandler(EVENT_TYPES.ACTION_ATTACK, (m) => { this.OnActionAttack_(m); }); + } + InitEntity() { + this.net_ = this.FindEntity(KNOWN_ENTITIES.NETWORK).GetComponent(NAMED_COMPONENTS.NETWORK_CONTROLLER); + } + OnEquipChanged_(msg) { + const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER).CreatePacket(); + this.net_.SendInventoryChange_(inventory); + } + OnActionAttack_(msg) { + this.net_.SendActionAttack_(); + } + OnUpdate_(msg) { + if (msg.transform) { + this.Parent.SetPosition(new THREE.Vector3(...msg.transform[1])); + this.Parent.SetQuaternion(new THREE.Quaternion(...msg.transform[2])); + } + if (msg.stats) { + this.Broadcast({ + topic: EVENT_TYPES.STATS_NETWORK, + value: msg.stats, + }); + } + if (msg.events) { + if (msg.events.length > 0) { + this.Broadcast({ + topic: EVENT_TYPES.EVENTS_NETWORK, + value: msg.events, + }); + } + } + } + OnLoaded_(_) { + this.loaded_ = true; + } + CreateTransformPacket() { + const controller = this.GetComponent('BasicCharacterController'); + // HACK + return [ + controller.stateMachine_._currentState.Name, + this.Parent.Position.toArray(), + this.Parent.Quaternion.toArray(), + ]; + } + Update(timeElapsed) { + this.updateTimer_ -= timeElapsed; + if (this.updateTimer_ <= 0.0 && this.loaded_) { + this.updateTimer_ = 0.1; + this.net_.SendTransformUpdate(this.CreateTransformPacket()); + } + } +} +; +export { NetworkEntityController }; diff --git a/packages/client/dist/npc-entity.js b/packages/client/dist/npc-entity.js new file mode 100644 index 00000000..c38fddb9 --- /dev/null +++ b/packages/client/dist/npc-entity.js @@ -0,0 +1,138 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { CharacterFSM, BasicCharacterControllerProxy } from './player-entity'; +import { Constants, Defs } from 'shared'; +const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, STATE_TYPES, CHARACTER_MODELS } = Object.assign(Object.assign({}, Constants), Defs); +class NPCController extends Component { + constructor(params) { + super(); + this.params_ = params; + } + Destroy() { + this.group_.traverse(c => { + if (c.material) { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + for (let m of materials) { + m.dispose(); + } + } + if (c.geometry) { + c.geometry.dispose(); + } + }); + this.params_.scene.remove(this.group_); + } + InitEntity() { + this._Init(); + } + _Init() { + this.animations_ = {}; + this.group_ = new THREE.Group(); + this.params_.scene.add(this.group_); + this.queuedState_ = null; + this.LoadModels_(); + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); + this._RegisterHandler('update.position', (m) => { this.OnPosition_(m); }); + this._RegisterHandler('update.rotation', (m) => { this.OnRotation_(m); }); + } + SetState(s) { + if (!this.stateMachine_) { + this.queuedState_ = s; + return; + } + // hack: should propogate attacks through the events on server + // Right now, they're inferred from whatever animation we're running, blech + if (s == STATE_TYPES.ATTACK && this.stateMachine_._currentState.Name != STATE_TYPES.ATTACK) { + this.Broadcast({ + topic: EVENT_TYPES.ACTION_ATTACK, + }); + } + this.stateMachine_.SetState(s); + } + OnDeath_(msg) { + this.SetState(STATE_TYPES.DEATH); + } + OnPosition_(m) { + this.group_.position.copy(m.value); + } + OnRotation_(m) { + this.group_.quaternion.copy(m.value); + } + LoadModels_() { + const classType = this.params_.desc.character.class; + const modelData = CHARACTER_MODELS[classType]; + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); + loader.LoadSkinnedGLB(modelData.path, modelData.base, (glb) => { + this.target_ = glb.scene; + this.target_.scale.setScalar(modelData.scale); + this.target_.visible = false; + this.group_.add(this.target_); + this.bones_ = {}; + this.target_.traverse(c => { + if (!c.skeleton) { + return; + } + for (let b of c.skeleton.bones) { + this.bones_[b.name] = b; + } + }); + this.target_.traverse(c => { + c.castShadow = true; + c.receiveShadow = true; + if (c.material && c.material.map) { + c.material.map.encoding = THREE.sRGBEncoding; + } + }); + this.mixer_ = new THREE.AnimationMixer(this.target_); + const _FindAnim = (animName) => { + for (let i = 0; i < glb.animations.length; i++) { + if (glb.animations[i].name.includes(animName)) { + const clip = glb.animations[i]; + const action = this.mixer_.clipAction(clip); + return { + clip: clip, + action: action + }; + } + } + return null; + }; + this.animations_[STATE_TYPES.IDLE] = _FindAnim(ANIM_TYPES.IDLE); + this.animations_[STATE_TYPES.WALK] = _FindAnim(ANIM_TYPES.WALK); + this.animations_[STATE_TYPES.RUN] = _FindAnim(ANIM_TYPES.RUN); + this.animations_[STATE_TYPES.DEATH] = _FindAnim(ANIM_TYPES.DEATH); + this.animations_[STATE_TYPES.ATTACK] = _FindAnim(ANIM_TYPES.ATTACK); + this.animations_[STATE_TYPES.DANCE] = _FindAnim(ANIM_TYPES.DANCE); + this.target_.visible = true; + this.stateMachine_ = new CharacterFSM(new BasicCharacterControllerProxy(this.animations_)); + if (this.queuedState_) { + this.stateMachine_.SetState(this.queuedState_); + this.queuedState_ = null; + } + else { + this.stateMachine_.SetState(STATE_TYPES.IDLE); + } + this.Broadcast({ + topic: EVENT_TYPES.LOAD_CHARACTER, + model: this.group_, + bones: this.bones_, + }); + }); + } + Update(timeInSeconds) { + if (!this.stateMachine_) { + return; + } + this.stateMachine_.Update(timeInSeconds, null); + if (this.mixer_) { + this.mixer_.update(timeInSeconds); + } + } +} +; +export { NPCController }; diff --git a/packages/client/dist/particle-system.js b/packages/client/dist/particle-system.js new file mode 100644 index 00000000..e08a9fb0 --- /dev/null +++ b/packages/client/dist/particle-system.js @@ -0,0 +1,256 @@ +import * as THREE from 'three'; +const _VS = ` + uniform float pointMultiplier; + + attribute float size; + attribute float angle; + attribute float blend; + attribute vec4 colour; + + varying vec4 vColour; + varying vec2 vAngle; + varying float vBlend; + + void main() { + vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); + + gl_Position = projectionMatrix * mvPosition; + gl_PointSize = size * pointMultiplier / gl_Position.w; + + vAngle = vec2(cos(angle), sin(angle)); + vColour = colour; + vBlend = blend; + }`; +const _FS = ` + + uniform sampler2D diffuseTexture; + + varying vec4 vColour; + varying vec2 vAngle; + varying float vBlend; + + void main() { + vec2 coords = (gl_PointCoord - 0.5) * mat2(vAngle.x, vAngle.y, -vAngle.y, vAngle.x) + 0.5; + gl_FragColor = texture2D(diffuseTexture, coords) * vColour; + gl_FragColor.xyz *= gl_FragColor.w; + gl_FragColor.w *= vBlend; + }`; +class LinearSpline { + constructor(lerp) { + this.points_ = []; + this._lerp = lerp; + } + AddPoint(t, d) { + this.points_.push([t, d]); + } + Get(t) { + let p1 = 0; + for (let i = 0; i < this.points_.length; i++) { + if (this.points_[i][0] >= t) { + break; + } + p1 = i; + } + const p2 = Math.min(this.points_.length - 1, p1 + 1); + if (p1 == p2) { + return this.points_[p1][1]; + } + return this._lerp((t - this.points_[p1][0]) / (this.points_[p2][0] - this.points_[p1][0]), this.points_[p1][1], this.points_[p2][1]); + } +} +class ParticleEmitter { + constructor() { + this.alphaSpline_ = new LinearSpline((t, a, b) => { + return a + t * (b - a); + }); + this.colourSpline_ = new LinearSpline((t, a, b) => { + const c = a.clone(); + return c.lerp(b, t); + }); + this.sizeSpline_ = new LinearSpline((t, a, b) => { + return a + t * (b - a); + }); + this.emissionRate_ = 0.0; + this.emissionAccumulator_ = 0.0; + this.particles_ = []; + this.emitterLife_ = null; + } + UpdateParticles_(timeElapsed) { + for (let p of this.particles_) { + p.life -= timeElapsed; + } + this.particles_ = this.particles_.filter(p => { + return p.life > 0.0; + }); + for (let i = 0; i < this.particles_.length; ++i) { + const p = this.particles_[i]; + const t = 1.0 - p.life / p.maxLife; + if (t < 0 || t > 1) { + let a = 0; + } + p.rotation += timeElapsed * 0.5; + p.alpha = this.alphaSpline_.Get(t); + p.currentSize = p.size * this.sizeSpline_.Get(t); + p.colour.copy(this.colourSpline_.Get(t)); + p.position.add(p.velocity.clone().multiplyScalar(timeElapsed)); + const drag = p.velocity.clone(); + drag.multiplyScalar(timeElapsed * 0.1); + drag.x = Math.sign(p.velocity.x) * Math.min(Math.abs(drag.x), Math.abs(p.velocity.x)); + drag.y = Math.sign(p.velocity.y) * Math.min(Math.abs(drag.y), Math.abs(p.velocity.y)); + drag.z = Math.sign(p.velocity.z) * Math.min(Math.abs(drag.z), Math.abs(p.velocity.z)); + p.velocity.sub(drag); + } + } + CreateParticle_() { + const life = (Math.random() * 0.75 + 0.25) * 5.0; + return { + position: new THREE.Vector3((Math.random() * 2 - 1) * 4.0 + -44, (Math.random() * 2 - 1) * 4.0 + 0, (Math.random() * 2 - 1) * 4.0 + 12), + size: (Math.random() * 0.5 + 0.5) * 2.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: new THREE.Vector3(0, 1, 0), + blend: 0.0, + }; + } + get IsAlive() { + if (this.emitterLife_ === null) { + return this.particles_.length > 0; + } + else { + return this.emitterLife_ > 0.0 || this.particles_.length > 0; + } + } + SetLife(life) { + this.emitterLife_ = life; + } + SetEmissionRate(rate) { + this.emissionRate_ = rate; + } + OnUpdate_(_) { + } + Update(timeElapsed) { + this.OnUpdate_(timeElapsed); + if (this.emitterLife_ !== null) { + this.emitterLife_ -= timeElapsed; + } + if (this.emissionRate_ > 0.0) { + this.emissionAccumulator_ += timeElapsed; + const n = Math.floor(this.emissionAccumulator_ * this.emissionRate_); + this.emissionAccumulator_ -= n / this.emissionRate_; + for (let i = 0; i < n; i++) { + const p = this.CreateParticle_(); + this.particles_.push(p); + } + } + this.UpdateParticles_(timeElapsed); + } +} +; +class ParticleSystem { + constructor(params) { + const uniforms = { + diffuseTexture: { + value: new THREE.TextureLoader().load(params.texture) + }, + pointMultiplier: { + value: window.innerHeight / (2.0 * Math.tan(0.5 * 60.0 * Math.PI / 180.0)) + } + }; + this.material_ = new THREE.ShaderMaterial({ + uniforms: uniforms, + vertexShader: _VS, + fragmentShader: _FS, + blending: THREE.CustomBlending, + blendEquation: THREE.AddEquation, + blendSrc: THREE.OneFactor, + blendDst: THREE.OneMinusSrcAlphaFactor, + depthTest: true, + depthWrite: false, + transparent: true, + vertexColors: true + }); + this.camera_ = params.camera; + this.particles_ = []; + this.geometry_ = new THREE.BufferGeometry(); + this.geometry_.setAttribute('position', new THREE.Float32BufferAttribute([], 3)); + this.geometry_.setAttribute('size', new THREE.Float32BufferAttribute([], 1)); + this.geometry_.setAttribute('colour', new THREE.Float32BufferAttribute([], 4)); + this.geometry_.setAttribute('angle', new THREE.Float32BufferAttribute([], 1)); + this.geometry_.setAttribute('blend', new THREE.Float32BufferAttribute([], 1)); + this.points_ = new THREE.Points(this.geometry_, this.material_); + params.parent.add(this.points_); + this.emitters_ = []; + this.particles_ = []; + this.UpdateGeometry_(); + } + Destroy() { + this.material_.dispose(); + this.geometry_.dispose(); + if (this.points_.parent) { + this.points_.parent.remove(this.points_); + } + } + AddEmitter(e) { + this.emitters_.push(e); + } + UpdateGeometry_() { + const positions = []; + const sizes = []; + const colours = []; + const angles = []; + const blends = []; + const box = new THREE.Box3(); + for (let p of this.particles_) { + positions.push(p.position.x, p.position.y, p.position.z); + colours.push(p.colour.r, p.colour.g, p.colour.b, p.alpha); + sizes.push(p.currentSize); + angles.push(p.rotation); + blends.push(p.blend); + box.expandByPoint(p.position); + } + this.geometry_.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3)); + this.geometry_.setAttribute('size', new THREE.Float32BufferAttribute(sizes, 1)); + this.geometry_.setAttribute('colour', new THREE.Float32BufferAttribute(colours, 4)); + this.geometry_.setAttribute('angle', new THREE.Float32BufferAttribute(angles, 1)); + this.geometry_.setAttribute('blend', new THREE.Float32BufferAttribute(blends, 1)); + this.geometry_.attributes.position.needsUpdate = true; + this.geometry_.attributes.size.needsUpdate = true; + this.geometry_.attributes.colour.needsUpdate = true; + this.geometry_.attributes.angle.needsUpdate = true; + this.geometry_.attributes.blend.needsUpdate = true; + this.geometry_.boundingBox = box; + this.geometry_.boundingSphere = new THREE.Sphere(); + box.getBoundingSphere(this.geometry_.boundingSphere); + } + UpdateParticles_(timeElapsed) { + this.particles_ = this.emitters_.map(e => e.particles_); + this.particles_ = this.particles_.flat(); + this.particles_.sort((a, b) => { + const d1 = this.camera_.position.distanceTo(a.position); + const d2 = this.camera_.position.distanceTo(b.position); + if (d1 > d2) { + return -1; + } + if (d1 < d2) { + return 1; + } + return 0; + }); + } + UpdateEmitters_(timeElapsed) { + for (let i = 0; i < this.emitters_.length; ++i) { + this.emitters_[i].Update(timeElapsed); + } + this.emitters_ = this.emitters_.filter(e => e.IsAlive); + } + Update(timeElapsed) { + this.UpdateEmitters_(timeElapsed); + this.UpdateParticles_(timeElapsed); + this.UpdateGeometry_(); + } +} +; +export { ParticleEmitter, ParticleSystem }; diff --git a/packages/client/dist/player-entity.js b/packages/client/dist/player-entity.js new file mode 100644 index 00000000..fcd4634f --- /dev/null +++ b/packages/client/dist/player-entity.js @@ -0,0 +1,222 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { FiniteStateMachine } from './finite-state-machine'; +import { IdleState, WalkState, RunState, AttackState, DanceState, DeathState } from './player-state'; +import { Constants, Defs } from 'shared'; +const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, CHARACTER_MODELS } = Object.assign(Object.assign({}, Constants), Defs); +class CharacterFSM extends FiniteStateMachine { + constructor(proxy) { + super(); + this._proxy = proxy; + this.Init_(); + } + Init_() { + this._AddState(STATE_TYPES.IDLE, IdleState); + this._AddState(STATE_TYPES.WALK, WalkState); + this._AddState(STATE_TYPES.RUN, RunState); + this._AddState(STATE_TYPES.ATTACK, AttackState); + this._AddState(STATE_TYPES.DEATH, DeathState); + this._AddState(STATE_TYPES.DANCE, DanceState); + } +} +; +class BasicCharacterControllerProxy { + constructor(animations) { + this.animations_ = animations; + } + get animations() { + return this.animations_; + } +} +; +class BasicCharacterController extends Component { + constructor(params) { + super(); + this.params_ = params; + } + InitEntity() { + this.Init_(); + } + Init_() { + this.decceleration_ = new THREE.Vector3(-0.0005, -0.0001, -5.0); + this.acceleration_ = new THREE.Vector3(1, 0.125, 100.0); + this.velocity_ = new THREE.Vector3(0, 0, 0); + this.group_ = new THREE.Group(); + this.params_.scene.add(this.group_); + this.animations_ = {}; + this.LoadModels_(); + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); + this._RegisterHandler('update.position', (m) => { this.OnUpdatePosition_(m); }); + this._RegisterHandler('update.rotation', (m) => { this.OnUpdateRotation_(m); }); + } + OnUpdatePosition_(msg) { + this.group_.position.copy(msg.value); + } + OnUpdateRotation_(msg) { + this.group_.quaternion.copy(msg.value); + } + OnDeath_(msg) { + this.stateMachine_.SetState(STATE_TYPES.DEATH); + } + LoadModels_() { + const classType = this.params_.desc.character.class; + const modelData = CHARACTER_MODELS[classType]; + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); + loader.LoadSkinnedGLB(modelData.path, modelData.base, (glb) => { + this.target_ = glb.scene; + this.target_.scale.setScalar(modelData.scale); + this.target_.visible = false; + this.group_.add(this.target_); + this.bones_ = {}; + this.target_.traverse(c => { + if (!c.skeleton) { + return; + } + for (let b of c.skeleton.bones) { + this.bones_[b.name] = b; + } + }); + this.target_.traverse(c => { + c.castShadow = true; + c.receiveShadow = true; + if (c.material && c.material.map) { + c.material.map.encoding = THREE.sRGBEncoding; + } + }); + this._mixer = new THREE.AnimationMixer(this.target_); + const _FindAnim = (animName) => { + for (let i = 0; i < glb.animations.length; i++) { + if (glb.animations[i].name.includes(animName)) { + const clip = glb.animations[i]; + const action = this._mixer.clipAction(clip); + return { + clip: clip, + action: action + }; + } + } + return null; + }; + this.animations_[STATE_TYPES.IDLE] = _FindAnim(ANIM_TYPES.IDLE); + this.animations_[STATE_TYPES.WALK] = _FindAnim(ANIM_TYPES.WALK); + this.animations_[STATE_TYPES.RUN] = _FindAnim(ANIM_TYPES.RUN); + this.animations_[STATE_TYPES.DEATH] = _FindAnim(ANIM_TYPES.DEATH); + this.animations_[STATE_TYPES.ATTACK] = _FindAnim(ANIM_TYPES.ATTACK); + this.animations_[STATE_TYPES.DANCE] = _FindAnim(ANIM_TYPES.DANCE); + this.target_.visible = true; + this.stateMachine_ = new CharacterFSM(new BasicCharacterControllerProxy(this.animations_)); + this.stateMachine_.SetState(STATE_TYPES.IDLE); + this.Broadcast({ + topic: EVENT_TYPES.LOAD_CHARACTER, + model: this.target_, + bones: this.bones_, + }); + this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER).FadeoutLogin(); + }); + } + _FindIntersections(pos, oldPos) { + const _IsAlive = (c) => { + const h = c.entity.GetComponent('HealthComponent'); + if (!h) { + return true; + } + return h.Health > 0; + }; + const grid = this.GetComponent('SpatialGridController'); + const nearby = grid.FindNearbyEntities(5).filter(e => _IsAlive(e)); + const collisions = []; + for (let i = 0; i < nearby.length; ++i) { + const e = nearby[i].entity; + const d = Math.pow((Math.pow((pos.x - e.Position.x), 2) + Math.pow((pos.z - e.Position.z), 2)), 0.5); + // HARDCODED + if (d <= 4) { + const d2 = Math.pow((Math.pow((oldPos.x - e.Position.x), 2) + Math.pow((oldPos.z - e.Position.z), 2)), 0.5); + // If they're already colliding, let them get untangled. + if (d2 <= 4) { + continue; + } + else { + collisions.push(nearby[i].entity); + } + } + } + return collisions; + } + Update(timeInSeconds) { + if (!this.stateMachine_) { + return; + } + const input = this.GetComponent('BasicCharacterControllerInput'); + this.stateMachine_.Update(timeInSeconds, input); + if (this._mixer) { + this._mixer.update(timeInSeconds); + } + // HARDCODED + this.Broadcast({ + topic: 'player.action', + action: this.stateMachine_._currentState.Name, + }); + const currentState = this.stateMachine_._currentState; + if (currentState.Name != STATE_TYPES.WALK && + currentState.Name != STATE_TYPES.RUN && + currentState.Name != STATE_TYPES.IDLE) { + return; + } + const velocity = this.velocity_; + const frameDecceleration = new THREE.Vector3(velocity.x * this.decceleration_.x, velocity.y * this.decceleration_.y, velocity.z * this.decceleration_.z); + frameDecceleration.multiplyScalar(timeInSeconds); + frameDecceleration.z = Math.sign(frameDecceleration.z) * Math.min(Math.abs(frameDecceleration.z), Math.abs(velocity.z)); + velocity.add(frameDecceleration); + const controlObject = this.group_; + const _Q = new THREE.Quaternion(); + const _A = new THREE.Vector3(); + const _R = controlObject.quaternion.clone(); + const acc = this.acceleration_.clone(); + if (input._keys.shift) { + acc.multiplyScalar(2.0); + } + if (input._keys.forward) { + velocity.z += acc.z * timeInSeconds; + } + if (input._keys.backward) { + velocity.z -= acc.z * timeInSeconds; + } + if (input._keys.left) { + _A.set(0, 1, 0); + _Q.setFromAxisAngle(_A, 4.0 * Math.PI * timeInSeconds * this.acceleration_.y); + _R.multiply(_Q); + } + if (input._keys.right) { + _A.set(0, 1, 0); + _Q.setFromAxisAngle(_A, 4.0 * -Math.PI * timeInSeconds * this.acceleration_.y); + _R.multiply(_Q); + } + controlObject.quaternion.copy(_R); + const oldPosition = new THREE.Vector3(); + oldPosition.copy(controlObject.position); + const forward = new THREE.Vector3(0, 0, 1); + forward.applyQuaternion(controlObject.quaternion); + forward.normalize(); + const sideways = new THREE.Vector3(1, 0, 0); + sideways.applyQuaternion(controlObject.quaternion); + sideways.normalize(); + sideways.multiplyScalar(velocity.x * timeInSeconds); + forward.multiplyScalar(velocity.z * timeInSeconds); + const pos = controlObject.position.clone(); + pos.add(forward); + pos.add(sideways); + const collisions = this._FindIntersections(pos, oldPosition); + if (collisions.length > 0) { + return; + } + const terrain = this.FindEntity(KNOWN_ENTITIES.TERRAIN).GetComponent('TerrainChunkManager'); + pos.y = terrain.GetHeight(pos)[0]; + controlObject.position.copy(pos); + this.Parent.SetPosition(controlObject.position); + this.Parent.SetQuaternion(controlObject.quaternion); + } +} +; +export { CharacterFSM, BasicCharacterControllerProxy, BasicCharacterController, }; diff --git a/packages/client/dist/player-input.js b/packages/client/dist/player-input.js new file mode 100644 index 00000000..3587f785 --- /dev/null +++ b/packages/client/dist/player-input.js @@ -0,0 +1,122 @@ +import * as THREE from 'three'; +import { Constants } from 'shared'; +import { Component } from "./entity"; +const { DOM_IDS, EVENT_TYPES } = Constants; +class PickableComponent extends Component { + constructor() { + super(); + } + InitComponent() { + } +} +; +class BasicCharacterControllerInput extends Component { + constructor(params) { + super(); + this._params = params; + this._Init(); + } + _Init() { + this._keys = { + forward: false, + backward: false, + left: false, + right: false, + space: false, + shift: false, + backspace: false, + }; + this._raycaster = new THREE.Raycaster(); + document.addEventListener('keydown', (e) => this._onKeyDown(e), false); + document.addEventListener('keyup', (e) => this._onKeyUp(e), false); + document.addEventListener('mouseup', (e) => this._onMouseUp(e), false); + } + _onMouseUp(event) { + const rect = document.getElementById(DOM_IDS.THREEJS).getBoundingClientRect(); + const pos = { + x: ((event.clientX - rect.left) / rect.width) * 2 - 1, + y: ((event.clientY - rect.top) / rect.height) * -2 + 1, + }; + this._raycaster.setFromCamera(pos, this._params.camera); + const pickables = this.Manager.Filter((e) => { + const p = e.GetComponent('PickableComponent'); + if (!p) { + return false; + } + return e._mesh; + }); + const ray = new THREE.Ray(); + ray.origin.setFromMatrixPosition(this._params.camera.matrixWorld); + ray.direction.set(pos.x, pos.y, 0.5).unproject(this._params.camera).sub(ray.origin).normalize(); + // hack + document.getElementById(DOM_IDS.QUEST_UI).style.visibility = 'hidden'; + for (let p of pickables) { + // GOOD ENOUGH + const box = new THREE.Box3().setFromObject(p._mesh); + if (ray.intersectsBox(box)) { + p.Broadcast({ + topic: EVENT_TYPES.INPUT_PICKED + }); + break; + } + } + } + _onKeyDown(event) { + if (event.currentTarget.activeElement != document.body) { + return; + } + switch (event.keyCode) { + case 87: // w + this._keys.forward = true; + break; + case 65: // a + this._keys.left = true; + break; + case 83: // s + this._keys.backward = true; + break; + case 68: // d + this._keys.right = true; + break; + case 32: // SPACE + this._keys.space = true; + break; + case 16: // SHIFT + this._keys.shift = true; + break; + case 8: // BACKSPACE + this._keys.backspace = true; + break; + } + } + _onKeyUp(event) { + if (event.currentTarget.activeElement != document.body) { + return; + } + switch (event.keyCode) { + case 87: // w + this._keys.forward = false; + break; + case 65: // a + this._keys.left = false; + break; + case 83: // s + this._keys.backward = false; + break; + case 68: // d + this._keys.right = false; + break; + case 32: // SPACE + this._keys.space = false; + break; + case 16: // SHIFT + this._keys.shift = false; + break; + case 8: // BACKSPACE + this._keys.backspace = false; + break; + } + } +} +; +export { BasicCharacterControllerInput, PickableComponent, }; diff --git a/packages/client/dist/player-state.js b/packages/client/dist/player-state.js new file mode 100644 index 00000000..89b52f74 --- /dev/null +++ b/packages/client/dist/player-state.js @@ -0,0 +1,252 @@ +import * as THREE from 'three'; +import { Constants } from 'shared'; +const { STATE_TYPES } = Constants; +class State { + constructor(parent) { + this._parent = parent; + } +} +; +class DeathState extends State { + constructor(parent) { + super(parent); + this._action = null; + } + get Name() { + return STATE_TYPES.DEATH; + } + Enter(prevState) { + this._action = this._parent._proxy.animations[STATE_TYPES.DEATH].action; + this._action.reset(); + this._action.setLoop(THREE.LoopOnce, 1); + this._action.clampWhenFinished = true; + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + this._action.crossFadeFrom(prevAction, 0.2, true); + this._action.play(); + } + else { + this._action.play(); + } + } + Exit() { + } + Update(arg0, arg1) { + } +} +; +class DanceState extends State { + constructor(parent) { + super(parent); + this._action = null; + this._FinishedCallback = () => { + this._Finished(); + }; + } + get Name() { + return STATE_TYPES.DANCE; + } + Enter(prevState) { + this._action = this._parent._proxy.animations[STATE_TYPES.DANCE].action; + const mixer = this._action.getMixer(); + mixer.addEventListener('finished', this._FinishedCallback); + this._action.reset(); + this._action.setLoop(THREE.LoopOnce, 1); + this._action.clampWhenFinished = true; + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + this._action.crossFadeFrom(prevAction, 0.2, true); + this._action.play(); + } + else { + this._action.play(); + } + } + _Finished() { + this._Cleanup(); + this._parent.SetState(STATE_TYPES.IDLE); + } + _Cleanup() { + if (this._action) { + this._action.getMixer().removeEventListener('finished', this._FinishedCallback); + } + } + Exit() { + this._Cleanup(); + } + Update() { + } +} +; +class AttackState extends State { + constructor(parent) { + super(parent); + this._action = null; + this._FinishedCallback = () => { + this._Finished(); + }; + } + get Name() { + return STATE_TYPES.ATTACK; + } + Enter(prevState) { + this._action = this._parent._proxy.animations[STATE_TYPES.ATTACK].action; + const mixer = this._action.getMixer(); + mixer.addEventListener('finished', this._FinishedCallback); + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + this._action.reset(); + this._action.setLoop(THREE.LoopOnce, 1); + this._action.clampWhenFinished = true; + this._action.crossFadeFrom(prevAction, 0.4, true); + this._action.play(); + } + else { + this._action.play(); + } + } + _Finished() { + this._Cleanup(); + this._parent.SetState(STATE_TYPES.IDLE); + } + _Cleanup() { + if (this._action) { + this._action.getMixer().removeEventListener('finished', this._FinishedCallback); + } + } + Exit() { + this._Cleanup(); + } + Update() { + } +} +; +class WalkState extends State { + constructor(parent) { + super(parent); + } + get Name() { + return STATE_TYPES.WALK; + } + Enter(prevState) { + const curAction = this._parent._proxy.animations[STATE_TYPES.WALK].action; + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + curAction.enabled = true; + if (prevState.Name == STATE_TYPES.RUN) { + const ratio = curAction.getClip().duration / prevAction.getClip().duration; + curAction.time = prevAction.time * ratio; + } + else { + curAction.time = 0.0; + curAction.setEffectiveTimeScale(1.0); + curAction.setEffectiveWeight(1.0); + } + curAction.crossFadeFrom(prevAction, 0.1, true); + curAction.play(); + } + else { + curAction.play(); + } + } + Exit() { + } + Update(timeElapsed, input) { + if (!input) { + return; + } + if (input._keys.forward || input._keys.backward) { + if (input._keys.shift) { + this._parent.SetState(STATE_TYPES.RUN); + } + return; + } + this._parent.SetState(STATE_TYPES.IDLE); + } +} +; +class RunState extends State { + constructor(parent) { + super(parent); + } + get Name() { + return STATE_TYPES.RUN; + } + Enter(prevState) { + const curAction = this._parent._proxy.animations[STATE_TYPES.RUN].action; + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + curAction.enabled = true; + if (prevState.Name == STATE_TYPES.WALK) { + const ratio = curAction.getClip().duration / prevAction.getClip().duration; + curAction.time = prevAction.time * ratio; + } + else { + curAction.time = 0.0; + curAction.setEffectiveTimeScale(1.0); + curAction.setEffectiveWeight(1.0); + } + curAction.crossFadeFrom(prevAction, 0.1, true); + curAction.play(); + } + else { + curAction.play(); + } + } + Exit() { + } + Update(timeElapsed, input) { + if (!input) { + return; + } + if (input._keys.forward || input._keys.backward) { + if (!input._keys.shift) { + this._parent.SetState(STATE_TYPES.WALK); + } + return; + } + this._parent.SetState(STATE_TYPES.IDLE); + } +} +; +class IdleState extends State { + constructor(parent) { + super(parent); + } + get Name() { + return STATE_TYPES.IDLE; + } + Enter(prevState) { + const idleAction = this._parent._proxy.animations[STATE_TYPES.IDLE].action; + if (prevState) { + const prevAction = this._parent._proxy.animations[prevState.Name].action; + idleAction.time = 0.0; + idleAction.enabled = true; + idleAction.setEffectiveTimeScale(1.0); + idleAction.setEffectiveWeight(1.0); + idleAction.crossFadeFrom(prevAction, 0.25, true); + idleAction.play(); + } + else { + idleAction.play(); + } + } + Exit() { + } + Update(_, input) { + if (!input) { + return; + } + if (input._keys.forward || input._keys.backward) { + this._parent.SetState(STATE_TYPES.WALK); + } + else if (input._keys.space) { + this._parent.SetState(STATE_TYPES.ATTACK); + } + else if (input._keys.backspace) { + this._parent.SetState(STATE_TYPES.DANCE); + } + } +} +; +export { State, DanceState, AttackState, IdleState, WalkState, RunState, DeathState, }; diff --git a/packages/client/dist/quadtree.js b/packages/client/dist/quadtree.js new file mode 100644 index 00000000..6e7f4e73 --- /dev/null +++ b/packages/client/dist/quadtree.js @@ -0,0 +1,129 @@ +import * as THREE from 'three'; +class CubeQuadTree { + constructor(params) { + this._params = params; + this._sides = []; + const r = params.radius; + let m; + const transforms = []; + // +Y + m = new THREE.Matrix4(); + m = + // m.makeRotationX(-Math.PI / 2); + // m.premultiply(new THREE.Matrix4().makeTranslation(0, r, 0)); + transforms.push(m); + // // -Y + // m = new THREE.Matrix4(); + // m.makeRotationX(Math.PI / 2); + // m.premultiply(new THREE.Matrix4().makeTranslation(0, -r, 0)); + // transforms.push(m); + // // +X + // m = new THREE.Matrix4(); + // m.makeRotationY(Math.PI / 2); + // m.premultiply(new THREE.Matrix4().makeTranslation(r, 0, 0)); + // transforms.push(m); + // // -X + // m = new THREE.Matrix4(); + // m.makeRotationY(-Math.PI / 2); + // m.premultiply(new THREE.Matrix4().makeTranslation(-r, 0, 0)); + // transforms.push(m); + // // +Z + // m = new THREE.Matrix4(); + // m.premultiply(new THREE.Matrix4().makeTranslation(0, 0, r)); + // transforms.push(m); + // // -Z + // m = new THREE.Matrix4(); + // m.makeRotationY(Math.PI); + // m.premultiply(new THREE.Matrix4().makeTranslation(0, 0, -r)); + // transforms.push(m); + for (let t of transforms) { + this._sides.push({ + transform: t.clone(), + quadtree: new QuadTree({ + size: r, + min_node_size: params.min_node_size, + }), + }); + } + } + GetChildren() { + const children = []; + for (let s of this._sides) { + const side = { + transform: s.transform, + children: s.quadtree.GetChildren(), + }; + children.push(side); + } + return children; + } + Insert(pos) { + for (let s of this._sides) { + s.quadtree.Insert(pos); + } + } +} +class QuadTree { + constructor(params) { + const s = params.size; + const b = new THREE.Box3(new THREE.Vector3(-s, 0, -s), new THREE.Vector3(s, 0, s)); + this._root = { + bounds: b, + children: [], + center: b.getCenter(new THREE.Vector3()), + size: b.getSize(new THREE.Vector3()), + root: true, + }; + this._params = params; + } + GetChildren() { + const children = []; + this._GetChildren(this._root, children); + return children; + } + _GetChildren(node, target) { + if (node.children.length == 0) { + target.push(node); + return; + } + for (let c of node.children) { + this._GetChildren(c, target); + } + } + Insert(pos) { + this._Insert(this._root, pos); + } + _Insert(child, pos) { + const distToChild = this._DistanceToChild(child, pos); + if (distToChild < child.size.x * 1.5 && child.size.x > this._params.min_node_size) { + child.children = this._CreateChildren(child); + for (let c of child.children) { + this._Insert(c, pos); + } + } + } + _DistanceToChild(child, pos) { + return child.center.distanceTo(pos); + } + _CreateChildren(child) { + const midpoint = child.bounds.getCenter(new THREE.Vector3()); + // Bottom left + const b1 = new THREE.Box3(child.bounds.min, midpoint); + // Bottom right + const b2 = new THREE.Box3(new THREE.Vector3(midpoint.x, 0, child.bounds.min.z), new THREE.Vector3(child.bounds.max.x, 0, midpoint.z)); + // Top left + const b3 = new THREE.Box3(new THREE.Vector3(child.bounds.min.x, 0, midpoint.z), new THREE.Vector3(midpoint.x, 0, child.bounds.max.z)); + // Top right + const b4 = new THREE.Box3(midpoint, child.bounds.max); + const children = [b1, b2, b3, b4].map(b => { + return { + bounds: b, + children: [], + center: b.getCenter(new THREE.Vector3()), + size: b.getSize(new THREE.Vector3()) + }; + }); + return children; + } +} +export { QuadTree, CubeQuadTree }; diff --git a/packages/client/dist/quest-component.js b/packages/client/dist/quest-component.js new file mode 100644 index 00000000..5659fdf9 --- /dev/null +++ b/packages/client/dist/quest-component.js @@ -0,0 +1,30 @@ +import { Constants } from 'shared'; +import { Component } from "./entity"; +const { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; +const _TITLE = 'Welcome Adventurer!'; +const _TEXT = `Welcome to Honeywood adventurer, I see you're the chosen one and also the dragon born and whatever else, you're going to save the world! Also bring the rings back to mordor and defeat the evil dragon, and all the other things. But first, I must test you with some meaningless bullshit tasks that every rpg makes you do to waste time. Go kill like uh 30 ghosts and collect their eyeballs or something. Also go get my drycleaning and pick up my kids from daycare.`; +class QuestComponent extends Component { + constructor() { + super(); + const e = document.getElementById(DOM_IDS.QUEST_UI); + e.style.visibility = 'hidden'; + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.INPUT_PICKED, (m) => this._OnPicked(m)); + } + _OnPicked(msg) { + // HARDCODE A QUEST + const quest = { + id: 'foo', + title: _TITLE, + text: _TEXT, + }; + this._AddQuestToJournal(quest); + } + _AddQuestToJournal(quest) { + const ui = this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER); + ui.AddQuest(quest); + } +} +; +export { QuestComponent }; diff --git a/packages/client/dist/render-component.js b/packages/client/dist/render-component.js new file mode 100644 index 00000000..4be638c6 --- /dev/null +++ b/packages/client/dist/render-component.js @@ -0,0 +1,135 @@ +import * as THREE from 'three'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; +import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'; +import { Component } from './entity'; +import { Constants } from 'shared'; +const { KNOWN_ENTITIES } = Object.assign({}, Constants); +class RenderComponent extends Component { + constructor(params) { + super(); + this.group_ = new THREE.Group(); + this.params_ = params; + this.params_.scene.add(this.group_); + } + Destroy() { + this.group_.traverse((c) => { + if (c.material) { + c.material.dispose(); + } + if (c.geometry) { + c.geometry.dispose(); + } + }); + this.params_.scene.remove(this.group_); + } + InitEntity() { + this._Init(this.params_); + } + _Init(params) { + this.params_ = params; + this._LoadModels(); + } + InitComponent() { + this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + this._RegisterHandler('update.rotation', (m) => { this._OnRotation(m); }); + } + _OnPosition(m) { + this.group_.position.copy(m.value); + } + _OnRotation(m) { + this.group_.quaternion.copy(m.value); + } + _LoadModels() { + if (this.params_.resourceName.endsWith('glb')) { + this._LoadGLB(); + } + else if (this.params_.resourceName.endsWith('fbx')) { + this._LoadFBX(); + } + else if (this.params_.resourceName.endsWith('obj')) { + this._LoadOBJ(); + } + } + _OnLoaded(obj) { + this._target = obj; + this.group_.add(this._target); + this._target.scale.setScalar(this.params_.scale); + const textures = {}; + if (this.params_.textures) { + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); + for (let k in this.params_.textures.names) { + const t = loader.LoadTexture(this.params_.textures.resourcePath, this.params_.textures.names[k]); + t.encoding = THREE.sRGBEncoding; + if (this.params_.textures.wrap) { + t.wrapS = THREE.RepeatWrapping; + t.wrapT = THREE.RepeatWrapping; + } + textures[k] = t; + } + } + this._target.traverse(c => { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + if (c.geometry) { + c.geometry.computeBoundingBox(); + } + for (let m of materials) { + if (m) { + if (this.params_.onMaterial) { + this.params_.onMaterial(m); + } + for (let k in textures) { + if (m.name.search(k) >= 0) { + m.map = textures[k]; + } + } + if (this.params_.specular) { + m.specular = this.params_.specular; + } + if (this.params_.emissive) { + m.emissive = this.params_.emissive; + } + } + } + if (this.params_.receiveShadow != undefined) { + c.receiveShadow = this.params_.receiveShadow; + } + if (this.params_.castShadow != undefined) { + c.castShadow = this.params_.castShadow; + } + if (this.params_.visible != undefined) { + c.visible = this.params_.visible; + } + this.Broadcast({ + topic: 'render.loaded', + value: this._target, + }); + }); + } + _LoadGLB() { + const loader = new GLTFLoader(); + loader.setPath(this.params_.resourcePath); + loader.load(this.params_.resourceName, (glb) => { + this._OnLoaded(glb.scene); + }); + } + _LoadFBX() { + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); + loader.LoadFBX(this.params_.resourcePath, this.params_.resourceName, (fbx) => { + this._OnLoaded(fbx); + }); + } + _LoadOBJ() { + const loader = new OBJLoader(); + loader.setPath(this.params_.resourcePath); + loader.load(this.params_.resourceName, (fbx) => { + this._OnLoaded(fbx); + }); + } + Update(timeInSeconds) { + } +} +; +export { RenderComponent }; diff --git a/packages/client/dist/scenery-controller.js b/packages/client/dist/scenery-controller.js new file mode 100644 index 00000000..3b858780 --- /dev/null +++ b/packages/client/dist/scenery-controller.js @@ -0,0 +1,226 @@ +import * as THREE from 'three'; +import { Entity, Component } from './entity'; +import { RenderComponent } from './render-component'; +import { SpatialGridController } from './spatial-grid-controller.js'; +import { Math as math, Noise as noise, Constants } from 'shared'; +const { KNOWN_ENTITIES } = Constants; +const { Noise } = noise; +const _SCENERY = { + birch1: { + base: 'Birch_1.fbx', + resourcePath: './resources/trees/FBX/', + names: { + Bark: 'Birch_Bark.png', + Leaves: 'Birch_Leaves_Yellow.png' + }, + scale: 0.075, + biomes: ['forest'], + collision: true, + }, + tree1: { + base: 'Tree_1.fbx', + resourcePath: './resources/trees/FBX/', + names: { + Bark: 'Tree_Bark.jpg', + Leaves: 'Leaves_Blue.png' + }, + scale: 0.1, + biomes: ['forest'], + collision: true, + }, + rock1: { + base: 'Rock_1.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.025, + biomes: ['arid', 'desert'], + }, + rockMoss1: { + base: 'Rock_Moss_1.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.025, + biomes: ['forest'], + }, + plant1: { + base: 'Plant_1.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest', 'arid'], + }, + grass1: { + base: 'Grass_1.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest', 'arid'], + }, + flowers1: { + base: 'Flowers.fbx', + resourcePath: './resources/nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest'], + }, +}; +const _BIOMES = { + desert: 0.1, + forest: 0.8, + arid: 0.6, +}; +const multiples = { + birch1: { name: 'Birch_', key: 'birch', num: 10 }, + tree1: { name: 'Tree_', key: 'tree', num: 10 }, + rock1: { name: 'Rock_', key: 'rock', num: 7 }, + rockMoss1: { name: 'Rock_Moss_', key: 'rockMoss', num: 7 }, + plant1: { name: 'Plant_', key: 'plant', num: 5 }, + grass1: { name: 'Grass_', key: 'grass', num: 2 }, +}; +for (let k in multiples) { + for (let i = 2; i < multiples[k].num; ++i) { + _SCENERY[multiples[k].key + i] = Object.assign({}, _SCENERY[k]); + _SCENERY[multiples[k].key + i].base = multiples[k].name + i + '.fbx'; + } +} +class SceneryController extends Component { + constructor(params) { + super(); + this.params_ = params; + const noiseParams = { + octaves: 1, + persistence: 0.5, + lacunarity: 2.0, + exponentiation: 1.0, + scale: 1.0, + noiseType: 'simplex', + seed: 2, + height: 1.0, + }; + this.noise_ = new Noise(noiseParams); + this.center_ = null; + this.crap_ = []; + } + InitEntity() { + this.SpawnClouds_(); + } + SpawnClouds_() { + for (let i = 0; i < 20; ++i) { + const index = math.rand_int(1, 3); + const pos = new THREE.Vector3((Math.random() * 2.0 - 1.0) * 5000, 500, (Math.random() * 2.0 - 1.0) * 5000); + const e = new Entity(); + e.AddComponent(new RenderComponent({ + scene: this.params_.scene, + resourcePath: './resources/nature2/GLTF/', + resourceName: 'Cloud' + index + '.glb', + scale: Math.random() * 20 + 40, + emissive: new THREE.Color(0x000000), + color: new THREE.Color(0x202020), + })); + e.SetPosition(pos); + const q = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), math.rand_range(0, 360)); + e.SetQuaternion(q); + this.Manager.Add(e); + e.SetActive(false); + } + } + FindBiome_(terrain, pos) { + const biome = terrain.GetBiomeAt(pos); + // HACK: duplicaed code from texture-splatter + const m = biome; + const h = math.sat(pos.y / 100.0); + if (h < 0.05) { + return 'desert'; + } + else if (m > 0.5) { + return 'forest'; + } + else { + return 'arid'; + } + } + SpawnAt_(biome, spawnPos) { + const matchingScenery = []; + for (let k in _SCENERY) { + if (_SCENERY[k].biomes.indexOf(biome) >= 0) { + matchingScenery.push(k); + } + } + const roll = this.noise_.Get(spawnPos.x, 3.0, spawnPos.z); + const randomProp = _SCENERY[matchingScenery[Math.round(roll * (matchingScenery.length - 1))]]; + const e = new Entity(); + e.AddComponent(new RenderComponent({ + scene: this.params_.scene, + resourcePath: randomProp.resourcePath, + resourceName: randomProp.base, + textures: { + resourcePath: './resources/trees/Textures/', + names: randomProp.names, + wrap: true, + }, + emissive: new THREE.Color(0x000000), + specular: new THREE.Color(0x000000), + scale: randomProp.scale * (0.8 + this.noise_.Get(spawnPos.x, 4.0, spawnPos.z) * 0.4), + castShadow: true, + receiveShadow: true, + onMaterial: (m) => { + if (m.name.search('Leaves') >= 0) { + m.alphaTest = 0.5; + } + } + })); + if (randomProp.collision) { + e.AddComponent(new SpatialGridController({ grid: this.params_.grid })); + } + const q = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), this.noise_.Get(spawnPos.x, 5.0, spawnPos.z) * 360); + e.SetQuaternion(q); + return e; + } + SpawnCrap_() { + const player = this.FindEntity('player'); + if (!player) { + return; + } + const center = new THREE.Vector3().copy(player.Position); + center.x = Math.round(center.x / 50.0); + center.y = 0.0; + center.z = Math.round(center.z / 50.0); + if (this.center_ && this.center_.equals(center)) { + return; + } + this.center_ = center; + const _P = new THREE.Vector3(); + const _V = new THREE.Vector3(); + const terrain = this.FindEntity(KNOWN_ENTITIES.TERRAIN).GetComponent('TerrainChunkManager'); + for (let x = -10; x <= 10; ++x) { + for (let y = -10; y <= 10; ++y) { + _P.set(x, 0.0, y); + _P.add(center); + _P.multiplyScalar(50.0); + const key = '__scenery__[' + _P.x + '][' + _P.z + ']'; + if (this.FindEntity(key)) { + continue; + } + _V.copy(_P); + _P.x += (this.noise_.Get(_P.x, 0.0, _P.z) * 2.0 - 1.0) * 25.0; + _P.z += (this.noise_.Get(_P.x, 1.0, _P.z) * 2.0 - 1.0) * 25.0; + _P.y = terrain.GetHeight(_P)[0]; + const biome = this.FindBiome_(terrain, _P); + const roll = this.noise_.Get(_V.x, 2.0, _V.z); + if (roll > _BIOMES[biome]) { + continue; + } + const e = this.SpawnAt_(biome, _P); + e.SetPosition(_P); + this.Manager.Add(e, key); + e.SetActive(false); + this.crap_.push(e); + } + } + } + Update(_) { + this.SpawnCrap_(); + } +} +; +export { SceneryController }; diff --git a/packages/client/dist/sorceror-effect.js b/packages/client/dist/sorceror-effect.js new file mode 100644 index 00000000..dac0fb64 --- /dev/null +++ b/packages/client/dist/sorceror-effect.js @@ -0,0 +1,95 @@ +import * as THREE from 'three'; +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; +import { Constants } from 'shared'; +const { EVENT_TYPES } = Constants; +class SorcerorEffectEmitter extends ParticleEmitter { + constructor(parent) { + super(); + this.parent_ = parent; + this.blend_ = 0.0; + } + OnUpdate_() { + this.parent_.updateMatrixWorld(true); + this.SetEmissionRate(300.0 * (this.emitterLife_ / 3.0)); + } + CreateParticle_() { + const origin = new THREE.Vector3(0, 0, 0); + this.parent_.localToWorld(origin); + const radius = 1.0; + const life = (Math.random() * 0.75 + 0.25) * 1.0; + const p = new THREE.Vector3((Math.random() * 2 - 1) * radius, (Math.random() * 2 - 1) * radius, (Math.random() * 2 - 1) * radius); + const d = p.clone().normalize(); + p.copy(d); + p.multiplyScalar(radius); + p.add(origin); + d.multiplyScalar(-1.0); + return { + position: p, + size: (Math.random() * 0.5 + 0.5) * 1.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: d, + blend: this.blend_, + }; + } +} +; +class SorcerorEffect extends Component { + constructor(params) { + super(); + this.params_ = params; + this.particles_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/fire.png', + }); + } + Destroy() { + this.particles_.Destroy(); + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.ACTION_ATTACK, (m) => { this.OnAttack_(m); }); + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); + } + OnCharacterLoaded_(msg) { + this._bones = msg.bones; + } + OnAttack_(m) { + const hands = [this._bones['RightHandIndex1'], this._bones['LeftHandIndex1']]; + for (let h of hands) { + let emitter = new SorcerorEffectEmitter(h); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.1, 1.0); + emitter.alphaSpline_.AddPoint(0.7, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x00FF00)); + emitter.colourSpline_.AddPoint(0.5, new THREE.Color(0x40C040)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0xFF4040)); + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(0.5, 2.5); + emitter.sizeSpline_.AddPoint(1.0, 0.0); + emitter.SetLife(2.5); + emitter.blend_ = 0.0; + this.particles_.AddEmitter(emitter); + emitter = new SorcerorEffectEmitter(h); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.7, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x202020)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x101010)); + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(1.0, 4.0); + emitter.SetLife(2.5); + emitter.blend_ = 1.0; + this.particles_.AddEmitter(emitter); + } + } + Update(timeElapsed) { + this.particles_.Update(timeElapsed); + } +} +export { SorcerorEffect }; diff --git a/packages/client/dist/spatial-grid-controller.js b/packages/client/dist/spatial-grid-controller.js new file mode 100644 index 00000000..8b163912 --- /dev/null +++ b/packages/client/dist/spatial-grid-controller.js @@ -0,0 +1,30 @@ +import { Component } from './entity'; +class SpatialGridController extends Component { + constructor(params) { + super(params); + this.grid_ = params.grid; + } + Destroy() { + this.grid_.Remove(this.client_); + this.client_ = null; + } + InitComponent() { + const pos = [ + this.parent_._position.x, + this.parent_._position.z, + ]; + this.client_ = this.grid_.NewClient(pos, [1, 1]); + this.client_.entity = this.parent_; + this._RegisterHandler('update.position', (m) => this._OnPosition(m)); + } + _OnPosition(msg) { + this.client_.position = [msg.value.x, msg.value.z]; + this.grid_.UpdateClient(this.client_); + } + FindNearbyEntities(range) { + const results = this.grid_.FindNear([this.parent_._position.x, this.parent_._position.z], [range, range]); + return results.filter(c => c.entity != this.parent_); + } +} +; +export { SpatialGridController }; diff --git a/packages/client/dist/spawners.js b/packages/client/dist/spawners.js new file mode 100644 index 00000000..8fc8c930 --- /dev/null +++ b/packages/client/dist/spawners.js @@ -0,0 +1,115 @@ +import { Component, Entity } from './entity'; +import { ThirdPersonCamera } from './third-person-camera'; +import { BasicCharacterController } from './player-entity'; +import { HealthComponent } from './health-component'; +import { BasicCharacterControllerInput } from './player-input'; +import { SpatialGridController } from './spatial-grid-controller'; +import { InventoryController, UIInventoryController } from './inventory-controller'; +import { equip_weapon_component } from './equip-weapon-component'; +import { AttackController } from './attacker-controller'; +import { NPCController } from './npc-entity'; +import { NetworkEntityController } from './network-entity-controller'; +import { NetworkEntityController as NetworkPlayerController } from './network-player-controller'; +import { FloatingName } from './floating-name'; +import { SorcerorEffect } from './sorceror-effect'; +import { BloodEffect } from './blood-effect'; +import { Constants } from 'shared'; +const { CLASS_TYPES_ENUM } = Constants; +class PlayerSpawner extends Component { + constructor(params) { + super(params); + this.params_ = params; + } + Spawn(playerParams) { + const params = { + camera: this.params_.camera, + scene: this.params_.scene, + desc: playerParams, + }; + const player = new Entity(); + player.Account = playerParams.account; + player.AddComponent(new BasicCharacterControllerInput(params)); + player.AddComponent(new BasicCharacterController(params)); + player.AddComponent(new equip_weapon_component.EquipWeapon({ desc: playerParams })); + player.AddComponent(new UIInventoryController(params)); + player.AddComponent(new InventoryController(params)); + player.AddComponent(new HealthComponent({ + updateUI: true, + health: 1, + maxHealth: 1, + strength: 1, + wisdomness: 1, + benchpress: 1, + curl: 1, + experience: 1, + level: 1, + desc: playerParams, + })); + player.AddComponent(new SpatialGridController({ grid: this.params_.grid })); + player.AddComponent(new AttackController()); + player.AddComponent(new ThirdPersonCamera({ + camera: this.params_.camera, + target: player + })); + player.AddComponent(new NetworkPlayerController({ + camera: this.params_.camera, + target: player + })); + player.AddComponent(new BloodEffect({ + camera: this.params_.camera, + scene: this.params_.scene, + })); + if (playerParams.character.class == CLASS_TYPES_ENUM.SORCEROR) { + player.AddComponent(new SorcerorEffect(params)); + } + this.Manager.Add(player, 'player'); + return player; + } +} +; +class NetworkEntitySpawner extends Component { + constructor(params) { + super(); + this.params_ = params; + } + Spawn(name, desc) { + const npc = new Entity(); + npc.Account = desc.account; + npc.AddComponent(new NPCController({ + camera: this.params_.camera, + scene: this.params_.scene, + desc: desc, + })); + npc.AddComponent(new HealthComponent({ + health: 50, + maxHealth: 50, + strength: 2, + wisdomness: 2, + benchpress: 3, + curl: 1, + experience: 0, + level: 1, + desc: desc, + })); + npc.AddComponent(new SpatialGridController({ grid: this.params_.grid })); + npc.AddComponent(new NetworkEntityController()); + if (desc.account.name) { + npc.AddComponent(new FloatingName({ desc: desc })); + } + npc.AddComponent(new equip_weapon_component.EquipWeapon({ desc: desc })); + npc.AddComponent(new InventoryController()); + npc.AddComponent(new BloodEffect({ + camera: this.params_.camera, + scene: this.params_.scene, + })); + if (desc.character.class == CLASS_TYPES_ENUM.SORCEROR) { + npc.AddComponent(new SorcerorEffect({ + camera: this.params_.camera, + scene: this.params_.scene, + })); + } + this.Manager.Add(npc, name); + return npc; + } +} +export { PlayerSpawner, NetworkEntitySpawner }; diff --git a/packages/client/dist/terrain-builder-threaded-worker.js b/packages/client/dist/terrain-builder-threaded-worker.js new file mode 100644 index 00000000..c543db8a --- /dev/null +++ b/packages/client/dist/terrain-builder-threaded-worker.js @@ -0,0 +1,266 @@ +import * as THREE from 'three'; +import { TextureSplatter } from './texture-splatter'; +import { TerrainHeight, Noise as aNoise, Math as math } from 'shared'; +const { Noise, HeightGenerator } = Object.assign(Object.assign({}, TerrainHeight), aNoise); +class _TerrainBuilderThreadedWorker { + constructor() { + } + Init(params) { + this._params = params; + this._params.offset = new THREE.Vector3(params.offset[0], params.offset[1], params.offset[2]); + this._params.noise = new Noise(params.noiseParams); + this._params.heightGenerators = [new HeightGenerator()]; + this._params.biomeGenerator = new Noise(params.biomesParams); + this._params.colourNoise = new Noise(params.colourNoiseParams); + this._params.colourGenerator = new TextureSplatter({ + biomeGenerator: this._params.biomeGenerator, + colourNoise: this._params.colourNoise + }); + } + _GenerateHeight(v) { + return this._params.heightGenerators[0].Get(v.x, v.y, v.z)[0]; + } + Rebuild() { + var _a, _b, _c; + const _D = new THREE.Vector3(); + const _D1 = new THREE.Vector3(); + const _D2 = new THREE.Vector3(); + const _P = new THREE.Vector3(); + const _H = new THREE.Vector3(); + const _W = new THREE.Vector3(); + const _S = new THREE.Vector3(); + const _C = new THREE.Vector3(); + const _N = new THREE.Vector3(); + const _N1 = new THREE.Vector3(); + const _N2 = new THREE.Vector3(); + const _N3 = new THREE.Vector3(); + const positions = []; + const colors = []; + const up = []; + const coords = []; + const uvs = []; + const weights1 = []; + const weights2 = []; + const indices = []; + const wsPositions = []; + const resolution = this._params.resolution + 2; + const radius = this._params.radius; + const offset = this._params.offset; + const width = this._params.width; + const half = width / 2; + const effectiveResolution = resolution - 2; + for (let x = -1; x <= effectiveResolution + 1; x++) { + let xp = width * math.sat(x / effectiveResolution); + for (let y = -1; y <= effectiveResolution + 1; y++) { + let yp = width * math.sat(y / effectiveResolution); + // Compute position + _P.set(xp - half, 0.0, yp - half); + _P.add(offset); + _D.set(0, 1, 0); + // Keep the absolute world space position to sample noise + _W.copy(_P); + // Purturb height along z-vector + const height = this._GenerateHeight(_W); + _H.copy(_D); + _H.multiplyScalar(height); + _P.add(_H); + positions.push(_P.x, _P.y, _P.z); + _C.copy(_W); + _C.add(_H); + coords.push(_C.x, _C.y, _C.z); + _S.set(_W.x, _W.y, height); + const color = this._params.colourGenerator.GetColour(_S); + colors.push(color.r, color.g, color.b); + up.push(_D.x, _D.y, _D.z); + wsPositions.push(_W.x, _W.z, height); + // TODO GUI + uvs.push(_P.x / 200.0, _P.y / 200.0); + } + } + for (let i = 0; i < resolution; i++) { + for (let j = 0; j < resolution; j++) { + indices.push(i * (resolution + 1) + j, (i + 1) * (resolution + 1) + j + 1, i * (resolution + 1) + j + 1); + indices.push((i + 1) * (resolution + 1) + j, (i + 1) * (resolution + 1) + j + 1, i * (resolution + 1) + j); + } + } + const normals = new Array(up.length).fill(0.0); + for (let i = 0, n = indices.length; i < n; i += 3) { + const i1 = indices[i] * 3; + const i2 = indices[i + 1] * 3; + const i3 = indices[i + 2] * 3; + _N1.fromArray(positions, i1); + _N2.fromArray(positions, i2); + _N3.fromArray(positions, i3); + _D1.subVectors(_N3, _N2); + _D2.subVectors(_N1, _N2); + _D1.cross(_D2); + normals[i1] += _D1.x; + normals[i2] += _D1.x; + normals[i3] += _D1.x; + normals[i1 + 1] += _D1.y; + normals[i2 + 1] += _D1.y; + normals[i3 + 1] += _D1.y; + normals[i1 + 2] += _D1.z; + normals[i2 + 2] += _D1.z; + normals[i3 + 2] += _D1.z; + } + // Fix the skirt + const _ApplyFix = (x, y, xp, yp) => { + const skirtIndex = x * (resolution + 1) + y; + const proxyIndex = xp * (resolution + 1) + yp; + positions[skirtIndex * 3 + 1] -= 10; + // Normal will be fucked, copy it from proxy point + normals[skirtIndex * 3 + 0] = normals[proxyIndex * 3 + 0]; + normals[skirtIndex * 3 + 1] = normals[proxyIndex * 3 + 1]; + normals[skirtIndex * 3 + 2] = normals[proxyIndex * 3 + 2]; + }; + for (let y = 0; y <= resolution; ++y) { + _ApplyFix(0, y, 1, y); + } + for (let y = 0; y <= resolution; ++y) { + _ApplyFix(resolution, y, resolution - 1, y); + } + for (let x = 0; x <= resolution; ++x) { + _ApplyFix(x, 0, x, 1); + } + for (let x = 0; x <= resolution; ++x) { + _ApplyFix(x, resolution, x, resolution - 1); + } + for (let i = 0, n = normals.length; i < n; i += 3) { + _N.fromArray(normals, i); + _N.normalize(); + normals[i] = _N.x; + normals[i + 1] = _N.y; + normals[i + 2] = _N.z; + } + for (let i = 0, n = indices.length; i < n; i += 3) { + const splats = []; + const i1 = indices[i] * 3; + const i2 = indices[i + 1] * 3; + const i3 = indices[i + 2] * 3; + const indexes = [i1, i2, i3]; + for (let j = 0; j < 3; j++) { + const j1 = indexes[j]; + _P.fromArray(wsPositions, j1); + _N.fromArray(normals, j1); + _D.fromArray(up, j1); + const s = this._params.colourGenerator.GetSplat(_P, _N, _D); + splats.push(s); + } + const splatStrengths = {}; + for (let k in splats[0]) { + splatStrengths[k] = { key: k, strength: 0.0 }; + } + for (let curSplat of splats) { + for (let k in curSplat) { + splatStrengths[k].strength += curSplat[k].strength; + } + } + let typeValues = Object.values(splatStrengths); + typeValues.sort((a, b) => { + if (a.strength < b.strength) { + return 1; + } + if (a.strength > b.strength) { + return -1; + } + return 0; + }); + const w1 = indices[i] * 4; + const w2 = indices[i + 1] * 4; + const w3 = indices[i + 2] * 4; + for (let s = 0; s < 3; s++) { + let total = (((_c = (_a = splats === null || splats === void 0 ? void 0 : splats[s]) === null || _a === void 0 ? void 0 : _a[(_b = typeValues === null || typeValues === void 0 ? void 0 : typeValues[0]) === null || _b === void 0 ? void 0 : _b.key]) === null || _c === void 0 ? void 0 : _c.strength) + + splats[s][typeValues === null || typeValues === void 0 ? void 0 : typeValues[1].key].strength + + splats[s][typeValues[2].key].strength + + splats[s][typeValues[3].key].strength); + const normalization = 1.0 / total; + splats[s][typeValues[0].key].strength *= normalization; + splats[s][typeValues[1].key].strength *= normalization; + splats[s][typeValues[2].key].strength *= normalization; + splats[s][typeValues[3].key].strength *= normalization; + } + weights1.push(splats[0][typeValues[3].key].index); + weights1.push(splats[0][typeValues[2].key].index); + weights1.push(splats[0][typeValues[1].key].index); + weights1.push(splats[0][typeValues[0].key].index); + weights1.push(splats[1][typeValues[3].key].index); + weights1.push(splats[1][typeValues[2].key].index); + weights1.push(splats[1][typeValues[1].key].index); + weights1.push(splats[1][typeValues[0].key].index); + weights1.push(splats[2][typeValues[3].key].index); + weights1.push(splats[2][typeValues[2].key].index); + weights1.push(splats[2][typeValues[1].key].index); + weights1.push(splats[2][typeValues[0].key].index); + weights2.push(splats[0][typeValues[3].key].strength); + weights2.push(splats[0][typeValues[2].key].strength); + weights2.push(splats[0][typeValues[1].key].strength); + weights2.push(splats[0][typeValues[0].key].strength); + weights2.push(splats[1][typeValues[3].key].strength); + weights2.push(splats[1][typeValues[2].key].strength); + weights2.push(splats[1][typeValues[1].key].strength); + weights2.push(splats[1][typeValues[0].key].strength); + weights2.push(splats[2][typeValues[3].key].strength); + weights2.push(splats[2][typeValues[2].key].strength); + weights2.push(splats[2][typeValues[1].key].strength); + weights2.push(splats[2][typeValues[0].key].strength); + } + function _Unindex(src, stride) { + const dst = []; + for (let i = 0, n = indices.length; i < n; i += 3) { + const i1 = indices[i] * stride; + const i2 = indices[i + 1] * stride; + const i3 = indices[i + 2] * stride; + for (let j = 0; j < stride; j++) { + dst.push(src[i1 + j]); + } + for (let j = 0; j < stride; j++) { + dst.push(src[i2 + j]); + } + for (let j = 0; j < stride; j++) { + dst.push(src[i3 + j]); + } + } + return dst; + } + const uiPositions = _Unindex(positions, 3); + const uiColours = _Unindex(colors, 3); + const uiNormals = _Unindex(normals, 3); + const uiCoords = _Unindex(coords, 3); + const uiUVs = _Unindex(uvs, 2); + const uiWeights1 = weights1; + const uiWeights2 = weights2; + const bytesInFloat32 = 4; + const positionsArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiPositions.length)); + const coloursArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiColours.length)); + const normalsArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiNormals.length)); + const coordsArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiCoords.length)); + const uvsArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiUVs.length)); + const weights1Array = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); + const weights2Array = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); + positionsArray.set(uiPositions, 0); + coloursArray.set(uiColours, 0); + normalsArray.set(uiNormals, 0); + uvsArray.set(uiUVs, 0); + coordsArray.set(uiCoords, 0); + weights1Array.set(uiWeights1, 0); + weights2Array.set(uiWeights2, 0); + return { + positions: positionsArray, + colours: coloursArray, + uvs: uvsArray, + normals: normalsArray, + coords: coordsArray, + weights1: weights1Array, + weights2: weights2Array, + }; + } +} +const _CHUNK = new _TerrainBuilderThreadedWorker(); +self.onmessage = (msg) => { + if (msg.data.subject == 'build_chunk') { + _CHUNK.Init(msg.data.params); + const rebuiltData = _CHUNK.Rebuild(); + self.postMessage({ subject: 'build_chunk_result', data: rebuiltData }, null); + } +}; diff --git a/packages/client/dist/terrain-builder-threaded.js b/packages/client/dist/terrain-builder-threaded.js new file mode 100644 index 00000000..66d268c3 --- /dev/null +++ b/packages/client/dist/terrain-builder-threaded.js @@ -0,0 +1,132 @@ +import { TerrainChunk } from './terrain-chunk'; +const _NUM_WORKERS = 4; +let _IDs = 0; +class WorkerThread { + constructor(s) { + this._worker = new Worker(s, { type: 'module' }); + this._worker.onmessage = (e) => { + this._OnMessage(e); + }; + this._resolve = null; + this._id = _IDs++; + } + _OnMessage(e) { + const resolve = this._resolve; + this._resolve = null; + resolve(e.data); + } + get id() { + return this._id; + } + postMessage(s, resolve) { + this._resolve = resolve; + this._worker.postMessage(s); + } +} +class WorkerThreadPool { + constructor(sz, entry) { + this._workers = [...Array(sz)].map(_ => new WorkerThread(entry)); + this._free = [...this._workers]; + this._busy = {}; + this._queue = []; + } + get length() { + return this._workers.length; + } + get Busy() { + return this._queue.length > 0 || Object.keys(this._busy).length > 0; + } + Enqueue(workItem, resolve) { + this._queue.push([workItem, resolve]); + this._PumpQueue(); + } + _PumpQueue() { + while (this._free.length > 0 && this._queue.length > 0) { + const w = this._free.pop(); + this._busy[w.id] = w; + const [workItem, workResolve] = this._queue.shift(); + w.postMessage(workItem, (v) => { + delete this._busy[w.id]; + this._free.push(w); + workResolve(v); + this._PumpQueue(); + }); + } + } +} +class TerrainChunkRebuilder_Threaded { + constructor(params) { + this._pool = {}; + this._old = []; + this._workerPool = new WorkerThreadPool(_NUM_WORKERS, 'src/terrain-builder-threaded-worker.js'); + this._params = params; + } + _OnResult(chunk, msg) { + if (msg.subject == 'build_chunk_result') { + chunk.RebuildMeshFromData(msg.data); + chunk.Show(); + } + } + AllocateChunk(params) { + const w = params.width; + if (!(w in this._pool)) { + this._pool[w] = []; + } + let c = null; + if (this._pool[w].length > 0) { + c = this._pool[w].pop(); + c._params = params; + } + else { + c = new TerrainChunk(params); + } + c.Hide(); + const threadedParams = { + noiseParams: params.noiseParams, + colourNoiseParams: params.colourNoiseParams, + biomesParams: params.biomesParams, + colourGeneratorParams: params.colourGeneratorParams, + heightGeneratorsParams: params.heightGeneratorsParams, + width: params.width, + offset: [params.offset.x, params.offset.y, params.offset.z], + // origin: params.origin, + radius: params.radius, + resolution: params.resolution, + worldMatrix: params.transform, + }; + const msg = { + subject: 'build_chunk', + params: threadedParams, + }; + this._workerPool.Enqueue(msg, (m) => { + this._OnResult(c, m); + }); + return c; + } + RetireChunks(chunks) { + this._old.push(...chunks); + } + _RecycleChunks(chunks) { + for (let c of chunks) { + if (!(c.chunk._params.width in this._pool)) { + this._pool[c.chunk._params.width] = []; + } + c.chunk.Destroy(); + } + } + get Busy() { + return this._workerPool.Busy; + } + Rebuild(chunks) { + for (let k in chunks) { + this._workerPool.Enqueue(chunks[k].chunk._params, null); + } + } + Update() { + if (!this.Busy) { + this._RecycleChunks(this._old); + this._old = []; + } + } +} +export { TerrainChunkRebuilder_Threaded }; diff --git a/packages/client/dist/terrain-builder.js b/packages/client/dist/terrain-builder.js new file mode 100644 index 00000000..646ee8de --- /dev/null +++ b/packages/client/dist/terrain-builder.js @@ -0,0 +1,79 @@ +import { TerrainChunk } from './terrain-chunk'; +class TerrainChunkRebuilder { + constructor(params) { + this._pool = {}; + this._params = params; + this._Reset(); + } + AllocateChunk(params) { + const w = params.width; + if (!(w in this._pool)) { + this._pool[w] = []; + } + let c = null; + if (this._pool[w].length > 0) { + c = this._pool[w].pop(); + c._params = params; + } + else { + c = new TerrainChunk(params); + } + c.Hide(); + this._queued.push(c); + return c; + } + RetireChunks(chunks) { + this._old.push(...chunks); + } + _RecycleChunks(chunks) { + for (let c of chunks) { + if (!(c.chunk._params.width in this._pool)) { + this._pool[c.chunk._params.width] = []; + } + c.chunk.Destroy(); + } + } + _Reset() { + this._active = null; + this._queued = []; + this._old = []; + this._new = []; + } + get Busy() { + return this._active || this._queued.length > 0; + } + Rebuild(chunks) { + if (this.Busy) { + return; + } + for (let k in chunks) { + this._queued.push(chunks[k].chunk); + } + } + Update() { + if (this._active) { + const r = this._active.next(); + if (r.done) { + this._active = null; + } + } + else { + const b = this._queued.pop(); + if (b) { + this._active = b._Rebuild(); + this._new.push(b); + } + } + if (this._active) { + return; + } + if (!this._queued.length) { + this._RecycleChunks(this._old); + for (let b of this._new) { + b.Show(); + } + this._Reset(); + } + } +} +export { TerrainChunkRebuilder }; diff --git a/packages/client/dist/terrain-chunk.js b/packages/client/dist/terrain-chunk.js new file mode 100644 index 00000000..ef0cb1e4 --- /dev/null +++ b/packages/client/dist/terrain-chunk.js @@ -0,0 +1,43 @@ +import * as THREE from 'three'; +class TerrainChunk { + constructor(params) { + this._params = params; + this._Init(params); + } + Destroy() { + this._params.group.remove(this._plane); + } + Hide() { + this._plane.visible = false; + } + Show() { + this._plane.visible = true; + } + _Init(params) { + this._geometry = new THREE.BufferGeometry(); + this._plane = new THREE.Mesh(this._geometry, params.material); + this._plane.castShadow = false; + this._plane.receiveShadow = true; + this._plane.frustumCulled = false; + this._params.group.add(this._plane); + this.Reinit(params); + } + Update(cameraPosition) { + // this._plane.position.copy(this._params.origin); + // this._plane.position.sub(cameraPosition); + } + Reinit(params) { + this._params = params; + this._plane.position.set(0, 0, 0); + } + RebuildMeshFromData(data) { + this._geometry.setAttribute('position', new THREE.Float32BufferAttribute(data.positions, 3)); + this._geometry.setAttribute('color', new THREE.Float32BufferAttribute(data.colours, 3)); + this._geometry.setAttribute('normal', new THREE.Float32BufferAttribute(data.normals, 3)); + this._geometry.setAttribute('coords', new THREE.Float32BufferAttribute(data.coords, 3)); + this._geometry.setAttribute('weights1', new THREE.Float32BufferAttribute(data.weights1, 4)); + this._geometry.setAttribute('weights2', new THREE.Float32BufferAttribute(data.weights2, 4)); + this._geometry.computeBoundingBox(); + } +} +export { TerrainChunk }; diff --git a/packages/client/dist/terrain-shader.js b/packages/client/dist/terrain-shader.js new file mode 100644 index 00000000..4cdd62f6 --- /dev/null +++ b/packages/client/dist/terrain-shader.js @@ -0,0 +1,455 @@ +const VS1 = ` + +// Triplanar Attributes +in vec4 weights1; +in vec4 weights2; + +// Outputs +out vec3 vCoords; +out vec4 vWeights1; +out vec4 vWeights2; + + +`; +const VS2 = ` + +vCoords = transformed.xyz; +vWeights1 = weights1; +vWeights2 = weights2; + +`; +const VS = ` + +// Attributes +in vec3 coords; +in vec3 color; +in vec4 weights1; +in vec4 weights2; + +// Outputs +out vec2 vUV; +out vec4 vColor; +out vec3 vNormal; +out vec3 vCoords; +out vec4 vWeights1; +out vec4 vWeights2; + +void main(){ + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + + vUV = uv; + vNormal = normal; + + vColor = vec4(color, 1); + vCoords = position.xyz; + vWeights1 = weights1; + vWeights2 = weights2; +} + `; +const PS = ` + +precision highp float; +precision highp int; +precision highp sampler2DArray; + +uniform sampler2DArray TRIPLANAR_normalMap; +uniform sampler2DArray TRIPLANAR_diffuseMap; +uniform sampler2D TRIPLANAR_noiseMap; + +in vec3 vCoords; +in vec4 vWeights1; +in vec4 vWeights2; + + +const float _TRI_SCALE = 10.0; + +float sum( vec3 v ) { return v.x+v.y+v.z; } + +vec4 hash4( vec2 p ) { + return fract( + sin(vec4(1.0+dot(p,vec2(37.0,17.0)), + 2.0+dot(p,vec2(11.0,47.0)), + 3.0+dot(p,vec2(41.0,29.0)), + 4.0+dot(p,vec2(23.0,31.0))))*103.0); +} + +vec4 _TerrainBlend_4(vec4 samples[4]) { + float depth = 0.2; + float ma = max( + samples[0].w, + max( + samples[1].w, + max(samples[2].w, samples[3].w))) - depth; + + float b1 = max(samples[0].w - ma, 0.0); + float b2 = max(samples[1].w - ma, 0.0); + float b3 = max(samples[2].w - ma, 0.0); + float b4 = max(samples[3].w - ma, 0.0); + + vec4 numer = ( + samples[0] * b1 + samples[1] * b2 + + samples[2] * b3 + samples[3] * b4); + float denom = (b1 + b2 + b3 + b4); + return numer / denom; +} + +vec4 _TerrainBlend_4_lerp(vec4 samples[4]) { + return ( + samples[0] * samples[0].w + samples[1] * samples[1].w + + samples[2] * samples[2].w + samples[3] * samples[3].w); +} + +// Lifted from https://www.shadertoy.com/view/Xtl3zf +vec4 texture_UV(in sampler2DArray srcTexture, in vec3 x) { + float k = texture(TRIPLANAR_noiseMap, 0.0025*x.xy).x; // cheap (cache friendly) lookup + float l = k*8.0; + float f = fract(l); + + float ia = floor(l+0.5); // suslik's method (see comments) + float ib = floor(l); + f = min(f, 1.0-f)*2.0; + + vec2 offa = sin(vec2(3.0,7.0)*ia); // can replace with any other hash + vec2 offb = sin(vec2(3.0,7.0)*ib); // can replace with any other hash + + vec4 cola = texture(srcTexture, vec3(x.xy + offa, x.z)); + vec4 colb = texture(srcTexture, vec3(x.xy + offb, x.z)); + + return mix(cola, colb, smoothstep(0.2,0.8,f-0.1*sum(cola.xyz-colb.xyz))); +} + +vec4 _Triplanar_UV(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { + vec4 dx = texture_UV(tex, vec3(pos.zy / _TRI_SCALE, texSlice)); + vec4 dy = texture_UV(tex, vec3(pos.xz / _TRI_SCALE, texSlice)); + vec4 dz = texture_UV(tex, vec3(pos.xy / _TRI_SCALE, texSlice)); + + vec3 weights = abs(normal.xyz); + weights = weights / (weights.x + weights.y + weights.z); + + return dx * weights.x + dy * weights.y + dz * weights.z; +} + +vec4 _TriplanarN_UV(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { + // Tangent Reconstruction + // Triplanar uvs + vec2 uvX = pos.zy; // x facing plane + vec2 uvY = pos.xz; // y facing plane + vec2 uvZ = pos.xy; // z facing plane + // Tangent space normal maps + vec3 tx = texture_UV(tex, vec3(uvX / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + vec3 ty = texture_UV(tex, vec3(uvY / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + vec3 tz = texture_UV(tex, vec3(uvZ / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + + vec3 weights = abs(normal.xyz); + weights = weights / (weights.x + weights.y + weights.z); + + // Get the sign (-1 or 1) of the surface normal + vec3 axis = sign(normal); + // Construct tangent to world matrices for each axis + vec3 tangentX = normalize(cross(normal, vec3(0.0, axis.x, 0.0))); + vec3 bitangentX = normalize(cross(tangentX, normal)) * axis.x; + mat3 tbnX = mat3(tangentX, bitangentX, normal); + + vec3 tangentY = normalize(cross(normal, vec3(0.0, 0.0, axis.y))); + vec3 bitangentY = normalize(cross(tangentY, normal)) * axis.y; + mat3 tbnY = mat3(tangentY, bitangentY, normal); + + vec3 tangentZ = normalize(cross(normal, vec3(0.0, -axis.z, 0.0))); + vec3 bitangentZ = normalize(-cross(tangentZ, normal)) * axis.z; + mat3 tbnZ = mat3(tangentZ, bitangentZ, normal); + + // Apply tangent to world matrix and triblend + // Using clamp() because the cross products may be NANs + vec3 worldNormal = normalize( + clamp(tbnX * tx, -1.0, 1.0) * weights.x + + clamp(tbnY * ty, -1.0, 1.0) * weights.y + + clamp(tbnZ * tz, -1.0, 1.0) * weights.z + ); + return vec4(worldNormal, 0.0); +} + +vec4 _Triplanar(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { + vec4 dx = texture(tex, vec3(pos.zy / _TRI_SCALE, texSlice)); + vec4 dy = texture(tex, vec3(pos.xz / _TRI_SCALE, texSlice)); + vec4 dz = texture(tex, vec3(pos.xy / _TRI_SCALE, texSlice)); + + vec3 weights = abs(normal.xyz); + weights = weights / (weights.x + weights.y + weights.z); + + return dx * weights.x + dy * weights.y + dz * weights.z; +} + +vec4 _TriplanarN(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { + vec2 uvx = pos.zy; + vec2 uvy = pos.xz; + vec2 uvz = pos.xy; + vec3 tx = texture(tex, vec3(uvx / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + vec3 ty = texture(tex, vec3(uvy / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + vec3 tz = texture(tex, vec3(uvz / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + + vec3 weights = abs(normal.xyz); + weights *= weights; + weights = weights / (weights.x + weights.y + weights.z); + + vec3 axis = sign(normal); + vec3 tangentX = normalize(cross(normal, vec3(0.0, axis.x, 0.0))); + vec3 bitangentX = normalize(cross(tangentX, normal)) * axis.x; + mat3 tbnX = mat3(tangentX, bitangentX, normal); + + vec3 tangentY = normalize(cross(normal, vec3(0.0, 0.0, axis.y))); + vec3 bitangentY = normalize(cross(tangentY, normal)) * axis.y; + mat3 tbnY = mat3(tangentY, bitangentY, normal); + + vec3 tangentZ = normalize(cross(normal, vec3(0.0, -axis.z, 0.0))); + vec3 bitangentZ = normalize(-cross(tangentZ, normal)) * axis.z; + mat3 tbnZ = mat3(tangentZ, bitangentZ, normal); + + vec3 worldNormal = normalize( + clamp(tbnX * tx, -1.0, 1.0) * weights.x + + clamp(tbnY * ty, -1.0, 1.0) * weights.y + + clamp(tbnZ * tz, -1.0, 1.0) * weights.z); + return vec4(worldNormal, 0.0); +} + +void main() { + vec3 worldPosition = vCoords; + + float weightIndices[4] = float[4](vWeights1.x, vWeights1.y, vWeights1.z, vWeights1.w); + float weightValues[4] = float[4](vWeights2.x, vWeights2.y, vWeights2.z, vWeights2.w); + + // TRIPLANAR SPLATTING w/ NORMALS & UVS + vec3 worldSpaceNormal = normalize(vNormal); + vec4 diffuseSamples[4]; + vec4 normalSamples[4]; + + for (int i = 0; i < 4; ++i) { + vec4 d = vec4(0.0); + vec4 n = vec4(0.0); + if (weightValues[i] > 0.0) { + d = _Triplanar_UV( + worldPosition, worldSpaceNormal, weightIndices[i], TRIPLANAR_diffuseMap); + n = _TriplanarN_UV( + worldPosition, worldSpaceNormal, weightIndices[i], TRIPLANAR_normalMap); + + d.w *= weightValues[i]; + n.w = d.w; + } + + diffuseSamples[i] = d; + normalSamples[i] = n; + } + + vec4 diffuseBlended = _TerrainBlend_4(diffuseSamples); + vec4 normalBlended = _TerrainBlend_4(normalSamples); + vec3 diffuse = diffuseBlended.xyz; + + vec3 finalColour = diffuse; + + // finalColour = vec3(sin(worldPosition.x), sin(worldPosition.y), sin(worldPosition.z)); + + gl_FragColor = vec4(finalColour, 1); +} + + `; +const PS1 = ` + +precision mediump sampler2DArray; + +uniform sampler2DArray TRIPLANAR_normalMap; +uniform sampler2DArray TRIPLANAR_diffuseMap; +uniform sampler2D TRIPLANAR_noiseMap; + +in vec3 vCoords; +in vec4 vWeights1; +in vec4 vWeights2; + + +const float _TRI_SCALE = 10.0; + +float sum( vec3 v ) { return v.x+v.y+v.z; } + +vec4 hash4( vec2 p ) { + return fract( + sin(vec4(1.0+dot(p,vec2(37.0,17.0)), + 2.0+dot(p,vec2(11.0,47.0)), + 3.0+dot(p,vec2(41.0,29.0)), + 4.0+dot(p,vec2(23.0,31.0))))*103.0); +} + +vec4 _TerrainBlend_4(vec4 samples[4]) { + float depth = 0.2; + float ma = max( + samples[0].w, + max( + samples[1].w, + max(samples[2].w, samples[3].w))) - depth; + + float b1 = max(samples[0].w - ma, 0.0); + float b2 = max(samples[1].w - ma, 0.0); + float b3 = max(samples[2].w - ma, 0.0); + float b4 = max(samples[3].w - ma, 0.0); + + vec4 numer = ( + samples[0] * b1 + samples[1] * b2 + + samples[2] * b3 + samples[3] * b4); + float denom = (b1 + b2 + b3 + b4); + return numer / denom; +} + +vec4 _TerrainBlend_4_lerp(vec4 samples[4]) { + return ( + samples[0] * samples[0].w + samples[1] * samples[1].w + + samples[2] * samples[2].w + samples[3] * samples[3].w); +} + +// Lifted from https://www.shadertoy.com/view/Xtl3zf +vec4 texture_UV(in sampler2DArray srcTexture, in vec3 x) { + float k = texture(TRIPLANAR_noiseMap, 0.0025*x.xy).x; // cheap (cache friendly) lookup + float l = k*8.0; + float f = fract(l); + + float ia = floor(l+0.5); // suslik's method (see comments) + float ib = floor(l); + f = min(f, 1.0-f)*2.0; + + vec2 offa = sin(vec2(3.0,7.0)*ia); // can replace with any other hash + vec2 offb = sin(vec2(3.0,7.0)*ib); // can replace with any other hash + + vec4 cola = texture(srcTexture, vec3(x.xy + offa, x.z)); + vec4 colb = texture(srcTexture, vec3(x.xy + offb, x.z)); + + return mix(cola, colb, smoothstep(0.2,0.8,f-0.1*sum(cola.xyz-colb.xyz))); +} + +vec4 _Triplanar_UV(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { + vec4 dx = texture_UV(tex, vec3(pos.zy / _TRI_SCALE, texSlice)); + vec4 dy = texture_UV(tex, vec3(pos.xz / _TRI_SCALE, texSlice)); + vec4 dz = texture_UV(tex, vec3(pos.xy / _TRI_SCALE, texSlice)); + + vec3 weights = abs(normal.xyz); + weights = weights / (weights.x + weights.y + weights.z); + + return dx * weights.x + dy * weights.y + dz * weights.z; +} + +vec4 _TriplanarN_UV(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { + // Tangent Reconstruction + // Triplanar uvs + vec2 uvX = pos.zy; // x facing plane + vec2 uvY = pos.xz; // y facing plane + vec2 uvZ = pos.xy; // z facing plane + // Tangent space normal maps + vec3 tx = texture_UV(tex, vec3(uvX / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + vec3 ty = texture_UV(tex, vec3(uvY / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + vec3 tz = texture_UV(tex, vec3(uvZ / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + + vec3 weights = abs(normal.xyz); + weights = weights / (weights.x + weights.y + weights.z); + + // Get the sign (-1 or 1) of the surface normal + vec3 axis = sign(normal); + // Construct tangent to world matrices for each axis + vec3 tangentX = normalize(cross(normal, vec3(0.0, axis.x, 0.0))); + vec3 bitangentX = normalize(cross(tangentX, normal)) * axis.x; + mat3 tbnX = mat3(tangentX, bitangentX, normal); + + vec3 tangentY = normalize(cross(normal, vec3(0.0, 0.0, axis.y))); + vec3 bitangentY = normalize(cross(tangentY, normal)) * axis.y; + mat3 tbnY = mat3(tangentY, bitangentY, normal); + + vec3 tangentZ = normalize(cross(normal, vec3(0.0, -axis.z, 0.0))); + vec3 bitangentZ = normalize(-cross(tangentZ, normal)) * axis.z; + mat3 tbnZ = mat3(tangentZ, bitangentZ, normal); + + // Apply tangent to world matrix and triblend + // Using clamp() because the cross products may be NANs + vec3 worldNormal = normalize( + clamp(tbnX * tx, -1.0, 1.0) * weights.x + + clamp(tbnY * ty, -1.0, 1.0) * weights.y + + clamp(tbnZ * tz, -1.0, 1.0) * weights.z + ); + return vec4(worldNormal, 0.0); +} + +vec4 _Triplanar(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { + vec4 dx = texture(tex, vec3(pos.zy / _TRI_SCALE, texSlice)); + vec4 dy = texture(tex, vec3(pos.xz / _TRI_SCALE, texSlice)); + vec4 dz = texture(tex, vec3(pos.xy / _TRI_SCALE, texSlice)); + + vec3 weights = abs(normal.xyz); + weights = weights / (weights.x + weights.y + weights.z); + + return dx * weights.x + dy * weights.y + dz * weights.z; +} + +vec4 _TriplanarN(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { + vec2 uvx = pos.zy; + vec2 uvy = pos.xz; + vec2 uvz = pos.xy; + vec3 tx = texture(tex, vec3(uvx / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + vec3 ty = texture(tex, vec3(uvy / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + vec3 tz = texture(tex, vec3(uvz / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1); + + vec3 weights = abs(normal.xyz); + weights *= weights; + weights = weights / (weights.x + weights.y + weights.z); + + vec3 axis = sign(normal); + vec3 tangentX = normalize(cross(normal, vec3(0.0, axis.x, 0.0))); + vec3 bitangentX = normalize(cross(tangentX, normal)) * axis.x; + mat3 tbnX = mat3(tangentX, bitangentX, normal); + + vec3 tangentY = normalize(cross(normal, vec3(0.0, 0.0, axis.y))); + vec3 bitangentY = normalize(cross(tangentY, normal)) * axis.y; + mat3 tbnY = mat3(tangentY, bitangentY, normal); + + vec3 tangentZ = normalize(cross(normal, vec3(0.0, -axis.z, 0.0))); + vec3 bitangentZ = normalize(-cross(tangentZ, normal)) * axis.z; + mat3 tbnZ = mat3(tangentZ, bitangentZ, normal); + + vec3 worldNormal = normalize( + clamp(tbnX * tx, -1.0, 1.0) * weights.x + + clamp(tbnY * ty, -1.0, 1.0) * weights.y + + clamp(tbnZ * tz, -1.0, 1.0) * weights.z); + return vec4(worldNormal, 0.0); +} + + `; +const PS2 = ` + +{ + vec3 worldPosition = vCoords; + + float weightIndices[4] = float[4](vWeights1.x, vWeights1.y, vWeights1.z, vWeights1.w); + float weightValues[4] = float[4](vWeights2.x, vWeights2.y, vWeights2.z, vWeights2.w); + + // TRIPLANAR SPLATTING w/ NORMALS & UVS + vec3 worldSpaceNormal = normalize(vNormal); + vec4 diffuseSamples[4]; + // vec4 normalSamples[4]; + + for (int i = 0; i < 4; ++i) { + vec4 d = vec4(0.0); + // vec4 n = vec4(0.0); + if (weightValues[i] > 0.0) { + d = _Triplanar_UV( + worldPosition, worldSpaceNormal, weightIndices[i], TRIPLANAR_diffuseMap); + // n = _TriplanarN_UV( + // worldPosition, worldSpaceNormal, weightIndices[i], TRIPLANAR_normalMap); + + d.w *= weightValues[i]; + // n.w = d.w; + } + + diffuseSamples[i] = d; + // normalSamples[i] = n; + } + + vec4 diffuseBlended = _TerrainBlend_4(diffuseSamples); + // vec4 normalBlended = _TerrainBlend_4(normalSamples); + diffuseColor = sRGBToLinear(diffuseBlended); + // normal = normalBlended.xyz; +} + + `; +export { VS, PS, VS1, VS2, PS1, PS2, }; diff --git a/packages/client/dist/terrain.js b/packages/client/dist/terrain.js new file mode 100644 index 00000000..bb52c873 --- /dev/null +++ b/packages/client/dist/terrain.js @@ -0,0 +1,226 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { CubeQuadTree } from './quadtree'; +import { VS1, VS2, PS1, PS2 } from './terrain-shader'; +import { TerrainChunkRebuilder_Threaded } from './terrain-builder-threaded'; +import { TextureSplatter } from './texture-splatter'; +import { TextureAtlas } from './textures'; +import { utils } from './utils'; +import { Noise as aNoise, TerrainHeight, TerrainConstants } from 'shared'; +const { QT_MIN_CELL_SIZE, QT_MIN_CELL_RESOLUTION, PLANET_RADIUS, NOISE_PARAMS, HeightGenerator, Noise, } = Object.assign(Object.assign(Object.assign({}, aNoise), TerrainHeight), TerrainConstants); +class TerrainChunkManager extends Component { + constructor(params) { + super(); + this._Init(params); + } + _Init(params) { + this._params = params; + const loader = new THREE.TextureLoader(); + const noiseTexture = loader.load('./resources/terrain/simplex-png'); + noiseTexture.wrapS = THREE.RepeatWrapping; + noiseTexture.wrapT = THREE.RepeatWrapping; + const diffuse = new TextureAtlas(params); + diffuse.Load('diffuse', [ + './resources/terrain/dirt_01_diffuse-1024.png', + './resources/terrain/grass1-albedo3-1024.png', + './resources/terrain/sandyground-albedo-1024.png', + './resources/terrain/worn-bumpy-rock-albedo-1024.png', + './resources/terrain/rock-snow-ice-albedo-1024.png', + './resources/terrain/snow-packed-albedo-1024.png', + './resources/terrain/rough-wet-cobble-albedo-1024.png', + // './resources/terrain/sandy-rocks1-albedo-1024.png', + './resources/terrain/bark1-albedo.jpg', + ]); + const normal = new TextureAtlas(params); + normal.Load('normal', [ + './resources/terrain/dirt_01_normal-1024.jpg', + './resources/terrain/grass1-normal-1024.jpg', + './resources/terrain/sandyground-normal-1024.jpg', + './resources/terrain/worn-bumpy-rock-normal-1024.jpg', + './resources/terrain/rock-snow-ice-normal-1024.jpg', + './resources/terrain/snow-packed-normal-1024.jpg', + './resources/terrain/rough-wet-cobble-normal-1024.jpg', + // './resources/terrain/sandy-rocks1-normal-1024.jpg', + './resources/terrain/bark1-normal3.jpg', + ]); + this._material = new THREE.MeshStandardMaterial({ + side: THREE.BackSide, + vertexColors: true, + }); + this._material.onBeforeCompile = (s) => { + let a = 0; + let vsh = s.vertexShader; + vsh = VS1 + s.vertexShader; + const vi1 = vsh.search('#include '); + vsh = [vsh.slice(0, vi1) + VS2 + vsh.slice(vi1)].join(''); + s.vertexShader = vsh; + s.fragmentShader = PS1 + s.fragmentShader; + const fi1 = s.fragmentShader.search('#include '); + s.fragmentShader = [s.fragmentShader.slice(0, fi1) + PS2 + s.fragmentShader.slice(fi1)].join(''); + s.uniforms.TRIPLANAR_normalMap = { value: normal.Info['normal'].atlas }; + s.uniforms.TRIPLANAR_diffuseMap = { value: diffuse.Info['diffuse'].atlas }; + s.uniforms.TRIPLANAR_noiseMap = { value: noiseTexture }; + diffuse.onLoad = () => { + s.uniforms.TRIPLANAR_diffuseMap.value = diffuse.Info['diffuse'].atlas; + }; + normal.onLoad = () => { + s.uniforms.TRIPLANAR_normalMap.value = normal.Info['normal'].atlas; + }; + // s.fragmentShader += 'poop'; + }; + this._builder = new TerrainChunkRebuilder_Threaded(null); + // this._builder = new terrain_builder.TerrainChunkRebuilder(); + this._InitNoise(); + this._InitBiomes(params); + this._InitTerrain(params); + } + _InitNoise() { + this.heightGenerator_ = new HeightGenerator(); + } + _InitBiomes(params) { + params.guiParams.biomes = { + octaves: 2, + persistence: 0.5, + lacunarity: 2.0, + scale: 1024.0, + noiseType: 'simplex', + seed: 2, + exponentiation: 2, + height: 1.0 + }; + const onNoiseChanged = () => { + this._builder.Rebuild(this._chunks); + }; + const noiseRollup = params.gui.addFolder('Terrain.Biomes'); + noiseRollup.add(params.guiParams.biomes, "scale", 64.0, 4096.0).onChange(onNoiseChanged); + noiseRollup.add(params.guiParams.biomes, "octaves", 1, 20, 1).onChange(onNoiseChanged); + noiseRollup.add(params.guiParams.biomes, "persistence", 0.01, 1.0).onChange(onNoiseChanged); + noiseRollup.add(params.guiParams.biomes, "lacunarity", 0.01, 4.0).onChange(onNoiseChanged); + noiseRollup.add(params.guiParams.biomes, "exponentiation", 0.1, 10.0).onChange(onNoiseChanged); + this._biomes = new Noise(params.guiParams.biomes); + this._biomesParams = params.guiParams.biomes; + const colourParams = { + octaves: 1, + persistence: 0.5, + lacunarity: 2.0, + exponentiation: 1.0, + scale: 256.0, + noiseType: 'simplex', + seed: 2, + height: 1.0, + }; + this._colourNoise = new Noise(colourParams); + this._colourNoiseParams = colourParams; + } + _InitTerrain(params) { + params.guiParams.terrain = { + wireframe: false, + }; + this._groups = [...new Array(6)].map(_ => new THREE.Group()); + params.scene.add(...this._groups); + const terrainRollup = params.gui.addFolder('Terrain'); + terrainRollup.add(params.guiParams.terrain, "wireframe").onChange(() => { + for (let k in this._chunks) { + this._chunks[k].chunk._plane.material.wireframe = params.guiParams.terrain.wireframe; + } + }); + this._chunks = {}; + this._params = params; + } + _CreateTerrainChunk(group, groupTransform, offset, width, resolution) { + const params = { + group: group, + transform: groupTransform, + material: this._material, + width: width, + offset: offset, + // origin: this._params.camera.position.clone(), + radius: PLANET_RADIUS, + resolution: resolution, + biomeGenerator: this._biomes, + colourGenerator: new TextureSplatter({ biomeGenerator: this._biomes, colourNoise: this._colourNoise }), + heightGenerators: [this.heightGenerator_], + noiseParams: NOISE_PARAMS, + colourNoiseParams: this._colourNoiseParams, + biomesParams: this._biomesParams, + colourGeneratorParams: { + biomeGeneratorParams: this._biomesParams, + colourNoiseParams: this._colourNoiseParams, + }, + heightGeneratorsParams: { + min: 100000, + max: 100000 + 1, + } + }; + return this._builder.AllocateChunk(params); + } + GetHeight(pos) { + return this.heightGenerator_.Get(pos.x, 0.0, pos.z); + } + GetBiomeAt(pos) { + return this._biomes.Get(pos.x, 0.0, pos.z); + } + Update(_) { + const target = this.FindEntity(this._params.target); + if (!target) { + return; + } + this._builder.Update(); + if (!this._builder.Busy) { + this._UpdateVisibleChunks_Quadtree(target); + } + for (let k in this._chunks) { + this._chunks[k].chunk.Update(target.Position); + } + for (let c of this._builder._old) { + c.chunk.Update(target.Position); + } + // this._params.scattering.uniforms.planetRadius.value = PLANET_RADIUS; + // this._params.scattering.uniforms.atmosphereRadius.value = PLANET_RADIUS * 1.01; + } + _UpdateVisibleChunks_Quadtree(target) { + function _Key(c) { + return c.position[0] + '/' + c.position[2] + ' [' + c.size + ']'; + } + const q = new CubeQuadTree({ + radius: PLANET_RADIUS, + min_node_size: QT_MIN_CELL_SIZE, + }); + q.Insert(target.Position); + const sides = q.GetChildren(); + let newTerrainChunks = {}; + const center = new THREE.Vector3(); + const dimensions = new THREE.Vector3(); + for (let i = 0; i < sides.length; i++) { + for (let c of sides[i].children) { + c.bounds.getCenter(center); + c.bounds.getSize(dimensions); + const child = { + index: i, + group: this._groups[i], + transform: sides[i].transform, + position: [center.x, center.y, center.z], + bounds: c.bounds, + size: dimensions.x, + }; + const k = _Key(child); + newTerrainChunks[k] = child; + } + } + const intersection = utils.DictIntersection(this._chunks, newTerrainChunks); + const difference = utils.DictDifference(newTerrainChunks, this._chunks); + const recycle = Object.values(utils.DictDifference(this._chunks, newTerrainChunks)); + this._builder.RetireChunks(recycle); + newTerrainChunks = intersection; + for (let k in difference) { + const [xp, yp, zp] = difference[k].position; + const offset = new THREE.Vector3(xp, yp, zp); + newTerrainChunks[k] = { + position: [xp, zp], + chunk: this._CreateTerrainChunk(difference[k].group, difference[k].transform, offset, difference[k].size, QT_MIN_CELL_RESOLUTION), + }; + } + this._chunks = newTerrainChunks; + } +} +export { TerrainChunkManager }; diff --git a/packages/client/dist/test.js b/packages/client/dist/test.js new file mode 100644 index 00000000..ca273e18 --- /dev/null +++ b/packages/client/dist/test.js @@ -0,0 +1,2 @@ +// We got nothing. +// lol nope. from: Jeremy diff --git a/packages/client/dist/texture-splatter.js b/packages/client/dist/texture-splatter.js new file mode 100644 index 00000000..1175e856 --- /dev/null +++ b/packages/client/dist/texture-splatter.js @@ -0,0 +1,119 @@ +import * as THREE from 'three'; +import { Spline, TerrainConstants, Math as math } from 'shared'; +const { LinearSpline, NOISE_HEIGHT } = Object.assign(Object.assign({}, Spline), TerrainConstants); +const _HEIGHT_NORMALIZATION = NOISE_HEIGHT / 10.0; +const _WHITE = new THREE.Color(0x808080); +const _DEEP_OCEAN = new THREE.Color(0x20020FF); +const _SHALLOW_OCEAN = new THREE.Color(0x8080FF); +const _BEACH = new THREE.Color(0xd9d592); +const _SNOW = new THREE.Color(0xFFFFFF); +const _FOREST_BOREAL = new THREE.Color(0x29c100); +const _GREEN = new THREE.Color(0x80FF80); +const _RED = new THREE.Color(0xFF8080); +const _BLACK = new THREE.Color(0x000000); +class TextureSplatter { + constructor(params) { + const _colourLerp = (t, p0, p1) => { + const c = p0.clone(); + return c.lerp(p1, t); + }; + this._colourSpline = [ + new LinearSpline(_colourLerp), + new LinearSpline(_colourLerp) + ]; + // Arid + this._colourSpline[0].AddPoint(0.0, new THREE.Color(0xb7a67d)); + this._colourSpline[0].AddPoint(0.5, new THREE.Color(0xf1e1bc)); + this._colourSpline[0].AddPoint(1.0, _SNOW); + // Humid + this._colourSpline[1].AddPoint(0.0, _FOREST_BOREAL); + this._colourSpline[1].AddPoint(0.5, new THREE.Color(0x8a9343)); + this._colourSpline[1].AddPoint(1.0, _SNOW); + // this._colourSpline[1].AddPoint(0.5, new THREE.Color(0x8a9343)); + // this._colourSpline[1].AddPoint(1.0, _SNOW); + this._oceanSpline = new LinearSpline(_colourLerp); + this._oceanSpline.AddPoint(0, _DEEP_OCEAN); + this._oceanSpline.AddPoint(0.03, _SHALLOW_OCEAN); + this._oceanSpline.AddPoint(0.05, _SHALLOW_OCEAN); + this._params = params; + } + _BaseColour(x, y, z) { + const m = this._params.biomeGenerator.Get(x, y, z); + const h = math.sat(z / 100.0); + const c1 = this._colourSpline[0].Get(h); + const c2 = this._colourSpline[1].Get(h); + let c = c1.lerp(c2, m); + if (h < 0.1) { + c = c.lerp(new THREE.Color(0x54380e), 1.0 - math.sat(h / 0.05)); + } + return c; + } + _Colour(x, y, z) { + const c = this._BaseColour(x, y, z); + const r = this._params.colourNoise.Get(x, y, z) * 2.0 - 1.0; + c.offsetHSL(0.0, 0.0, r * 0.2); + return c; + } + _GetTextureWeights(p, n, up) { + const m = this._params.biomeGenerator.Get(p.x, p.y, p.z); + const h = p.z / _HEIGHT_NORMALIZATION; + const types = { + dirt: { index: 0, strength: 0.0 }, + grass: { index: 1, strength: 0.0 }, + gravel: { index: 2, strength: 0.0 }, + rock: { index: 3, strength: 0.0 }, + snow: { index: 4, strength: 0.0 }, + snowrock: { index: 5, strength: 0.0 }, + cobble: { index: 6, strength: 0.0 }, + sandyrock: { index: 7, strength: 0.0 }, + }; + function _ApplyWeights(dst, v, m) { + for (let k in types) { + types[k].strength *= m; + } + types[dst].strength = v; + } + ; + types.grass.strength = 1.0; + _ApplyWeights('gravel', 1.0 - m, m); + if (h < 0.2) { + const s = 1.0 - math.sat((h - 0.1) / 0.05); + _ApplyWeights('cobble', s, 1.0 - s); + if (h < 0.1) { + const s = 1.0 - math.sat((h - 0.05) / 0.05); + _ApplyWeights('sandyrock', s, 1.0 - s); + } + } + else { + if (h > 0.125) { + const s = (math.sat((h - 0.125) / 1.25)); + _ApplyWeights('rock', s, 1.0 - s); + } + if (h > 1.5) { + const s = math.sat((h - 0.75) / 2.0); + _ApplyWeights('snow', s, 1.0 - s); + } + } + // In case nothing gets set. + types.dirt.strength = 0.01; + let total = 0.0; + for (let k in types) { + total += types[k].strength; + } + if (total < 0.01) { + const a = 0; + } + const normalization = 1.0 / total; + for (let k in types) { + types[k].strength / normalization; + } + return types; + } + GetColour(position) { + return this._Colour(position.x, position.y, position.z); + } + GetSplat(position, normal, up) { + return this._GetTextureWeights(position, normal, up); + } +} +export { TextureSplatter }; diff --git a/packages/client/dist/textures.js b/packages/client/dist/textures.js new file mode 100644 index 00000000..42e1f8de --- /dev/null +++ b/packages/client/dist/textures.js @@ -0,0 +1,68 @@ +import * as THREE from 'three'; +// Taken from https://github.com/mrdoob/three.js/issues/758 +function _GetImageData(image) { + var canvas = document.createElement('canvas'); + canvas.width = image.width; + canvas.height = image.height; + var context = canvas.getContext('2d'); + context.drawImage(image, 0, 0); + return context.getImageData(0, 0, image.width, image.height); +} +class TextureAtlas { + constructor(params) { + this._threejs = params.threejs; + this._Create(); + this.onLoad = () => { }; + } + Load(atlas, names) { + this._LoadAtlas(atlas, names); + } + _Create() { + this._manager = new THREE.LoadingManager(); + this._loader = new THREE.TextureLoader(this._manager); + this._textures = {}; + this._manager.onLoad = () => { + this._OnLoad(); + }; + } + get Info() { + return this._textures; + } + _LoadTexture(n) { + const t = this._loader.load(n); + t.encoding = THREE.sRGBEncoding; + return t; + } + _OnLoad() { + for (let k in this._textures) { + const atlas = this._textures[k]; + const data = new Uint8Array(atlas.textures.length * 4 * 1024 * 1024); + for (let t = 0; t < atlas.textures.length; t++) { + const curTexture = atlas.textures[t]; + const curData = _GetImageData(curTexture.image); + const offset = t * (4 * 1024 * 1024); + data.set(curData.data, offset); + } + const diffuse = new THREE.DataTexture2DArray(data, 1024, 1024, atlas.textures.length); + diffuse.format = THREE.RGBAFormat; + diffuse.type = THREE.UnsignedByteType; + diffuse.minFilter = THREE.LinearMipMapLinearFilter; + diffuse.magFilter = THREE.LinearFilter; + diffuse.wrapS = THREE.RepeatWrapping; + diffuse.wrapT = THREE.RepeatWrapping; + diffuse.generateMipmaps = true; + const caps = this._threejs.capabilities; + const aniso = caps.getMaxAnisotropy(); + diffuse.anisotropy = 4; + atlas.atlas = diffuse; + } + this.onLoad(); + } + _LoadAtlas(atlas, names) { + this._textures[atlas] = { + textures: names.map(n => this._LoadTexture(n)), + atlas: null, + }; + } +} +export { TextureAtlas }; diff --git a/packages/client/dist/third-person-camera.js b/packages/client/dist/third-person-camera.js new file mode 100644 index 00000000..b7f0c221 --- /dev/null +++ b/packages/client/dist/third-person-camera.js @@ -0,0 +1,39 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants } from 'shared'; +const { KNOWN_ENTITIES } = Constants; +class ThirdPersonCamera extends Component { + constructor(params) { + super(); + this._params = params; + this._camera = params.camera; + this._currentPosition = new THREE.Vector3(); + this._currentLookat = new THREE.Vector3(); + } + _CalculateIdealOffset() { + const idealOffset = new THREE.Vector3(-0, 10, -15); + idealOffset.applyQuaternion(this._params.target._rotation); + idealOffset.add(this._params.target._position); + const terrain = this.FindEntity(KNOWN_ENTITIES.TERRAIN).GetComponent('TerrainChunkManager'); + idealOffset.y = Math.max(idealOffset.y, terrain.GetHeight(idealOffset)[0] + 5.0); + return idealOffset; + } + _CalculateIdealLookat() { + const idealLookat = new THREE.Vector3(0, 5, 20); + idealLookat.applyQuaternion(this._params.target._rotation); + idealLookat.add(this._params.target._position); + return idealLookat; + } + Update(timeElapsed) { + const idealOffset = this._CalculateIdealOffset(); + const idealLookat = this._CalculateIdealLookat(); + // const t = 0.05; + // const t = 4.0 * timeElapsed; + const t = 1.0 - Math.pow(0.01, timeElapsed); + this._currentPosition.lerp(idealOffset, t); + this._currentLookat.lerp(idealLookat, t); + this._camera.position.copy(this._currentPosition); + this._camera.lookAt(this._currentLookat); + } +} +export { ThirdPersonCamera }; diff --git a/packages/client/dist/threejs_component.js b/packages/client/dist/threejs_component.js new file mode 100644 index 00000000..b07499b0 --- /dev/null +++ b/packages/client/dist/threejs_component.js @@ -0,0 +1,164 @@ +import * as THREE from 'three'; +import { Constants } from 'shared'; +import { Component } from "./entity"; +const { DOM_IDS } = Constants; +const _VS = ` + varying vec3 vWorldPosition; + + void main() { + vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); + vWorldPosition = worldPosition.xyz; + + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + }`; +const _FS = ` + uniform vec3 topColor; + uniform vec3 bottomColor; + uniform float offset; + uniform float exponent; + uniform samplerCube background; + + varying vec3 vWorldPosition; + + void main() { + vec3 viewDirection = normalize(vWorldPosition - cameraPosition); + vec3 stars = textureCube(background, viewDirection).xyz; + + float h = normalize(vWorldPosition + offset).y; + float t = max(pow(max(h, 0.0), exponent), 0.0); + + float f = exp(min(0.0, -vWorldPosition.y * 0.00125)); + + vec3 sky = mix(stars, bottomColor, f); + gl_FragColor = vec4(sky, 1.0); + }`; +class ThreeJSController extends Component { + constructor() { + super(); + } + InitEntity() { + THREE.ShaderChunk.fog_fragment = ` + #ifdef USE_FOG + vec3 fogOrigin = cameraPosition; + vec3 fogDirection = normalize(vWorldPosition - fogOrigin); + float fogDepth = distance(vWorldPosition, fogOrigin); + + fogDepth *= fogDepth; + + float heightFactor = 0.05; + float fogFactor = heightFactor * exp(-fogOrigin.y * fogDensity) * ( + 1.0 - exp(-fogDepth * fogDirection.y * fogDensity)) / fogDirection.y; + fogFactor = saturate(fogFactor); + + gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); + #endif`; + THREE.ShaderChunk.fog_pars_fragment = ` + #ifdef USE_FOG + uniform float fogTime; + uniform vec3 fogColor; + varying vec3 vWorldPosition; + #ifdef FOG_EXP2 + uniform float fogDensity; + #else + uniform float fogNear; + uniform float fogFar; + #endif + #endif`; + THREE.ShaderChunk.fog_vertex = ` + #ifdef USE_FOG + vWorldPosition = (modelMatrix * vec4(transformed, 1.0 )).xyz; + #endif`; + THREE.ShaderChunk.fog_pars_vertex = ` + #ifdef USE_FOG + varying vec3 vWorldPosition; + #endif`; + this.threejs_ = new THREE.WebGLRenderer({ + antialias: false, + }); + this.threejs_.outputEncoding = THREE.sRGBEncoding; + this.threejs_.gammaFactor = 2.2; + this.threejs_.shadowMap.enabled = true; + this.threejs_.shadowMap.type = THREE.PCFSoftShadowMap; + this.threejs_.setPixelRatio(window.devicePixelRatio); + this.threejs_.setSize(window.innerWidth, window.innerHeight); + this.threejs_.domElement.id = DOM_IDS.THREEJS; + document.getElementById('container').appendChild(this.threejs_.domElement); + window.addEventListener('resize', () => { + this._OnWindowResize(); + }, false); + const fov = 60; + const aspect = 1920 / 1080; + const near = 1.0; + const far = 10000.0; + this.camera_ = new THREE.PerspectiveCamera(fov, aspect, near, far); + this.camera_.position.set(25, 10, 25); + this.scene_ = new THREE.Scene(); + this.scene_.fog = new THREE.FogExp2(0x89b2eb, 0.00002); + let light = new THREE.DirectionalLight(0x8088b3, 0.7); + light.position.set(-10, 500, 10); + light.target.position.set(0, 0, 0); + light.castShadow = true; + light.shadow.bias = -0.001; + light.shadow.mapSize.width = 4096; + light.shadow.mapSize.height = 4096; + light.shadow.camera.near = 0.1; + light.shadow.camera.far = 1000.0; + light.shadow.camera.left = 100; + light.shadow.camera.right = -100; + light.shadow.camera.top = 100; + light.shadow.camera.bottom = -100; + this.scene_.add(light); + this.sun_ = light; + this.LoadSky_(); + } + _OnWindowResize() { + throw new Error('Method not implemented.'); + } + LoadSky_() { + const hemiLight = new THREE.HemisphereLight(0x424a75, 0x6a88b5, 0.7); + // hemiLight.color.setHSL(0.6, 1, 0.4); + // hemiLight.groundColor.setHSL(0.095, 1, 0.5); + this.scene_.add(hemiLight); + const loader = new THREE.CubeTextureLoader(); + const texture = loader.load([ + './resources/terrain/space-posx.jpg', + './resources/terrain/space-negx.jpg', + './resources/terrain/space-posy.jpg', + './resources/terrain/space-negy.jpg', + './resources/terrain/space-posz.jpg', + './resources/terrain/space-negz.jpg', + ]); + texture.encoding = THREE.sRGBEncoding; + const uniforms = { + "topColor": { value: new THREE.Color(0x000000) }, + "bottomColor": { value: new THREE.Color(0x5d679e) }, + "offset": { value: -500 }, + "exponent": { value: 0.3 }, + "background": { value: texture }, + }; + // uniforms["topColor"].value.copy(hemiLight.color); + this.scene_.fog.color.copy(uniforms["bottomColor"].value); + const skyGeo = new THREE.SphereBufferGeometry(5000, 32, 15); + const skyMat = new THREE.ShaderMaterial({ + uniforms: uniforms, + vertexShader: _VS, + fragmentShader: _FS, + side: THREE.BackSide + }); + const sky = new THREE.Mesh(skyGeo, skyMat); + this.scene_.add(sky); + } + Update(_) { + const player = this.FindEntity('player'); + if (!player) { + return; + } + const pos = player._position; + this.sun_.position.copy(pos); + this.sun_.position.add(new THREE.Vector3(-50, 200, -10)); + this.sun_.target.position.copy(pos); + this.sun_.updateMatrixWorld(); + this.sun_.target.updateMatrixWorld(); + } +} +export { ThreeJSController }; diff --git a/packages/client/dist/ui-controller.js b/packages/client/dist/ui-controller.js new file mode 100644 index 00000000..77de4aef --- /dev/null +++ b/packages/client/dist/ui-controller.js @@ -0,0 +1,131 @@ +import { Constants } from 'shared'; +import { Component } from './entity'; +const { DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES } = Constants; +class UIController extends Component { + constructor(params) { + super(); + this._params = params; + this._quests = {}; + } + InitComponent() { + this.iconBar_ = { + stats: document.getElementById('icon-bar-stats'), + inventory: document.getElementById('icon-bar-inventory'), + quests: document.getElementById('icon-bar-quests'), + }; + this._ui = { + inventory: document.getElementById('inventory'), + stats: document.getElementById('stats'), + quests: document.getElementById('quest-journal'), + }; + const e = document.getElementById(DOM_IDS.QUEST_UI); + e.style.visibility = 'hidden'; + this.iconBar_.inventory.onclick = (m) => { this.OnInventoryClicked_(m); }; + this.iconBar_.stats.onclick = (m) => { this.OnStatsClicked_(m); }; + this.iconBar_.quests.onclick = (m) => { this.OnQuestsClicked_(m); }; + this.HideUI_(); + this.chatElement_ = document.getElementById('chat-input'); + this.chatElement_.addEventListener('keydown', (e) => this.OnChatKeyDown_(e), false); + } + FadeoutLogin() { + const loginElement = document.getElementById(DOM_IDS.LOGIN_UI); + if (loginElement.classList.contains('fadeOut')) { + return; + } + loginElement.classList.toggle('fadeOut'); + document.getElementById('game-ui').style.visibility = 'visible'; + } + OnChatKeyDown_(evt) { + if (evt.keyCode === 13) { + evt.preventDefault(); + const msg = this.chatElement_.value; + if (msg != '') { + const net = this.FindEntity(KNOWN_ENTITIES.NETWORK).GetComponent(NAMED_COMPONENTS.NETWORK_CONTROLLER); + net.SendChat(msg); + } + this.chatElement_.value = ''; + } + evt.stopPropagation(); + } + AddQuest(quest) { + if (quest.id in this._quests) { + return; + } + const e = document.createElement('DIV'); + e.className = 'quest-entry'; + e.id = 'quest-entry-' + quest.id; + e.innerText = quest.title; + e.onclick = (evt) => { + this.OnQuestSelected_(e.id); + }; + document.getElementById('quest-journal').appendChild(e); + this._quests[quest.id] = quest; + this.OnQuestSelected_(quest.id); + } + AddEventMessages(events) { + for (let e of events) { + if (e.type != STATE_TYPES.ATTACK) { + continue; + } + if (e.attacker.Name != 'player' && e.target.Name != 'player') { + continue; + } + const attackerName = e.attacker.Name == 'player' ? 'You' : e.attacker.Account.name; + const targetName = e.target.Name == 'player' ? 'you' : e.target.Account.name; + this.AddChatMessage({ + name: '', + text: attackerName + ' hit ' + targetName + ' for ' + e.amount + ' damage!', + action: true, + }); + } + } + AddChatMessage(msg) { + const e = document.createElement('div'); + e.className = 'chat-text'; + if (msg.server) { + e.className += ' chat-text-server'; + } + else if (msg.action) { + e.className += ' chat-text-action'; + } + else { + e.innerText = '[' + msg.name + ']: '; + } + e.innerText += msg.text; + const chatElement = document.getElementById('chat-ui-text-area'); + chatElement.insertBefore(e, document.getElementById('chat-input')); + } + OnQuestSelected_(id) { + const quest = this._quests[id]; + const e = document.getElementById(DOM_IDS.QUEST_UI); + e.style.visibility = ''; + const text = document.getElementById('quest-text'); + text.innerText = quest.text; + const title = document.getElementById('quest-text-title'); + title.innerText = quest.title; + } + HideUI_() { + this._ui.inventory.style.visibility = 'hidden'; + this._ui.stats.style.visibility = 'hidden'; + this._ui.quests.style.visibility = 'hidden'; + } + OnQuestsClicked_(msg) { + const visibility = this._ui.quests.style.visibility; + this.HideUI_(); + this._ui.quests.style.visibility = (visibility ? '' : 'hidden'); + } + OnStatsClicked_(msg) { + const visibility = this._ui.stats.style.visibility; + this.HideUI_(); + this._ui.stats.style.visibility = (visibility ? '' : 'hidden'); + } + OnInventoryClicked_(msg) { + const visibility = this._ui.inventory.style.visibility; + this.HideUI_(); + this._ui.inventory.style.visibility = (visibility ? '' : 'hidden'); + } + Update(timeInSeconds) { + } +} +; +export { UIController }; diff --git a/packages/client/dist/utils.js b/packages/client/dist/utils.js new file mode 100644 index 00000000..22e38f6b --- /dev/null +++ b/packages/client/dist/utils.js @@ -0,0 +1,20 @@ +export const utils = (function () { + return { + DictIntersection: function (dictA, dictB) { + const intersection = {}; + for (let k in dictB) { + if (k in dictA) { + intersection[k] = dictA[k]; + } + } + return intersection; + }, + DictDifference: function (dictA, dictB) { + const diff = Object.assign({}, dictA); + for (let k in dictB) { + delete diff[k]; + } + return diff; + } + }; +})(); diff --git a/client/index.html b/packages/client/index.html similarity index 97% rename from client/index.html rename to packages/client/index.html index 7bbf637d..24fb0ad5 100644 --- a/client/index.html +++ b/packages/client/index.html @@ -8,7 +8,7 @@ -
diff --git a/packages/client/package.json b/packages/client/package.json new file mode 100644 index 00000000..507a09b0 --- /dev/null +++ b/packages/client/package.json @@ -0,0 +1,24 @@ +{ + "name": "client", + "version": "0.0.1", + "devDependencies": { + "cross-env": "^5.0.5", + "http-server": "^0.12.3", + "nodemon": "^2.0.7", + "tsc-watch": "^4.2.9", + "tsconfig-paths-webpack-plugin": "^3.5.1" + }, + "peerDependencies": { + "shared": "0.0.1" + }, + "dependencies": { + "socket.io-client": "^4.0.0", + "three": "^0.127.0", + "typescript": "^4.2.3" + }, + "scripts": { + "build": "tsc --build", + "start:dev": "tsc-watch --onSuccess 'http-server'", + "start": "node ./dist/index.js" + } +} diff --git a/client/resources/background-2.jpg b/packages/client/resources/background-2.jpg similarity index 100% rename from client/resources/background-2.jpg rename to packages/client/resources/background-2.jpg diff --git a/client/resources/background-3.png b/packages/client/resources/background-3.png similarity index 100% rename from client/resources/background-3.png rename to packages/client/resources/background-3.png diff --git a/client/resources/background.jpg b/packages/client/resources/background.jpg similarity index 100% rename from client/resources/background.jpg rename to packages/client/resources/background.jpg diff --git a/client/resources/characters/guard.glb b/packages/client/resources/characters/guard.glb similarity index 100% rename from client/resources/characters/guard.glb rename to packages/client/resources/characters/guard.glb diff --git a/client/resources/characters/paladin.glb b/packages/client/resources/characters/paladin.glb similarity index 100% rename from client/resources/characters/paladin.glb rename to packages/client/resources/characters/paladin.glb diff --git a/client/resources/characters/readme.txt b/packages/client/resources/characters/readme.txt similarity index 100% rename from client/resources/characters/readme.txt rename to packages/client/resources/characters/readme.txt diff --git a/client/resources/characters/sorceror.glb b/packages/client/resources/characters/sorceror.glb similarity index 100% rename from client/resources/characters/sorceror.glb rename to packages/client/resources/characters/sorceror.glb diff --git a/client/resources/characters/warrok.glb b/packages/client/resources/characters/warrok.glb similarity index 100% rename from client/resources/characters/warrok.glb rename to packages/client/resources/characters/warrok.glb diff --git a/client/resources/characters/zombie-guy.glb b/packages/client/resources/characters/zombie-guy.glb similarity index 100% rename from client/resources/characters/zombie-guy.glb rename to packages/client/resources/characters/zombie-guy.glb diff --git a/client/resources/characters/zombie.glb b/packages/client/resources/characters/zombie.glb similarity index 100% rename from client/resources/characters/zombie.glb rename to packages/client/resources/characters/zombie.glb diff --git a/client/resources/icons/readme.txt b/packages/client/resources/icons/readme.txt similarity index 100% rename from client/resources/icons/readme.txt rename to packages/client/resources/icons/readme.txt diff --git a/client/resources/icons/ui/backpack.png b/packages/client/resources/icons/ui/backpack.png similarity index 100% rename from client/resources/icons/ui/backpack.png rename to packages/client/resources/icons/ui/backpack.png diff --git a/client/resources/icons/ui/health-bar.png b/packages/client/resources/icons/ui/health-bar.png similarity index 100% rename from client/resources/icons/ui/health-bar.png rename to packages/client/resources/icons/ui/health-bar.png diff --git a/client/resources/icons/ui/inventory-character.png b/packages/client/resources/icons/ui/inventory-character.png similarity index 100% rename from client/resources/icons/ui/inventory-character.png rename to packages/client/resources/icons/ui/inventory-character.png diff --git a/client/resources/icons/ui/skills.png b/packages/client/resources/icons/ui/skills.png similarity index 100% rename from client/resources/icons/ui/skills.png rename to packages/client/resources/icons/ui/skills.png diff --git a/client/resources/icons/ui/tied-scroll.png b/packages/client/resources/icons/ui/tied-scroll.png similarity index 100% rename from client/resources/icons/ui/tied-scroll.png rename to packages/client/resources/icons/ui/tied-scroll.png diff --git a/client/resources/icons/weapons/hammer-64.png b/packages/client/resources/icons/weapons/hammer-64.png similarity index 100% rename from client/resources/icons/weapons/hammer-64.png rename to packages/client/resources/icons/weapons/hammer-64.png diff --git a/client/resources/icons/weapons/pointy-sword-64.png b/packages/client/resources/icons/weapons/pointy-sword-64.png similarity index 100% rename from client/resources/icons/weapons/pointy-sword-64.png rename to packages/client/resources/icons/weapons/pointy-sword-64.png diff --git a/client/resources/icons/weapons/pointy-sword.png b/packages/client/resources/icons/weapons/pointy-sword.png similarity index 100% rename from client/resources/icons/weapons/pointy-sword.png rename to packages/client/resources/icons/weapons/pointy-sword.png diff --git a/client/resources/icons/weapons/thor-hammer.png b/packages/client/resources/icons/weapons/thor-hammer.png similarity index 100% rename from client/resources/icons/weapons/thor-hammer.png rename to packages/client/resources/icons/weapons/thor-hammer.png diff --git a/client/resources/icons/weapons/war-axe-64.png b/packages/client/resources/icons/weapons/war-axe-64.png similarity index 100% rename from client/resources/icons/weapons/war-axe-64.png rename to packages/client/resources/icons/weapons/war-axe-64.png diff --git a/client/resources/icons/weapons/war-axe.png b/packages/client/resources/icons/weapons/war-axe.png similarity index 100% rename from client/resources/icons/weapons/war-axe.png rename to packages/client/resources/icons/weapons/war-axe.png diff --git a/client/resources/nature/Blends/BirchTree_1.blend b/packages/client/resources/nature/Blends/BirchTree_1.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_1.blend rename to packages/client/resources/nature/Blends/BirchTree_1.blend diff --git a/client/resources/nature/Blends/BirchTree_2.blend b/packages/client/resources/nature/Blends/BirchTree_2.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_2.blend rename to packages/client/resources/nature/Blends/BirchTree_2.blend diff --git a/client/resources/nature/Blends/BirchTree_3.blend b/packages/client/resources/nature/Blends/BirchTree_3.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_3.blend rename to packages/client/resources/nature/Blends/BirchTree_3.blend diff --git a/client/resources/nature/Blends/BirchTree_4.blend b/packages/client/resources/nature/Blends/BirchTree_4.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_4.blend rename to packages/client/resources/nature/Blends/BirchTree_4.blend diff --git a/client/resources/nature/Blends/BirchTree_5.blend b/packages/client/resources/nature/Blends/BirchTree_5.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_5.blend rename to packages/client/resources/nature/Blends/BirchTree_5.blend diff --git a/client/resources/nature/Blends/BirchTree_Autumn_1.blend b/packages/client/resources/nature/Blends/BirchTree_Autumn_1.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Autumn_1.blend rename to packages/client/resources/nature/Blends/BirchTree_Autumn_1.blend diff --git a/client/resources/nature/Blends/BirchTree_Autumn_2.blend b/packages/client/resources/nature/Blends/BirchTree_Autumn_2.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Autumn_2.blend rename to packages/client/resources/nature/Blends/BirchTree_Autumn_2.blend diff --git a/client/resources/nature/Blends/BirchTree_Autumn_3.blend b/packages/client/resources/nature/Blends/BirchTree_Autumn_3.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Autumn_3.blend rename to packages/client/resources/nature/Blends/BirchTree_Autumn_3.blend diff --git a/client/resources/nature/Blends/BirchTree_Autumn_4.blend b/packages/client/resources/nature/Blends/BirchTree_Autumn_4.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Autumn_4.blend rename to packages/client/resources/nature/Blends/BirchTree_Autumn_4.blend diff --git a/client/resources/nature/Blends/BirchTree_Autumn_5.blend b/packages/client/resources/nature/Blends/BirchTree_Autumn_5.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Autumn_5.blend rename to packages/client/resources/nature/Blends/BirchTree_Autumn_5.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_1.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_1.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_1.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_1.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_2.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_2.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_2.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_2.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_3.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_3.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_3.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_3.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_4.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_4.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_4.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_4.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_5.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_5.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_5.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_5.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_Snow_1.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_Snow_1.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_Snow_1.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_Snow_2.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_Snow_2.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_Snow_2.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_Snow_3.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_3.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_Snow_3.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_Snow_3.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_Snow_4.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_4.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_Snow_4.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_Snow_4.blend diff --git a/client/resources/nature/Blends/BirchTree_Dead_Snow_5.blend b/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_5.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Dead_Snow_5.blend rename to packages/client/resources/nature/Blends/BirchTree_Dead_Snow_5.blend diff --git a/client/resources/nature/Blends/BirchTree_Snow_1.blend b/packages/client/resources/nature/Blends/BirchTree_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Snow_1.blend rename to packages/client/resources/nature/Blends/BirchTree_Snow_1.blend diff --git a/client/resources/nature/Blends/BirchTree_Snow_2.blend b/packages/client/resources/nature/Blends/BirchTree_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Snow_2.blend rename to packages/client/resources/nature/Blends/BirchTree_Snow_2.blend diff --git a/client/resources/nature/Blends/BirchTree_Snow_3.blend b/packages/client/resources/nature/Blends/BirchTree_Snow_3.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Snow_3.blend rename to packages/client/resources/nature/Blends/BirchTree_Snow_3.blend diff --git a/client/resources/nature/Blends/BirchTree_Snow_4.blend b/packages/client/resources/nature/Blends/BirchTree_Snow_4.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Snow_4.blend rename to packages/client/resources/nature/Blends/BirchTree_Snow_4.blend diff --git a/client/resources/nature/Blends/BirchTree_Snow_5.blend b/packages/client/resources/nature/Blends/BirchTree_Snow_5.blend similarity index 100% rename from client/resources/nature/Blends/BirchTree_Snow_5.blend rename to packages/client/resources/nature/Blends/BirchTree_Snow_5.blend diff --git a/client/resources/nature/Blends/BushBerries_1.blend b/packages/client/resources/nature/Blends/BushBerries_1.blend similarity index 100% rename from client/resources/nature/Blends/BushBerries_1.blend rename to packages/client/resources/nature/Blends/BushBerries_1.blend diff --git a/client/resources/nature/Blends/BushBerries_2.blend b/packages/client/resources/nature/Blends/BushBerries_2.blend similarity index 100% rename from client/resources/nature/Blends/BushBerries_2.blend rename to packages/client/resources/nature/Blends/BushBerries_2.blend diff --git a/client/resources/nature/Blends/Bush_1.blend b/packages/client/resources/nature/Blends/Bush_1.blend similarity index 100% rename from client/resources/nature/Blends/Bush_1.blend rename to packages/client/resources/nature/Blends/Bush_1.blend diff --git a/client/resources/nature/Blends/Bush_2.blend b/packages/client/resources/nature/Blends/Bush_2.blend similarity index 100% rename from client/resources/nature/Blends/Bush_2.blend rename to packages/client/resources/nature/Blends/Bush_2.blend diff --git a/client/resources/nature/Blends/Bush_Snow_1.blend b/packages/client/resources/nature/Blends/Bush_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/Bush_Snow_1.blend rename to packages/client/resources/nature/Blends/Bush_Snow_1.blend diff --git a/client/resources/nature/Blends/Bush_Snow_2.blend b/packages/client/resources/nature/Blends/Bush_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/Bush_Snow_2.blend rename to packages/client/resources/nature/Blends/Bush_Snow_2.blend diff --git a/client/resources/nature/Blends/CactusFlower_1.blend b/packages/client/resources/nature/Blends/CactusFlower_1.blend similarity index 100% rename from client/resources/nature/Blends/CactusFlower_1.blend rename to packages/client/resources/nature/Blends/CactusFlower_1.blend diff --git a/client/resources/nature/Blends/CactusFlowers_2.blend b/packages/client/resources/nature/Blends/CactusFlowers_2.blend similarity index 100% rename from client/resources/nature/Blends/CactusFlowers_2.blend rename to packages/client/resources/nature/Blends/CactusFlowers_2.blend diff --git a/client/resources/nature/Blends/CactusFlowers_3.blend b/packages/client/resources/nature/Blends/CactusFlowers_3.blend similarity index 100% rename from client/resources/nature/Blends/CactusFlowers_3.blend rename to packages/client/resources/nature/Blends/CactusFlowers_3.blend diff --git a/client/resources/nature/Blends/CactusFlowers_4.blend b/packages/client/resources/nature/Blends/CactusFlowers_4.blend similarity index 100% rename from client/resources/nature/Blends/CactusFlowers_4.blend rename to packages/client/resources/nature/Blends/CactusFlowers_4.blend diff --git a/client/resources/nature/Blends/CactusFlowers_5.blend b/packages/client/resources/nature/Blends/CactusFlowers_5.blend similarity index 100% rename from client/resources/nature/Blends/CactusFlowers_5.blend rename to packages/client/resources/nature/Blends/CactusFlowers_5.blend diff --git a/client/resources/nature/Blends/Cactus_1.blend b/packages/client/resources/nature/Blends/Cactus_1.blend similarity index 100% rename from client/resources/nature/Blends/Cactus_1.blend rename to packages/client/resources/nature/Blends/Cactus_1.blend diff --git a/client/resources/nature/Blends/Cactus_2.blend b/packages/client/resources/nature/Blends/Cactus_2.blend similarity index 100% rename from client/resources/nature/Blends/Cactus_2.blend rename to packages/client/resources/nature/Blends/Cactus_2.blend diff --git a/client/resources/nature/Blends/Cactus_3.blend b/packages/client/resources/nature/Blends/Cactus_3.blend similarity index 100% rename from client/resources/nature/Blends/Cactus_3.blend rename to packages/client/resources/nature/Blends/Cactus_3.blend diff --git a/client/resources/nature/Blends/Cactus_4.blend b/packages/client/resources/nature/Blends/Cactus_4.blend similarity index 100% rename from client/resources/nature/Blends/Cactus_4.blend rename to packages/client/resources/nature/Blends/Cactus_4.blend diff --git a/client/resources/nature/Blends/Cactus_5.blend b/packages/client/resources/nature/Blends/Cactus_5.blend similarity index 100% rename from client/resources/nature/Blends/Cactus_5.blend rename to packages/client/resources/nature/Blends/Cactus_5.blend diff --git a/client/resources/nature/Blends/CommonTree_1.blend b/packages/client/resources/nature/Blends/CommonTree_1.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_1.blend rename to packages/client/resources/nature/Blends/CommonTree_1.blend diff --git a/client/resources/nature/Blends/CommonTree_2.blend b/packages/client/resources/nature/Blends/CommonTree_2.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_2.blend rename to packages/client/resources/nature/Blends/CommonTree_2.blend diff --git a/client/resources/nature/Blends/CommonTree_3.blend b/packages/client/resources/nature/Blends/CommonTree_3.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_3.blend rename to packages/client/resources/nature/Blends/CommonTree_3.blend diff --git a/client/resources/nature/Blends/CommonTree_4.blend b/packages/client/resources/nature/Blends/CommonTree_4.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_4.blend rename to packages/client/resources/nature/Blends/CommonTree_4.blend diff --git a/client/resources/nature/Blends/CommonTree_5.blend b/packages/client/resources/nature/Blends/CommonTree_5.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_5.blend rename to packages/client/resources/nature/Blends/CommonTree_5.blend diff --git a/client/resources/nature/Blends/CommonTree_Autumn_1.blend b/packages/client/resources/nature/Blends/CommonTree_Autumn_1.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Autumn_1.blend rename to packages/client/resources/nature/Blends/CommonTree_Autumn_1.blend diff --git a/client/resources/nature/Blends/CommonTree_Autumn_2.blend b/packages/client/resources/nature/Blends/CommonTree_Autumn_2.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Autumn_2.blend rename to packages/client/resources/nature/Blends/CommonTree_Autumn_2.blend diff --git a/client/resources/nature/Blends/CommonTree_Autumn_3.blend b/packages/client/resources/nature/Blends/CommonTree_Autumn_3.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Autumn_3.blend rename to packages/client/resources/nature/Blends/CommonTree_Autumn_3.blend diff --git a/client/resources/nature/Blends/CommonTree_Autumn_4.blend b/packages/client/resources/nature/Blends/CommonTree_Autumn_4.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Autumn_4.blend rename to packages/client/resources/nature/Blends/CommonTree_Autumn_4.blend diff --git a/client/resources/nature/Blends/CommonTree_Autumn_5.blend b/packages/client/resources/nature/Blends/CommonTree_Autumn_5.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Autumn_5.blend rename to packages/client/resources/nature/Blends/CommonTree_Autumn_5.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_1.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_1.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_1.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_1.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_2.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_2.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_2.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_2.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_3.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_3.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_3.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_3.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_4.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_4.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_4.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_4.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_5.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_5.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_5.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_5.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_Snow_1.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_Snow_1.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_Snow_1.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_Snow_2.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_Snow_2.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_Snow_2.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_Snow_3.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_3.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_Snow_3.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_Snow_3.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_Snow_4.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_4.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_Snow_4.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_Snow_4.blend diff --git a/client/resources/nature/Blends/CommonTree_Dead_Snow_5.blend b/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_5.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Dead_Snow_5.blend rename to packages/client/resources/nature/Blends/CommonTree_Dead_Snow_5.blend diff --git a/client/resources/nature/Blends/CommonTree_Snow_1.blend b/packages/client/resources/nature/Blends/CommonTree_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Snow_1.blend rename to packages/client/resources/nature/Blends/CommonTree_Snow_1.blend diff --git a/client/resources/nature/Blends/CommonTree_Snow_2.blend b/packages/client/resources/nature/Blends/CommonTree_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Snow_2.blend rename to packages/client/resources/nature/Blends/CommonTree_Snow_2.blend diff --git a/client/resources/nature/Blends/CommonTree_Snow_3.blend b/packages/client/resources/nature/Blends/CommonTree_Snow_3.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Snow_3.blend rename to packages/client/resources/nature/Blends/CommonTree_Snow_3.blend diff --git a/client/resources/nature/Blends/CommonTree_Snow_4.blend b/packages/client/resources/nature/Blends/CommonTree_Snow_4.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Snow_4.blend rename to packages/client/resources/nature/Blends/CommonTree_Snow_4.blend diff --git a/client/resources/nature/Blends/CommonTree_Snow_5.blend b/packages/client/resources/nature/Blends/CommonTree_Snow_5.blend similarity index 100% rename from client/resources/nature/Blends/CommonTree_Snow_5.blend rename to packages/client/resources/nature/Blends/CommonTree_Snow_5.blend diff --git a/client/resources/nature/Blends/Corn_1.blend b/packages/client/resources/nature/Blends/Corn_1.blend similarity index 100% rename from client/resources/nature/Blends/Corn_1.blend rename to packages/client/resources/nature/Blends/Corn_1.blend diff --git a/client/resources/nature/Blends/Corn_2.blend b/packages/client/resources/nature/Blends/Corn_2.blend similarity index 100% rename from client/resources/nature/Blends/Corn_2.blend rename to packages/client/resources/nature/Blends/Corn_2.blend diff --git a/client/resources/nature/Blends/Flowers.blend b/packages/client/resources/nature/Blends/Flowers.blend similarity index 100% rename from client/resources/nature/Blends/Flowers.blend rename to packages/client/resources/nature/Blends/Flowers.blend diff --git a/client/resources/nature/Blends/Grass.blend b/packages/client/resources/nature/Blends/Grass.blend similarity index 100% rename from client/resources/nature/Blends/Grass.blend rename to packages/client/resources/nature/Blends/Grass.blend diff --git a/client/resources/nature/Blends/Grass_2.blend b/packages/client/resources/nature/Blends/Grass_2.blend similarity index 100% rename from client/resources/nature/Blends/Grass_2.blend rename to packages/client/resources/nature/Blends/Grass_2.blend diff --git a/client/resources/nature/Blends/Grass_Short.blend b/packages/client/resources/nature/Blends/Grass_Short.blend similarity index 100% rename from client/resources/nature/Blends/Grass_Short.blend rename to packages/client/resources/nature/Blends/Grass_Short.blend diff --git a/client/resources/nature/Blends/Lilypad.blend b/packages/client/resources/nature/Blends/Lilypad.blend similarity index 100% rename from client/resources/nature/Blends/Lilypad.blend rename to packages/client/resources/nature/Blends/Lilypad.blend diff --git a/client/resources/nature/Blends/PalmTree_1.blend b/packages/client/resources/nature/Blends/PalmTree_1.blend similarity index 100% rename from client/resources/nature/Blends/PalmTree_1.blend rename to packages/client/resources/nature/Blends/PalmTree_1.blend diff --git a/client/resources/nature/Blends/PalmTree_2.blend b/packages/client/resources/nature/Blends/PalmTree_2.blend similarity index 100% rename from client/resources/nature/Blends/PalmTree_2.blend rename to packages/client/resources/nature/Blends/PalmTree_2.blend diff --git a/client/resources/nature/Blends/PalmTree_3.blend b/packages/client/resources/nature/Blends/PalmTree_3.blend similarity index 100% rename from client/resources/nature/Blends/PalmTree_3.blend rename to packages/client/resources/nature/Blends/PalmTree_3.blend diff --git a/client/resources/nature/Blends/PalmTree_4.blend b/packages/client/resources/nature/Blends/PalmTree_4.blend similarity index 100% rename from client/resources/nature/Blends/PalmTree_4.blend rename to packages/client/resources/nature/Blends/PalmTree_4.blend diff --git a/client/resources/nature/Blends/PineTree_1.blend b/packages/client/resources/nature/Blends/PineTree_1.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_1.blend rename to packages/client/resources/nature/Blends/PineTree_1.blend diff --git a/client/resources/nature/Blends/PineTree_2.blend b/packages/client/resources/nature/Blends/PineTree_2.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_2.blend rename to packages/client/resources/nature/Blends/PineTree_2.blend diff --git a/client/resources/nature/Blends/PineTree_3.blend b/packages/client/resources/nature/Blends/PineTree_3.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_3.blend rename to packages/client/resources/nature/Blends/PineTree_3.blend diff --git a/client/resources/nature/Blends/PineTree_4.blend b/packages/client/resources/nature/Blends/PineTree_4.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_4.blend rename to packages/client/resources/nature/Blends/PineTree_4.blend diff --git a/client/resources/nature/Blends/PineTree_5.blend b/packages/client/resources/nature/Blends/PineTree_5.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_5.blend rename to packages/client/resources/nature/Blends/PineTree_5.blend diff --git a/client/resources/nature/Blends/PineTree_Autumn_1.blend b/packages/client/resources/nature/Blends/PineTree_Autumn_1.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Autumn_1.blend rename to packages/client/resources/nature/Blends/PineTree_Autumn_1.blend diff --git a/client/resources/nature/Blends/PineTree_Autumn_2.blend b/packages/client/resources/nature/Blends/PineTree_Autumn_2.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Autumn_2.blend rename to packages/client/resources/nature/Blends/PineTree_Autumn_2.blend diff --git a/client/resources/nature/Blends/PineTree_Autumn_3.blend b/packages/client/resources/nature/Blends/PineTree_Autumn_3.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Autumn_3.blend rename to packages/client/resources/nature/Blends/PineTree_Autumn_3.blend diff --git a/client/resources/nature/Blends/PineTree_Autumn_4.blend b/packages/client/resources/nature/Blends/PineTree_Autumn_4.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Autumn_4.blend rename to packages/client/resources/nature/Blends/PineTree_Autumn_4.blend diff --git a/client/resources/nature/Blends/PineTree_Autumn_5.blend b/packages/client/resources/nature/Blends/PineTree_Autumn_5.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Autumn_5.blend rename to packages/client/resources/nature/Blends/PineTree_Autumn_5.blend diff --git a/client/resources/nature/Blends/PineTree_Snow_1.blend b/packages/client/resources/nature/Blends/PineTree_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Snow_1.blend rename to packages/client/resources/nature/Blends/PineTree_Snow_1.blend diff --git a/client/resources/nature/Blends/PineTree_Snow_2.blend b/packages/client/resources/nature/Blends/PineTree_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Snow_2.blend rename to packages/client/resources/nature/Blends/PineTree_Snow_2.blend diff --git a/client/resources/nature/Blends/PineTree_Snow_3.blend b/packages/client/resources/nature/Blends/PineTree_Snow_3.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Snow_3.blend rename to packages/client/resources/nature/Blends/PineTree_Snow_3.blend diff --git a/client/resources/nature/Blends/PineTree_Snow_4.blend b/packages/client/resources/nature/Blends/PineTree_Snow_4.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Snow_4.blend rename to packages/client/resources/nature/Blends/PineTree_Snow_4.blend diff --git a/client/resources/nature/Blends/PineTree_Snow_5.blend b/packages/client/resources/nature/Blends/PineTree_Snow_5.blend similarity index 100% rename from client/resources/nature/Blends/PineTree_Snow_5.blend rename to packages/client/resources/nature/Blends/PineTree_Snow_5.blend diff --git a/client/resources/nature/Blends/Plant_1.blend b/packages/client/resources/nature/Blends/Plant_1.blend similarity index 100% rename from client/resources/nature/Blends/Plant_1.blend rename to packages/client/resources/nature/Blends/Plant_1.blend diff --git a/client/resources/nature/Blends/Plant_2.blend b/packages/client/resources/nature/Blends/Plant_2.blend similarity index 100% rename from client/resources/nature/Blends/Plant_2.blend rename to packages/client/resources/nature/Blends/Plant_2.blend diff --git a/client/resources/nature/Blends/Plant_3.blend b/packages/client/resources/nature/Blends/Plant_3.blend similarity index 100% rename from client/resources/nature/Blends/Plant_3.blend rename to packages/client/resources/nature/Blends/Plant_3.blend diff --git a/client/resources/nature/Blends/Plant_4.blend b/packages/client/resources/nature/Blends/Plant_4.blend similarity index 100% rename from client/resources/nature/Blends/Plant_4.blend rename to packages/client/resources/nature/Blends/Plant_4.blend diff --git a/client/resources/nature/Blends/Plant_5.blend b/packages/client/resources/nature/Blends/Plant_5.blend similarity index 100% rename from client/resources/nature/Blends/Plant_5.blend rename to packages/client/resources/nature/Blends/Plant_5.blend diff --git a/client/resources/nature/Blends/Rock_1.blend b/packages/client/resources/nature/Blends/Rock_1.blend similarity index 100% rename from client/resources/nature/Blends/Rock_1.blend rename to packages/client/resources/nature/Blends/Rock_1.blend diff --git a/client/resources/nature/Blends/Rock_2.blend b/packages/client/resources/nature/Blends/Rock_2.blend similarity index 100% rename from client/resources/nature/Blends/Rock_2.blend rename to packages/client/resources/nature/Blends/Rock_2.blend diff --git a/client/resources/nature/Blends/Rock_3.blend b/packages/client/resources/nature/Blends/Rock_3.blend similarity index 100% rename from client/resources/nature/Blends/Rock_3.blend rename to packages/client/resources/nature/Blends/Rock_3.blend diff --git a/client/resources/nature/Blends/Rock_4.blend b/packages/client/resources/nature/Blends/Rock_4.blend similarity index 100% rename from client/resources/nature/Blends/Rock_4.blend rename to packages/client/resources/nature/Blends/Rock_4.blend diff --git a/client/resources/nature/Blends/Rock_5.blend b/packages/client/resources/nature/Blends/Rock_5.blend similarity index 100% rename from client/resources/nature/Blends/Rock_5.blend rename to packages/client/resources/nature/Blends/Rock_5.blend diff --git a/client/resources/nature/Blends/Rock_6.blend b/packages/client/resources/nature/Blends/Rock_6.blend similarity index 100% rename from client/resources/nature/Blends/Rock_6.blend rename to packages/client/resources/nature/Blends/Rock_6.blend diff --git a/client/resources/nature/Blends/Rock_7.blend b/packages/client/resources/nature/Blends/Rock_7.blend similarity index 100% rename from client/resources/nature/Blends/Rock_7.blend rename to packages/client/resources/nature/Blends/Rock_7.blend diff --git a/client/resources/nature/Blends/Rock_Moss_1.blend b/packages/client/resources/nature/Blends/Rock_Moss_1.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Moss_1.blend rename to packages/client/resources/nature/Blends/Rock_Moss_1.blend diff --git a/client/resources/nature/Blends/Rock_Moss_2.blend b/packages/client/resources/nature/Blends/Rock_Moss_2.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Moss_2.blend rename to packages/client/resources/nature/Blends/Rock_Moss_2.blend diff --git a/client/resources/nature/Blends/Rock_Moss_3.blend b/packages/client/resources/nature/Blends/Rock_Moss_3.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Moss_3.blend rename to packages/client/resources/nature/Blends/Rock_Moss_3.blend diff --git a/client/resources/nature/Blends/Rock_Moss_4.blend b/packages/client/resources/nature/Blends/Rock_Moss_4.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Moss_4.blend rename to packages/client/resources/nature/Blends/Rock_Moss_4.blend diff --git a/client/resources/nature/Blends/Rock_Moss_5.blend b/packages/client/resources/nature/Blends/Rock_Moss_5.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Moss_5.blend rename to packages/client/resources/nature/Blends/Rock_Moss_5.blend diff --git a/client/resources/nature/Blends/Rock_Moss_6.blend b/packages/client/resources/nature/Blends/Rock_Moss_6.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Moss_6.blend rename to packages/client/resources/nature/Blends/Rock_Moss_6.blend diff --git a/client/resources/nature/Blends/Rock_Moss_7.blend b/packages/client/resources/nature/Blends/Rock_Moss_7.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Moss_7.blend rename to packages/client/resources/nature/Blends/Rock_Moss_7.blend diff --git a/client/resources/nature/Blends/Rock_Snow_1.blend b/packages/client/resources/nature/Blends/Rock_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Snow_1.blend rename to packages/client/resources/nature/Blends/Rock_Snow_1.blend diff --git a/client/resources/nature/Blends/Rock_Snow_2.blend b/packages/client/resources/nature/Blends/Rock_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Snow_2.blend rename to packages/client/resources/nature/Blends/Rock_Snow_2.blend diff --git a/client/resources/nature/Blends/Rock_Snow_3.blend b/packages/client/resources/nature/Blends/Rock_Snow_3.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Snow_3.blend rename to packages/client/resources/nature/Blends/Rock_Snow_3.blend diff --git a/client/resources/nature/Blends/Rock_Snow_4.blend b/packages/client/resources/nature/Blends/Rock_Snow_4.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Snow_4.blend rename to packages/client/resources/nature/Blends/Rock_Snow_4.blend diff --git a/client/resources/nature/Blends/Rock_Snow_5.blend b/packages/client/resources/nature/Blends/Rock_Snow_5.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Snow_5.blend rename to packages/client/resources/nature/Blends/Rock_Snow_5.blend diff --git a/client/resources/nature/Blends/Rock_Snow_6.blend b/packages/client/resources/nature/Blends/Rock_Snow_6.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Snow_6.blend rename to packages/client/resources/nature/Blends/Rock_Snow_6.blend diff --git a/client/resources/nature/Blends/Rock_Snow_7.blend b/packages/client/resources/nature/Blends/Rock_Snow_7.blend similarity index 100% rename from client/resources/nature/Blends/Rock_Snow_7.blend rename to packages/client/resources/nature/Blends/Rock_Snow_7.blend diff --git a/client/resources/nature/Blends/TreeStump.blend b/packages/client/resources/nature/Blends/TreeStump.blend similarity index 100% rename from client/resources/nature/Blends/TreeStump.blend rename to packages/client/resources/nature/Blends/TreeStump.blend diff --git a/client/resources/nature/Blends/TreeStump_Moss.blend b/packages/client/resources/nature/Blends/TreeStump_Moss.blend similarity index 100% rename from client/resources/nature/Blends/TreeStump_Moss.blend rename to packages/client/resources/nature/Blends/TreeStump_Moss.blend diff --git a/client/resources/nature/Blends/TreeStump_Snow.blend b/packages/client/resources/nature/Blends/TreeStump_Snow.blend similarity index 100% rename from client/resources/nature/Blends/TreeStump_Snow.blend rename to packages/client/resources/nature/Blends/TreeStump_Snow.blend diff --git a/client/resources/nature/Blends/Wheat.blend b/packages/client/resources/nature/Blends/Wheat.blend similarity index 100% rename from client/resources/nature/Blends/Wheat.blend rename to packages/client/resources/nature/Blends/Wheat.blend diff --git a/client/resources/nature/Blends/Willow_1.blend b/packages/client/resources/nature/Blends/Willow_1.blend similarity index 100% rename from client/resources/nature/Blends/Willow_1.blend rename to packages/client/resources/nature/Blends/Willow_1.blend diff --git a/client/resources/nature/Blends/Willow_2.blend b/packages/client/resources/nature/Blends/Willow_2.blend similarity index 100% rename from client/resources/nature/Blends/Willow_2.blend rename to packages/client/resources/nature/Blends/Willow_2.blend diff --git a/client/resources/nature/Blends/Willow_3.blend b/packages/client/resources/nature/Blends/Willow_3.blend similarity index 100% rename from client/resources/nature/Blends/Willow_3.blend rename to packages/client/resources/nature/Blends/Willow_3.blend diff --git a/client/resources/nature/Blends/Willow_4.blend b/packages/client/resources/nature/Blends/Willow_4.blend similarity index 100% rename from client/resources/nature/Blends/Willow_4.blend rename to packages/client/resources/nature/Blends/Willow_4.blend diff --git a/client/resources/nature/Blends/Willow_5.blend b/packages/client/resources/nature/Blends/Willow_5.blend similarity index 100% rename from client/resources/nature/Blends/Willow_5.blend rename to packages/client/resources/nature/Blends/Willow_5.blend diff --git a/client/resources/nature/Blends/Willow_Autumn_1.blend b/packages/client/resources/nature/Blends/Willow_Autumn_1.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Autumn_1.blend rename to packages/client/resources/nature/Blends/Willow_Autumn_1.blend diff --git a/client/resources/nature/Blends/Willow_Autumn_2.blend b/packages/client/resources/nature/Blends/Willow_Autumn_2.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Autumn_2.blend rename to packages/client/resources/nature/Blends/Willow_Autumn_2.blend diff --git a/client/resources/nature/Blends/Willow_Autumn_3.blend b/packages/client/resources/nature/Blends/Willow_Autumn_3.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Autumn_3.blend rename to packages/client/resources/nature/Blends/Willow_Autumn_3.blend diff --git a/client/resources/nature/Blends/Willow_Autumn_4.blend b/packages/client/resources/nature/Blends/Willow_Autumn_4.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Autumn_4.blend rename to packages/client/resources/nature/Blends/Willow_Autumn_4.blend diff --git a/client/resources/nature/Blends/Willow_Autumn_5.blend b/packages/client/resources/nature/Blends/Willow_Autumn_5.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Autumn_5.blend rename to packages/client/resources/nature/Blends/Willow_Autumn_5.blend diff --git a/client/resources/nature/Blends/Willow_Dead_1.blend b/packages/client/resources/nature/Blends/Willow_Dead_1.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_1.blend rename to packages/client/resources/nature/Blends/Willow_Dead_1.blend diff --git a/client/resources/nature/Blends/Willow_Dead_2.blend b/packages/client/resources/nature/Blends/Willow_Dead_2.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_2.blend rename to packages/client/resources/nature/Blends/Willow_Dead_2.blend diff --git a/client/resources/nature/Blends/Willow_Dead_3.blend b/packages/client/resources/nature/Blends/Willow_Dead_3.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_3.blend rename to packages/client/resources/nature/Blends/Willow_Dead_3.blend diff --git a/client/resources/nature/Blends/Willow_Dead_4.blend b/packages/client/resources/nature/Blends/Willow_Dead_4.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_4.blend rename to packages/client/resources/nature/Blends/Willow_Dead_4.blend diff --git a/client/resources/nature/Blends/Willow_Dead_5.blend b/packages/client/resources/nature/Blends/Willow_Dead_5.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_5.blend rename to packages/client/resources/nature/Blends/Willow_Dead_5.blend diff --git a/client/resources/nature/Blends/Willow_Dead_Snow_1.blend b/packages/client/resources/nature/Blends/Willow_Dead_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_Snow_1.blend rename to packages/client/resources/nature/Blends/Willow_Dead_Snow_1.blend diff --git a/client/resources/nature/Blends/Willow_Dead_Snow_2.blend b/packages/client/resources/nature/Blends/Willow_Dead_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_Snow_2.blend rename to packages/client/resources/nature/Blends/Willow_Dead_Snow_2.blend diff --git a/client/resources/nature/Blends/Willow_Dead_Snow_3.blend b/packages/client/resources/nature/Blends/Willow_Dead_Snow_3.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_Snow_3.blend rename to packages/client/resources/nature/Blends/Willow_Dead_Snow_3.blend diff --git a/client/resources/nature/Blends/Willow_Dead_Snow_4.blend b/packages/client/resources/nature/Blends/Willow_Dead_Snow_4.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_Snow_4.blend rename to packages/client/resources/nature/Blends/Willow_Dead_Snow_4.blend diff --git a/client/resources/nature/Blends/Willow_Dead_Snow_5.blend b/packages/client/resources/nature/Blends/Willow_Dead_Snow_5.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Dead_Snow_5.blend rename to packages/client/resources/nature/Blends/Willow_Dead_Snow_5.blend diff --git a/client/resources/nature/Blends/Willow_Snow_1.blend b/packages/client/resources/nature/Blends/Willow_Snow_1.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Snow_1.blend rename to packages/client/resources/nature/Blends/Willow_Snow_1.blend diff --git a/client/resources/nature/Blends/Willow_Snow_2.blend b/packages/client/resources/nature/Blends/Willow_Snow_2.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Snow_2.blend rename to packages/client/resources/nature/Blends/Willow_Snow_2.blend diff --git a/client/resources/nature/Blends/Willow_Snow_3.blend b/packages/client/resources/nature/Blends/Willow_Snow_3.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Snow_3.blend rename to packages/client/resources/nature/Blends/Willow_Snow_3.blend diff --git a/client/resources/nature/Blends/Willow_Snow_4.blend b/packages/client/resources/nature/Blends/Willow_Snow_4.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Snow_4.blend rename to packages/client/resources/nature/Blends/Willow_Snow_4.blend diff --git a/client/resources/nature/Blends/Willow_Snow_5.blend b/packages/client/resources/nature/Blends/Willow_Snow_5.blend similarity index 100% rename from client/resources/nature/Blends/Willow_Snow_5.blend rename to packages/client/resources/nature/Blends/Willow_Snow_5.blend diff --git a/client/resources/nature/Blends/WoodLog.blend b/packages/client/resources/nature/Blends/WoodLog.blend similarity index 100% rename from client/resources/nature/Blends/WoodLog.blend rename to packages/client/resources/nature/Blends/WoodLog.blend diff --git a/client/resources/nature/Blends/WoodLog_Moss.blend b/packages/client/resources/nature/Blends/WoodLog_Moss.blend similarity index 100% rename from client/resources/nature/Blends/WoodLog_Moss.blend rename to packages/client/resources/nature/Blends/WoodLog_Moss.blend diff --git a/client/resources/nature/Blends/WoodLog_Snow.blend b/packages/client/resources/nature/Blends/WoodLog_Snow.blend similarity index 100% rename from client/resources/nature/Blends/WoodLog_Snow.blend rename to packages/client/resources/nature/Blends/WoodLog_Snow.blend diff --git a/client/resources/nature/FBX/BirchTree_1.fbx b/packages/client/resources/nature/FBX/BirchTree_1.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_1.fbx rename to packages/client/resources/nature/FBX/BirchTree_1.fbx diff --git a/client/resources/nature/FBX/BirchTree_2.fbx b/packages/client/resources/nature/FBX/BirchTree_2.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_2.fbx rename to packages/client/resources/nature/FBX/BirchTree_2.fbx diff --git a/client/resources/nature/FBX/BirchTree_3.fbx b/packages/client/resources/nature/FBX/BirchTree_3.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_3.fbx rename to packages/client/resources/nature/FBX/BirchTree_3.fbx diff --git a/client/resources/nature/FBX/BirchTree_4.fbx b/packages/client/resources/nature/FBX/BirchTree_4.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_4.fbx rename to packages/client/resources/nature/FBX/BirchTree_4.fbx diff --git a/client/resources/nature/FBX/BirchTree_5.fbx b/packages/client/resources/nature/FBX/BirchTree_5.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_5.fbx rename to packages/client/resources/nature/FBX/BirchTree_5.fbx diff --git a/client/resources/nature/FBX/BirchTree_Autumn_1.fbx b/packages/client/resources/nature/FBX/BirchTree_Autumn_1.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Autumn_1.fbx rename to packages/client/resources/nature/FBX/BirchTree_Autumn_1.fbx diff --git a/client/resources/nature/FBX/BirchTree_Autumn_2.fbx b/packages/client/resources/nature/FBX/BirchTree_Autumn_2.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Autumn_2.fbx rename to packages/client/resources/nature/FBX/BirchTree_Autumn_2.fbx diff --git a/client/resources/nature/FBX/BirchTree_Autumn_3.fbx b/packages/client/resources/nature/FBX/BirchTree_Autumn_3.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Autumn_3.fbx rename to packages/client/resources/nature/FBX/BirchTree_Autumn_3.fbx diff --git a/client/resources/nature/FBX/BirchTree_Autumn_4.fbx b/packages/client/resources/nature/FBX/BirchTree_Autumn_4.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Autumn_4.fbx rename to packages/client/resources/nature/FBX/BirchTree_Autumn_4.fbx diff --git a/client/resources/nature/FBX/BirchTree_Autumn_5.fbx b/packages/client/resources/nature/FBX/BirchTree_Autumn_5.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Autumn_5.fbx rename to packages/client/resources/nature/FBX/BirchTree_Autumn_5.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_1.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_1.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_1.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_1.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_2.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_2.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_2.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_2.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_3.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_3.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_3.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_3.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_4.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_4.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_4.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_4.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_5.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_5.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_5.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_5.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx diff --git a/client/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx b/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx rename to packages/client/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx diff --git a/client/resources/nature/FBX/BirchTree_Snow_1.fbx b/packages/client/resources/nature/FBX/BirchTree_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Snow_1.fbx rename to packages/client/resources/nature/FBX/BirchTree_Snow_1.fbx diff --git a/client/resources/nature/FBX/BirchTree_Snow_2.fbx b/packages/client/resources/nature/FBX/BirchTree_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Snow_2.fbx rename to packages/client/resources/nature/FBX/BirchTree_Snow_2.fbx diff --git a/client/resources/nature/FBX/BirchTree_Snow_3.fbx b/packages/client/resources/nature/FBX/BirchTree_Snow_3.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Snow_3.fbx rename to packages/client/resources/nature/FBX/BirchTree_Snow_3.fbx diff --git a/client/resources/nature/FBX/BirchTree_Snow_4.fbx b/packages/client/resources/nature/FBX/BirchTree_Snow_4.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Snow_4.fbx rename to packages/client/resources/nature/FBX/BirchTree_Snow_4.fbx diff --git a/client/resources/nature/FBX/BirchTree_Snow_5.fbx b/packages/client/resources/nature/FBX/BirchTree_Snow_5.fbx similarity index 100% rename from client/resources/nature/FBX/BirchTree_Snow_5.fbx rename to packages/client/resources/nature/FBX/BirchTree_Snow_5.fbx diff --git a/client/resources/nature/FBX/BushBerries_1.fbx b/packages/client/resources/nature/FBX/BushBerries_1.fbx similarity index 100% rename from client/resources/nature/FBX/BushBerries_1.fbx rename to packages/client/resources/nature/FBX/BushBerries_1.fbx diff --git a/client/resources/nature/FBX/BushBerries_2.fbx b/packages/client/resources/nature/FBX/BushBerries_2.fbx similarity index 100% rename from client/resources/nature/FBX/BushBerries_2.fbx rename to packages/client/resources/nature/FBX/BushBerries_2.fbx diff --git a/client/resources/nature/FBX/Bush_1.fbx b/packages/client/resources/nature/FBX/Bush_1.fbx similarity index 100% rename from client/resources/nature/FBX/Bush_1.fbx rename to packages/client/resources/nature/FBX/Bush_1.fbx diff --git a/client/resources/nature/FBX/Bush_2.fbx b/packages/client/resources/nature/FBX/Bush_2.fbx similarity index 100% rename from client/resources/nature/FBX/Bush_2.fbx rename to packages/client/resources/nature/FBX/Bush_2.fbx diff --git a/client/resources/nature/FBX/Bush_Snow_1.fbx b/packages/client/resources/nature/FBX/Bush_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/Bush_Snow_1.fbx rename to packages/client/resources/nature/FBX/Bush_Snow_1.fbx diff --git a/client/resources/nature/FBX/Bush_Snow_2.fbx b/packages/client/resources/nature/FBX/Bush_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/Bush_Snow_2.fbx rename to packages/client/resources/nature/FBX/Bush_Snow_2.fbx diff --git a/client/resources/nature/FBX/CactusFlower_1.fbx b/packages/client/resources/nature/FBX/CactusFlower_1.fbx similarity index 100% rename from client/resources/nature/FBX/CactusFlower_1.fbx rename to packages/client/resources/nature/FBX/CactusFlower_1.fbx diff --git a/client/resources/nature/FBX/CactusFlowers_2.fbx b/packages/client/resources/nature/FBX/CactusFlowers_2.fbx similarity index 100% rename from client/resources/nature/FBX/CactusFlowers_2.fbx rename to packages/client/resources/nature/FBX/CactusFlowers_2.fbx diff --git a/client/resources/nature/FBX/CactusFlowers_3.fbx b/packages/client/resources/nature/FBX/CactusFlowers_3.fbx similarity index 100% rename from client/resources/nature/FBX/CactusFlowers_3.fbx rename to packages/client/resources/nature/FBX/CactusFlowers_3.fbx diff --git a/client/resources/nature/FBX/CactusFlowers_4.fbx b/packages/client/resources/nature/FBX/CactusFlowers_4.fbx similarity index 100% rename from client/resources/nature/FBX/CactusFlowers_4.fbx rename to packages/client/resources/nature/FBX/CactusFlowers_4.fbx diff --git a/client/resources/nature/FBX/CactusFlowers_5.fbx b/packages/client/resources/nature/FBX/CactusFlowers_5.fbx similarity index 100% rename from client/resources/nature/FBX/CactusFlowers_5.fbx rename to packages/client/resources/nature/FBX/CactusFlowers_5.fbx diff --git a/client/resources/nature/FBX/Cactus_1.fbx b/packages/client/resources/nature/FBX/Cactus_1.fbx similarity index 100% rename from client/resources/nature/FBX/Cactus_1.fbx rename to packages/client/resources/nature/FBX/Cactus_1.fbx diff --git a/client/resources/nature/FBX/Cactus_2.fbx b/packages/client/resources/nature/FBX/Cactus_2.fbx similarity index 100% rename from client/resources/nature/FBX/Cactus_2.fbx rename to packages/client/resources/nature/FBX/Cactus_2.fbx diff --git a/client/resources/nature/FBX/Cactus_3.fbx b/packages/client/resources/nature/FBX/Cactus_3.fbx similarity index 100% rename from client/resources/nature/FBX/Cactus_3.fbx rename to packages/client/resources/nature/FBX/Cactus_3.fbx diff --git a/client/resources/nature/FBX/Cactus_4.fbx b/packages/client/resources/nature/FBX/Cactus_4.fbx similarity index 100% rename from client/resources/nature/FBX/Cactus_4.fbx rename to packages/client/resources/nature/FBX/Cactus_4.fbx diff --git a/client/resources/nature/FBX/Cactus_5.fbx b/packages/client/resources/nature/FBX/Cactus_5.fbx similarity index 100% rename from client/resources/nature/FBX/Cactus_5.fbx rename to packages/client/resources/nature/FBX/Cactus_5.fbx diff --git a/client/resources/nature/FBX/CommonTree_1.fbx b/packages/client/resources/nature/FBX/CommonTree_1.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_1.fbx rename to packages/client/resources/nature/FBX/CommonTree_1.fbx diff --git a/client/resources/nature/FBX/CommonTree_2.fbx b/packages/client/resources/nature/FBX/CommonTree_2.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_2.fbx rename to packages/client/resources/nature/FBX/CommonTree_2.fbx diff --git a/client/resources/nature/FBX/CommonTree_3.fbx b/packages/client/resources/nature/FBX/CommonTree_3.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_3.fbx rename to packages/client/resources/nature/FBX/CommonTree_3.fbx diff --git a/client/resources/nature/FBX/CommonTree_4.fbx b/packages/client/resources/nature/FBX/CommonTree_4.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_4.fbx rename to packages/client/resources/nature/FBX/CommonTree_4.fbx diff --git a/client/resources/nature/FBX/CommonTree_5.fbx b/packages/client/resources/nature/FBX/CommonTree_5.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_5.fbx rename to packages/client/resources/nature/FBX/CommonTree_5.fbx diff --git a/client/resources/nature/FBX/CommonTree_Autumn_1.fbx b/packages/client/resources/nature/FBX/CommonTree_Autumn_1.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Autumn_1.fbx rename to packages/client/resources/nature/FBX/CommonTree_Autumn_1.fbx diff --git a/client/resources/nature/FBX/CommonTree_Autumn_2.fbx b/packages/client/resources/nature/FBX/CommonTree_Autumn_2.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Autumn_2.fbx rename to packages/client/resources/nature/FBX/CommonTree_Autumn_2.fbx diff --git a/client/resources/nature/FBX/CommonTree_Autumn_3.fbx b/packages/client/resources/nature/FBX/CommonTree_Autumn_3.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Autumn_3.fbx rename to packages/client/resources/nature/FBX/CommonTree_Autumn_3.fbx diff --git a/client/resources/nature/FBX/CommonTree_Autumn_4.fbx b/packages/client/resources/nature/FBX/CommonTree_Autumn_4.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Autumn_4.fbx rename to packages/client/resources/nature/FBX/CommonTree_Autumn_4.fbx diff --git a/client/resources/nature/FBX/CommonTree_Autumn_5.fbx b/packages/client/resources/nature/FBX/CommonTree_Autumn_5.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Autumn_5.fbx rename to packages/client/resources/nature/FBX/CommonTree_Autumn_5.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_1.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_1.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_1.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_1.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_2.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_2.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_2.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_2.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_3.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_3.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_3.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_3.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_4.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_4.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_4.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_4.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_5.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_5.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_5.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_5.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx diff --git a/client/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx b/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx rename to packages/client/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx diff --git a/client/resources/nature/FBX/CommonTree_Snow_1.fbx b/packages/client/resources/nature/FBX/CommonTree_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Snow_1.fbx rename to packages/client/resources/nature/FBX/CommonTree_Snow_1.fbx diff --git a/client/resources/nature/FBX/CommonTree_Snow_2.fbx b/packages/client/resources/nature/FBX/CommonTree_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Snow_2.fbx rename to packages/client/resources/nature/FBX/CommonTree_Snow_2.fbx diff --git a/client/resources/nature/FBX/CommonTree_Snow_3.fbx b/packages/client/resources/nature/FBX/CommonTree_Snow_3.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Snow_3.fbx rename to packages/client/resources/nature/FBX/CommonTree_Snow_3.fbx diff --git a/client/resources/nature/FBX/CommonTree_Snow_4.fbx b/packages/client/resources/nature/FBX/CommonTree_Snow_4.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Snow_4.fbx rename to packages/client/resources/nature/FBX/CommonTree_Snow_4.fbx diff --git a/client/resources/nature/FBX/CommonTree_Snow_5.fbx b/packages/client/resources/nature/FBX/CommonTree_Snow_5.fbx similarity index 100% rename from client/resources/nature/FBX/CommonTree_Snow_5.fbx rename to packages/client/resources/nature/FBX/CommonTree_Snow_5.fbx diff --git a/client/resources/nature/FBX/Corn_1.fbx b/packages/client/resources/nature/FBX/Corn_1.fbx similarity index 100% rename from client/resources/nature/FBX/Corn_1.fbx rename to packages/client/resources/nature/FBX/Corn_1.fbx diff --git a/client/resources/nature/FBX/Corn_2.fbx b/packages/client/resources/nature/FBX/Corn_2.fbx similarity index 100% rename from client/resources/nature/FBX/Corn_2.fbx rename to packages/client/resources/nature/FBX/Corn_2.fbx diff --git a/client/resources/nature/FBX/Flowers.fbx b/packages/client/resources/nature/FBX/Flowers.fbx similarity index 100% rename from client/resources/nature/FBX/Flowers.fbx rename to packages/client/resources/nature/FBX/Flowers.fbx diff --git a/client/resources/nature/FBX/Grass_1.fbx b/packages/client/resources/nature/FBX/Grass_1.fbx similarity index 100% rename from client/resources/nature/FBX/Grass_1.fbx rename to packages/client/resources/nature/FBX/Grass_1.fbx diff --git a/client/resources/nature/FBX/Grass_2.fbx b/packages/client/resources/nature/FBX/Grass_2.fbx similarity index 100% rename from client/resources/nature/FBX/Grass_2.fbx rename to packages/client/resources/nature/FBX/Grass_2.fbx diff --git a/client/resources/nature/FBX/Grass_Short.fbx b/packages/client/resources/nature/FBX/Grass_Short.fbx similarity index 100% rename from client/resources/nature/FBX/Grass_Short.fbx rename to packages/client/resources/nature/FBX/Grass_Short.fbx diff --git a/client/resources/nature/FBX/Lilypad.fbx b/packages/client/resources/nature/FBX/Lilypad.fbx similarity index 100% rename from client/resources/nature/FBX/Lilypad.fbx rename to packages/client/resources/nature/FBX/Lilypad.fbx diff --git a/client/resources/nature/FBX/PalmTree_1.fbx b/packages/client/resources/nature/FBX/PalmTree_1.fbx similarity index 100% rename from client/resources/nature/FBX/PalmTree_1.fbx rename to packages/client/resources/nature/FBX/PalmTree_1.fbx diff --git a/client/resources/nature/FBX/PalmTree_2.fbx b/packages/client/resources/nature/FBX/PalmTree_2.fbx similarity index 100% rename from client/resources/nature/FBX/PalmTree_2.fbx rename to packages/client/resources/nature/FBX/PalmTree_2.fbx diff --git a/client/resources/nature/FBX/PalmTree_3.fbx b/packages/client/resources/nature/FBX/PalmTree_3.fbx similarity index 100% rename from client/resources/nature/FBX/PalmTree_3.fbx rename to packages/client/resources/nature/FBX/PalmTree_3.fbx diff --git a/client/resources/nature/FBX/PalmTree_4.fbx b/packages/client/resources/nature/FBX/PalmTree_4.fbx similarity index 100% rename from client/resources/nature/FBX/PalmTree_4.fbx rename to packages/client/resources/nature/FBX/PalmTree_4.fbx diff --git a/client/resources/nature/FBX/PineTree_1.fbx b/packages/client/resources/nature/FBX/PineTree_1.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_1.fbx rename to packages/client/resources/nature/FBX/PineTree_1.fbx diff --git a/client/resources/nature/FBX/PineTree_2.fbx b/packages/client/resources/nature/FBX/PineTree_2.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_2.fbx rename to packages/client/resources/nature/FBX/PineTree_2.fbx diff --git a/client/resources/nature/FBX/PineTree_3.fbx b/packages/client/resources/nature/FBX/PineTree_3.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_3.fbx rename to packages/client/resources/nature/FBX/PineTree_3.fbx diff --git a/client/resources/nature/FBX/PineTree_4.fbx b/packages/client/resources/nature/FBX/PineTree_4.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_4.fbx rename to packages/client/resources/nature/FBX/PineTree_4.fbx diff --git a/client/resources/nature/FBX/PineTree_5.fbx b/packages/client/resources/nature/FBX/PineTree_5.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_5.fbx rename to packages/client/resources/nature/FBX/PineTree_5.fbx diff --git a/client/resources/nature/FBX/PineTree_Autumn_1.fbx b/packages/client/resources/nature/FBX/PineTree_Autumn_1.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Autumn_1.fbx rename to packages/client/resources/nature/FBX/PineTree_Autumn_1.fbx diff --git a/client/resources/nature/FBX/PineTree_Autumn_2.fbx b/packages/client/resources/nature/FBX/PineTree_Autumn_2.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Autumn_2.fbx rename to packages/client/resources/nature/FBX/PineTree_Autumn_2.fbx diff --git a/client/resources/nature/FBX/PineTree_Autumn_3.fbx b/packages/client/resources/nature/FBX/PineTree_Autumn_3.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Autumn_3.fbx rename to packages/client/resources/nature/FBX/PineTree_Autumn_3.fbx diff --git a/client/resources/nature/FBX/PineTree_Autumn_4.fbx b/packages/client/resources/nature/FBX/PineTree_Autumn_4.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Autumn_4.fbx rename to packages/client/resources/nature/FBX/PineTree_Autumn_4.fbx diff --git a/client/resources/nature/FBX/PineTree_Autumn_5.fbx b/packages/client/resources/nature/FBX/PineTree_Autumn_5.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Autumn_5.fbx rename to packages/client/resources/nature/FBX/PineTree_Autumn_5.fbx diff --git a/client/resources/nature/FBX/PineTree_Snow_1.fbx b/packages/client/resources/nature/FBX/PineTree_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Snow_1.fbx rename to packages/client/resources/nature/FBX/PineTree_Snow_1.fbx diff --git a/client/resources/nature/FBX/PineTree_Snow_2.fbx b/packages/client/resources/nature/FBX/PineTree_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Snow_2.fbx rename to packages/client/resources/nature/FBX/PineTree_Snow_2.fbx diff --git a/client/resources/nature/FBX/PineTree_Snow_3.fbx b/packages/client/resources/nature/FBX/PineTree_Snow_3.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Snow_3.fbx rename to packages/client/resources/nature/FBX/PineTree_Snow_3.fbx diff --git a/client/resources/nature/FBX/PineTree_Snow_4.fbx b/packages/client/resources/nature/FBX/PineTree_Snow_4.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Snow_4.fbx rename to packages/client/resources/nature/FBX/PineTree_Snow_4.fbx diff --git a/client/resources/nature/FBX/PineTree_Snow_5.fbx b/packages/client/resources/nature/FBX/PineTree_Snow_5.fbx similarity index 100% rename from client/resources/nature/FBX/PineTree_Snow_5.fbx rename to packages/client/resources/nature/FBX/PineTree_Snow_5.fbx diff --git a/client/resources/nature/FBX/Plant_1.fbx b/packages/client/resources/nature/FBX/Plant_1.fbx similarity index 100% rename from client/resources/nature/FBX/Plant_1.fbx rename to packages/client/resources/nature/FBX/Plant_1.fbx diff --git a/client/resources/nature/FBX/Plant_2.fbx b/packages/client/resources/nature/FBX/Plant_2.fbx similarity index 100% rename from client/resources/nature/FBX/Plant_2.fbx rename to packages/client/resources/nature/FBX/Plant_2.fbx diff --git a/client/resources/nature/FBX/Plant_3.fbx b/packages/client/resources/nature/FBX/Plant_3.fbx similarity index 100% rename from client/resources/nature/FBX/Plant_3.fbx rename to packages/client/resources/nature/FBX/Plant_3.fbx diff --git a/client/resources/nature/FBX/Plant_4.fbx b/packages/client/resources/nature/FBX/Plant_4.fbx similarity index 100% rename from client/resources/nature/FBX/Plant_4.fbx rename to packages/client/resources/nature/FBX/Plant_4.fbx diff --git a/client/resources/nature/FBX/Plant_5.fbx b/packages/client/resources/nature/FBX/Plant_5.fbx similarity index 100% rename from client/resources/nature/FBX/Plant_5.fbx rename to packages/client/resources/nature/FBX/Plant_5.fbx diff --git a/client/resources/nature/FBX/Rock_1.fbx b/packages/client/resources/nature/FBX/Rock_1.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_1.fbx rename to packages/client/resources/nature/FBX/Rock_1.fbx diff --git a/client/resources/nature/FBX/Rock_2.fbx b/packages/client/resources/nature/FBX/Rock_2.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_2.fbx rename to packages/client/resources/nature/FBX/Rock_2.fbx diff --git a/client/resources/nature/FBX/Rock_3.fbx b/packages/client/resources/nature/FBX/Rock_3.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_3.fbx rename to packages/client/resources/nature/FBX/Rock_3.fbx diff --git a/client/resources/nature/FBX/Rock_4.fbx b/packages/client/resources/nature/FBX/Rock_4.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_4.fbx rename to packages/client/resources/nature/FBX/Rock_4.fbx diff --git a/client/resources/nature/FBX/Rock_5.fbx b/packages/client/resources/nature/FBX/Rock_5.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_5.fbx rename to packages/client/resources/nature/FBX/Rock_5.fbx diff --git a/client/resources/nature/FBX/Rock_6.fbx b/packages/client/resources/nature/FBX/Rock_6.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_6.fbx rename to packages/client/resources/nature/FBX/Rock_6.fbx diff --git a/client/resources/nature/FBX/Rock_7.fbx b/packages/client/resources/nature/FBX/Rock_7.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_7.fbx rename to packages/client/resources/nature/FBX/Rock_7.fbx diff --git a/client/resources/nature/FBX/Rock_Moss_1.fbx b/packages/client/resources/nature/FBX/Rock_Moss_1.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Moss_1.fbx rename to packages/client/resources/nature/FBX/Rock_Moss_1.fbx diff --git a/client/resources/nature/FBX/Rock_Moss_2.fbx b/packages/client/resources/nature/FBX/Rock_Moss_2.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Moss_2.fbx rename to packages/client/resources/nature/FBX/Rock_Moss_2.fbx diff --git a/client/resources/nature/FBX/Rock_Moss_3.fbx b/packages/client/resources/nature/FBX/Rock_Moss_3.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Moss_3.fbx rename to packages/client/resources/nature/FBX/Rock_Moss_3.fbx diff --git a/client/resources/nature/FBX/Rock_Moss_4.fbx b/packages/client/resources/nature/FBX/Rock_Moss_4.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Moss_4.fbx rename to packages/client/resources/nature/FBX/Rock_Moss_4.fbx diff --git a/client/resources/nature/FBX/Rock_Moss_5.fbx b/packages/client/resources/nature/FBX/Rock_Moss_5.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Moss_5.fbx rename to packages/client/resources/nature/FBX/Rock_Moss_5.fbx diff --git a/client/resources/nature/FBX/Rock_Moss_6.fbx b/packages/client/resources/nature/FBX/Rock_Moss_6.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Moss_6.fbx rename to packages/client/resources/nature/FBX/Rock_Moss_6.fbx diff --git a/client/resources/nature/FBX/Rock_Moss_7.fbx b/packages/client/resources/nature/FBX/Rock_Moss_7.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Moss_7.fbx rename to packages/client/resources/nature/FBX/Rock_Moss_7.fbx diff --git a/client/resources/nature/FBX/Rock_Snow_1.fbx b/packages/client/resources/nature/FBX/Rock_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Snow_1.fbx rename to packages/client/resources/nature/FBX/Rock_Snow_1.fbx diff --git a/client/resources/nature/FBX/Rock_Snow_2.fbx b/packages/client/resources/nature/FBX/Rock_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Snow_2.fbx rename to packages/client/resources/nature/FBX/Rock_Snow_2.fbx diff --git a/client/resources/nature/FBX/Rock_Snow_3.fbx b/packages/client/resources/nature/FBX/Rock_Snow_3.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Snow_3.fbx rename to packages/client/resources/nature/FBX/Rock_Snow_3.fbx diff --git a/client/resources/nature/FBX/Rock_Snow_4.fbx b/packages/client/resources/nature/FBX/Rock_Snow_4.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Snow_4.fbx rename to packages/client/resources/nature/FBX/Rock_Snow_4.fbx diff --git a/client/resources/nature/FBX/Rock_Snow_5.fbx b/packages/client/resources/nature/FBX/Rock_Snow_5.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Snow_5.fbx rename to packages/client/resources/nature/FBX/Rock_Snow_5.fbx diff --git a/client/resources/nature/FBX/Rock_Snow_6.fbx b/packages/client/resources/nature/FBX/Rock_Snow_6.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Snow_6.fbx rename to packages/client/resources/nature/FBX/Rock_Snow_6.fbx diff --git a/client/resources/nature/FBX/Rock_Snow_7.fbx b/packages/client/resources/nature/FBX/Rock_Snow_7.fbx similarity index 100% rename from client/resources/nature/FBX/Rock_Snow_7.fbx rename to packages/client/resources/nature/FBX/Rock_Snow_7.fbx diff --git a/client/resources/nature/FBX/TreeStump.fbx b/packages/client/resources/nature/FBX/TreeStump.fbx similarity index 100% rename from client/resources/nature/FBX/TreeStump.fbx rename to packages/client/resources/nature/FBX/TreeStump.fbx diff --git a/client/resources/nature/FBX/TreeStump_Moss.fbx b/packages/client/resources/nature/FBX/TreeStump_Moss.fbx similarity index 100% rename from client/resources/nature/FBX/TreeStump_Moss.fbx rename to packages/client/resources/nature/FBX/TreeStump_Moss.fbx diff --git a/client/resources/nature/FBX/TreeStump_Snow.fbx b/packages/client/resources/nature/FBX/TreeStump_Snow.fbx similarity index 100% rename from client/resources/nature/FBX/TreeStump_Snow.fbx rename to packages/client/resources/nature/FBX/TreeStump_Snow.fbx diff --git a/client/resources/nature/FBX/Wheat.fbx b/packages/client/resources/nature/FBX/Wheat.fbx similarity index 100% rename from client/resources/nature/FBX/Wheat.fbx rename to packages/client/resources/nature/FBX/Wheat.fbx diff --git a/client/resources/nature/FBX/Willow_1.fbx b/packages/client/resources/nature/FBX/Willow_1.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_1.fbx rename to packages/client/resources/nature/FBX/Willow_1.fbx diff --git a/client/resources/nature/FBX/Willow_2.fbx b/packages/client/resources/nature/FBX/Willow_2.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_2.fbx rename to packages/client/resources/nature/FBX/Willow_2.fbx diff --git a/client/resources/nature/FBX/Willow_3.fbx b/packages/client/resources/nature/FBX/Willow_3.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_3.fbx rename to packages/client/resources/nature/FBX/Willow_3.fbx diff --git a/client/resources/nature/FBX/Willow_4.fbx b/packages/client/resources/nature/FBX/Willow_4.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_4.fbx rename to packages/client/resources/nature/FBX/Willow_4.fbx diff --git a/client/resources/nature/FBX/Willow_5.fbx b/packages/client/resources/nature/FBX/Willow_5.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_5.fbx rename to packages/client/resources/nature/FBX/Willow_5.fbx diff --git a/client/resources/nature/FBX/Willow_Autumn_1.fbx b/packages/client/resources/nature/FBX/Willow_Autumn_1.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Autumn_1.fbx rename to packages/client/resources/nature/FBX/Willow_Autumn_1.fbx diff --git a/client/resources/nature/FBX/Willow_Autumn_2.fbx b/packages/client/resources/nature/FBX/Willow_Autumn_2.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Autumn_2.fbx rename to packages/client/resources/nature/FBX/Willow_Autumn_2.fbx diff --git a/client/resources/nature/FBX/Willow_Autumn_3.fbx b/packages/client/resources/nature/FBX/Willow_Autumn_3.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Autumn_3.fbx rename to packages/client/resources/nature/FBX/Willow_Autumn_3.fbx diff --git a/client/resources/nature/FBX/Willow_Autumn_4.fbx b/packages/client/resources/nature/FBX/Willow_Autumn_4.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Autumn_4.fbx rename to packages/client/resources/nature/FBX/Willow_Autumn_4.fbx diff --git a/client/resources/nature/FBX/Willow_Autumn_5.fbx b/packages/client/resources/nature/FBX/Willow_Autumn_5.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Autumn_5.fbx rename to packages/client/resources/nature/FBX/Willow_Autumn_5.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_1.fbx b/packages/client/resources/nature/FBX/Willow_Dead_1.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_1.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_1.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_2.fbx b/packages/client/resources/nature/FBX/Willow_Dead_2.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_2.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_2.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_3.fbx b/packages/client/resources/nature/FBX/Willow_Dead_3.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_3.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_3.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_4.fbx b/packages/client/resources/nature/FBX/Willow_Dead_4.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_4.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_4.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_5.fbx b/packages/client/resources/nature/FBX/Willow_Dead_5.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_5.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_5.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_Snow_1.fbx b/packages/client/resources/nature/FBX/Willow_Dead_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_Snow_1.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_Snow_1.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_Snow_2.fbx b/packages/client/resources/nature/FBX/Willow_Dead_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_Snow_2.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_Snow_2.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_Snow_3.fbx b/packages/client/resources/nature/FBX/Willow_Dead_Snow_3.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_Snow_3.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_Snow_3.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_Snow_4.fbx b/packages/client/resources/nature/FBX/Willow_Dead_Snow_4.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_Snow_4.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_Snow_4.fbx diff --git a/client/resources/nature/FBX/Willow_Dead_Snow_5.fbx b/packages/client/resources/nature/FBX/Willow_Dead_Snow_5.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Dead_Snow_5.fbx rename to packages/client/resources/nature/FBX/Willow_Dead_Snow_5.fbx diff --git a/client/resources/nature/FBX/Willow_Snow_1.fbx b/packages/client/resources/nature/FBX/Willow_Snow_1.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Snow_1.fbx rename to packages/client/resources/nature/FBX/Willow_Snow_1.fbx diff --git a/client/resources/nature/FBX/Willow_Snow_2.fbx b/packages/client/resources/nature/FBX/Willow_Snow_2.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Snow_2.fbx rename to packages/client/resources/nature/FBX/Willow_Snow_2.fbx diff --git a/client/resources/nature/FBX/Willow_Snow_3.fbx b/packages/client/resources/nature/FBX/Willow_Snow_3.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Snow_3.fbx rename to packages/client/resources/nature/FBX/Willow_Snow_3.fbx diff --git a/client/resources/nature/FBX/Willow_Snow_4.fbx b/packages/client/resources/nature/FBX/Willow_Snow_4.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Snow_4.fbx rename to packages/client/resources/nature/FBX/Willow_Snow_4.fbx diff --git a/client/resources/nature/FBX/Willow_Snow_5.fbx b/packages/client/resources/nature/FBX/Willow_Snow_5.fbx similarity index 100% rename from client/resources/nature/FBX/Willow_Snow_5.fbx rename to packages/client/resources/nature/FBX/Willow_Snow_5.fbx diff --git a/client/resources/nature/FBX/WoodLog.fbx b/packages/client/resources/nature/FBX/WoodLog.fbx similarity index 100% rename from client/resources/nature/FBX/WoodLog.fbx rename to packages/client/resources/nature/FBX/WoodLog.fbx diff --git a/client/resources/nature/FBX/WoodLog_Moss.fbx b/packages/client/resources/nature/FBX/WoodLog_Moss.fbx similarity index 100% rename from client/resources/nature/FBX/WoodLog_Moss.fbx rename to packages/client/resources/nature/FBX/WoodLog_Moss.fbx diff --git a/client/resources/nature/FBX/WoodLog_Snow.fbx b/packages/client/resources/nature/FBX/WoodLog_Snow.fbx similarity index 100% rename from client/resources/nature/FBX/WoodLog_Snow.fbx rename to packages/client/resources/nature/FBX/WoodLog_Snow.fbx diff --git a/client/resources/nature/License.txt b/packages/client/resources/nature/License.txt similarity index 100% rename from client/resources/nature/License.txt rename to packages/client/resources/nature/License.txt diff --git a/client/resources/nature/OBJ/BirchTree_1.mtl b/packages/client/resources/nature/OBJ/BirchTree_1.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_1.mtl rename to packages/client/resources/nature/OBJ/BirchTree_1.mtl diff --git a/client/resources/nature/OBJ/BirchTree_1.obj b/packages/client/resources/nature/OBJ/BirchTree_1.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_1.obj rename to packages/client/resources/nature/OBJ/BirchTree_1.obj diff --git a/client/resources/nature/OBJ/BirchTree_2.mtl b/packages/client/resources/nature/OBJ/BirchTree_2.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_2.mtl rename to packages/client/resources/nature/OBJ/BirchTree_2.mtl diff --git a/client/resources/nature/OBJ/BirchTree_2.obj b/packages/client/resources/nature/OBJ/BirchTree_2.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_2.obj rename to packages/client/resources/nature/OBJ/BirchTree_2.obj diff --git a/client/resources/nature/OBJ/BirchTree_3.mtl b/packages/client/resources/nature/OBJ/BirchTree_3.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_3.mtl rename to packages/client/resources/nature/OBJ/BirchTree_3.mtl diff --git a/client/resources/nature/OBJ/BirchTree_3.obj b/packages/client/resources/nature/OBJ/BirchTree_3.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_3.obj rename to packages/client/resources/nature/OBJ/BirchTree_3.obj diff --git a/client/resources/nature/OBJ/BirchTree_4.mtl b/packages/client/resources/nature/OBJ/BirchTree_4.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_4.mtl rename to packages/client/resources/nature/OBJ/BirchTree_4.mtl diff --git a/client/resources/nature/OBJ/BirchTree_4.obj b/packages/client/resources/nature/OBJ/BirchTree_4.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_4.obj rename to packages/client/resources/nature/OBJ/BirchTree_4.obj diff --git a/client/resources/nature/OBJ/BirchTree_5.mtl b/packages/client/resources/nature/OBJ/BirchTree_5.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_5.mtl rename to packages/client/resources/nature/OBJ/BirchTree_5.mtl diff --git a/client/resources/nature/OBJ/BirchTree_5.obj b/packages/client/resources/nature/OBJ/BirchTree_5.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_5.obj rename to packages/client/resources/nature/OBJ/BirchTree_5.obj diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_1.mtl b/packages/client/resources/nature/OBJ/BirchTree_Autumn_1.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_1.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_1.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_1.obj b/packages/client/resources/nature/OBJ/BirchTree_Autumn_1.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_1.obj rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_1.obj diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_2.mtl b/packages/client/resources/nature/OBJ/BirchTree_Autumn_2.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_2.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_2.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_2.obj b/packages/client/resources/nature/OBJ/BirchTree_Autumn_2.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_2.obj rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_2.obj diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_3.mtl b/packages/client/resources/nature/OBJ/BirchTree_Autumn_3.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_3.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_3.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_3.obj b/packages/client/resources/nature/OBJ/BirchTree_Autumn_3.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_3.obj rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_3.obj diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_4.mtl b/packages/client/resources/nature/OBJ/BirchTree_Autumn_4.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_4.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_4.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_4.obj b/packages/client/resources/nature/OBJ/BirchTree_Autumn_4.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_4.obj rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_4.obj diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_5.mtl b/packages/client/resources/nature/OBJ/BirchTree_Autumn_5.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_5.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_5.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Autumn_5.obj b/packages/client/resources/nature/OBJ/BirchTree_Autumn_5.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Autumn_5.obj rename to packages/client/resources/nature/OBJ/BirchTree_Autumn_5.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_1.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_1.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_1.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_1.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_1.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_1.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_1.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_1.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_2.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_2.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_2.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_2.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_2.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_2.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_2.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_2.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_3.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_3.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_3.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_3.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_3.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_3.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_3.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_3.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_4.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_4.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_4.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_4.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_4.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_4.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_4.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_4.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_5.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_5.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_5.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_5.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_5.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_5.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_5.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_5.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj b/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj rename to packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj diff --git a/client/resources/nature/OBJ/BirchTree_Snow_1.mtl b/packages/client/resources/nature/OBJ/BirchTree_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_1.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Snow_1.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Snow_1.obj b/packages/client/resources/nature/OBJ/BirchTree_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_1.obj rename to packages/client/resources/nature/OBJ/BirchTree_Snow_1.obj diff --git a/client/resources/nature/OBJ/BirchTree_Snow_2.mtl b/packages/client/resources/nature/OBJ/BirchTree_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_2.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Snow_2.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Snow_2.obj b/packages/client/resources/nature/OBJ/BirchTree_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_2.obj rename to packages/client/resources/nature/OBJ/BirchTree_Snow_2.obj diff --git a/client/resources/nature/OBJ/BirchTree_Snow_3.mtl b/packages/client/resources/nature/OBJ/BirchTree_Snow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_3.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Snow_3.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Snow_3.obj b/packages/client/resources/nature/OBJ/BirchTree_Snow_3.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_3.obj rename to packages/client/resources/nature/OBJ/BirchTree_Snow_3.obj diff --git a/client/resources/nature/OBJ/BirchTree_Snow_4.mtl b/packages/client/resources/nature/OBJ/BirchTree_Snow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_4.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Snow_4.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Snow_4.obj b/packages/client/resources/nature/OBJ/BirchTree_Snow_4.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_4.obj rename to packages/client/resources/nature/OBJ/BirchTree_Snow_4.obj diff --git a/client/resources/nature/OBJ/BirchTree_Snow_5.mtl b/packages/client/resources/nature/OBJ/BirchTree_Snow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_5.mtl rename to packages/client/resources/nature/OBJ/BirchTree_Snow_5.mtl diff --git a/client/resources/nature/OBJ/BirchTree_Snow_5.obj b/packages/client/resources/nature/OBJ/BirchTree_Snow_5.obj similarity index 100% rename from client/resources/nature/OBJ/BirchTree_Snow_5.obj rename to packages/client/resources/nature/OBJ/BirchTree_Snow_5.obj diff --git a/client/resources/nature/OBJ/BushBerries_1.mtl b/packages/client/resources/nature/OBJ/BushBerries_1.mtl similarity index 100% rename from client/resources/nature/OBJ/BushBerries_1.mtl rename to packages/client/resources/nature/OBJ/BushBerries_1.mtl diff --git a/client/resources/nature/OBJ/BushBerries_1.obj b/packages/client/resources/nature/OBJ/BushBerries_1.obj similarity index 100% rename from client/resources/nature/OBJ/BushBerries_1.obj rename to packages/client/resources/nature/OBJ/BushBerries_1.obj diff --git a/client/resources/nature/OBJ/BushBerries_2.mtl b/packages/client/resources/nature/OBJ/BushBerries_2.mtl similarity index 100% rename from client/resources/nature/OBJ/BushBerries_2.mtl rename to packages/client/resources/nature/OBJ/BushBerries_2.mtl diff --git a/client/resources/nature/OBJ/BushBerries_2.obj b/packages/client/resources/nature/OBJ/BushBerries_2.obj similarity index 100% rename from client/resources/nature/OBJ/BushBerries_2.obj rename to packages/client/resources/nature/OBJ/BushBerries_2.obj diff --git a/client/resources/nature/OBJ/Bush_1.mtl b/packages/client/resources/nature/OBJ/Bush_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Bush_1.mtl rename to packages/client/resources/nature/OBJ/Bush_1.mtl diff --git a/client/resources/nature/OBJ/Bush_1.obj b/packages/client/resources/nature/OBJ/Bush_1.obj similarity index 100% rename from client/resources/nature/OBJ/Bush_1.obj rename to packages/client/resources/nature/OBJ/Bush_1.obj diff --git a/client/resources/nature/OBJ/Bush_2.mtl b/packages/client/resources/nature/OBJ/Bush_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Bush_2.mtl rename to packages/client/resources/nature/OBJ/Bush_2.mtl diff --git a/client/resources/nature/OBJ/Bush_2.obj b/packages/client/resources/nature/OBJ/Bush_2.obj similarity index 100% rename from client/resources/nature/OBJ/Bush_2.obj rename to packages/client/resources/nature/OBJ/Bush_2.obj diff --git a/client/resources/nature/OBJ/Bush_Snow_1.mtl b/packages/client/resources/nature/OBJ/Bush_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Bush_Snow_1.mtl rename to packages/client/resources/nature/OBJ/Bush_Snow_1.mtl diff --git a/client/resources/nature/OBJ/Bush_Snow_1.obj b/packages/client/resources/nature/OBJ/Bush_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/Bush_Snow_1.obj rename to packages/client/resources/nature/OBJ/Bush_Snow_1.obj diff --git a/client/resources/nature/OBJ/Bush_Snow_2.mtl b/packages/client/resources/nature/OBJ/Bush_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Bush_Snow_2.mtl rename to packages/client/resources/nature/OBJ/Bush_Snow_2.mtl diff --git a/client/resources/nature/OBJ/Bush_Snow_2.obj b/packages/client/resources/nature/OBJ/Bush_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/Bush_Snow_2.obj rename to packages/client/resources/nature/OBJ/Bush_Snow_2.obj diff --git a/client/resources/nature/OBJ/CactusFlower_1.mtl b/packages/client/resources/nature/OBJ/CactusFlower_1.mtl similarity index 100% rename from client/resources/nature/OBJ/CactusFlower_1.mtl rename to packages/client/resources/nature/OBJ/CactusFlower_1.mtl diff --git a/client/resources/nature/OBJ/CactusFlower_1.obj b/packages/client/resources/nature/OBJ/CactusFlower_1.obj similarity index 100% rename from client/resources/nature/OBJ/CactusFlower_1.obj rename to packages/client/resources/nature/OBJ/CactusFlower_1.obj diff --git a/client/resources/nature/OBJ/CactusFlowers_2.mtl b/packages/client/resources/nature/OBJ/CactusFlowers_2.mtl similarity index 100% rename from client/resources/nature/OBJ/CactusFlowers_2.mtl rename to packages/client/resources/nature/OBJ/CactusFlowers_2.mtl diff --git a/client/resources/nature/OBJ/CactusFlowers_2.obj b/packages/client/resources/nature/OBJ/CactusFlowers_2.obj similarity index 100% rename from client/resources/nature/OBJ/CactusFlowers_2.obj rename to packages/client/resources/nature/OBJ/CactusFlowers_2.obj diff --git a/client/resources/nature/OBJ/CactusFlowers_3.mtl b/packages/client/resources/nature/OBJ/CactusFlowers_3.mtl similarity index 100% rename from client/resources/nature/OBJ/CactusFlowers_3.mtl rename to packages/client/resources/nature/OBJ/CactusFlowers_3.mtl diff --git a/client/resources/nature/OBJ/CactusFlowers_3.obj b/packages/client/resources/nature/OBJ/CactusFlowers_3.obj similarity index 100% rename from client/resources/nature/OBJ/CactusFlowers_3.obj rename to packages/client/resources/nature/OBJ/CactusFlowers_3.obj diff --git a/client/resources/nature/OBJ/CactusFlowers_4.mtl b/packages/client/resources/nature/OBJ/CactusFlowers_4.mtl similarity index 100% rename from client/resources/nature/OBJ/CactusFlowers_4.mtl rename to packages/client/resources/nature/OBJ/CactusFlowers_4.mtl diff --git a/client/resources/nature/OBJ/CactusFlowers_4.obj b/packages/client/resources/nature/OBJ/CactusFlowers_4.obj similarity index 100% rename from client/resources/nature/OBJ/CactusFlowers_4.obj rename to packages/client/resources/nature/OBJ/CactusFlowers_4.obj diff --git a/client/resources/nature/OBJ/CactusFlowers_5.mtl b/packages/client/resources/nature/OBJ/CactusFlowers_5.mtl similarity index 100% rename from client/resources/nature/OBJ/CactusFlowers_5.mtl rename to packages/client/resources/nature/OBJ/CactusFlowers_5.mtl diff --git a/client/resources/nature/OBJ/CactusFlowers_5.obj b/packages/client/resources/nature/OBJ/CactusFlowers_5.obj similarity index 100% rename from client/resources/nature/OBJ/CactusFlowers_5.obj rename to packages/client/resources/nature/OBJ/CactusFlowers_5.obj diff --git a/client/resources/nature/OBJ/Cactus_1.mtl b/packages/client/resources/nature/OBJ/Cactus_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Cactus_1.mtl rename to packages/client/resources/nature/OBJ/Cactus_1.mtl diff --git a/client/resources/nature/OBJ/Cactus_1.obj b/packages/client/resources/nature/OBJ/Cactus_1.obj similarity index 100% rename from client/resources/nature/OBJ/Cactus_1.obj rename to packages/client/resources/nature/OBJ/Cactus_1.obj diff --git a/client/resources/nature/OBJ/Cactus_2.mtl b/packages/client/resources/nature/OBJ/Cactus_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Cactus_2.mtl rename to packages/client/resources/nature/OBJ/Cactus_2.mtl diff --git a/client/resources/nature/OBJ/Cactus_2.obj b/packages/client/resources/nature/OBJ/Cactus_2.obj similarity index 100% rename from client/resources/nature/OBJ/Cactus_2.obj rename to packages/client/resources/nature/OBJ/Cactus_2.obj diff --git a/client/resources/nature/OBJ/Cactus_3.mtl b/packages/client/resources/nature/OBJ/Cactus_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Cactus_3.mtl rename to packages/client/resources/nature/OBJ/Cactus_3.mtl diff --git a/client/resources/nature/OBJ/Cactus_3.obj b/packages/client/resources/nature/OBJ/Cactus_3.obj similarity index 100% rename from client/resources/nature/OBJ/Cactus_3.obj rename to packages/client/resources/nature/OBJ/Cactus_3.obj diff --git a/client/resources/nature/OBJ/Cactus_4.mtl b/packages/client/resources/nature/OBJ/Cactus_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Cactus_4.mtl rename to packages/client/resources/nature/OBJ/Cactus_4.mtl diff --git a/client/resources/nature/OBJ/Cactus_4.obj b/packages/client/resources/nature/OBJ/Cactus_4.obj similarity index 100% rename from client/resources/nature/OBJ/Cactus_4.obj rename to packages/client/resources/nature/OBJ/Cactus_4.obj diff --git a/client/resources/nature/OBJ/Cactus_5.mtl b/packages/client/resources/nature/OBJ/Cactus_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Cactus_5.mtl rename to packages/client/resources/nature/OBJ/Cactus_5.mtl diff --git a/client/resources/nature/OBJ/Cactus_5.obj b/packages/client/resources/nature/OBJ/Cactus_5.obj similarity index 100% rename from client/resources/nature/OBJ/Cactus_5.obj rename to packages/client/resources/nature/OBJ/Cactus_5.obj diff --git a/client/resources/nature/OBJ/CommonTree_1.mtl b/packages/client/resources/nature/OBJ/CommonTree_1.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_1.mtl rename to packages/client/resources/nature/OBJ/CommonTree_1.mtl diff --git a/client/resources/nature/OBJ/CommonTree_1.obj b/packages/client/resources/nature/OBJ/CommonTree_1.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_1.obj rename to packages/client/resources/nature/OBJ/CommonTree_1.obj diff --git a/client/resources/nature/OBJ/CommonTree_2.mtl b/packages/client/resources/nature/OBJ/CommonTree_2.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_2.mtl rename to packages/client/resources/nature/OBJ/CommonTree_2.mtl diff --git a/client/resources/nature/OBJ/CommonTree_2.obj b/packages/client/resources/nature/OBJ/CommonTree_2.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_2.obj rename to packages/client/resources/nature/OBJ/CommonTree_2.obj diff --git a/client/resources/nature/OBJ/CommonTree_3.mtl b/packages/client/resources/nature/OBJ/CommonTree_3.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_3.mtl rename to packages/client/resources/nature/OBJ/CommonTree_3.mtl diff --git a/client/resources/nature/OBJ/CommonTree_3.obj b/packages/client/resources/nature/OBJ/CommonTree_3.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_3.obj rename to packages/client/resources/nature/OBJ/CommonTree_3.obj diff --git a/client/resources/nature/OBJ/CommonTree_4.mtl b/packages/client/resources/nature/OBJ/CommonTree_4.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_4.mtl rename to packages/client/resources/nature/OBJ/CommonTree_4.mtl diff --git a/client/resources/nature/OBJ/CommonTree_4.obj b/packages/client/resources/nature/OBJ/CommonTree_4.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_4.obj rename to packages/client/resources/nature/OBJ/CommonTree_4.obj diff --git a/client/resources/nature/OBJ/CommonTree_5.mtl b/packages/client/resources/nature/OBJ/CommonTree_5.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_5.mtl rename to packages/client/resources/nature/OBJ/CommonTree_5.mtl diff --git a/client/resources/nature/OBJ/CommonTree_5.obj b/packages/client/resources/nature/OBJ/CommonTree_5.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_5.obj rename to packages/client/resources/nature/OBJ/CommonTree_5.obj diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_1.mtl b/packages/client/resources/nature/OBJ/CommonTree_Autumn_1.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_1.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_1.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_1.obj b/packages/client/resources/nature/OBJ/CommonTree_Autumn_1.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_1.obj rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_1.obj diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_2.mtl b/packages/client/resources/nature/OBJ/CommonTree_Autumn_2.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_2.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_2.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_2.obj b/packages/client/resources/nature/OBJ/CommonTree_Autumn_2.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_2.obj rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_2.obj diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_3.mtl b/packages/client/resources/nature/OBJ/CommonTree_Autumn_3.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_3.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_3.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_3.obj b/packages/client/resources/nature/OBJ/CommonTree_Autumn_3.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_3.obj rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_3.obj diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_4.mtl b/packages/client/resources/nature/OBJ/CommonTree_Autumn_4.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_4.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_4.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_4.obj b/packages/client/resources/nature/OBJ/CommonTree_Autumn_4.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_4.obj rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_4.obj diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_5.mtl b/packages/client/resources/nature/OBJ/CommonTree_Autumn_5.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_5.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_5.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Autumn_5.obj b/packages/client/resources/nature/OBJ/CommonTree_Autumn_5.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Autumn_5.obj rename to packages/client/resources/nature/OBJ/CommonTree_Autumn_5.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_1.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_1.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_1.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_1.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_1.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_1.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_1.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_1.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_2.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_2.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_2.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_2.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_2.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_2.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_2.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_2.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_3.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_3.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_3.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_3.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_3.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_3.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_3.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_3.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_4.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_4.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_4.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_4.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_4.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_4.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_4.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_4.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_5.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_5.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_5.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_5.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_5.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_5.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_5.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_5.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj b/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj rename to packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj diff --git a/client/resources/nature/OBJ/CommonTree_Snow_1.mtl b/packages/client/resources/nature/OBJ/CommonTree_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_1.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Snow_1.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Snow_1.obj b/packages/client/resources/nature/OBJ/CommonTree_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_1.obj rename to packages/client/resources/nature/OBJ/CommonTree_Snow_1.obj diff --git a/client/resources/nature/OBJ/CommonTree_Snow_2.mtl b/packages/client/resources/nature/OBJ/CommonTree_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_2.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Snow_2.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Snow_2.obj b/packages/client/resources/nature/OBJ/CommonTree_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_2.obj rename to packages/client/resources/nature/OBJ/CommonTree_Snow_2.obj diff --git a/client/resources/nature/OBJ/CommonTree_Snow_3.mtl b/packages/client/resources/nature/OBJ/CommonTree_Snow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_3.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Snow_3.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Snow_3.obj b/packages/client/resources/nature/OBJ/CommonTree_Snow_3.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_3.obj rename to packages/client/resources/nature/OBJ/CommonTree_Snow_3.obj diff --git a/client/resources/nature/OBJ/CommonTree_Snow_4.mtl b/packages/client/resources/nature/OBJ/CommonTree_Snow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_4.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Snow_4.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Snow_4.obj b/packages/client/resources/nature/OBJ/CommonTree_Snow_4.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_4.obj rename to packages/client/resources/nature/OBJ/CommonTree_Snow_4.obj diff --git a/client/resources/nature/OBJ/CommonTree_Snow_5.mtl b/packages/client/resources/nature/OBJ/CommonTree_Snow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_5.mtl rename to packages/client/resources/nature/OBJ/CommonTree_Snow_5.mtl diff --git a/client/resources/nature/OBJ/CommonTree_Snow_5.obj b/packages/client/resources/nature/OBJ/CommonTree_Snow_5.obj similarity index 100% rename from client/resources/nature/OBJ/CommonTree_Snow_5.obj rename to packages/client/resources/nature/OBJ/CommonTree_Snow_5.obj diff --git a/client/resources/nature/OBJ/Corn_1.mtl b/packages/client/resources/nature/OBJ/Corn_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Corn_1.mtl rename to packages/client/resources/nature/OBJ/Corn_1.mtl diff --git a/client/resources/nature/OBJ/Corn_1.obj b/packages/client/resources/nature/OBJ/Corn_1.obj similarity index 100% rename from client/resources/nature/OBJ/Corn_1.obj rename to packages/client/resources/nature/OBJ/Corn_1.obj diff --git a/client/resources/nature/OBJ/Corn_2.mtl b/packages/client/resources/nature/OBJ/Corn_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Corn_2.mtl rename to packages/client/resources/nature/OBJ/Corn_2.mtl diff --git a/client/resources/nature/OBJ/Corn_2.obj b/packages/client/resources/nature/OBJ/Corn_2.obj similarity index 100% rename from client/resources/nature/OBJ/Corn_2.obj rename to packages/client/resources/nature/OBJ/Corn_2.obj diff --git a/client/resources/nature/OBJ/Flowers.mtl b/packages/client/resources/nature/OBJ/Flowers.mtl similarity index 100% rename from client/resources/nature/OBJ/Flowers.mtl rename to packages/client/resources/nature/OBJ/Flowers.mtl diff --git a/client/resources/nature/OBJ/Flowers.obj b/packages/client/resources/nature/OBJ/Flowers.obj similarity index 100% rename from client/resources/nature/OBJ/Flowers.obj rename to packages/client/resources/nature/OBJ/Flowers.obj diff --git a/client/resources/nature/OBJ/Grass.mtl b/packages/client/resources/nature/OBJ/Grass.mtl similarity index 100% rename from client/resources/nature/OBJ/Grass.mtl rename to packages/client/resources/nature/OBJ/Grass.mtl diff --git a/client/resources/nature/OBJ/Grass.obj b/packages/client/resources/nature/OBJ/Grass.obj similarity index 100% rename from client/resources/nature/OBJ/Grass.obj rename to packages/client/resources/nature/OBJ/Grass.obj diff --git a/client/resources/nature/OBJ/Grass_2.mtl b/packages/client/resources/nature/OBJ/Grass_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Grass_2.mtl rename to packages/client/resources/nature/OBJ/Grass_2.mtl diff --git a/client/resources/nature/OBJ/Grass_2.obj b/packages/client/resources/nature/OBJ/Grass_2.obj similarity index 100% rename from client/resources/nature/OBJ/Grass_2.obj rename to packages/client/resources/nature/OBJ/Grass_2.obj diff --git a/client/resources/nature/OBJ/Grass_Short.mtl b/packages/client/resources/nature/OBJ/Grass_Short.mtl similarity index 100% rename from client/resources/nature/OBJ/Grass_Short.mtl rename to packages/client/resources/nature/OBJ/Grass_Short.mtl diff --git a/client/resources/nature/OBJ/Grass_Short.obj b/packages/client/resources/nature/OBJ/Grass_Short.obj similarity index 100% rename from client/resources/nature/OBJ/Grass_Short.obj rename to packages/client/resources/nature/OBJ/Grass_Short.obj diff --git a/client/resources/nature/OBJ/Lilypad.mtl b/packages/client/resources/nature/OBJ/Lilypad.mtl similarity index 100% rename from client/resources/nature/OBJ/Lilypad.mtl rename to packages/client/resources/nature/OBJ/Lilypad.mtl diff --git a/client/resources/nature/OBJ/Lilypad.obj b/packages/client/resources/nature/OBJ/Lilypad.obj similarity index 100% rename from client/resources/nature/OBJ/Lilypad.obj rename to packages/client/resources/nature/OBJ/Lilypad.obj diff --git a/client/resources/nature/OBJ/PalmTree_1.mtl b/packages/client/resources/nature/OBJ/PalmTree_1.mtl similarity index 100% rename from client/resources/nature/OBJ/PalmTree_1.mtl rename to packages/client/resources/nature/OBJ/PalmTree_1.mtl diff --git a/client/resources/nature/OBJ/PalmTree_1.obj b/packages/client/resources/nature/OBJ/PalmTree_1.obj similarity index 100% rename from client/resources/nature/OBJ/PalmTree_1.obj rename to packages/client/resources/nature/OBJ/PalmTree_1.obj diff --git a/client/resources/nature/OBJ/PalmTree_2.mtl b/packages/client/resources/nature/OBJ/PalmTree_2.mtl similarity index 100% rename from client/resources/nature/OBJ/PalmTree_2.mtl rename to packages/client/resources/nature/OBJ/PalmTree_2.mtl diff --git a/client/resources/nature/OBJ/PalmTree_2.obj b/packages/client/resources/nature/OBJ/PalmTree_2.obj similarity index 100% rename from client/resources/nature/OBJ/PalmTree_2.obj rename to packages/client/resources/nature/OBJ/PalmTree_2.obj diff --git a/client/resources/nature/OBJ/PalmTree_3.mtl b/packages/client/resources/nature/OBJ/PalmTree_3.mtl similarity index 100% rename from client/resources/nature/OBJ/PalmTree_3.mtl rename to packages/client/resources/nature/OBJ/PalmTree_3.mtl diff --git a/client/resources/nature/OBJ/PalmTree_3.obj b/packages/client/resources/nature/OBJ/PalmTree_3.obj similarity index 100% rename from client/resources/nature/OBJ/PalmTree_3.obj rename to packages/client/resources/nature/OBJ/PalmTree_3.obj diff --git a/client/resources/nature/OBJ/PalmTree_4.mtl b/packages/client/resources/nature/OBJ/PalmTree_4.mtl similarity index 100% rename from client/resources/nature/OBJ/PalmTree_4.mtl rename to packages/client/resources/nature/OBJ/PalmTree_4.mtl diff --git a/client/resources/nature/OBJ/PalmTree_4.obj b/packages/client/resources/nature/OBJ/PalmTree_4.obj similarity index 100% rename from client/resources/nature/OBJ/PalmTree_4.obj rename to packages/client/resources/nature/OBJ/PalmTree_4.obj diff --git a/client/resources/nature/OBJ/PineTree_1.mtl b/packages/client/resources/nature/OBJ/PineTree_1.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_1.mtl rename to packages/client/resources/nature/OBJ/PineTree_1.mtl diff --git a/client/resources/nature/OBJ/PineTree_1.obj b/packages/client/resources/nature/OBJ/PineTree_1.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_1.obj rename to packages/client/resources/nature/OBJ/PineTree_1.obj diff --git a/client/resources/nature/OBJ/PineTree_2.mtl b/packages/client/resources/nature/OBJ/PineTree_2.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_2.mtl rename to packages/client/resources/nature/OBJ/PineTree_2.mtl diff --git a/client/resources/nature/OBJ/PineTree_2.obj b/packages/client/resources/nature/OBJ/PineTree_2.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_2.obj rename to packages/client/resources/nature/OBJ/PineTree_2.obj diff --git a/client/resources/nature/OBJ/PineTree_3.mtl b/packages/client/resources/nature/OBJ/PineTree_3.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_3.mtl rename to packages/client/resources/nature/OBJ/PineTree_3.mtl diff --git a/client/resources/nature/OBJ/PineTree_3.obj b/packages/client/resources/nature/OBJ/PineTree_3.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_3.obj rename to packages/client/resources/nature/OBJ/PineTree_3.obj diff --git a/client/resources/nature/OBJ/PineTree_4.mtl b/packages/client/resources/nature/OBJ/PineTree_4.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_4.mtl rename to packages/client/resources/nature/OBJ/PineTree_4.mtl diff --git a/client/resources/nature/OBJ/PineTree_4.obj b/packages/client/resources/nature/OBJ/PineTree_4.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_4.obj rename to packages/client/resources/nature/OBJ/PineTree_4.obj diff --git a/client/resources/nature/OBJ/PineTree_5.mtl b/packages/client/resources/nature/OBJ/PineTree_5.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_5.mtl rename to packages/client/resources/nature/OBJ/PineTree_5.mtl diff --git a/client/resources/nature/OBJ/PineTree_5.obj b/packages/client/resources/nature/OBJ/PineTree_5.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_5.obj rename to packages/client/resources/nature/OBJ/PineTree_5.obj diff --git a/client/resources/nature/OBJ/PineTree_Autumn_1.mtl b/packages/client/resources/nature/OBJ/PineTree_Autumn_1.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_1.mtl rename to packages/client/resources/nature/OBJ/PineTree_Autumn_1.mtl diff --git a/client/resources/nature/OBJ/PineTree_Autumn_1.obj b/packages/client/resources/nature/OBJ/PineTree_Autumn_1.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_1.obj rename to packages/client/resources/nature/OBJ/PineTree_Autumn_1.obj diff --git a/client/resources/nature/OBJ/PineTree_Autumn_2.mtl b/packages/client/resources/nature/OBJ/PineTree_Autumn_2.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_2.mtl rename to packages/client/resources/nature/OBJ/PineTree_Autumn_2.mtl diff --git a/client/resources/nature/OBJ/PineTree_Autumn_2.obj b/packages/client/resources/nature/OBJ/PineTree_Autumn_2.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_2.obj rename to packages/client/resources/nature/OBJ/PineTree_Autumn_2.obj diff --git a/client/resources/nature/OBJ/PineTree_Autumn_3.mtl b/packages/client/resources/nature/OBJ/PineTree_Autumn_3.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_3.mtl rename to packages/client/resources/nature/OBJ/PineTree_Autumn_3.mtl diff --git a/client/resources/nature/OBJ/PineTree_Autumn_3.obj b/packages/client/resources/nature/OBJ/PineTree_Autumn_3.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_3.obj rename to packages/client/resources/nature/OBJ/PineTree_Autumn_3.obj diff --git a/client/resources/nature/OBJ/PineTree_Autumn_4.mtl b/packages/client/resources/nature/OBJ/PineTree_Autumn_4.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_4.mtl rename to packages/client/resources/nature/OBJ/PineTree_Autumn_4.mtl diff --git a/client/resources/nature/OBJ/PineTree_Autumn_4.obj b/packages/client/resources/nature/OBJ/PineTree_Autumn_4.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_4.obj rename to packages/client/resources/nature/OBJ/PineTree_Autumn_4.obj diff --git a/client/resources/nature/OBJ/PineTree_Autumn_5.mtl b/packages/client/resources/nature/OBJ/PineTree_Autumn_5.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_5.mtl rename to packages/client/resources/nature/OBJ/PineTree_Autumn_5.mtl diff --git a/client/resources/nature/OBJ/PineTree_Autumn_5.obj b/packages/client/resources/nature/OBJ/PineTree_Autumn_5.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Autumn_5.obj rename to packages/client/resources/nature/OBJ/PineTree_Autumn_5.obj diff --git a/client/resources/nature/OBJ/PineTree_Snow_1.mtl b/packages/client/resources/nature/OBJ/PineTree_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_1.mtl rename to packages/client/resources/nature/OBJ/PineTree_Snow_1.mtl diff --git a/client/resources/nature/OBJ/PineTree_Snow_1.obj b/packages/client/resources/nature/OBJ/PineTree_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_1.obj rename to packages/client/resources/nature/OBJ/PineTree_Snow_1.obj diff --git a/client/resources/nature/OBJ/PineTree_Snow_2.mtl b/packages/client/resources/nature/OBJ/PineTree_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_2.mtl rename to packages/client/resources/nature/OBJ/PineTree_Snow_2.mtl diff --git a/client/resources/nature/OBJ/PineTree_Snow_2.obj b/packages/client/resources/nature/OBJ/PineTree_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_2.obj rename to packages/client/resources/nature/OBJ/PineTree_Snow_2.obj diff --git a/client/resources/nature/OBJ/PineTree_Snow_3.mtl b/packages/client/resources/nature/OBJ/PineTree_Snow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_3.mtl rename to packages/client/resources/nature/OBJ/PineTree_Snow_3.mtl diff --git a/client/resources/nature/OBJ/PineTree_Snow_3.obj b/packages/client/resources/nature/OBJ/PineTree_Snow_3.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_3.obj rename to packages/client/resources/nature/OBJ/PineTree_Snow_3.obj diff --git a/client/resources/nature/OBJ/PineTree_Snow_4.mtl b/packages/client/resources/nature/OBJ/PineTree_Snow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_4.mtl rename to packages/client/resources/nature/OBJ/PineTree_Snow_4.mtl diff --git a/client/resources/nature/OBJ/PineTree_Snow_4.obj b/packages/client/resources/nature/OBJ/PineTree_Snow_4.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_4.obj rename to packages/client/resources/nature/OBJ/PineTree_Snow_4.obj diff --git a/client/resources/nature/OBJ/PineTree_Snow_5.mtl b/packages/client/resources/nature/OBJ/PineTree_Snow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_5.mtl rename to packages/client/resources/nature/OBJ/PineTree_Snow_5.mtl diff --git a/client/resources/nature/OBJ/PineTree_Snow_5.obj b/packages/client/resources/nature/OBJ/PineTree_Snow_5.obj similarity index 100% rename from client/resources/nature/OBJ/PineTree_Snow_5.obj rename to packages/client/resources/nature/OBJ/PineTree_Snow_5.obj diff --git a/client/resources/nature/OBJ/Plant_1.mtl b/packages/client/resources/nature/OBJ/Plant_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Plant_1.mtl rename to packages/client/resources/nature/OBJ/Plant_1.mtl diff --git a/client/resources/nature/OBJ/Plant_1.obj b/packages/client/resources/nature/OBJ/Plant_1.obj similarity index 100% rename from client/resources/nature/OBJ/Plant_1.obj rename to packages/client/resources/nature/OBJ/Plant_1.obj diff --git a/client/resources/nature/OBJ/Plant_2.mtl b/packages/client/resources/nature/OBJ/Plant_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Plant_2.mtl rename to packages/client/resources/nature/OBJ/Plant_2.mtl diff --git a/client/resources/nature/OBJ/Plant_2.obj b/packages/client/resources/nature/OBJ/Plant_2.obj similarity index 100% rename from client/resources/nature/OBJ/Plant_2.obj rename to packages/client/resources/nature/OBJ/Plant_2.obj diff --git a/client/resources/nature/OBJ/Plant_3.mtl b/packages/client/resources/nature/OBJ/Plant_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Plant_3.mtl rename to packages/client/resources/nature/OBJ/Plant_3.mtl diff --git a/client/resources/nature/OBJ/Plant_3.obj b/packages/client/resources/nature/OBJ/Plant_3.obj similarity index 100% rename from client/resources/nature/OBJ/Plant_3.obj rename to packages/client/resources/nature/OBJ/Plant_3.obj diff --git a/client/resources/nature/OBJ/Plant_4.mtl b/packages/client/resources/nature/OBJ/Plant_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Plant_4.mtl rename to packages/client/resources/nature/OBJ/Plant_4.mtl diff --git a/client/resources/nature/OBJ/Plant_4.obj b/packages/client/resources/nature/OBJ/Plant_4.obj similarity index 100% rename from client/resources/nature/OBJ/Plant_4.obj rename to packages/client/resources/nature/OBJ/Plant_4.obj diff --git a/client/resources/nature/OBJ/Plant_5.mtl b/packages/client/resources/nature/OBJ/Plant_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Plant_5.mtl rename to packages/client/resources/nature/OBJ/Plant_5.mtl diff --git a/client/resources/nature/OBJ/Plant_5.obj b/packages/client/resources/nature/OBJ/Plant_5.obj similarity index 100% rename from client/resources/nature/OBJ/Plant_5.obj rename to packages/client/resources/nature/OBJ/Plant_5.obj diff --git a/client/resources/nature/OBJ/Rock_1.mtl b/packages/client/resources/nature/OBJ/Rock_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_1.mtl rename to packages/client/resources/nature/OBJ/Rock_1.mtl diff --git a/client/resources/nature/OBJ/Rock_1.obj b/packages/client/resources/nature/OBJ/Rock_1.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_1.obj rename to packages/client/resources/nature/OBJ/Rock_1.obj diff --git a/client/resources/nature/OBJ/Rock_2.mtl b/packages/client/resources/nature/OBJ/Rock_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_2.mtl rename to packages/client/resources/nature/OBJ/Rock_2.mtl diff --git a/client/resources/nature/OBJ/Rock_2.obj b/packages/client/resources/nature/OBJ/Rock_2.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_2.obj rename to packages/client/resources/nature/OBJ/Rock_2.obj diff --git a/client/resources/nature/OBJ/Rock_3.mtl b/packages/client/resources/nature/OBJ/Rock_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_3.mtl rename to packages/client/resources/nature/OBJ/Rock_3.mtl diff --git a/client/resources/nature/OBJ/Rock_3.obj b/packages/client/resources/nature/OBJ/Rock_3.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_3.obj rename to packages/client/resources/nature/OBJ/Rock_3.obj diff --git a/client/resources/nature/OBJ/Rock_4.mtl b/packages/client/resources/nature/OBJ/Rock_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_4.mtl rename to packages/client/resources/nature/OBJ/Rock_4.mtl diff --git a/client/resources/nature/OBJ/Rock_4.obj b/packages/client/resources/nature/OBJ/Rock_4.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_4.obj rename to packages/client/resources/nature/OBJ/Rock_4.obj diff --git a/client/resources/nature/OBJ/Rock_5.mtl b/packages/client/resources/nature/OBJ/Rock_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_5.mtl rename to packages/client/resources/nature/OBJ/Rock_5.mtl diff --git a/client/resources/nature/OBJ/Rock_5.obj b/packages/client/resources/nature/OBJ/Rock_5.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_5.obj rename to packages/client/resources/nature/OBJ/Rock_5.obj diff --git a/client/resources/nature/OBJ/Rock_6.mtl b/packages/client/resources/nature/OBJ/Rock_6.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_6.mtl rename to packages/client/resources/nature/OBJ/Rock_6.mtl diff --git a/client/resources/nature/OBJ/Rock_6.obj b/packages/client/resources/nature/OBJ/Rock_6.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_6.obj rename to packages/client/resources/nature/OBJ/Rock_6.obj diff --git a/client/resources/nature/OBJ/Rock_7.mtl b/packages/client/resources/nature/OBJ/Rock_7.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_7.mtl rename to packages/client/resources/nature/OBJ/Rock_7.mtl diff --git a/client/resources/nature/OBJ/Rock_7.obj b/packages/client/resources/nature/OBJ/Rock_7.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_7.obj rename to packages/client/resources/nature/OBJ/Rock_7.obj diff --git a/client/resources/nature/OBJ/Rock_Moss_1.mtl b/packages/client/resources/nature/OBJ/Rock_Moss_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_1.mtl rename to packages/client/resources/nature/OBJ/Rock_Moss_1.mtl diff --git a/client/resources/nature/OBJ/Rock_Moss_1.obj b/packages/client/resources/nature/OBJ/Rock_Moss_1.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_1.obj rename to packages/client/resources/nature/OBJ/Rock_Moss_1.obj diff --git a/client/resources/nature/OBJ/Rock_Moss_2.mtl b/packages/client/resources/nature/OBJ/Rock_Moss_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_2.mtl rename to packages/client/resources/nature/OBJ/Rock_Moss_2.mtl diff --git a/client/resources/nature/OBJ/Rock_Moss_2.obj b/packages/client/resources/nature/OBJ/Rock_Moss_2.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_2.obj rename to packages/client/resources/nature/OBJ/Rock_Moss_2.obj diff --git a/client/resources/nature/OBJ/Rock_Moss_3.mtl b/packages/client/resources/nature/OBJ/Rock_Moss_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_3.mtl rename to packages/client/resources/nature/OBJ/Rock_Moss_3.mtl diff --git a/client/resources/nature/OBJ/Rock_Moss_3.obj b/packages/client/resources/nature/OBJ/Rock_Moss_3.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_3.obj rename to packages/client/resources/nature/OBJ/Rock_Moss_3.obj diff --git a/client/resources/nature/OBJ/Rock_Moss_4.mtl b/packages/client/resources/nature/OBJ/Rock_Moss_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_4.mtl rename to packages/client/resources/nature/OBJ/Rock_Moss_4.mtl diff --git a/client/resources/nature/OBJ/Rock_Moss_4.obj b/packages/client/resources/nature/OBJ/Rock_Moss_4.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_4.obj rename to packages/client/resources/nature/OBJ/Rock_Moss_4.obj diff --git a/client/resources/nature/OBJ/Rock_Moss_5.mtl b/packages/client/resources/nature/OBJ/Rock_Moss_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_5.mtl rename to packages/client/resources/nature/OBJ/Rock_Moss_5.mtl diff --git a/client/resources/nature/OBJ/Rock_Moss_5.obj b/packages/client/resources/nature/OBJ/Rock_Moss_5.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_5.obj rename to packages/client/resources/nature/OBJ/Rock_Moss_5.obj diff --git a/client/resources/nature/OBJ/Rock_Moss_6.mtl b/packages/client/resources/nature/OBJ/Rock_Moss_6.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_6.mtl rename to packages/client/resources/nature/OBJ/Rock_Moss_6.mtl diff --git a/client/resources/nature/OBJ/Rock_Moss_6.obj b/packages/client/resources/nature/OBJ/Rock_Moss_6.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_6.obj rename to packages/client/resources/nature/OBJ/Rock_Moss_6.obj diff --git a/client/resources/nature/OBJ/Rock_Moss_7.mtl b/packages/client/resources/nature/OBJ/Rock_Moss_7.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_7.mtl rename to packages/client/resources/nature/OBJ/Rock_Moss_7.mtl diff --git a/client/resources/nature/OBJ/Rock_Moss_7.obj b/packages/client/resources/nature/OBJ/Rock_Moss_7.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Moss_7.obj rename to packages/client/resources/nature/OBJ/Rock_Moss_7.obj diff --git a/client/resources/nature/OBJ/Rock_Snow_1.mtl b/packages/client/resources/nature/OBJ/Rock_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_1.mtl rename to packages/client/resources/nature/OBJ/Rock_Snow_1.mtl diff --git a/client/resources/nature/OBJ/Rock_Snow_1.obj b/packages/client/resources/nature/OBJ/Rock_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_1.obj rename to packages/client/resources/nature/OBJ/Rock_Snow_1.obj diff --git a/client/resources/nature/OBJ/Rock_Snow_2.mtl b/packages/client/resources/nature/OBJ/Rock_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_2.mtl rename to packages/client/resources/nature/OBJ/Rock_Snow_2.mtl diff --git a/client/resources/nature/OBJ/Rock_Snow_2.obj b/packages/client/resources/nature/OBJ/Rock_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_2.obj rename to packages/client/resources/nature/OBJ/Rock_Snow_2.obj diff --git a/client/resources/nature/OBJ/Rock_Snow_3.mtl b/packages/client/resources/nature/OBJ/Rock_Snow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_3.mtl rename to packages/client/resources/nature/OBJ/Rock_Snow_3.mtl diff --git a/client/resources/nature/OBJ/Rock_Snow_3.obj b/packages/client/resources/nature/OBJ/Rock_Snow_3.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_3.obj rename to packages/client/resources/nature/OBJ/Rock_Snow_3.obj diff --git a/client/resources/nature/OBJ/Rock_Snow_4.mtl b/packages/client/resources/nature/OBJ/Rock_Snow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_4.mtl rename to packages/client/resources/nature/OBJ/Rock_Snow_4.mtl diff --git a/client/resources/nature/OBJ/Rock_Snow_4.obj b/packages/client/resources/nature/OBJ/Rock_Snow_4.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_4.obj rename to packages/client/resources/nature/OBJ/Rock_Snow_4.obj diff --git a/client/resources/nature/OBJ/Rock_Snow_5.mtl b/packages/client/resources/nature/OBJ/Rock_Snow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_5.mtl rename to packages/client/resources/nature/OBJ/Rock_Snow_5.mtl diff --git a/client/resources/nature/OBJ/Rock_Snow_5.obj b/packages/client/resources/nature/OBJ/Rock_Snow_5.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_5.obj rename to packages/client/resources/nature/OBJ/Rock_Snow_5.obj diff --git a/client/resources/nature/OBJ/Rock_Snow_6.mtl b/packages/client/resources/nature/OBJ/Rock_Snow_6.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_6.mtl rename to packages/client/resources/nature/OBJ/Rock_Snow_6.mtl diff --git a/client/resources/nature/OBJ/Rock_Snow_6.obj b/packages/client/resources/nature/OBJ/Rock_Snow_6.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_6.obj rename to packages/client/resources/nature/OBJ/Rock_Snow_6.obj diff --git a/client/resources/nature/OBJ/Rock_Snow_7.mtl b/packages/client/resources/nature/OBJ/Rock_Snow_7.mtl similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_7.mtl rename to packages/client/resources/nature/OBJ/Rock_Snow_7.mtl diff --git a/client/resources/nature/OBJ/Rock_Snow_7.obj b/packages/client/resources/nature/OBJ/Rock_Snow_7.obj similarity index 100% rename from client/resources/nature/OBJ/Rock_Snow_7.obj rename to packages/client/resources/nature/OBJ/Rock_Snow_7.obj diff --git a/client/resources/nature/OBJ/TreeStump.mtl b/packages/client/resources/nature/OBJ/TreeStump.mtl similarity index 100% rename from client/resources/nature/OBJ/TreeStump.mtl rename to packages/client/resources/nature/OBJ/TreeStump.mtl diff --git a/client/resources/nature/OBJ/TreeStump.obj b/packages/client/resources/nature/OBJ/TreeStump.obj similarity index 100% rename from client/resources/nature/OBJ/TreeStump.obj rename to packages/client/resources/nature/OBJ/TreeStump.obj diff --git a/client/resources/nature/OBJ/TreeStump_Moss.mtl b/packages/client/resources/nature/OBJ/TreeStump_Moss.mtl similarity index 100% rename from client/resources/nature/OBJ/TreeStump_Moss.mtl rename to packages/client/resources/nature/OBJ/TreeStump_Moss.mtl diff --git a/client/resources/nature/OBJ/TreeStump_Moss.obj b/packages/client/resources/nature/OBJ/TreeStump_Moss.obj similarity index 100% rename from client/resources/nature/OBJ/TreeStump_Moss.obj rename to packages/client/resources/nature/OBJ/TreeStump_Moss.obj diff --git a/client/resources/nature/OBJ/TreeStump_Snow.mtl b/packages/client/resources/nature/OBJ/TreeStump_Snow.mtl similarity index 100% rename from client/resources/nature/OBJ/TreeStump_Snow.mtl rename to packages/client/resources/nature/OBJ/TreeStump_Snow.mtl diff --git a/client/resources/nature/OBJ/TreeStump_Snow.obj b/packages/client/resources/nature/OBJ/TreeStump_Snow.obj similarity index 100% rename from client/resources/nature/OBJ/TreeStump_Snow.obj rename to packages/client/resources/nature/OBJ/TreeStump_Snow.obj diff --git a/client/resources/nature/OBJ/Wheat.mtl b/packages/client/resources/nature/OBJ/Wheat.mtl similarity index 100% rename from client/resources/nature/OBJ/Wheat.mtl rename to packages/client/resources/nature/OBJ/Wheat.mtl diff --git a/client/resources/nature/OBJ/Wheat.obj b/packages/client/resources/nature/OBJ/Wheat.obj similarity index 100% rename from client/resources/nature/OBJ/Wheat.obj rename to packages/client/resources/nature/OBJ/Wheat.obj diff --git a/client/resources/nature/OBJ/Willow_1.mtl b/packages/client/resources/nature/OBJ/Willow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_1.mtl rename to packages/client/resources/nature/OBJ/Willow_1.mtl diff --git a/client/resources/nature/OBJ/Willow_1.obj b/packages/client/resources/nature/OBJ/Willow_1.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_1.obj rename to packages/client/resources/nature/OBJ/Willow_1.obj diff --git a/client/resources/nature/OBJ/Willow_2.mtl b/packages/client/resources/nature/OBJ/Willow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_2.mtl rename to packages/client/resources/nature/OBJ/Willow_2.mtl diff --git a/client/resources/nature/OBJ/Willow_2.obj b/packages/client/resources/nature/OBJ/Willow_2.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_2.obj rename to packages/client/resources/nature/OBJ/Willow_2.obj diff --git a/client/resources/nature/OBJ/Willow_3.mtl b/packages/client/resources/nature/OBJ/Willow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_3.mtl rename to packages/client/resources/nature/OBJ/Willow_3.mtl diff --git a/client/resources/nature/OBJ/Willow_3.obj b/packages/client/resources/nature/OBJ/Willow_3.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_3.obj rename to packages/client/resources/nature/OBJ/Willow_3.obj diff --git a/client/resources/nature/OBJ/Willow_4.mtl b/packages/client/resources/nature/OBJ/Willow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_4.mtl rename to packages/client/resources/nature/OBJ/Willow_4.mtl diff --git a/client/resources/nature/OBJ/Willow_4.obj b/packages/client/resources/nature/OBJ/Willow_4.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_4.obj rename to packages/client/resources/nature/OBJ/Willow_4.obj diff --git a/client/resources/nature/OBJ/Willow_5.mtl b/packages/client/resources/nature/OBJ/Willow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_5.mtl rename to packages/client/resources/nature/OBJ/Willow_5.mtl diff --git a/client/resources/nature/OBJ/Willow_5.obj b/packages/client/resources/nature/OBJ/Willow_5.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_5.obj rename to packages/client/resources/nature/OBJ/Willow_5.obj diff --git a/client/resources/nature/OBJ/Willow_Autumn_1.mtl b/packages/client/resources/nature/OBJ/Willow_Autumn_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_1.mtl rename to packages/client/resources/nature/OBJ/Willow_Autumn_1.mtl diff --git a/client/resources/nature/OBJ/Willow_Autumn_1.obj b/packages/client/resources/nature/OBJ/Willow_Autumn_1.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_1.obj rename to packages/client/resources/nature/OBJ/Willow_Autumn_1.obj diff --git a/client/resources/nature/OBJ/Willow_Autumn_2.mtl b/packages/client/resources/nature/OBJ/Willow_Autumn_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_2.mtl rename to packages/client/resources/nature/OBJ/Willow_Autumn_2.mtl diff --git a/client/resources/nature/OBJ/Willow_Autumn_2.obj b/packages/client/resources/nature/OBJ/Willow_Autumn_2.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_2.obj rename to packages/client/resources/nature/OBJ/Willow_Autumn_2.obj diff --git a/client/resources/nature/OBJ/Willow_Autumn_3.mtl b/packages/client/resources/nature/OBJ/Willow_Autumn_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_3.mtl rename to packages/client/resources/nature/OBJ/Willow_Autumn_3.mtl diff --git a/client/resources/nature/OBJ/Willow_Autumn_3.obj b/packages/client/resources/nature/OBJ/Willow_Autumn_3.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_3.obj rename to packages/client/resources/nature/OBJ/Willow_Autumn_3.obj diff --git a/client/resources/nature/OBJ/Willow_Autumn_4.mtl b/packages/client/resources/nature/OBJ/Willow_Autumn_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_4.mtl rename to packages/client/resources/nature/OBJ/Willow_Autumn_4.mtl diff --git a/client/resources/nature/OBJ/Willow_Autumn_4.obj b/packages/client/resources/nature/OBJ/Willow_Autumn_4.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_4.obj rename to packages/client/resources/nature/OBJ/Willow_Autumn_4.obj diff --git a/client/resources/nature/OBJ/Willow_Autumn_5.mtl b/packages/client/resources/nature/OBJ/Willow_Autumn_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_5.mtl rename to packages/client/resources/nature/OBJ/Willow_Autumn_5.mtl diff --git a/client/resources/nature/OBJ/Willow_Autumn_5.obj b/packages/client/resources/nature/OBJ/Willow_Autumn_5.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Autumn_5.obj rename to packages/client/resources/nature/OBJ/Willow_Autumn_5.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_1.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_1.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_1.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_1.obj b/packages/client/resources/nature/OBJ/Willow_Dead_1.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_1.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_1.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_2.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_2.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_2.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_2.obj b/packages/client/resources/nature/OBJ/Willow_Dead_2.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_2.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_2.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_3.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_3.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_3.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_3.obj b/packages/client/resources/nature/OBJ/Willow_Dead_3.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_3.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_3.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_4.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_4.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_4.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_4.obj b/packages/client/resources/nature/OBJ/Willow_Dead_4.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_4.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_4.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_5.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_5.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_5.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_5.obj b/packages/client/resources/nature/OBJ/Willow_Dead_5.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_5.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_5.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_1.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_1.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_1.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_1.obj b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_1.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_1.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_2.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_2.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_2.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_2.obj b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_2.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_2.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_3.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_3.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_3.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_3.obj b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_3.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_3.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_3.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_4.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_4.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_4.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_4.obj b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_4.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_4.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_4.obj diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_5.mtl b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_5.mtl rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_5.mtl diff --git a/client/resources/nature/OBJ/Willow_Dead_Snow_5.obj b/packages/client/resources/nature/OBJ/Willow_Dead_Snow_5.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Dead_Snow_5.obj rename to packages/client/resources/nature/OBJ/Willow_Dead_Snow_5.obj diff --git a/client/resources/nature/OBJ/Willow_Snow_1.mtl b/packages/client/resources/nature/OBJ/Willow_Snow_1.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_1.mtl rename to packages/client/resources/nature/OBJ/Willow_Snow_1.mtl diff --git a/client/resources/nature/OBJ/Willow_Snow_1.obj b/packages/client/resources/nature/OBJ/Willow_Snow_1.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_1.obj rename to packages/client/resources/nature/OBJ/Willow_Snow_1.obj diff --git a/client/resources/nature/OBJ/Willow_Snow_2.mtl b/packages/client/resources/nature/OBJ/Willow_Snow_2.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_2.mtl rename to packages/client/resources/nature/OBJ/Willow_Snow_2.mtl diff --git a/client/resources/nature/OBJ/Willow_Snow_2.obj b/packages/client/resources/nature/OBJ/Willow_Snow_2.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_2.obj rename to packages/client/resources/nature/OBJ/Willow_Snow_2.obj diff --git a/client/resources/nature/OBJ/Willow_Snow_3.mtl b/packages/client/resources/nature/OBJ/Willow_Snow_3.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_3.mtl rename to packages/client/resources/nature/OBJ/Willow_Snow_3.mtl diff --git a/client/resources/nature/OBJ/Willow_Snow_3.obj b/packages/client/resources/nature/OBJ/Willow_Snow_3.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_3.obj rename to packages/client/resources/nature/OBJ/Willow_Snow_3.obj diff --git a/client/resources/nature/OBJ/Willow_Snow_4.mtl b/packages/client/resources/nature/OBJ/Willow_Snow_4.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_4.mtl rename to packages/client/resources/nature/OBJ/Willow_Snow_4.mtl diff --git a/client/resources/nature/OBJ/Willow_Snow_4.obj b/packages/client/resources/nature/OBJ/Willow_Snow_4.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_4.obj rename to packages/client/resources/nature/OBJ/Willow_Snow_4.obj diff --git a/client/resources/nature/OBJ/Willow_Snow_5.mtl b/packages/client/resources/nature/OBJ/Willow_Snow_5.mtl similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_5.mtl rename to packages/client/resources/nature/OBJ/Willow_Snow_5.mtl diff --git a/client/resources/nature/OBJ/Willow_Snow_5.obj b/packages/client/resources/nature/OBJ/Willow_Snow_5.obj similarity index 100% rename from client/resources/nature/OBJ/Willow_Snow_5.obj rename to packages/client/resources/nature/OBJ/Willow_Snow_5.obj diff --git a/client/resources/nature/OBJ/WoodLog.mtl b/packages/client/resources/nature/OBJ/WoodLog.mtl similarity index 100% rename from client/resources/nature/OBJ/WoodLog.mtl rename to packages/client/resources/nature/OBJ/WoodLog.mtl diff --git a/client/resources/nature/OBJ/WoodLog.obj b/packages/client/resources/nature/OBJ/WoodLog.obj similarity index 100% rename from client/resources/nature/OBJ/WoodLog.obj rename to packages/client/resources/nature/OBJ/WoodLog.obj diff --git a/client/resources/nature/OBJ/WoodLog_Moss.mtl b/packages/client/resources/nature/OBJ/WoodLog_Moss.mtl similarity index 100% rename from client/resources/nature/OBJ/WoodLog_Moss.mtl rename to packages/client/resources/nature/OBJ/WoodLog_Moss.mtl diff --git a/client/resources/nature/OBJ/WoodLog_Moss.obj b/packages/client/resources/nature/OBJ/WoodLog_Moss.obj similarity index 100% rename from client/resources/nature/OBJ/WoodLog_Moss.obj rename to packages/client/resources/nature/OBJ/WoodLog_Moss.obj diff --git a/client/resources/nature/OBJ/WoodLog_Snow.mtl b/packages/client/resources/nature/OBJ/WoodLog_Snow.mtl similarity index 100% rename from client/resources/nature/OBJ/WoodLog_Snow.mtl rename to packages/client/resources/nature/OBJ/WoodLog_Snow.mtl diff --git a/client/resources/nature/OBJ/WoodLog_Snow.obj b/packages/client/resources/nature/OBJ/WoodLog_Snow.obj similarity index 100% rename from client/resources/nature/OBJ/WoodLog_Snow.obj rename to packages/client/resources/nature/OBJ/WoodLog_Snow.obj diff --git a/client/resources/nature/Preview.jpg b/packages/client/resources/nature/Preview.jpg similarity index 100% rename from client/resources/nature/Preview.jpg rename to packages/client/resources/nature/Preview.jpg diff --git a/client/resources/nature2/Blends/BigBush.blend b/packages/client/resources/nature2/Blends/BigBush.blend similarity index 100% rename from client/resources/nature2/Blends/BigBush.blend rename to packages/client/resources/nature2/Blends/BigBush.blend diff --git a/client/resources/nature2/Blends/BigTreeWithLeaves.blend b/packages/client/resources/nature2/Blends/BigTreeWithLeaves.blend similarity index 100% rename from client/resources/nature2/Blends/BigTreeWithLeaves.blend rename to packages/client/resources/nature2/Blends/BigTreeWithLeaves.blend diff --git a/client/resources/nature2/Blends/BushTexture.png b/packages/client/resources/nature2/Blends/BushTexture.png similarity index 100% rename from client/resources/nature2/Blends/BushTexture.png rename to packages/client/resources/nature2/Blends/BushTexture.png diff --git a/client/resources/nature2/Blends/Cloud1.blend b/packages/client/resources/nature2/Blends/Cloud1.blend similarity index 100% rename from client/resources/nature2/Blends/Cloud1.blend rename to packages/client/resources/nature2/Blends/Cloud1.blend diff --git a/client/resources/nature2/Blends/Cloud1.blend1 b/packages/client/resources/nature2/Blends/Cloud1.blend1 similarity index 100% rename from client/resources/nature2/Blends/Cloud1.blend1 rename to packages/client/resources/nature2/Blends/Cloud1.blend1 diff --git a/client/resources/nature2/Blends/Cloud2.blend b/packages/client/resources/nature2/Blends/Cloud2.blend similarity index 100% rename from client/resources/nature2/Blends/Cloud2.blend rename to packages/client/resources/nature2/Blends/Cloud2.blend diff --git a/client/resources/nature2/Blends/Cloud3.blend b/packages/client/resources/nature2/Blends/Cloud3.blend similarity index 100% rename from client/resources/nature2/Blends/Cloud3.blend rename to packages/client/resources/nature2/Blends/Cloud3.blend diff --git a/client/resources/nature2/Blends/EveryModel.blend b/packages/client/resources/nature2/Blends/EveryModel.blend similarity index 100% rename from client/resources/nature2/Blends/EveryModel.blend rename to packages/client/resources/nature2/Blends/EveryModel.blend diff --git a/client/resources/nature2/Blends/MoreNature.blend1 b/packages/client/resources/nature2/Blends/MoreNature.blend1 similarity index 100% rename from client/resources/nature2/Blends/MoreNature.blend1 rename to packages/client/resources/nature2/Blends/MoreNature.blend1 diff --git a/client/resources/nature2/Blends/SmallBush.blend b/packages/client/resources/nature2/Blends/SmallBush.blend similarity index 100% rename from client/resources/nature2/Blends/SmallBush.blend rename to packages/client/resources/nature2/Blends/SmallBush.blend diff --git a/client/resources/nature2/Blends/SmallTreeWithLeave.blend b/packages/client/resources/nature2/Blends/SmallTreeWithLeave.blend similarity index 100% rename from client/resources/nature2/Blends/SmallTreeWithLeave.blend rename to packages/client/resources/nature2/Blends/SmallTreeWithLeave.blend diff --git a/client/resources/nature2/Blends/TreeNoLeavesBig.blend b/packages/client/resources/nature2/Blends/TreeNoLeavesBig.blend similarity index 100% rename from client/resources/nature2/Blends/TreeNoLeavesBig.blend rename to packages/client/resources/nature2/Blends/TreeNoLeavesBig.blend diff --git a/client/resources/nature2/Blends/TreeNoLeavesBig.blend1 b/packages/client/resources/nature2/Blends/TreeNoLeavesBig.blend1 similarity index 100% rename from client/resources/nature2/Blends/TreeNoLeavesBig.blend1 rename to packages/client/resources/nature2/Blends/TreeNoLeavesBig.blend1 diff --git a/client/resources/nature2/Blends/TreeNoLeavesSmall.blend b/packages/client/resources/nature2/Blends/TreeNoLeavesSmall.blend similarity index 100% rename from client/resources/nature2/Blends/TreeNoLeavesSmall.blend rename to packages/client/resources/nature2/Blends/TreeNoLeavesSmall.blend diff --git a/client/resources/nature2/Blends/TreeNoLeavesSmall.blend1 b/packages/client/resources/nature2/Blends/TreeNoLeavesSmall.blend1 similarity index 100% rename from client/resources/nature2/Blends/TreeNoLeavesSmall.blend1 rename to packages/client/resources/nature2/Blends/TreeNoLeavesSmall.blend1 diff --git a/client/resources/nature2/Blends/TreeTexture.png b/packages/client/resources/nature2/Blends/TreeTexture.png similarity index 100% rename from client/resources/nature2/Blends/TreeTexture.png rename to packages/client/resources/nature2/Blends/TreeTexture.png diff --git a/client/resources/nature2/GLTF/Cloud1.glb b/packages/client/resources/nature2/GLTF/Cloud1.glb similarity index 100% rename from client/resources/nature2/GLTF/Cloud1.glb rename to packages/client/resources/nature2/GLTF/Cloud1.glb diff --git a/client/resources/nature2/GLTF/Cloud2.glb b/packages/client/resources/nature2/GLTF/Cloud2.glb similarity index 100% rename from client/resources/nature2/GLTF/Cloud2.glb rename to packages/client/resources/nature2/GLTF/Cloud2.glb diff --git a/client/resources/nature2/GLTF/Cloud3.glb b/packages/client/resources/nature2/GLTF/Cloud3.glb similarity index 100% rename from client/resources/nature2/GLTF/Cloud3.glb rename to packages/client/resources/nature2/GLTF/Cloud3.glb diff --git a/client/resources/nature2/License.txt b/packages/client/resources/nature2/License.txt similarity index 100% rename from client/resources/nature2/License.txt rename to packages/client/resources/nature2/License.txt diff --git a/client/resources/nature2/OBJ/BigBush.mtl b/packages/client/resources/nature2/OBJ/BigBush.mtl similarity index 100% rename from client/resources/nature2/OBJ/BigBush.mtl rename to packages/client/resources/nature2/OBJ/BigBush.mtl diff --git a/client/resources/nature2/OBJ/BigBush.obj b/packages/client/resources/nature2/OBJ/BigBush.obj similarity index 100% rename from client/resources/nature2/OBJ/BigBush.obj rename to packages/client/resources/nature2/OBJ/BigBush.obj diff --git a/client/resources/nature2/OBJ/BigTreeWithLeaves.mtl b/packages/client/resources/nature2/OBJ/BigTreeWithLeaves.mtl similarity index 100% rename from client/resources/nature2/OBJ/BigTreeWithLeaves.mtl rename to packages/client/resources/nature2/OBJ/BigTreeWithLeaves.mtl diff --git a/client/resources/nature2/OBJ/BigTreeWithLeaves.obj b/packages/client/resources/nature2/OBJ/BigTreeWithLeaves.obj similarity index 100% rename from client/resources/nature2/OBJ/BigTreeWithLeaves.obj rename to packages/client/resources/nature2/OBJ/BigTreeWithLeaves.obj diff --git a/client/resources/nature2/OBJ/Cloud1.mtl b/packages/client/resources/nature2/OBJ/Cloud1.mtl similarity index 100% rename from client/resources/nature2/OBJ/Cloud1.mtl rename to packages/client/resources/nature2/OBJ/Cloud1.mtl diff --git a/client/resources/nature2/OBJ/Cloud1.obj b/packages/client/resources/nature2/OBJ/Cloud1.obj similarity index 100% rename from client/resources/nature2/OBJ/Cloud1.obj rename to packages/client/resources/nature2/OBJ/Cloud1.obj diff --git a/client/resources/nature2/OBJ/Cloud2.mtl b/packages/client/resources/nature2/OBJ/Cloud2.mtl similarity index 100% rename from client/resources/nature2/OBJ/Cloud2.mtl rename to packages/client/resources/nature2/OBJ/Cloud2.mtl diff --git a/client/resources/nature2/OBJ/Cloud2.obj b/packages/client/resources/nature2/OBJ/Cloud2.obj similarity index 100% rename from client/resources/nature2/OBJ/Cloud2.obj rename to packages/client/resources/nature2/OBJ/Cloud2.obj diff --git a/client/resources/nature2/OBJ/Cloud3.mtl b/packages/client/resources/nature2/OBJ/Cloud3.mtl similarity index 100% rename from client/resources/nature2/OBJ/Cloud3.mtl rename to packages/client/resources/nature2/OBJ/Cloud3.mtl diff --git a/client/resources/nature2/OBJ/Cloud3.obj b/packages/client/resources/nature2/OBJ/Cloud3.obj similarity index 100% rename from client/resources/nature2/OBJ/Cloud3.obj rename to packages/client/resources/nature2/OBJ/Cloud3.obj diff --git a/client/resources/nature2/OBJ/EveryModel.mtl b/packages/client/resources/nature2/OBJ/EveryModel.mtl similarity index 100% rename from client/resources/nature2/OBJ/EveryModel.mtl rename to packages/client/resources/nature2/OBJ/EveryModel.mtl diff --git a/client/resources/nature2/OBJ/EveryModel.obj b/packages/client/resources/nature2/OBJ/EveryModel.obj similarity index 100% rename from client/resources/nature2/OBJ/EveryModel.obj rename to packages/client/resources/nature2/OBJ/EveryModel.obj diff --git a/client/resources/nature2/OBJ/SmallBush.mtl b/packages/client/resources/nature2/OBJ/SmallBush.mtl similarity index 100% rename from client/resources/nature2/OBJ/SmallBush.mtl rename to packages/client/resources/nature2/OBJ/SmallBush.mtl diff --git a/client/resources/nature2/OBJ/SmallBush.obj b/packages/client/resources/nature2/OBJ/SmallBush.obj similarity index 100% rename from client/resources/nature2/OBJ/SmallBush.obj rename to packages/client/resources/nature2/OBJ/SmallBush.obj diff --git a/client/resources/nature2/OBJ/SmallTreeWithLeave.mtl b/packages/client/resources/nature2/OBJ/SmallTreeWithLeave.mtl similarity index 100% rename from client/resources/nature2/OBJ/SmallTreeWithLeave.mtl rename to packages/client/resources/nature2/OBJ/SmallTreeWithLeave.mtl diff --git a/client/resources/nature2/OBJ/SmallTreeWithLeave.obj b/packages/client/resources/nature2/OBJ/SmallTreeWithLeave.obj similarity index 100% rename from client/resources/nature2/OBJ/SmallTreeWithLeave.obj rename to packages/client/resources/nature2/OBJ/SmallTreeWithLeave.obj diff --git a/client/resources/nature2/OBJ/TreeNoLeavesBig.mtl b/packages/client/resources/nature2/OBJ/TreeNoLeavesBig.mtl similarity index 100% rename from client/resources/nature2/OBJ/TreeNoLeavesBig.mtl rename to packages/client/resources/nature2/OBJ/TreeNoLeavesBig.mtl diff --git a/client/resources/nature2/OBJ/TreeNoLeavesBig.obj b/packages/client/resources/nature2/OBJ/TreeNoLeavesBig.obj similarity index 100% rename from client/resources/nature2/OBJ/TreeNoLeavesBig.obj rename to packages/client/resources/nature2/OBJ/TreeNoLeavesBig.obj diff --git a/client/resources/nature2/OBJ/TreeNoLeavesSmall.mtl b/packages/client/resources/nature2/OBJ/TreeNoLeavesSmall.mtl similarity index 100% rename from client/resources/nature2/OBJ/TreeNoLeavesSmall.mtl rename to packages/client/resources/nature2/OBJ/TreeNoLeavesSmall.mtl diff --git a/client/resources/nature2/OBJ/TreeNoLeavesSmall.obj b/packages/client/resources/nature2/OBJ/TreeNoLeavesSmall.obj similarity index 100% rename from client/resources/nature2/OBJ/TreeNoLeavesSmall.obj rename to packages/client/resources/nature2/OBJ/TreeNoLeavesSmall.obj diff --git a/client/resources/terrain/README.txt b/packages/client/resources/terrain/README.txt similarity index 100% rename from client/resources/terrain/README.txt rename to packages/client/resources/terrain/README.txt diff --git a/client/resources/terrain/bark1-albedo.jpg b/packages/client/resources/terrain/bark1-albedo.jpg similarity index 100% rename from client/resources/terrain/bark1-albedo.jpg rename to packages/client/resources/terrain/bark1-albedo.jpg diff --git a/client/resources/terrain/bark1-albedo.png b/packages/client/resources/terrain/bark1-albedo.png similarity index 100% rename from client/resources/terrain/bark1-albedo.png rename to packages/client/resources/terrain/bark1-albedo.png diff --git a/client/resources/terrain/bark1-normal3.jpg b/packages/client/resources/terrain/bark1-normal3.jpg similarity index 100% rename from client/resources/terrain/bark1-normal3.jpg rename to packages/client/resources/terrain/bark1-normal3.jpg diff --git a/client/resources/terrain/bark1-normal3.png b/packages/client/resources/terrain/bark1-normal3.png similarity index 100% rename from client/resources/terrain/bark1-normal3.png rename to packages/client/resources/terrain/bark1-normal3.png diff --git a/client/resources/terrain/dirt_01_diffuse-1024.png b/packages/client/resources/terrain/dirt_01_diffuse-1024.png similarity index 100% rename from client/resources/terrain/dirt_01_diffuse-1024.png rename to packages/client/resources/terrain/dirt_01_diffuse-1024.png diff --git a/client/resources/terrain/dirt_01_normal-1024.jpg b/packages/client/resources/terrain/dirt_01_normal-1024.jpg similarity index 100% rename from client/resources/terrain/dirt_01_normal-1024.jpg rename to packages/client/resources/terrain/dirt_01_normal-1024.jpg diff --git a/client/resources/terrain/grass1-albedo-512.jpg b/packages/client/resources/terrain/grass1-albedo-512.jpg similarity index 100% rename from client/resources/terrain/grass1-albedo-512.jpg rename to packages/client/resources/terrain/grass1-albedo-512.jpg diff --git a/client/resources/terrain/grass1-albedo3-1024.png b/packages/client/resources/terrain/grass1-albedo3-1024.png similarity index 100% rename from client/resources/terrain/grass1-albedo3-1024.png rename to packages/client/resources/terrain/grass1-albedo3-1024.png diff --git a/client/resources/terrain/grass1-normal-1024.jpg b/packages/client/resources/terrain/grass1-normal-1024.jpg similarity index 100% rename from client/resources/terrain/grass1-normal-1024.jpg rename to packages/client/resources/terrain/grass1-normal-1024.jpg diff --git a/client/resources/terrain/rock-snow-ice-albedo-1024.png b/packages/client/resources/terrain/rock-snow-ice-albedo-1024.png similarity index 100% rename from client/resources/terrain/rock-snow-ice-albedo-1024.png rename to packages/client/resources/terrain/rock-snow-ice-albedo-1024.png diff --git a/client/resources/terrain/rock-snow-ice-normal-1024.jpg b/packages/client/resources/terrain/rock-snow-ice-normal-1024.jpg similarity index 100% rename from client/resources/terrain/rock-snow-ice-normal-1024.jpg rename to packages/client/resources/terrain/rock-snow-ice-normal-1024.jpg diff --git a/client/resources/terrain/rough-wet-cobble-albedo-1024.png b/packages/client/resources/terrain/rough-wet-cobble-albedo-1024.png similarity index 100% rename from client/resources/terrain/rough-wet-cobble-albedo-1024.png rename to packages/client/resources/terrain/rough-wet-cobble-albedo-1024.png diff --git a/client/resources/terrain/rough-wet-cobble-normal-1024.jpg b/packages/client/resources/terrain/rough-wet-cobble-normal-1024.jpg similarity index 100% rename from client/resources/terrain/rough-wet-cobble-normal-1024.jpg rename to packages/client/resources/terrain/rough-wet-cobble-normal-1024.jpg diff --git a/client/resources/terrain/sandy-rocks1-albedo-1024.png b/packages/client/resources/terrain/sandy-rocks1-albedo-1024.png similarity index 100% rename from client/resources/terrain/sandy-rocks1-albedo-1024.png rename to packages/client/resources/terrain/sandy-rocks1-albedo-1024.png diff --git a/client/resources/terrain/sandy-rocks1-normal-1024.jpg b/packages/client/resources/terrain/sandy-rocks1-normal-1024.jpg similarity index 100% rename from client/resources/terrain/sandy-rocks1-normal-1024.jpg rename to packages/client/resources/terrain/sandy-rocks1-normal-1024.jpg diff --git a/client/resources/terrain/sandyground-albedo-1024.png b/packages/client/resources/terrain/sandyground-albedo-1024.png similarity index 100% rename from client/resources/terrain/sandyground-albedo-1024.png rename to packages/client/resources/terrain/sandyground-albedo-1024.png diff --git a/client/resources/terrain/sandyground-normal-1024.jpg b/packages/client/resources/terrain/sandyground-normal-1024.jpg similarity index 100% rename from client/resources/terrain/sandyground-normal-1024.jpg rename to packages/client/resources/terrain/sandyground-normal-1024.jpg diff --git a/client/resources/terrain/simplex-noise.png b/packages/client/resources/terrain/simplex-noise.png similarity index 100% rename from client/resources/terrain/simplex-noise.png rename to packages/client/resources/terrain/simplex-noise.png diff --git a/client/resources/terrain/snow-packed-albedo-1024.png b/packages/client/resources/terrain/snow-packed-albedo-1024.png similarity index 100% rename from client/resources/terrain/snow-packed-albedo-1024.png rename to packages/client/resources/terrain/snow-packed-albedo-1024.png diff --git a/client/resources/terrain/snow-packed-normal-1024.jpg b/packages/client/resources/terrain/snow-packed-normal-1024.jpg similarity index 100% rename from client/resources/terrain/snow-packed-normal-1024.jpg rename to packages/client/resources/terrain/snow-packed-normal-1024.jpg diff --git a/client/resources/terrain/space-negx.jpg b/packages/client/resources/terrain/space-negx.jpg similarity index 100% rename from client/resources/terrain/space-negx.jpg rename to packages/client/resources/terrain/space-negx.jpg diff --git a/client/resources/terrain/space-negy.jpg b/packages/client/resources/terrain/space-negy.jpg similarity index 100% rename from client/resources/terrain/space-negy.jpg rename to packages/client/resources/terrain/space-negy.jpg diff --git a/client/resources/terrain/space-negz.jpg b/packages/client/resources/terrain/space-negz.jpg similarity index 100% rename from client/resources/terrain/space-negz.jpg rename to packages/client/resources/terrain/space-negz.jpg diff --git a/client/resources/terrain/space-posx.jpg b/packages/client/resources/terrain/space-posx.jpg similarity index 100% rename from client/resources/terrain/space-posx.jpg rename to packages/client/resources/terrain/space-posx.jpg diff --git a/client/resources/terrain/space-posy.jpg b/packages/client/resources/terrain/space-posy.jpg similarity index 100% rename from client/resources/terrain/space-posy.jpg rename to packages/client/resources/terrain/space-posy.jpg diff --git a/client/resources/terrain/space-posz.jpg b/packages/client/resources/terrain/space-posz.jpg similarity index 100% rename from client/resources/terrain/space-posz.jpg rename to packages/client/resources/terrain/space-posz.jpg diff --git a/client/resources/terrain/worn-bumpy-rock-albedo-1024.png b/packages/client/resources/terrain/worn-bumpy-rock-albedo-1024.png similarity index 100% rename from client/resources/terrain/worn-bumpy-rock-albedo-1024.png rename to packages/client/resources/terrain/worn-bumpy-rock-albedo-1024.png diff --git a/client/resources/terrain/worn-bumpy-rock-albedo-512.jpg b/packages/client/resources/terrain/worn-bumpy-rock-albedo-512.jpg similarity index 100% rename from client/resources/terrain/worn-bumpy-rock-albedo-512.jpg rename to packages/client/resources/terrain/worn-bumpy-rock-albedo-512.jpg diff --git a/client/resources/terrain/worn-bumpy-rock-normal-1024.jpg b/packages/client/resources/terrain/worn-bumpy-rock-normal-1024.jpg similarity index 100% rename from client/resources/terrain/worn-bumpy-rock-normal-1024.jpg rename to packages/client/resources/terrain/worn-bumpy-rock-normal-1024.jpg diff --git a/client/resources/textures/ball.png b/packages/client/resources/textures/ball.png similarity index 100% rename from client/resources/textures/ball.png rename to packages/client/resources/textures/ball.png diff --git a/client/resources/textures/fire.png b/packages/client/resources/textures/fire.png similarity index 100% rename from client/resources/textures/fire.png rename to packages/client/resources/textures/fire.png diff --git a/client/resources/textures/whitePuff14.png b/packages/client/resources/textures/whitePuff14.png similarity index 100% rename from client/resources/textures/whitePuff14.png rename to packages/client/resources/textures/whitePuff14.png diff --git a/client/resources/trees/Blends/Birch_1.blend b/packages/client/resources/trees/Blends/Birch_1.blend similarity index 100% rename from client/resources/trees/Blends/Birch_1.blend rename to packages/client/resources/trees/Blends/Birch_1.blend diff --git a/client/resources/trees/Blends/Birch_10.blend b/packages/client/resources/trees/Blends/Birch_10.blend similarity index 100% rename from client/resources/trees/Blends/Birch_10.blend rename to packages/client/resources/trees/Blends/Birch_10.blend diff --git a/client/resources/trees/Blends/Birch_2.blend b/packages/client/resources/trees/Blends/Birch_2.blend similarity index 100% rename from client/resources/trees/Blends/Birch_2.blend rename to packages/client/resources/trees/Blends/Birch_2.blend diff --git a/client/resources/trees/Blends/Birch_3.blend b/packages/client/resources/trees/Blends/Birch_3.blend similarity index 100% rename from client/resources/trees/Blends/Birch_3.blend rename to packages/client/resources/trees/Blends/Birch_3.blend diff --git a/client/resources/trees/Blends/Birch_4.blend b/packages/client/resources/trees/Blends/Birch_4.blend similarity index 100% rename from client/resources/trees/Blends/Birch_4.blend rename to packages/client/resources/trees/Blends/Birch_4.blend diff --git a/client/resources/trees/Blends/Birch_5.blend b/packages/client/resources/trees/Blends/Birch_5.blend similarity index 100% rename from client/resources/trees/Blends/Birch_5.blend rename to packages/client/resources/trees/Blends/Birch_5.blend diff --git a/client/resources/trees/Blends/Birch_6.blend b/packages/client/resources/trees/Blends/Birch_6.blend similarity index 100% rename from client/resources/trees/Blends/Birch_6.blend rename to packages/client/resources/trees/Blends/Birch_6.blend diff --git a/client/resources/trees/Blends/Birch_7.blend b/packages/client/resources/trees/Blends/Birch_7.blend similarity index 100% rename from client/resources/trees/Blends/Birch_7.blend rename to packages/client/resources/trees/Blends/Birch_7.blend diff --git a/client/resources/trees/Blends/Birch_8.blend b/packages/client/resources/trees/Blends/Birch_8.blend similarity index 100% rename from client/resources/trees/Blends/Birch_8.blend rename to packages/client/resources/trees/Blends/Birch_8.blend diff --git a/client/resources/trees/Blends/Birch_9.blend b/packages/client/resources/trees/Blends/Birch_9.blend similarity index 100% rename from client/resources/trees/Blends/Birch_9.blend rename to packages/client/resources/trees/Blends/Birch_9.blend diff --git a/client/resources/trees/Blends/DeadBirch_1.blend b/packages/client/resources/trees/Blends/DeadBirch_1.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_1.blend rename to packages/client/resources/trees/Blends/DeadBirch_1.blend diff --git a/client/resources/trees/Blends/DeadBirch_10.blend b/packages/client/resources/trees/Blends/DeadBirch_10.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_10.blend rename to packages/client/resources/trees/Blends/DeadBirch_10.blend diff --git a/client/resources/trees/Blends/DeadBirch_2.blend b/packages/client/resources/trees/Blends/DeadBirch_2.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_2.blend rename to packages/client/resources/trees/Blends/DeadBirch_2.blend diff --git a/client/resources/trees/Blends/DeadBirch_3.blend b/packages/client/resources/trees/Blends/DeadBirch_3.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_3.blend rename to packages/client/resources/trees/Blends/DeadBirch_3.blend diff --git a/client/resources/trees/Blends/DeadBirch_4.blend b/packages/client/resources/trees/Blends/DeadBirch_4.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_4.blend rename to packages/client/resources/trees/Blends/DeadBirch_4.blend diff --git a/client/resources/trees/Blends/DeadBirch_5.blend b/packages/client/resources/trees/Blends/DeadBirch_5.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_5.blend rename to packages/client/resources/trees/Blends/DeadBirch_5.blend diff --git a/client/resources/trees/Blends/DeadBirch_6.blend b/packages/client/resources/trees/Blends/DeadBirch_6.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_6.blend rename to packages/client/resources/trees/Blends/DeadBirch_6.blend diff --git a/client/resources/trees/Blends/DeadBirch_7.blend b/packages/client/resources/trees/Blends/DeadBirch_7.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_7.blend rename to packages/client/resources/trees/Blends/DeadBirch_7.blend diff --git a/client/resources/trees/Blends/DeadBirch_8.blend b/packages/client/resources/trees/Blends/DeadBirch_8.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_8.blend rename to packages/client/resources/trees/Blends/DeadBirch_8.blend diff --git a/client/resources/trees/Blends/DeadBirch_9.blend b/packages/client/resources/trees/Blends/DeadBirch_9.blend similarity index 100% rename from client/resources/trees/Blends/DeadBirch_9.blend rename to packages/client/resources/trees/Blends/DeadBirch_9.blend diff --git a/client/resources/trees/Blends/DeadTree_1.blend b/packages/client/resources/trees/Blends/DeadTree_1.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_1.blend rename to packages/client/resources/trees/Blends/DeadTree_1.blend diff --git a/client/resources/trees/Blends/DeadTree_10.blend b/packages/client/resources/trees/Blends/DeadTree_10.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_10.blend rename to packages/client/resources/trees/Blends/DeadTree_10.blend diff --git a/client/resources/trees/Blends/DeadTree_2.blend b/packages/client/resources/trees/Blends/DeadTree_2.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_2.blend rename to packages/client/resources/trees/Blends/DeadTree_2.blend diff --git a/client/resources/trees/Blends/DeadTree_3.blend b/packages/client/resources/trees/Blends/DeadTree_3.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_3.blend rename to packages/client/resources/trees/Blends/DeadTree_3.blend diff --git a/client/resources/trees/Blends/DeadTree_4.blend b/packages/client/resources/trees/Blends/DeadTree_4.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_4.blend rename to packages/client/resources/trees/Blends/DeadTree_4.blend diff --git a/client/resources/trees/Blends/DeadTree_5.blend b/packages/client/resources/trees/Blends/DeadTree_5.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_5.blend rename to packages/client/resources/trees/Blends/DeadTree_5.blend diff --git a/client/resources/trees/Blends/DeadTree_6.blend b/packages/client/resources/trees/Blends/DeadTree_6.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_6.blend rename to packages/client/resources/trees/Blends/DeadTree_6.blend diff --git a/client/resources/trees/Blends/DeadTree_7.blend b/packages/client/resources/trees/Blends/DeadTree_7.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_7.blend rename to packages/client/resources/trees/Blends/DeadTree_7.blend diff --git a/client/resources/trees/Blends/DeadTree_8.blend b/packages/client/resources/trees/Blends/DeadTree_8.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_8.blend rename to packages/client/resources/trees/Blends/DeadTree_8.blend diff --git a/client/resources/trees/Blends/DeadTree_9.blend b/packages/client/resources/trees/Blends/DeadTree_9.blend similarity index 100% rename from client/resources/trees/Blends/DeadTree_9.blend rename to packages/client/resources/trees/Blends/DeadTree_9.blend diff --git a/client/resources/trees/Blends/Pine_1.blend b/packages/client/resources/trees/Blends/Pine_1.blend similarity index 100% rename from client/resources/trees/Blends/Pine_1.blend rename to packages/client/resources/trees/Blends/Pine_1.blend diff --git a/client/resources/trees/Blends/Pine_2.blend b/packages/client/resources/trees/Blends/Pine_2.blend similarity index 100% rename from client/resources/trees/Blends/Pine_2.blend rename to packages/client/resources/trees/Blends/Pine_2.blend diff --git a/client/resources/trees/Blends/Pine_3.blend b/packages/client/resources/trees/Blends/Pine_3.blend similarity index 100% rename from client/resources/trees/Blends/Pine_3.blend rename to packages/client/resources/trees/Blends/Pine_3.blend diff --git a/client/resources/trees/Blends/Pine_4.blend b/packages/client/resources/trees/Blends/Pine_4.blend similarity index 100% rename from client/resources/trees/Blends/Pine_4.blend rename to packages/client/resources/trees/Blends/Pine_4.blend diff --git a/client/resources/trees/Blends/Pine_5.blend b/packages/client/resources/trees/Blends/Pine_5.blend similarity index 100% rename from client/resources/trees/Blends/Pine_5.blend rename to packages/client/resources/trees/Blends/Pine_5.blend diff --git a/client/resources/trees/Blends/Tree_1.blend b/packages/client/resources/trees/Blends/Tree_1.blend similarity index 100% rename from client/resources/trees/Blends/Tree_1.blend rename to packages/client/resources/trees/Blends/Tree_1.blend diff --git a/client/resources/trees/Blends/Tree_10.blend b/packages/client/resources/trees/Blends/Tree_10.blend similarity index 100% rename from client/resources/trees/Blends/Tree_10.blend rename to packages/client/resources/trees/Blends/Tree_10.blend diff --git a/client/resources/trees/Blends/Tree_2.blend b/packages/client/resources/trees/Blends/Tree_2.blend similarity index 100% rename from client/resources/trees/Blends/Tree_2.blend rename to packages/client/resources/trees/Blends/Tree_2.blend diff --git a/client/resources/trees/Blends/Tree_3.blend b/packages/client/resources/trees/Blends/Tree_3.blend similarity index 100% rename from client/resources/trees/Blends/Tree_3.blend rename to packages/client/resources/trees/Blends/Tree_3.blend diff --git a/client/resources/trees/Blends/Tree_4.blend b/packages/client/resources/trees/Blends/Tree_4.blend similarity index 100% rename from client/resources/trees/Blends/Tree_4.blend rename to packages/client/resources/trees/Blends/Tree_4.blend diff --git a/client/resources/trees/Blends/Tree_5.blend b/packages/client/resources/trees/Blends/Tree_5.blend similarity index 100% rename from client/resources/trees/Blends/Tree_5.blend rename to packages/client/resources/trees/Blends/Tree_5.blend diff --git a/client/resources/trees/Blends/Tree_6.blend b/packages/client/resources/trees/Blends/Tree_6.blend similarity index 100% rename from client/resources/trees/Blends/Tree_6.blend rename to packages/client/resources/trees/Blends/Tree_6.blend diff --git a/client/resources/trees/Blends/Tree_7.blend b/packages/client/resources/trees/Blends/Tree_7.blend similarity index 100% rename from client/resources/trees/Blends/Tree_7.blend rename to packages/client/resources/trees/Blends/Tree_7.blend diff --git a/client/resources/trees/Blends/Tree_8.blend b/packages/client/resources/trees/Blends/Tree_8.blend similarity index 100% rename from client/resources/trees/Blends/Tree_8.blend rename to packages/client/resources/trees/Blends/Tree_8.blend diff --git a/client/resources/trees/Blends/Tree_9.blend b/packages/client/resources/trees/Blends/Tree_9.blend similarity index 100% rename from client/resources/trees/Blends/Tree_9.blend rename to packages/client/resources/trees/Blends/Tree_9.blend diff --git a/client/resources/trees/FBX/Birch_1.fbx b/packages/client/resources/trees/FBX/Birch_1.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_1.fbx rename to packages/client/resources/trees/FBX/Birch_1.fbx diff --git a/client/resources/trees/FBX/Birch_10.fbx b/packages/client/resources/trees/FBX/Birch_10.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_10.fbx rename to packages/client/resources/trees/FBX/Birch_10.fbx diff --git a/client/resources/trees/FBX/Birch_2.fbx b/packages/client/resources/trees/FBX/Birch_2.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_2.fbx rename to packages/client/resources/trees/FBX/Birch_2.fbx diff --git a/client/resources/trees/FBX/Birch_3.fbx b/packages/client/resources/trees/FBX/Birch_3.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_3.fbx rename to packages/client/resources/trees/FBX/Birch_3.fbx diff --git a/client/resources/trees/FBX/Birch_4.fbx b/packages/client/resources/trees/FBX/Birch_4.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_4.fbx rename to packages/client/resources/trees/FBX/Birch_4.fbx diff --git a/client/resources/trees/FBX/Birch_5.fbx b/packages/client/resources/trees/FBX/Birch_5.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_5.fbx rename to packages/client/resources/trees/FBX/Birch_5.fbx diff --git a/client/resources/trees/FBX/Birch_6.fbx b/packages/client/resources/trees/FBX/Birch_6.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_6.fbx rename to packages/client/resources/trees/FBX/Birch_6.fbx diff --git a/client/resources/trees/FBX/Birch_7.fbx b/packages/client/resources/trees/FBX/Birch_7.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_7.fbx rename to packages/client/resources/trees/FBX/Birch_7.fbx diff --git a/client/resources/trees/FBX/Birch_8.fbx b/packages/client/resources/trees/FBX/Birch_8.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_8.fbx rename to packages/client/resources/trees/FBX/Birch_8.fbx diff --git a/client/resources/trees/FBX/Birch_9.fbx b/packages/client/resources/trees/FBX/Birch_9.fbx similarity index 100% rename from client/resources/trees/FBX/Birch_9.fbx rename to packages/client/resources/trees/FBX/Birch_9.fbx diff --git a/client/resources/trees/FBX/DeadBirch_1.fbx b/packages/client/resources/trees/FBX/DeadBirch_1.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_1.fbx rename to packages/client/resources/trees/FBX/DeadBirch_1.fbx diff --git a/client/resources/trees/FBX/DeadBirch_10.fbx b/packages/client/resources/trees/FBX/DeadBirch_10.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_10.fbx rename to packages/client/resources/trees/FBX/DeadBirch_10.fbx diff --git a/client/resources/trees/FBX/DeadBirch_2.fbx b/packages/client/resources/trees/FBX/DeadBirch_2.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_2.fbx rename to packages/client/resources/trees/FBX/DeadBirch_2.fbx diff --git a/client/resources/trees/FBX/DeadBirch_3.fbx b/packages/client/resources/trees/FBX/DeadBirch_3.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_3.fbx rename to packages/client/resources/trees/FBX/DeadBirch_3.fbx diff --git a/client/resources/trees/FBX/DeadBirch_4.fbx b/packages/client/resources/trees/FBX/DeadBirch_4.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_4.fbx rename to packages/client/resources/trees/FBX/DeadBirch_4.fbx diff --git a/client/resources/trees/FBX/DeadBirch_5.fbx b/packages/client/resources/trees/FBX/DeadBirch_5.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_5.fbx rename to packages/client/resources/trees/FBX/DeadBirch_5.fbx diff --git a/client/resources/trees/FBX/DeadBirch_6.fbx b/packages/client/resources/trees/FBX/DeadBirch_6.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_6.fbx rename to packages/client/resources/trees/FBX/DeadBirch_6.fbx diff --git a/client/resources/trees/FBX/DeadBirch_7.fbx b/packages/client/resources/trees/FBX/DeadBirch_7.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_7.fbx rename to packages/client/resources/trees/FBX/DeadBirch_7.fbx diff --git a/client/resources/trees/FBX/DeadBirch_8.fbx b/packages/client/resources/trees/FBX/DeadBirch_8.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_8.fbx rename to packages/client/resources/trees/FBX/DeadBirch_8.fbx diff --git a/client/resources/trees/FBX/DeadBirch_9.fbx b/packages/client/resources/trees/FBX/DeadBirch_9.fbx similarity index 100% rename from client/resources/trees/FBX/DeadBirch_9.fbx rename to packages/client/resources/trees/FBX/DeadBirch_9.fbx diff --git a/client/resources/trees/FBX/DeadTree_1.fbx b/packages/client/resources/trees/FBX/DeadTree_1.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_1.fbx rename to packages/client/resources/trees/FBX/DeadTree_1.fbx diff --git a/client/resources/trees/FBX/DeadTree_10.fbx b/packages/client/resources/trees/FBX/DeadTree_10.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_10.fbx rename to packages/client/resources/trees/FBX/DeadTree_10.fbx diff --git a/client/resources/trees/FBX/DeadTree_2.fbx b/packages/client/resources/trees/FBX/DeadTree_2.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_2.fbx rename to packages/client/resources/trees/FBX/DeadTree_2.fbx diff --git a/client/resources/trees/FBX/DeadTree_3.fbx b/packages/client/resources/trees/FBX/DeadTree_3.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_3.fbx rename to packages/client/resources/trees/FBX/DeadTree_3.fbx diff --git a/client/resources/trees/FBX/DeadTree_4.fbx b/packages/client/resources/trees/FBX/DeadTree_4.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_4.fbx rename to packages/client/resources/trees/FBX/DeadTree_4.fbx diff --git a/client/resources/trees/FBX/DeadTree_5.fbx b/packages/client/resources/trees/FBX/DeadTree_5.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_5.fbx rename to packages/client/resources/trees/FBX/DeadTree_5.fbx diff --git a/client/resources/trees/FBX/DeadTree_6.fbx b/packages/client/resources/trees/FBX/DeadTree_6.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_6.fbx rename to packages/client/resources/trees/FBX/DeadTree_6.fbx diff --git a/client/resources/trees/FBX/DeadTree_7.fbx b/packages/client/resources/trees/FBX/DeadTree_7.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_7.fbx rename to packages/client/resources/trees/FBX/DeadTree_7.fbx diff --git a/client/resources/trees/FBX/DeadTree_8.fbx b/packages/client/resources/trees/FBX/DeadTree_8.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_8.fbx rename to packages/client/resources/trees/FBX/DeadTree_8.fbx diff --git a/client/resources/trees/FBX/DeadTree_9.fbx b/packages/client/resources/trees/FBX/DeadTree_9.fbx similarity index 100% rename from client/resources/trees/FBX/DeadTree_9.fbx rename to packages/client/resources/trees/FBX/DeadTree_9.fbx diff --git a/client/resources/trees/FBX/Pine_1.fbx b/packages/client/resources/trees/FBX/Pine_1.fbx similarity index 100% rename from client/resources/trees/FBX/Pine_1.fbx rename to packages/client/resources/trees/FBX/Pine_1.fbx diff --git a/client/resources/trees/FBX/Pine_2.fbx b/packages/client/resources/trees/FBX/Pine_2.fbx similarity index 100% rename from client/resources/trees/FBX/Pine_2.fbx rename to packages/client/resources/trees/FBX/Pine_2.fbx diff --git a/client/resources/trees/FBX/Pine_3.fbx b/packages/client/resources/trees/FBX/Pine_3.fbx similarity index 100% rename from client/resources/trees/FBX/Pine_3.fbx rename to packages/client/resources/trees/FBX/Pine_3.fbx diff --git a/client/resources/trees/FBX/Pine_4.fbx b/packages/client/resources/trees/FBX/Pine_4.fbx similarity index 100% rename from client/resources/trees/FBX/Pine_4.fbx rename to packages/client/resources/trees/FBX/Pine_4.fbx diff --git a/client/resources/trees/FBX/Pine_5.fbx b/packages/client/resources/trees/FBX/Pine_5.fbx similarity index 100% rename from client/resources/trees/FBX/Pine_5.fbx rename to packages/client/resources/trees/FBX/Pine_5.fbx diff --git a/client/resources/trees/FBX/Tree_1.fbx b/packages/client/resources/trees/FBX/Tree_1.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_1.fbx rename to packages/client/resources/trees/FBX/Tree_1.fbx diff --git a/client/resources/trees/FBX/Tree_10.fbx b/packages/client/resources/trees/FBX/Tree_10.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_10.fbx rename to packages/client/resources/trees/FBX/Tree_10.fbx diff --git a/client/resources/trees/FBX/Tree_2.fbx b/packages/client/resources/trees/FBX/Tree_2.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_2.fbx rename to packages/client/resources/trees/FBX/Tree_2.fbx diff --git a/client/resources/trees/FBX/Tree_3.fbx b/packages/client/resources/trees/FBX/Tree_3.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_3.fbx rename to packages/client/resources/trees/FBX/Tree_3.fbx diff --git a/client/resources/trees/FBX/Tree_4.fbx b/packages/client/resources/trees/FBX/Tree_4.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_4.fbx rename to packages/client/resources/trees/FBX/Tree_4.fbx diff --git a/client/resources/trees/FBX/Tree_5.fbx b/packages/client/resources/trees/FBX/Tree_5.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_5.fbx rename to packages/client/resources/trees/FBX/Tree_5.fbx diff --git a/client/resources/trees/FBX/Tree_6.fbx b/packages/client/resources/trees/FBX/Tree_6.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_6.fbx rename to packages/client/resources/trees/FBX/Tree_6.fbx diff --git a/client/resources/trees/FBX/Tree_7.fbx b/packages/client/resources/trees/FBX/Tree_7.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_7.fbx rename to packages/client/resources/trees/FBX/Tree_7.fbx diff --git a/client/resources/trees/FBX/Tree_8.fbx b/packages/client/resources/trees/FBX/Tree_8.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_8.fbx rename to packages/client/resources/trees/FBX/Tree_8.fbx diff --git a/client/resources/trees/FBX/Tree_9.fbx b/packages/client/resources/trees/FBX/Tree_9.fbx similarity index 100% rename from client/resources/trees/FBX/Tree_9.fbx rename to packages/client/resources/trees/FBX/Tree_9.fbx diff --git a/client/resources/trees/License.txt b/packages/client/resources/trees/License.txt similarity index 100% rename from client/resources/trees/License.txt rename to packages/client/resources/trees/License.txt diff --git a/client/resources/trees/OBJ/Birch_1.mtl b/packages/client/resources/trees/OBJ/Birch_1.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_1.mtl rename to packages/client/resources/trees/OBJ/Birch_1.mtl diff --git a/client/resources/trees/OBJ/Birch_1.obj b/packages/client/resources/trees/OBJ/Birch_1.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_1.obj rename to packages/client/resources/trees/OBJ/Birch_1.obj diff --git a/client/resources/trees/OBJ/Birch_10.mtl b/packages/client/resources/trees/OBJ/Birch_10.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_10.mtl rename to packages/client/resources/trees/OBJ/Birch_10.mtl diff --git a/client/resources/trees/OBJ/Birch_10.obj b/packages/client/resources/trees/OBJ/Birch_10.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_10.obj rename to packages/client/resources/trees/OBJ/Birch_10.obj diff --git a/client/resources/trees/OBJ/Birch_2.mtl b/packages/client/resources/trees/OBJ/Birch_2.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_2.mtl rename to packages/client/resources/trees/OBJ/Birch_2.mtl diff --git a/client/resources/trees/OBJ/Birch_2.obj b/packages/client/resources/trees/OBJ/Birch_2.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_2.obj rename to packages/client/resources/trees/OBJ/Birch_2.obj diff --git a/client/resources/trees/OBJ/Birch_3.mtl b/packages/client/resources/trees/OBJ/Birch_3.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_3.mtl rename to packages/client/resources/trees/OBJ/Birch_3.mtl diff --git a/client/resources/trees/OBJ/Birch_3.obj b/packages/client/resources/trees/OBJ/Birch_3.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_3.obj rename to packages/client/resources/trees/OBJ/Birch_3.obj diff --git a/client/resources/trees/OBJ/Birch_4.mtl b/packages/client/resources/trees/OBJ/Birch_4.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_4.mtl rename to packages/client/resources/trees/OBJ/Birch_4.mtl diff --git a/client/resources/trees/OBJ/Birch_4.obj b/packages/client/resources/trees/OBJ/Birch_4.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_4.obj rename to packages/client/resources/trees/OBJ/Birch_4.obj diff --git a/client/resources/trees/OBJ/Birch_5.mtl b/packages/client/resources/trees/OBJ/Birch_5.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_5.mtl rename to packages/client/resources/trees/OBJ/Birch_5.mtl diff --git a/client/resources/trees/OBJ/Birch_5.obj b/packages/client/resources/trees/OBJ/Birch_5.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_5.obj rename to packages/client/resources/trees/OBJ/Birch_5.obj diff --git a/client/resources/trees/OBJ/Birch_6.mtl b/packages/client/resources/trees/OBJ/Birch_6.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_6.mtl rename to packages/client/resources/trees/OBJ/Birch_6.mtl diff --git a/client/resources/trees/OBJ/Birch_6.obj b/packages/client/resources/trees/OBJ/Birch_6.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_6.obj rename to packages/client/resources/trees/OBJ/Birch_6.obj diff --git a/client/resources/trees/OBJ/Birch_7.mtl b/packages/client/resources/trees/OBJ/Birch_7.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_7.mtl rename to packages/client/resources/trees/OBJ/Birch_7.mtl diff --git a/client/resources/trees/OBJ/Birch_7.obj b/packages/client/resources/trees/OBJ/Birch_7.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_7.obj rename to packages/client/resources/trees/OBJ/Birch_7.obj diff --git a/client/resources/trees/OBJ/Birch_8.mtl b/packages/client/resources/trees/OBJ/Birch_8.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_8.mtl rename to packages/client/resources/trees/OBJ/Birch_8.mtl diff --git a/client/resources/trees/OBJ/Birch_8.obj b/packages/client/resources/trees/OBJ/Birch_8.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_8.obj rename to packages/client/resources/trees/OBJ/Birch_8.obj diff --git a/client/resources/trees/OBJ/Birch_9.mtl b/packages/client/resources/trees/OBJ/Birch_9.mtl similarity index 100% rename from client/resources/trees/OBJ/Birch_9.mtl rename to packages/client/resources/trees/OBJ/Birch_9.mtl diff --git a/client/resources/trees/OBJ/Birch_9.obj b/packages/client/resources/trees/OBJ/Birch_9.obj similarity index 100% rename from client/resources/trees/OBJ/Birch_9.obj rename to packages/client/resources/trees/OBJ/Birch_9.obj diff --git a/client/resources/trees/OBJ/DeadBirch_1.mtl b/packages/client/resources/trees/OBJ/DeadBirch_1.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_1.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_1.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_1.obj b/packages/client/resources/trees/OBJ/DeadBirch_1.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_1.obj rename to packages/client/resources/trees/OBJ/DeadBirch_1.obj diff --git a/client/resources/trees/OBJ/DeadBirch_10.mtl b/packages/client/resources/trees/OBJ/DeadBirch_10.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_10.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_10.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_10.obj b/packages/client/resources/trees/OBJ/DeadBirch_10.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_10.obj rename to packages/client/resources/trees/OBJ/DeadBirch_10.obj diff --git a/client/resources/trees/OBJ/DeadBirch_2.mtl b/packages/client/resources/trees/OBJ/DeadBirch_2.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_2.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_2.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_2.obj b/packages/client/resources/trees/OBJ/DeadBirch_2.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_2.obj rename to packages/client/resources/trees/OBJ/DeadBirch_2.obj diff --git a/client/resources/trees/OBJ/DeadBirch_3.mtl b/packages/client/resources/trees/OBJ/DeadBirch_3.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_3.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_3.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_3.obj b/packages/client/resources/trees/OBJ/DeadBirch_3.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_3.obj rename to packages/client/resources/trees/OBJ/DeadBirch_3.obj diff --git a/client/resources/trees/OBJ/DeadBirch_4.mtl b/packages/client/resources/trees/OBJ/DeadBirch_4.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_4.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_4.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_4.obj b/packages/client/resources/trees/OBJ/DeadBirch_4.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_4.obj rename to packages/client/resources/trees/OBJ/DeadBirch_4.obj diff --git a/client/resources/trees/OBJ/DeadBirch_5.mtl b/packages/client/resources/trees/OBJ/DeadBirch_5.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_5.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_5.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_5.obj b/packages/client/resources/trees/OBJ/DeadBirch_5.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_5.obj rename to packages/client/resources/trees/OBJ/DeadBirch_5.obj diff --git a/client/resources/trees/OBJ/DeadBirch_6.mtl b/packages/client/resources/trees/OBJ/DeadBirch_6.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_6.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_6.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_6.obj b/packages/client/resources/trees/OBJ/DeadBirch_6.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_6.obj rename to packages/client/resources/trees/OBJ/DeadBirch_6.obj diff --git a/client/resources/trees/OBJ/DeadBirch_7.mtl b/packages/client/resources/trees/OBJ/DeadBirch_7.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_7.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_7.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_7.obj b/packages/client/resources/trees/OBJ/DeadBirch_7.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_7.obj rename to packages/client/resources/trees/OBJ/DeadBirch_7.obj diff --git a/client/resources/trees/OBJ/DeadBirch_8.mtl b/packages/client/resources/trees/OBJ/DeadBirch_8.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_8.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_8.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_8.obj b/packages/client/resources/trees/OBJ/DeadBirch_8.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_8.obj rename to packages/client/resources/trees/OBJ/DeadBirch_8.obj diff --git a/client/resources/trees/OBJ/DeadBirch_9.mtl b/packages/client/resources/trees/OBJ/DeadBirch_9.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_9.mtl rename to packages/client/resources/trees/OBJ/DeadBirch_9.mtl diff --git a/client/resources/trees/OBJ/DeadBirch_9.obj b/packages/client/resources/trees/OBJ/DeadBirch_9.obj similarity index 100% rename from client/resources/trees/OBJ/DeadBirch_9.obj rename to packages/client/resources/trees/OBJ/DeadBirch_9.obj diff --git a/client/resources/trees/OBJ/DeadTree_1.mtl b/packages/client/resources/trees/OBJ/DeadTree_1.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_1.mtl rename to packages/client/resources/trees/OBJ/DeadTree_1.mtl diff --git a/client/resources/trees/OBJ/DeadTree_1.obj b/packages/client/resources/trees/OBJ/DeadTree_1.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_1.obj rename to packages/client/resources/trees/OBJ/DeadTree_1.obj diff --git a/client/resources/trees/OBJ/DeadTree_10.mtl b/packages/client/resources/trees/OBJ/DeadTree_10.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_10.mtl rename to packages/client/resources/trees/OBJ/DeadTree_10.mtl diff --git a/client/resources/trees/OBJ/DeadTree_10.obj b/packages/client/resources/trees/OBJ/DeadTree_10.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_10.obj rename to packages/client/resources/trees/OBJ/DeadTree_10.obj diff --git a/client/resources/trees/OBJ/DeadTree_2.mtl b/packages/client/resources/trees/OBJ/DeadTree_2.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_2.mtl rename to packages/client/resources/trees/OBJ/DeadTree_2.mtl diff --git a/client/resources/trees/OBJ/DeadTree_2.obj b/packages/client/resources/trees/OBJ/DeadTree_2.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_2.obj rename to packages/client/resources/trees/OBJ/DeadTree_2.obj diff --git a/client/resources/trees/OBJ/DeadTree_3.mtl b/packages/client/resources/trees/OBJ/DeadTree_3.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_3.mtl rename to packages/client/resources/trees/OBJ/DeadTree_3.mtl diff --git a/client/resources/trees/OBJ/DeadTree_3.obj b/packages/client/resources/trees/OBJ/DeadTree_3.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_3.obj rename to packages/client/resources/trees/OBJ/DeadTree_3.obj diff --git a/client/resources/trees/OBJ/DeadTree_4.mtl b/packages/client/resources/trees/OBJ/DeadTree_4.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_4.mtl rename to packages/client/resources/trees/OBJ/DeadTree_4.mtl diff --git a/client/resources/trees/OBJ/DeadTree_4.obj b/packages/client/resources/trees/OBJ/DeadTree_4.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_4.obj rename to packages/client/resources/trees/OBJ/DeadTree_4.obj diff --git a/client/resources/trees/OBJ/DeadTree_5.mtl b/packages/client/resources/trees/OBJ/DeadTree_5.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_5.mtl rename to packages/client/resources/trees/OBJ/DeadTree_5.mtl diff --git a/client/resources/trees/OBJ/DeadTree_5.obj b/packages/client/resources/trees/OBJ/DeadTree_5.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_5.obj rename to packages/client/resources/trees/OBJ/DeadTree_5.obj diff --git a/client/resources/trees/OBJ/DeadTree_6.mtl b/packages/client/resources/trees/OBJ/DeadTree_6.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_6.mtl rename to packages/client/resources/trees/OBJ/DeadTree_6.mtl diff --git a/client/resources/trees/OBJ/DeadTree_6.obj b/packages/client/resources/trees/OBJ/DeadTree_6.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_6.obj rename to packages/client/resources/trees/OBJ/DeadTree_6.obj diff --git a/client/resources/trees/OBJ/DeadTree_7.mtl b/packages/client/resources/trees/OBJ/DeadTree_7.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_7.mtl rename to packages/client/resources/trees/OBJ/DeadTree_7.mtl diff --git a/client/resources/trees/OBJ/DeadTree_7.obj b/packages/client/resources/trees/OBJ/DeadTree_7.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_7.obj rename to packages/client/resources/trees/OBJ/DeadTree_7.obj diff --git a/client/resources/trees/OBJ/DeadTree_8.mtl b/packages/client/resources/trees/OBJ/DeadTree_8.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_8.mtl rename to packages/client/resources/trees/OBJ/DeadTree_8.mtl diff --git a/client/resources/trees/OBJ/DeadTree_8.obj b/packages/client/resources/trees/OBJ/DeadTree_8.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_8.obj rename to packages/client/resources/trees/OBJ/DeadTree_8.obj diff --git a/client/resources/trees/OBJ/DeadTree_9.mtl b/packages/client/resources/trees/OBJ/DeadTree_9.mtl similarity index 100% rename from client/resources/trees/OBJ/DeadTree_9.mtl rename to packages/client/resources/trees/OBJ/DeadTree_9.mtl diff --git a/client/resources/trees/OBJ/DeadTree_9.obj b/packages/client/resources/trees/OBJ/DeadTree_9.obj similarity index 100% rename from client/resources/trees/OBJ/DeadTree_9.obj rename to packages/client/resources/trees/OBJ/DeadTree_9.obj diff --git a/client/resources/trees/OBJ/Pine_1.mtl b/packages/client/resources/trees/OBJ/Pine_1.mtl similarity index 100% rename from client/resources/trees/OBJ/Pine_1.mtl rename to packages/client/resources/trees/OBJ/Pine_1.mtl diff --git a/client/resources/trees/OBJ/Pine_1.obj b/packages/client/resources/trees/OBJ/Pine_1.obj similarity index 100% rename from client/resources/trees/OBJ/Pine_1.obj rename to packages/client/resources/trees/OBJ/Pine_1.obj diff --git a/client/resources/trees/OBJ/Pine_2.mtl b/packages/client/resources/trees/OBJ/Pine_2.mtl similarity index 100% rename from client/resources/trees/OBJ/Pine_2.mtl rename to packages/client/resources/trees/OBJ/Pine_2.mtl diff --git a/client/resources/trees/OBJ/Pine_2.obj b/packages/client/resources/trees/OBJ/Pine_2.obj similarity index 100% rename from client/resources/trees/OBJ/Pine_2.obj rename to packages/client/resources/trees/OBJ/Pine_2.obj diff --git a/client/resources/trees/OBJ/Pine_3.mtl b/packages/client/resources/trees/OBJ/Pine_3.mtl similarity index 100% rename from client/resources/trees/OBJ/Pine_3.mtl rename to packages/client/resources/trees/OBJ/Pine_3.mtl diff --git a/client/resources/trees/OBJ/Pine_3.obj b/packages/client/resources/trees/OBJ/Pine_3.obj similarity index 100% rename from client/resources/trees/OBJ/Pine_3.obj rename to packages/client/resources/trees/OBJ/Pine_3.obj diff --git a/client/resources/trees/OBJ/Pine_4.mtl b/packages/client/resources/trees/OBJ/Pine_4.mtl similarity index 100% rename from client/resources/trees/OBJ/Pine_4.mtl rename to packages/client/resources/trees/OBJ/Pine_4.mtl diff --git a/client/resources/trees/OBJ/Pine_4.obj b/packages/client/resources/trees/OBJ/Pine_4.obj similarity index 100% rename from client/resources/trees/OBJ/Pine_4.obj rename to packages/client/resources/trees/OBJ/Pine_4.obj diff --git a/client/resources/trees/OBJ/Pine_5.mtl b/packages/client/resources/trees/OBJ/Pine_5.mtl similarity index 100% rename from client/resources/trees/OBJ/Pine_5.mtl rename to packages/client/resources/trees/OBJ/Pine_5.mtl diff --git a/client/resources/trees/OBJ/Pine_5.obj b/packages/client/resources/trees/OBJ/Pine_5.obj similarity index 100% rename from client/resources/trees/OBJ/Pine_5.obj rename to packages/client/resources/trees/OBJ/Pine_5.obj diff --git a/client/resources/trees/OBJ/Tree_1.mtl b/packages/client/resources/trees/OBJ/Tree_1.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_1.mtl rename to packages/client/resources/trees/OBJ/Tree_1.mtl diff --git a/client/resources/trees/OBJ/Tree_1.obj b/packages/client/resources/trees/OBJ/Tree_1.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_1.obj rename to packages/client/resources/trees/OBJ/Tree_1.obj diff --git a/client/resources/trees/OBJ/Tree_10.mtl b/packages/client/resources/trees/OBJ/Tree_10.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_10.mtl rename to packages/client/resources/trees/OBJ/Tree_10.mtl diff --git a/client/resources/trees/OBJ/Tree_10.obj b/packages/client/resources/trees/OBJ/Tree_10.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_10.obj rename to packages/client/resources/trees/OBJ/Tree_10.obj diff --git a/client/resources/trees/OBJ/Tree_2.mtl b/packages/client/resources/trees/OBJ/Tree_2.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_2.mtl rename to packages/client/resources/trees/OBJ/Tree_2.mtl diff --git a/client/resources/trees/OBJ/Tree_2.obj b/packages/client/resources/trees/OBJ/Tree_2.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_2.obj rename to packages/client/resources/trees/OBJ/Tree_2.obj diff --git a/client/resources/trees/OBJ/Tree_3.mtl b/packages/client/resources/trees/OBJ/Tree_3.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_3.mtl rename to packages/client/resources/trees/OBJ/Tree_3.mtl diff --git a/client/resources/trees/OBJ/Tree_3.obj b/packages/client/resources/trees/OBJ/Tree_3.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_3.obj rename to packages/client/resources/trees/OBJ/Tree_3.obj diff --git a/client/resources/trees/OBJ/Tree_4.mtl b/packages/client/resources/trees/OBJ/Tree_4.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_4.mtl rename to packages/client/resources/trees/OBJ/Tree_4.mtl diff --git a/client/resources/trees/OBJ/Tree_4.obj b/packages/client/resources/trees/OBJ/Tree_4.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_4.obj rename to packages/client/resources/trees/OBJ/Tree_4.obj diff --git a/client/resources/trees/OBJ/Tree_5.mtl b/packages/client/resources/trees/OBJ/Tree_5.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_5.mtl rename to packages/client/resources/trees/OBJ/Tree_5.mtl diff --git a/client/resources/trees/OBJ/Tree_5.obj b/packages/client/resources/trees/OBJ/Tree_5.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_5.obj rename to packages/client/resources/trees/OBJ/Tree_5.obj diff --git a/client/resources/trees/OBJ/Tree_6.mtl b/packages/client/resources/trees/OBJ/Tree_6.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_6.mtl rename to packages/client/resources/trees/OBJ/Tree_6.mtl diff --git a/client/resources/trees/OBJ/Tree_6.obj b/packages/client/resources/trees/OBJ/Tree_6.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_6.obj rename to packages/client/resources/trees/OBJ/Tree_6.obj diff --git a/client/resources/trees/OBJ/Tree_7.mtl b/packages/client/resources/trees/OBJ/Tree_7.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_7.mtl rename to packages/client/resources/trees/OBJ/Tree_7.mtl diff --git a/client/resources/trees/OBJ/Tree_7.obj b/packages/client/resources/trees/OBJ/Tree_7.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_7.obj rename to packages/client/resources/trees/OBJ/Tree_7.obj diff --git a/client/resources/trees/OBJ/Tree_8.mtl b/packages/client/resources/trees/OBJ/Tree_8.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_8.mtl rename to packages/client/resources/trees/OBJ/Tree_8.mtl diff --git a/client/resources/trees/OBJ/Tree_8.obj b/packages/client/resources/trees/OBJ/Tree_8.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_8.obj rename to packages/client/resources/trees/OBJ/Tree_8.obj diff --git a/client/resources/trees/OBJ/Tree_9.mtl b/packages/client/resources/trees/OBJ/Tree_9.mtl similarity index 100% rename from client/resources/trees/OBJ/Tree_9.mtl rename to packages/client/resources/trees/OBJ/Tree_9.mtl diff --git a/client/resources/trees/OBJ/Tree_9.obj b/packages/client/resources/trees/OBJ/Tree_9.obj similarity index 100% rename from client/resources/trees/OBJ/Tree_9.obj rename to packages/client/resources/trees/OBJ/Tree_9.obj diff --git a/client/resources/trees/Preview.jpg b/packages/client/resources/trees/Preview.jpg similarity index 100% rename from client/resources/trees/Preview.jpg rename to packages/client/resources/trees/Preview.jpg diff --git a/client/resources/trees/Textures/Birch_Bark.png b/packages/client/resources/trees/Textures/Birch_Bark.png similarity index 100% rename from client/resources/trees/Textures/Birch_Bark.png rename to packages/client/resources/trees/Textures/Birch_Bark.png diff --git a/client/resources/trees/Textures/Birch_Leaves_Green.png b/packages/client/resources/trees/Textures/Birch_Leaves_Green.png similarity index 100% rename from client/resources/trees/Textures/Birch_Leaves_Green.png rename to packages/client/resources/trees/Textures/Birch_Leaves_Green.png diff --git a/client/resources/trees/Textures/Birch_Leaves_Yellow.png b/packages/client/resources/trees/Textures/Birch_Leaves_Yellow.png similarity index 100% rename from client/resources/trees/Textures/Birch_Leaves_Yellow.png rename to packages/client/resources/trees/Textures/Birch_Leaves_Yellow.png diff --git a/client/resources/trees/Textures/Color Variations/Bark_Dead.png b/packages/client/resources/trees/Textures/Color Variations/Bark_Dead.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Bark_Dead.png rename to packages/client/resources/trees/Textures/Color Variations/Bark_Dead.png diff --git a/client/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png b/packages/client/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png rename to packages/client/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png diff --git a/client/resources/trees/Textures/Color Variations/Leaves_Cyan.png b/packages/client/resources/trees/Textures/Color Variations/Leaves_Cyan.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Leaves_Cyan.png rename to packages/client/resources/trees/Textures/Color Variations/Leaves_Cyan.png diff --git a/client/resources/trees/Textures/Color Variations/Leaves_DarkRed.png b/packages/client/resources/trees/Textures/Color Variations/Leaves_DarkRed.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Leaves_DarkRed.png rename to packages/client/resources/trees/Textures/Color Variations/Leaves_DarkRed.png diff --git a/client/resources/trees/Textures/Color Variations/Leaves_Light.png b/packages/client/resources/trees/Textures/Color Variations/Leaves_Light.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Leaves_Light.png rename to packages/client/resources/trees/Textures/Color Variations/Leaves_Light.png diff --git a/client/resources/trees/Textures/Color Variations/Leaves_Orange.png b/packages/client/resources/trees/Textures/Color Variations/Leaves_Orange.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Leaves_Orange.png rename to packages/client/resources/trees/Textures/Color Variations/Leaves_Orange.png diff --git a/client/resources/trees/Textures/Color Variations/Leaves_Pink.png b/packages/client/resources/trees/Textures/Color Variations/Leaves_Pink.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Leaves_Pink.png rename to packages/client/resources/trees/Textures/Color Variations/Leaves_Pink.png diff --git a/client/resources/trees/Textures/Color Variations/Leaves_Purple.png b/packages/client/resources/trees/Textures/Color Variations/Leaves_Purple.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Leaves_Purple.png rename to packages/client/resources/trees/Textures/Color Variations/Leaves_Purple.png diff --git a/client/resources/trees/Textures/Color Variations/Leaves_Red.png b/packages/client/resources/trees/Textures/Color Variations/Leaves_Red.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Leaves_Red.png rename to packages/client/resources/trees/Textures/Color Variations/Leaves_Red.png diff --git a/client/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png b/packages/client/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png rename to packages/client/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png diff --git a/client/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png b/packages/client/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png similarity index 100% rename from client/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png rename to packages/client/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png diff --git a/client/resources/trees/Textures/Leaves_Blue.png b/packages/client/resources/trees/Textures/Leaves_Blue.png similarity index 100% rename from client/resources/trees/Textures/Leaves_Blue.png rename to packages/client/resources/trees/Textures/Leaves_Blue.png diff --git a/client/resources/trees/Textures/Pine_Leaves.png b/packages/client/resources/trees/Textures/Pine_Leaves.png similarity index 100% rename from client/resources/trees/Textures/Pine_Leaves.png rename to packages/client/resources/trees/Textures/Pine_Leaves.png diff --git a/client/resources/trees/Textures/Tree_Bark.jpg b/packages/client/resources/trees/Textures/Tree_Bark.jpg similarity index 100% rename from client/resources/trees/Textures/Tree_Bark.jpg rename to packages/client/resources/trees/Textures/Tree_Bark.jpg diff --git a/client/resources/trees/Textures/Tree_Leaves.png b/packages/client/resources/trees/Textures/Tree_Leaves.png similarity index 100% rename from client/resources/trees/Textures/Tree_Leaves.png rename to packages/client/resources/trees/Textures/Tree_Leaves.png diff --git a/client/resources/weapons/Blends/Arrow.blend b/packages/client/resources/weapons/Blends/Arrow.blend similarity index 100% rename from client/resources/weapons/Blends/Arrow.blend rename to packages/client/resources/weapons/Blends/Arrow.blend diff --git a/client/resources/weapons/Blends/Axe.blend b/packages/client/resources/weapons/Blends/Axe.blend similarity index 100% rename from client/resources/weapons/Blends/Axe.blend rename to packages/client/resources/weapons/Blends/Axe.blend diff --git a/client/resources/weapons/Blends/Axe_Double.blend b/packages/client/resources/weapons/Blends/Axe_Double.blend similarity index 100% rename from client/resources/weapons/Blends/Axe_Double.blend rename to packages/client/resources/weapons/Blends/Axe_Double.blend diff --git a/client/resources/weapons/Blends/Axe_Small.blend b/packages/client/resources/weapons/Blends/Axe_Small.blend similarity index 100% rename from client/resources/weapons/Blends/Axe_Small.blend rename to packages/client/resources/weapons/Blends/Axe_Small.blend diff --git a/client/resources/weapons/Blends/Bow_Evil.blend b/packages/client/resources/weapons/Blends/Bow_Evil.blend similarity index 100% rename from client/resources/weapons/Blends/Bow_Evil.blend rename to packages/client/resources/weapons/Blends/Bow_Evil.blend diff --git a/client/resources/weapons/Blends/Bow_Golden.blend b/packages/client/resources/weapons/Blends/Bow_Golden.blend similarity index 100% rename from client/resources/weapons/Blends/Bow_Golden.blend rename to packages/client/resources/weapons/Blends/Bow_Golden.blend diff --git a/client/resources/weapons/Blends/Bow_Wooden.blend b/packages/client/resources/weapons/Blends/Bow_Wooden.blend similarity index 100% rename from client/resources/weapons/Blends/Bow_Wooden.blend rename to packages/client/resources/weapons/Blends/Bow_Wooden.blend diff --git a/client/resources/weapons/Blends/Bow_Wooden2.blend b/packages/client/resources/weapons/Blends/Bow_Wooden2.blend similarity index 100% rename from client/resources/weapons/Blends/Bow_Wooden2.blend rename to packages/client/resources/weapons/Blends/Bow_Wooden2.blend diff --git a/client/resources/weapons/Blends/Claymore.blend b/packages/client/resources/weapons/Blends/Claymore.blend similarity index 100% rename from client/resources/weapons/Blends/Claymore.blend rename to packages/client/resources/weapons/Blends/Claymore.blend diff --git a/client/resources/weapons/Blends/Dagger.blend b/packages/client/resources/weapons/Blends/Dagger.blend similarity index 100% rename from client/resources/weapons/Blends/Dagger.blend rename to packages/client/resources/weapons/Blends/Dagger.blend diff --git a/client/resources/weapons/Blends/Dagger_2.blend b/packages/client/resources/weapons/Blends/Dagger_2.blend similarity index 100% rename from client/resources/weapons/Blends/Dagger_2.blend rename to packages/client/resources/weapons/Blends/Dagger_2.blend diff --git a/client/resources/weapons/Blends/Hammer_Double.blend b/packages/client/resources/weapons/Blends/Hammer_Double.blend similarity index 100% rename from client/resources/weapons/Blends/Hammer_Double.blend rename to packages/client/resources/weapons/Blends/Hammer_Double.blend diff --git a/client/resources/weapons/Blends/Hammer_Small.blend b/packages/client/resources/weapons/Blends/Hammer_Small.blend similarity index 100% rename from client/resources/weapons/Blends/Hammer_Small.blend rename to packages/client/resources/weapons/Blends/Hammer_Small.blend diff --git a/client/resources/weapons/Blends/Scythe.blend b/packages/client/resources/weapons/Blends/Scythe.blend similarity index 100% rename from client/resources/weapons/Blends/Scythe.blend rename to packages/client/resources/weapons/Blends/Scythe.blend diff --git a/client/resources/weapons/Blends/Shield_Celtic_Golden.blend b/packages/client/resources/weapons/Blends/Shield_Celtic_Golden.blend similarity index 100% rename from client/resources/weapons/Blends/Shield_Celtic_Golden.blend rename to packages/client/resources/weapons/Blends/Shield_Celtic_Golden.blend diff --git a/client/resources/weapons/Blends/Shield_Heater.blend b/packages/client/resources/weapons/Blends/Shield_Heater.blend similarity index 100% rename from client/resources/weapons/Blends/Shield_Heater.blend rename to packages/client/resources/weapons/Blends/Shield_Heater.blend diff --git a/client/resources/weapons/Blends/Shield_Heater_2.blend b/packages/client/resources/weapons/Blends/Shield_Heater_2.blend similarity index 100% rename from client/resources/weapons/Blends/Shield_Heater_2.blend rename to packages/client/resources/weapons/Blends/Shield_Heater_2.blend diff --git a/client/resources/weapons/Blends/Shield_Round.blend b/packages/client/resources/weapons/Blends/Shield_Round.blend similarity index 100% rename from client/resources/weapons/Blends/Shield_Round.blend rename to packages/client/resources/weapons/Blends/Shield_Round.blend diff --git a/client/resources/weapons/Blends/Shield_Round_2.blend b/packages/client/resources/weapons/Blends/Shield_Round_2.blend similarity index 100% rename from client/resources/weapons/Blends/Shield_Round_2.blend rename to packages/client/resources/weapons/Blends/Shield_Round_2.blend diff --git a/client/resources/weapons/Blends/Spear.blend b/packages/client/resources/weapons/Blends/Spear.blend similarity index 100% rename from client/resources/weapons/Blends/Spear.blend rename to packages/client/resources/weapons/Blends/Spear.blend diff --git a/client/resources/weapons/Blends/Sword.blend b/packages/client/resources/weapons/Blends/Sword.blend similarity index 100% rename from client/resources/weapons/Blends/Sword.blend rename to packages/client/resources/weapons/Blends/Sword.blend diff --git a/client/resources/weapons/Blends/Sword_2.blend b/packages/client/resources/weapons/Blends/Sword_2.blend similarity index 100% rename from client/resources/weapons/Blends/Sword_2.blend rename to packages/client/resources/weapons/Blends/Sword_2.blend diff --git a/client/resources/weapons/Blends/Sword_Big.blend b/packages/client/resources/weapons/Blends/Sword_Big.blend similarity index 100% rename from client/resources/weapons/Blends/Sword_Big.blend rename to packages/client/resources/weapons/Blends/Sword_Big.blend diff --git a/client/resources/weapons/Blends/Sword_Golden.blend b/packages/client/resources/weapons/Blends/Sword_Golden.blend similarity index 100% rename from client/resources/weapons/Blends/Sword_Golden.blend rename to packages/client/resources/weapons/Blends/Sword_Golden.blend diff --git a/client/resources/weapons/FBX/Arrow.fbx b/packages/client/resources/weapons/FBX/Arrow.fbx similarity index 100% rename from client/resources/weapons/FBX/Arrow.fbx rename to packages/client/resources/weapons/FBX/Arrow.fbx diff --git a/client/resources/weapons/FBX/Axe.fbx b/packages/client/resources/weapons/FBX/Axe.fbx similarity index 100% rename from client/resources/weapons/FBX/Axe.fbx rename to packages/client/resources/weapons/FBX/Axe.fbx diff --git a/client/resources/weapons/FBX/Axe_Double.fbx b/packages/client/resources/weapons/FBX/Axe_Double.fbx similarity index 100% rename from client/resources/weapons/FBX/Axe_Double.fbx rename to packages/client/resources/weapons/FBX/Axe_Double.fbx diff --git a/client/resources/weapons/FBX/Axe_Small.fbx b/packages/client/resources/weapons/FBX/Axe_Small.fbx similarity index 100% rename from client/resources/weapons/FBX/Axe_Small.fbx rename to packages/client/resources/weapons/FBX/Axe_Small.fbx diff --git a/client/resources/weapons/FBX/Bow_Evil.fbx b/packages/client/resources/weapons/FBX/Bow_Evil.fbx similarity index 100% rename from client/resources/weapons/FBX/Bow_Evil.fbx rename to packages/client/resources/weapons/FBX/Bow_Evil.fbx diff --git a/client/resources/weapons/FBX/Bow_Golden.fbx b/packages/client/resources/weapons/FBX/Bow_Golden.fbx similarity index 100% rename from client/resources/weapons/FBX/Bow_Golden.fbx rename to packages/client/resources/weapons/FBX/Bow_Golden.fbx diff --git a/client/resources/weapons/FBX/Bow_Wooden.fbx b/packages/client/resources/weapons/FBX/Bow_Wooden.fbx similarity index 100% rename from client/resources/weapons/FBX/Bow_Wooden.fbx rename to packages/client/resources/weapons/FBX/Bow_Wooden.fbx diff --git a/client/resources/weapons/FBX/Bow_Wooden2.fbx b/packages/client/resources/weapons/FBX/Bow_Wooden2.fbx similarity index 100% rename from client/resources/weapons/FBX/Bow_Wooden2.fbx rename to packages/client/resources/weapons/FBX/Bow_Wooden2.fbx diff --git a/client/resources/weapons/FBX/Claymore.fbx b/packages/client/resources/weapons/FBX/Claymore.fbx similarity index 100% rename from client/resources/weapons/FBX/Claymore.fbx rename to packages/client/resources/weapons/FBX/Claymore.fbx diff --git a/client/resources/weapons/FBX/Dagger.fbx b/packages/client/resources/weapons/FBX/Dagger.fbx similarity index 100% rename from client/resources/weapons/FBX/Dagger.fbx rename to packages/client/resources/weapons/FBX/Dagger.fbx diff --git a/client/resources/weapons/FBX/Dagger_2.fbx b/packages/client/resources/weapons/FBX/Dagger_2.fbx similarity index 100% rename from client/resources/weapons/FBX/Dagger_2.fbx rename to packages/client/resources/weapons/FBX/Dagger_2.fbx diff --git a/client/resources/weapons/FBX/Hammer_Double.fbx b/packages/client/resources/weapons/FBX/Hammer_Double.fbx similarity index 100% rename from client/resources/weapons/FBX/Hammer_Double.fbx rename to packages/client/resources/weapons/FBX/Hammer_Double.fbx diff --git a/client/resources/weapons/FBX/Hammer_Small.fbx b/packages/client/resources/weapons/FBX/Hammer_Small.fbx similarity index 100% rename from client/resources/weapons/FBX/Hammer_Small.fbx rename to packages/client/resources/weapons/FBX/Hammer_Small.fbx diff --git a/client/resources/weapons/FBX/Scythe.fbx b/packages/client/resources/weapons/FBX/Scythe.fbx similarity index 100% rename from client/resources/weapons/FBX/Scythe.fbx rename to packages/client/resources/weapons/FBX/Scythe.fbx diff --git a/client/resources/weapons/FBX/Shield_Celtic_Golden.fbx b/packages/client/resources/weapons/FBX/Shield_Celtic_Golden.fbx similarity index 100% rename from client/resources/weapons/FBX/Shield_Celtic_Golden.fbx rename to packages/client/resources/weapons/FBX/Shield_Celtic_Golden.fbx diff --git a/client/resources/weapons/FBX/Shield_Heater.fbx b/packages/client/resources/weapons/FBX/Shield_Heater.fbx similarity index 100% rename from client/resources/weapons/FBX/Shield_Heater.fbx rename to packages/client/resources/weapons/FBX/Shield_Heater.fbx diff --git a/client/resources/weapons/FBX/Shield_Heater_2.fbx b/packages/client/resources/weapons/FBX/Shield_Heater_2.fbx similarity index 100% rename from client/resources/weapons/FBX/Shield_Heater_2.fbx rename to packages/client/resources/weapons/FBX/Shield_Heater_2.fbx diff --git a/client/resources/weapons/FBX/Shield_Round.fbx b/packages/client/resources/weapons/FBX/Shield_Round.fbx similarity index 100% rename from client/resources/weapons/FBX/Shield_Round.fbx rename to packages/client/resources/weapons/FBX/Shield_Round.fbx diff --git a/client/resources/weapons/FBX/Shield_Round_2.fbx b/packages/client/resources/weapons/FBX/Shield_Round_2.fbx similarity index 100% rename from client/resources/weapons/FBX/Shield_Round_2.fbx rename to packages/client/resources/weapons/FBX/Shield_Round_2.fbx diff --git a/client/resources/weapons/FBX/Spear.fbx b/packages/client/resources/weapons/FBX/Spear.fbx similarity index 100% rename from client/resources/weapons/FBX/Spear.fbx rename to packages/client/resources/weapons/FBX/Spear.fbx diff --git a/client/resources/weapons/FBX/Sword.fbx b/packages/client/resources/weapons/FBX/Sword.fbx similarity index 100% rename from client/resources/weapons/FBX/Sword.fbx rename to packages/client/resources/weapons/FBX/Sword.fbx diff --git a/client/resources/weapons/FBX/Sword_2.fbx b/packages/client/resources/weapons/FBX/Sword_2.fbx similarity index 100% rename from client/resources/weapons/FBX/Sword_2.fbx rename to packages/client/resources/weapons/FBX/Sword_2.fbx diff --git a/client/resources/weapons/FBX/Sword_Big.fbx b/packages/client/resources/weapons/FBX/Sword_Big.fbx similarity index 100% rename from client/resources/weapons/FBX/Sword_Big.fbx rename to packages/client/resources/weapons/FBX/Sword_Big.fbx diff --git a/client/resources/weapons/FBX/Sword_Golden.fbx b/packages/client/resources/weapons/FBX/Sword_Golden.fbx similarity index 100% rename from client/resources/weapons/FBX/Sword_Golden.fbx rename to packages/client/resources/weapons/FBX/Sword_Golden.fbx diff --git a/client/resources/weapons/License.txt b/packages/client/resources/weapons/License.txt similarity index 100% rename from client/resources/weapons/License.txt rename to packages/client/resources/weapons/License.txt diff --git a/client/resources/weapons/OBJ/Arrow.mtl b/packages/client/resources/weapons/OBJ/Arrow.mtl similarity index 100% rename from client/resources/weapons/OBJ/Arrow.mtl rename to packages/client/resources/weapons/OBJ/Arrow.mtl diff --git a/client/resources/weapons/OBJ/Arrow.obj b/packages/client/resources/weapons/OBJ/Arrow.obj similarity index 100% rename from client/resources/weapons/OBJ/Arrow.obj rename to packages/client/resources/weapons/OBJ/Arrow.obj diff --git a/client/resources/weapons/OBJ/Axe.mtl b/packages/client/resources/weapons/OBJ/Axe.mtl similarity index 100% rename from client/resources/weapons/OBJ/Axe.mtl rename to packages/client/resources/weapons/OBJ/Axe.mtl diff --git a/client/resources/weapons/OBJ/Axe.obj b/packages/client/resources/weapons/OBJ/Axe.obj similarity index 100% rename from client/resources/weapons/OBJ/Axe.obj rename to packages/client/resources/weapons/OBJ/Axe.obj diff --git a/client/resources/weapons/OBJ/Axe_Double.mtl b/packages/client/resources/weapons/OBJ/Axe_Double.mtl similarity index 100% rename from client/resources/weapons/OBJ/Axe_Double.mtl rename to packages/client/resources/weapons/OBJ/Axe_Double.mtl diff --git a/client/resources/weapons/OBJ/Axe_Double.obj b/packages/client/resources/weapons/OBJ/Axe_Double.obj similarity index 100% rename from client/resources/weapons/OBJ/Axe_Double.obj rename to packages/client/resources/weapons/OBJ/Axe_Double.obj diff --git a/client/resources/weapons/OBJ/Axe_Small.mtl b/packages/client/resources/weapons/OBJ/Axe_Small.mtl similarity index 100% rename from client/resources/weapons/OBJ/Axe_Small.mtl rename to packages/client/resources/weapons/OBJ/Axe_Small.mtl diff --git a/client/resources/weapons/OBJ/Axe_Small.obj b/packages/client/resources/weapons/OBJ/Axe_Small.obj similarity index 100% rename from client/resources/weapons/OBJ/Axe_Small.obj rename to packages/client/resources/weapons/OBJ/Axe_Small.obj diff --git a/client/resources/weapons/OBJ/Bow_Evil.mtl b/packages/client/resources/weapons/OBJ/Bow_Evil.mtl similarity index 100% rename from client/resources/weapons/OBJ/Bow_Evil.mtl rename to packages/client/resources/weapons/OBJ/Bow_Evil.mtl diff --git a/client/resources/weapons/OBJ/Bow_Evil.obj b/packages/client/resources/weapons/OBJ/Bow_Evil.obj similarity index 100% rename from client/resources/weapons/OBJ/Bow_Evil.obj rename to packages/client/resources/weapons/OBJ/Bow_Evil.obj diff --git a/client/resources/weapons/OBJ/Bow_Golden.mtl b/packages/client/resources/weapons/OBJ/Bow_Golden.mtl similarity index 100% rename from client/resources/weapons/OBJ/Bow_Golden.mtl rename to packages/client/resources/weapons/OBJ/Bow_Golden.mtl diff --git a/client/resources/weapons/OBJ/Bow_Golden.obj b/packages/client/resources/weapons/OBJ/Bow_Golden.obj similarity index 100% rename from client/resources/weapons/OBJ/Bow_Golden.obj rename to packages/client/resources/weapons/OBJ/Bow_Golden.obj diff --git a/client/resources/weapons/OBJ/Bow_Wooden.mtl b/packages/client/resources/weapons/OBJ/Bow_Wooden.mtl similarity index 100% rename from client/resources/weapons/OBJ/Bow_Wooden.mtl rename to packages/client/resources/weapons/OBJ/Bow_Wooden.mtl diff --git a/client/resources/weapons/OBJ/Bow_Wooden.obj b/packages/client/resources/weapons/OBJ/Bow_Wooden.obj similarity index 100% rename from client/resources/weapons/OBJ/Bow_Wooden.obj rename to packages/client/resources/weapons/OBJ/Bow_Wooden.obj diff --git a/client/resources/weapons/OBJ/Bow_Wooden2.mtl b/packages/client/resources/weapons/OBJ/Bow_Wooden2.mtl similarity index 100% rename from client/resources/weapons/OBJ/Bow_Wooden2.mtl rename to packages/client/resources/weapons/OBJ/Bow_Wooden2.mtl diff --git a/client/resources/weapons/OBJ/Bow_Wooden2.obj b/packages/client/resources/weapons/OBJ/Bow_Wooden2.obj similarity index 100% rename from client/resources/weapons/OBJ/Bow_Wooden2.obj rename to packages/client/resources/weapons/OBJ/Bow_Wooden2.obj diff --git a/client/resources/weapons/OBJ/Claymore.mtl b/packages/client/resources/weapons/OBJ/Claymore.mtl similarity index 100% rename from client/resources/weapons/OBJ/Claymore.mtl rename to packages/client/resources/weapons/OBJ/Claymore.mtl diff --git a/client/resources/weapons/OBJ/Claymore.obj b/packages/client/resources/weapons/OBJ/Claymore.obj similarity index 100% rename from client/resources/weapons/OBJ/Claymore.obj rename to packages/client/resources/weapons/OBJ/Claymore.obj diff --git a/client/resources/weapons/OBJ/Dagger.mtl b/packages/client/resources/weapons/OBJ/Dagger.mtl similarity index 100% rename from client/resources/weapons/OBJ/Dagger.mtl rename to packages/client/resources/weapons/OBJ/Dagger.mtl diff --git a/client/resources/weapons/OBJ/Dagger.obj b/packages/client/resources/weapons/OBJ/Dagger.obj similarity index 100% rename from client/resources/weapons/OBJ/Dagger.obj rename to packages/client/resources/weapons/OBJ/Dagger.obj diff --git a/client/resources/weapons/OBJ/Dagger_2.mtl b/packages/client/resources/weapons/OBJ/Dagger_2.mtl similarity index 100% rename from client/resources/weapons/OBJ/Dagger_2.mtl rename to packages/client/resources/weapons/OBJ/Dagger_2.mtl diff --git a/client/resources/weapons/OBJ/Dagger_2.obj b/packages/client/resources/weapons/OBJ/Dagger_2.obj similarity index 100% rename from client/resources/weapons/OBJ/Dagger_2.obj rename to packages/client/resources/weapons/OBJ/Dagger_2.obj diff --git a/client/resources/weapons/OBJ/Hammer_Double.mtl b/packages/client/resources/weapons/OBJ/Hammer_Double.mtl similarity index 100% rename from client/resources/weapons/OBJ/Hammer_Double.mtl rename to packages/client/resources/weapons/OBJ/Hammer_Double.mtl diff --git a/client/resources/weapons/OBJ/Hammer_Double.obj b/packages/client/resources/weapons/OBJ/Hammer_Double.obj similarity index 100% rename from client/resources/weapons/OBJ/Hammer_Double.obj rename to packages/client/resources/weapons/OBJ/Hammer_Double.obj diff --git a/client/resources/weapons/OBJ/Hammer_Small.mtl b/packages/client/resources/weapons/OBJ/Hammer_Small.mtl similarity index 100% rename from client/resources/weapons/OBJ/Hammer_Small.mtl rename to packages/client/resources/weapons/OBJ/Hammer_Small.mtl diff --git a/client/resources/weapons/OBJ/Hammer_Small.obj b/packages/client/resources/weapons/OBJ/Hammer_Small.obj similarity index 100% rename from client/resources/weapons/OBJ/Hammer_Small.obj rename to packages/client/resources/weapons/OBJ/Hammer_Small.obj diff --git a/client/resources/weapons/OBJ/Scythe.mtl b/packages/client/resources/weapons/OBJ/Scythe.mtl similarity index 100% rename from client/resources/weapons/OBJ/Scythe.mtl rename to packages/client/resources/weapons/OBJ/Scythe.mtl diff --git a/client/resources/weapons/OBJ/Scythe.obj b/packages/client/resources/weapons/OBJ/Scythe.obj similarity index 100% rename from client/resources/weapons/OBJ/Scythe.obj rename to packages/client/resources/weapons/OBJ/Scythe.obj diff --git a/client/resources/weapons/OBJ/Shield_Celtic_Golden.mtl b/packages/client/resources/weapons/OBJ/Shield_Celtic_Golden.mtl similarity index 100% rename from client/resources/weapons/OBJ/Shield_Celtic_Golden.mtl rename to packages/client/resources/weapons/OBJ/Shield_Celtic_Golden.mtl diff --git a/client/resources/weapons/OBJ/Shield_Celtic_Golden.obj b/packages/client/resources/weapons/OBJ/Shield_Celtic_Golden.obj similarity index 100% rename from client/resources/weapons/OBJ/Shield_Celtic_Golden.obj rename to packages/client/resources/weapons/OBJ/Shield_Celtic_Golden.obj diff --git a/client/resources/weapons/OBJ/Shield_Heater.mtl b/packages/client/resources/weapons/OBJ/Shield_Heater.mtl similarity index 100% rename from client/resources/weapons/OBJ/Shield_Heater.mtl rename to packages/client/resources/weapons/OBJ/Shield_Heater.mtl diff --git a/client/resources/weapons/OBJ/Shield_Heater.obj b/packages/client/resources/weapons/OBJ/Shield_Heater.obj similarity index 100% rename from client/resources/weapons/OBJ/Shield_Heater.obj rename to packages/client/resources/weapons/OBJ/Shield_Heater.obj diff --git a/client/resources/weapons/OBJ/Shield_Heater_2.mtl b/packages/client/resources/weapons/OBJ/Shield_Heater_2.mtl similarity index 100% rename from client/resources/weapons/OBJ/Shield_Heater_2.mtl rename to packages/client/resources/weapons/OBJ/Shield_Heater_2.mtl diff --git a/client/resources/weapons/OBJ/Shield_Heater_2.obj b/packages/client/resources/weapons/OBJ/Shield_Heater_2.obj similarity index 100% rename from client/resources/weapons/OBJ/Shield_Heater_2.obj rename to packages/client/resources/weapons/OBJ/Shield_Heater_2.obj diff --git a/client/resources/weapons/OBJ/Shield_Round.mtl b/packages/client/resources/weapons/OBJ/Shield_Round.mtl similarity index 100% rename from client/resources/weapons/OBJ/Shield_Round.mtl rename to packages/client/resources/weapons/OBJ/Shield_Round.mtl diff --git a/client/resources/weapons/OBJ/Shield_Round.obj b/packages/client/resources/weapons/OBJ/Shield_Round.obj similarity index 100% rename from client/resources/weapons/OBJ/Shield_Round.obj rename to packages/client/resources/weapons/OBJ/Shield_Round.obj diff --git a/client/resources/weapons/OBJ/Shield_Round_2.mtl b/packages/client/resources/weapons/OBJ/Shield_Round_2.mtl similarity index 100% rename from client/resources/weapons/OBJ/Shield_Round_2.mtl rename to packages/client/resources/weapons/OBJ/Shield_Round_2.mtl diff --git a/client/resources/weapons/OBJ/Shield_Round_2.obj b/packages/client/resources/weapons/OBJ/Shield_Round_2.obj similarity index 100% rename from client/resources/weapons/OBJ/Shield_Round_2.obj rename to packages/client/resources/weapons/OBJ/Shield_Round_2.obj diff --git a/client/resources/weapons/OBJ/Spear.mtl b/packages/client/resources/weapons/OBJ/Spear.mtl similarity index 100% rename from client/resources/weapons/OBJ/Spear.mtl rename to packages/client/resources/weapons/OBJ/Spear.mtl diff --git a/client/resources/weapons/OBJ/Spear.obj b/packages/client/resources/weapons/OBJ/Spear.obj similarity index 100% rename from client/resources/weapons/OBJ/Spear.obj rename to packages/client/resources/weapons/OBJ/Spear.obj diff --git a/client/resources/weapons/OBJ/Sword.mtl b/packages/client/resources/weapons/OBJ/Sword.mtl similarity index 100% rename from client/resources/weapons/OBJ/Sword.mtl rename to packages/client/resources/weapons/OBJ/Sword.mtl diff --git a/client/resources/weapons/OBJ/Sword.obj b/packages/client/resources/weapons/OBJ/Sword.obj similarity index 100% rename from client/resources/weapons/OBJ/Sword.obj rename to packages/client/resources/weapons/OBJ/Sword.obj diff --git a/client/resources/weapons/OBJ/Sword_2.mtl b/packages/client/resources/weapons/OBJ/Sword_2.mtl similarity index 100% rename from client/resources/weapons/OBJ/Sword_2.mtl rename to packages/client/resources/weapons/OBJ/Sword_2.mtl diff --git a/client/resources/weapons/OBJ/Sword_2.obj b/packages/client/resources/weapons/OBJ/Sword_2.obj similarity index 100% rename from client/resources/weapons/OBJ/Sword_2.obj rename to packages/client/resources/weapons/OBJ/Sword_2.obj diff --git a/client/resources/weapons/OBJ/Sword_Big.mtl b/packages/client/resources/weapons/OBJ/Sword_Big.mtl similarity index 100% rename from client/resources/weapons/OBJ/Sword_Big.mtl rename to packages/client/resources/weapons/OBJ/Sword_Big.mtl diff --git a/client/resources/weapons/OBJ/Sword_Big.obj b/packages/client/resources/weapons/OBJ/Sword_Big.obj similarity index 100% rename from client/resources/weapons/OBJ/Sword_Big.obj rename to packages/client/resources/weapons/OBJ/Sword_Big.obj diff --git a/client/resources/weapons/OBJ/Sword_Golden.mtl b/packages/client/resources/weapons/OBJ/Sword_Golden.mtl similarity index 100% rename from client/resources/weapons/OBJ/Sword_Golden.mtl rename to packages/client/resources/weapons/OBJ/Sword_Golden.mtl diff --git a/client/resources/weapons/OBJ/Sword_Golden.obj b/packages/client/resources/weapons/OBJ/Sword_Golden.obj similarity index 100% rename from client/resources/weapons/OBJ/Sword_Golden.obj rename to packages/client/resources/weapons/OBJ/Sword_Golden.obj diff --git a/client/resources/weapons/Preview.png b/packages/client/resources/weapons/Preview.png similarity index 100% rename from client/resources/weapons/Preview.png rename to packages/client/resources/weapons/Preview.png diff --git a/client/src/attacker-controller.ts b/packages/client/src/attacker-controller.ts similarity index 77% rename from client/src/attacker-controller.ts rename to packages/client/src/attacker-controller.ts index 88f4456c..f18ac8e4 100644 --- a/client/src/attacker-controller.ts +++ b/packages/client/src/attacker-controller.ts @@ -1,7 +1,9 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { EVENT_TYPES } from 'shared/src/constants' +import { Constants } from 'shared' +const { EVENT_TYPES } = { ...Constants }; + class AttackController extends Component { action_: any; @@ -11,7 +13,7 @@ class AttackController extends Component { } InitComponent() { - this._RegisterHandler(EVENT_TYPES.PLAYER_ACTION, (m: { action: EVENT_TYPES }) => { this._OnAnimAction(m); }); + this._RegisterHandler(EVENT_TYPES.PLAYER_ACTION, (m: { action: typeof EVENT_TYPES }) => { this._OnAnimAction(m); }); } _OnAnimAction(m) { diff --git a/packages/client/src/blood-effect.ts b/packages/client/src/blood-effect.ts new file mode 100644 index 00000000..4a95cf1f --- /dev/null +++ b/packages/client/src/blood-effect.ts @@ -0,0 +1,244 @@ +import * as THREE from 'three'; + +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; +import { Constants } from 'shared'; + +const { CLASS_TYPES_ENUM, EVENT_TYPES, STATE_TYPES } = Constants; + +class BloodEffectEmitter extends ParticleEmitter { + parent_: any; + blend_: number; + emitterLife_: number; + alphaSpline_: any; + colourSpline_: any; + sizeSpline_: any; + constructor(parent) { + super(); + this.parent_ = parent; + this.blend_ = 0.0; + } + + OnUpdate_() { + this.parent_.updateMatrixWorld(true); + + this.SetEmissionRate(300.0 * (this.emitterLife_ / 3.0)); + } + + CreateParticle_() { + const origin = new THREE.Vector3(0, 0, 0); + this.parent_.localToWorld(origin); + + const radius = 1.0; + const life = (Math.random() * 0.75 + 0.25) * 0.5; + const p = new THREE.Vector3( + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius); + + const d = p.clone().normalize(); + p.copy(d); + p.multiplyScalar(radius); + p.add(origin); + d.multiplyScalar(0.0); + + return { + position: p, + size: (Math.random() * 0.5 + 0.5) * 1.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: d, + blend: this.blend_, + }; + } +}; + + +class FireFXEmitter extends ParticleEmitter { + parent_: any; + blend_: number; + particles_: any; + alphaSpline_: any; + colourSpline_: any; + sizeSpline_: any; + constructor(parent) { + super(); + this.parent_ = parent; + this.blend_ = 0.0; + } + + OnUpdate_() { + this.parent_.updateMatrixWorld(true); + } + + AddParticles(num) { + for (let i = 0; i < num; ++i) { + this.particles_.push(this.CreateParticle_()); + } + } + + CreateParticle_() { + const origin = new THREE.Vector3(0, 0, 0); + this.parent_.localToWorld(origin); + + const radius = 1.0; + const life = (Math.random() * 0.75 + 0.25) * 1.5; + const p = new THREE.Vector3( + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius, + (Math.random() * 2 - 1) * radius); + + const d = p.clone().normalize(); + p.copy(d); + p.multiplyScalar(radius); + p.add(origin); + d.multiplyScalar(3.0); + + return { + position: p, + size: (Math.random() * 0.5 + 0.5) * 1.0, + colour: new THREE.Color(), + alpha: 1.0, + life: life, + maxLife: life, + rotation: Math.random() * 2.0 * Math.PI, + velocity: d, + blend: this.blend_, + }; + } +}; + + +class BloodEffect extends Component { + params_: any; + bloodFX_: ParticleSystem; + fireFX_: ParticleSystem; + bones_: any; + constructor(params) { + super(); + this.params_ = params; + + this.bloodFX_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/whitePuff14.png', + }); + this.fireFX_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './resources/textures/fire.png', + }); + } + + Destroy() { + this.bloodFX_.Destroy(); + this.fireFX_.Destroy(); + } + + InitComponent() { + this._RegisterHandler(EVENT_TYPES.EVENTS_NETWORK, (m) => { this.OnEvents_(m); }); + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this.OnCharacterLoaded_(m)); + } + + OnCharacterLoaded_(msg) { + this.bones_ = msg.bones; + } + + OnEvents_(msg) { + if (!this.bones_) { + return; + } + + for (let e of msg.value) { + if (e.type != STATE_TYPES.ATTACK) { + continue; + } + + // Another hack + const hc = e.attacker.GetComponent('HealthComponent'); + + if (hc.stats_.desc.character.class != CLASS_TYPES_ENUM.SORCEROR) { + this.EmitBloodFX_(); + } else { + this.EmitFireFX_(); + } + } + } + + EmitFireFX_() { + // dem hips + const targets = ['Head', 'Hips']; + for (let t of targets) { + const b = this.bones_[t]; + let emitter = new FireFXEmitter(b); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.5, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x00FF00)); + emitter.colourSpline_.AddPoint(0.3, new THREE.Color(0x00FF00)); + emitter.colourSpline_.AddPoint(0.4, new THREE.Color(0xdeec42)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0xf4a776)); + + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(0.5, 3.0); + emitter.sizeSpline_.AddPoint(1.0, 0.5); + emitter.blend_ = 0.0; + emitter.AddParticles(200); + + this.fireFX_.AddEmitter(emitter); + + emitter = new FireFXEmitter(b); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.7, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0x000000)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x000000)); + + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(0.5, 4.0); + emitter.sizeSpline_.AddPoint(1.0, 10.0); + emitter.blend_ = 1.0; + emitter.AddParticles(100); + + this.fireFX_.AddEmitter(emitter); + } + } + + EmitBloodFX_() { + // hack shoudl check if this was legit anything else than damage + const targets = ['Head', 'Hips']; + for (let t of targets) { + const b = this.bones_[t]; + const emitter = new BloodEffectEmitter(b); + emitter.alphaSpline_.AddPoint(0.0, 0.0); + emitter.alphaSpline_.AddPoint(0.7, 1.0); + emitter.alphaSpline_.AddPoint(1.0, 0.0); + + emitter.colourSpline_.AddPoint(0.0, new THREE.Color(0xbb2909)); + emitter.colourSpline_.AddPoint(1.0, new THREE.Color(0x701a08)); + + emitter.sizeSpline_.AddPoint(0.0, 0.5); + emitter.sizeSpline_.AddPoint(0.5, 1.0); + emitter.sizeSpline_.AddPoint(1.0, 0.5); + emitter.SetLife(0.5); + emitter.SetEmissionRate(500); + emitter.blend_ = 1.0; + + this.bloodFX_.AddEmitter(emitter); + } + } + + Update(timeElapsed) { + this.bloodFX_.Update(timeElapsed); + this.fireFX_.Update(timeElapsed); + } +} + + + +export { BloodEffect, FireFXEmitter, BloodEffectEmitter } \ No newline at end of file diff --git a/client/src/entity.ts b/packages/client/src/entity.ts similarity index 100% rename from client/src/entity.ts rename to packages/client/src/entity.ts diff --git a/client/src/equip-weapon-component.ts b/packages/client/src/equip-weapon-component.ts similarity index 92% rename from client/src/equip-weapon-component.ts rename to packages/client/src/equip-weapon-component.ts index 4264a980..ab94284f 100644 --- a/client/src/equip-weapon-component.ts +++ b/packages/client/src/equip-weapon-component.ts @@ -1,12 +1,11 @@ import * as THREE from 'three'; import {Component} from './entity'; - -import {CHARACTER_MODELS} from 'shared/src/defs'; - +import {Defs, Constants} from 'shared'; import {FBXLoader} from 'three/examples/jsm/loaders/FBXLoader'; -import { EVENT_TYPES, KNOWN_ENTITIES } from 'shared/src/constants'; +const {CHARACTER_MODELS} = Defs; +const { EVENT_TYPES, KNOWN_ENTITIES } = Constants; export const equip_weapon_component = (() => { diff --git a/client/src/finite-state-machine.ts b/packages/client/src/finite-state-machine.ts similarity index 100% rename from client/src/finite-state-machine.ts rename to packages/client/src/finite-state-machine.ts diff --git a/client/src/floating-name.ts b/packages/client/src/floating-name.ts similarity index 93% rename from client/src/floating-name.ts rename to packages/client/src/floating-name.ts index d7c0a97d..6f25400b 100644 --- a/client/src/floating-name.ts +++ b/packages/client/src/floating-name.ts @@ -2,14 +2,15 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { CHARACTER_MODELS } from 'shared/src/defs'; -import { CLASS_TYPES_ENUM, EVENT_TYPES } from 'shared/src/constants'; +import { Constants, Defs } from 'shared'; + +const { EVENT_TYPES, CHARACTER_MODELS } = {...Constants, ...Defs}; class FloatingName extends Component { params_: { desc: { character: { - class: CLASS_TYPES_ENUM + class: string }, account: { name: string diff --git a/packages/client/src/gltf-component.ts b/packages/client/src/gltf-component.ts new file mode 100644 index 00000000..14b11a54 --- /dev/null +++ b/packages/client/src/gltf-component.ts @@ -0,0 +1,236 @@ +import * as THREE from 'three'; + +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; + +import { Component } from './entity'; +import { Constants } from 'shared'; + +const { EVENT_TYPES } = Constants; + +class StaticModelComponent extends Component { + _params: any; + _target: any; + constructor(params) { + super(); + this._Init(params); + } + + _Init(params) { + this._params = params; + + this._LoadModels(); + } + + InitComponent() { + this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + } + + _OnPosition(m) { + if (this._target) { + this._target.position.copy(m.value); + } + } + + _LoadModels() { + if (this._params.resourceName.endsWith('glb') || this._params.resourceName.endsWith('gltf')) { + this._LoadGLB(); + } else if (this._params.resourceName.endsWith('fbx')) { + this._LoadFBX(); + } + } + + _OnLoaded(obj) { + this._target = obj; + this._params.scene.add(this._target); + + this._target.scale.setScalar(this._params.scale); + this._target.position.copy(this.parent_._position); + + let texture = null; + if (this._params.resourceTexture) { + const texLoader = new THREE.TextureLoader(); + texture = texLoader.load(this._params.resourceTexture); + texture.encoding = THREE.sRGBEncoding; + } + + this._target.traverse(c => { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + + for (let m of materials) { + if (m) { + if (texture) { + m.map = texture; + } + if (this._params.specular) { + m.specular = this._params.specular; + } + if (this._params.emissive) { + m.emissive = this._params.emissive; + } + } + } + if (this._params.receiveShadow != undefined) { + c.receiveShadow = this._params.receiveShadow; + } + if (this._params.castShadow != undefined) { + c.castShadow = this._params.castShadow; + } + if (this._params.visible != undefined) { + c.visible = this._params.visible; + } + }); + } + + _LoadGLB() { + const loader = new GLTFLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceName, (glb) => { + this._OnLoaded(glb.scene); + }); + } + + _LoadFBX() { + const loader = new FBXLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceName, (fbx) => { + this._OnLoaded(fbx); + }); + } + + Update(timeInSeconds) { + } +}; + + +class AnimatedModelComponent extends Component { + _target: any; + _params: any; + _parent: any; + _mixer: any; + constructor(params) { + super(); + this._Init(params); + } + + InitComponent() { + this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + } + + _OnPosition(m) { + if (this._target) { + this._target.position.copy(m.value); + this._target.position.y = 0.35; + } + } + + _Init(params) { + this._params = params; + + this._LoadModels(); + } + + _LoadModels() { + if (this._params.resourceName.endsWith('glb') || this._params.resourceName.endsWith('gltf')) { + this._LoadGLB(); + } else if (this._params.resourceName.endsWith('fbx')) { + this._LoadFBX(); + } + } + + _OnLoaded(obj, animations) { + this._target = obj; + this._params.scene.add(this._target); + + this._target.scale.setScalar(this._params.scale); + this._target.position.copy(this._parent._position); + + this.Broadcast({ + topic: 'update.position', + value: this._parent._position, + }); + + let texture = null; + if (this._params.resourceTexture) { + const texLoader = new THREE.TextureLoader(); + texture = texLoader.load(this._params.resourceTexture); + texture.encoding = THREE.sRGBEncoding; + } + + this._target.traverse(c => { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + + for (let m of materials) { + if (m) { + if (texture) { + m.map = texture; + } + if (this._params.specular) { + m.specular = this._params.specular; + } + if (this._params.emissive) { + m.emissive = this._params.emissive; + } + } + } + if (this._params.receiveShadow != undefined) { + c.receiveShadow = this._params.receiveShadow; + } + if (this._params.castShadow != undefined) { + c.castShadow = this._params.castShadow; + } + if (this._params.visible != undefined) { + c.visible = this._params.visible; + } + }); + + const _OnLoad = (anim) => { + const clip = anim.animations[0]; + const action = this._mixer.clipAction(clip); + + action.play(); + }; + + const loader = new FBXLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceAnimation, (a) => { _OnLoad(a); }); + + this._mixer = new THREE.AnimationMixer(this._target); + + this._parent._mesh = this._target; + this.Broadcast({ + topic: EVENT_TYPES.LOAD_CHARACTER, + model: this._target, + }); + } + + _LoadGLB() { + const loader = new GLTFLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceName, (glb) => { + this._OnLoaded(glb.scene, glb.animations); + }); + } + + _LoadFBX() { + const loader = new FBXLoader(); + loader.setPath(this._params.resourcePath); + loader.load(this._params.resourceName, (fbx) => { + this._OnLoaded(fbx, null); + }); + } + + Update(timeInSeconds) { + if (this._mixer) { + this._mixer.update(timeInSeconds); + } + } +}; + +export { StaticModelComponent, AnimatedModelComponent } \ No newline at end of file diff --git a/client/src/health-bar.ts b/packages/client/src/health-bar.ts similarity index 94% rename from client/src/health-bar.ts rename to packages/client/src/health-bar.ts index 94becf57..60155a99 100644 --- a/client/src/health-bar.ts +++ b/packages/client/src/health-bar.ts @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { math } from 'shared/src/math'; +import { Math as math } from 'shared'; const _VS = ` varying vec2 vUV; diff --git a/packages/client/src/health-component.ts b/packages/client/src/health-component.ts new file mode 100644 index 00000000..23050bdd --- /dev/null +++ b/packages/client/src/health-component.ts @@ -0,0 +1,131 @@ +import { Constants } from "shared"; +import { Component } from "./entity"; + +const { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; + +class HealthComponent extends Component { + stats_: { + level: number, + updateUI: boolean, + health: number, + maxHealth: number, + strength: number, + wisdomness: number, + benchpress: number, + curl: number, + experience: number, + + }; + constructor(params) { + super(); + this.stats_ = params; + } + + InitComponent() { + this._RegisterHandler( + EVENT_TYPES.HEALTH_DAMAGE, (m) => this.OnDamage_(m)); + this._RegisterHandler( + EVENT_TYPES.STATS_NETWORK, (m) => this.OnNetworkUpdate_(m)); + this._RegisterHandler( + EVENT_TYPES.HEALTH_ADD_EXPERIENCE, (m) => this.OnAddExperience_(m)); + + this.UpdateUI_(); + } + + IsAlive() { + return this.stats_.health > 0; + } + + get Health() { + return this.stats_.health; + } + + UpdateUI_() { + if (!this.stats_.updateUI) { + return; + } + + const bar = document.getElementById(DOM_IDS.HEALTH_BAR); + + const healthAsPercentage = this.stats_.health / this.stats_.maxHealth; + bar.style.width = Math.floor(200 * healthAsPercentage) + 'px'; + + document.getElementById(DOM_IDS.STATS_STRENGTH).innerText = this.stats_.strength?.toString?.(); + document.getElementById(DOM_IDS.STATS_WISDOMNESS).innerText = this.stats_.wisdomness?.toString?.(); + document.getElementById(DOM_IDS.STATS_BENCHPRESS).innerText = this.stats_.benchpress?.toString?.(); + document.getElementById(DOM_IDS.STATS_CURL).innerText = this.stats_.curl?.toString?.(); + document.getElementById(DOM_IDS.STATS_EXPERIENCE).innerText = this.stats_.experience?.toString?.(); + } + + _ComputeLevelXPRequirement() { + const level = this.stats_.level; + // Blah just something easy + const xpRequired = Math.round(2 ** (level - 1) * 100); + return xpRequired; + } + + OnAddExperience_(msg) { + this.stats_.experience += msg.value; + const requiredExperience = this._ComputeLevelXPRequirement(); + if (this.stats_.experience < requiredExperience) { + return; + } + + this.stats_.level += 1; + this.stats_.strength += 1; + this.stats_.wisdomness += 1; + this.stats_.benchpress += 1; + this.stats_.curl += 2; + + const spawner = this.FindEntity( + KNOWN_ENTITIES.LEVEL_UP_SPAWNER).GetComponent(NAMED_COMPONENTS.LEVEL_UP_SPAWNER); + spawner.Spawn(this.Parent.Position); + + this.Broadcast({ + topic: EVENT_TYPES.HEALTH_LEVEL, + value: this.stats_.level, + }); + + this.UpdateUI_(); + } + + _OnDeath() { + this.Broadcast({ + topic: EVENT_TYPES.HEALTH_DEATH, + }); + } + + OnHealthChanged_() { + if (this.stats_.health == 0) { + this._OnDeath(); + } + + this.Broadcast({ + topic: EVENT_TYPES.HEALTH_UPDATE, + health: this.stats_.health, + maxHealth: this.stats_.maxHealth, + }); + + this.UpdateUI_(); + } + + + OnNetworkUpdate_(msg) { + const newStats = msg.value[1]; + for (let k in newStats) { + this.stats_[k] = newStats[k]; + } + + this.OnHealthChanged_(); + } + + OnDamage_(msg: { value: number }) { + this.stats_.health = Math.max(0.0, this.stats_.health - msg.value); + + this.OnHealthChanged_(); + } +}; + +export { + HealthComponent +} \ No newline at end of file diff --git a/client/src/index.ts b/packages/client/src/index.ts similarity index 95% rename from client/src/index.ts rename to packages/client/src/index.ts index b66cba71..12db860e 100644 --- a/client/src/index.ts +++ b/packages/client/src/index.ts @@ -6,8 +6,10 @@ import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; import { io } from 'socket.io-client'; import type { Socket } from 'socket.io-client'; -import { EVENT_TYPES, STATE_TYPES } from 'shared/src/constants'; +import {Constants} from 'shared'; +import type {Constants as IConstants} from 'shared'; +const { EVENT_TYPES, STATE_TYPES } = Constants; const _CHARACTER_MODELS = { zombie: { @@ -1134,7 +1136,7 @@ class BasicMMODemo { }); // The socket.io TS definition is wrong I think. This is a hack. - (this.socket_ as { on: (type: EVENT_TYPES, cb: () => void) => void }).on(EVENT_TYPES.CONNECT, () => { + (this.socket_ as { on: (type: IConstants.EVENT_TYPES, cb: () => void) => void }).on(EVENT_TYPES.CONNECT, () => { console.log(this.socket_.id); const randomName = this.GenerateRandomName_(); this.socket_.emit(EVENT_TYPES.LOGIN_COMMIT, randomName); diff --git a/client/src/inventory-controller.ts b/packages/client/src/inventory-controller.ts similarity index 93% rename from client/src/inventory-controller.ts rename to packages/client/src/inventory-controller.ts index 714daf40..a7cc2e29 100644 --- a/client/src/inventory-controller.ts +++ b/packages/client/src/inventory-controller.ts @@ -1,6 +1,8 @@ -import { EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES } from 'shared/src/constants'; +import {Constants} from 'shared'; import { Component } from './entity'; +const { EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES } = Constants; + class InventoryDatabaseController extends Component { items_: {}; constructor() { diff --git a/client/src/level-up-component.ts b/packages/client/src/level-up-component.ts similarity index 100% rename from client/src/level-up-component.ts rename to packages/client/src/level-up-component.ts diff --git a/packages/client/src/load-controller.ts b/packages/client/src/load-controller.ts new file mode 100644 index 00000000..953fdd9c --- /dev/null +++ b/packages/client/src/load-controller.ts @@ -0,0 +1,106 @@ +import * as THREE from 'three'; + + + +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; +import { SkeletonUtils } from 'three/examples/jsm/utils/SkeletonUtils'; + +import { Component } from "./entity"; + + +class LoadController extends Component { + textures_: {}; + models_: {}; + constructor() { + super(); + + this.textures_ = {}; + this.models_ = {}; + } + + LoadTexture(path, name) { + if (!(name in this.textures_)) { + const loader = new THREE.TextureLoader(); + loader.setPath(path); + + this.textures_[name] = { loader: loader, texture: loader.load(name) }; + this.textures_[name].encoding = THREE.sRGBEncoding; + } + + return this.textures_[name].texture; + } + + LoadFBX(path, name, onLoad) { + if (!(name in this.models_)) { + const loader = new FBXLoader(); + loader.setPath(path); + + this.models_[name] = { loader: loader, asset: null, queue: [onLoad] }; + this.models_[name].loader.load(name, (fbx) => { + this.models_[name].asset = fbx; + + const queue = this.models_[name].queue; + this.models_[name].queue = null; + for (let q of queue) { + const clone = this.models_[name].asset.clone(); + q(clone); + } + }); + } else if (this.models_[name].asset == null) { + this.models_[name].queue.push(onLoad); + } else { + const clone = this.models_[name].asset.clone(); + onLoad(clone); + } + } + + LoadSkinnedGLB(path, name, onLoad) { + if (!(name in this.models_)) { + const loader = new GLTFLoader(); + loader.setPath(path); + + this.models_[name] = { loader: loader, asset: null, queue: [onLoad] }; + this.models_[name].loader.load(name, (glb) => { + this.models_[name].asset = glb; + + glb.scene.traverse(c => { + // HAHAHAH + c.frustumCulled = false; + // Apparently this doesn't work, so just disable frustum culling. + // Bugs... so many bugs... + + // if (c.geometry) { + // // Just make our own, super crappy, super big box + // c.geometry.boundingBox = new THREE.Box3( + // new THREE.Vector3(-50, -50, -50), + // new THREE.Vector3(50, 50, 50)); + // c.geometry.boundingSphere = new THREE.Sphere(); + // c.geometry.boundingBox.getBoundingSphere(c.geometry.boundingSphere); + // } + }); + + const queue = this.models_[name].queue; + this.models_[name].queue = null; + for (let q of queue) { + const clone = { ...glb }; + clone.scene = SkeletonUtils.clone(clone.scene); + + q(clone); + } + }); + } else if (this.models_[name].asset == null) { + this.models_[name].queue.push(onLoad); + } else { + const clone = { ...this.models_[name].asset }; + clone.scene = SkeletonUtils.clone(clone.scene); + + onLoad(clone); + } + + } +} + +export { + LoadController +} \ No newline at end of file diff --git a/client/src/loading-manager.ts b/packages/client/src/loading-manager.ts similarity index 100% rename from client/src/loading-manager.ts rename to packages/client/src/loading-manager.ts diff --git a/client/src/main.ts b/packages/client/src/main.ts similarity index 82% rename from client/src/main.ts rename to packages/client/src/main.ts index 7790d7ce..c9b2bec6 100644 --- a/client/src/main.ts +++ b/packages/client/src/main.ts @@ -1,25 +1,21 @@ -import { GUI } from 'three/examples/jsm/libs/dat.gui.module'; +import { GUI } from 'shared'; -import { EntityManager } from 'shared/src/entity-manager'; import { Entity } from './entity'; import { UIController } from './ui-controller'; import { LevelUpComponentSpawner } from './level-up-component'; import { NetworkController } from './network-controller'; import { SceneryController } from './scenery-controller'; -import { load_controller } from './load-controller'; +import { LoadController } from './load-controller'; import { PlayerSpawner, NetworkEntitySpawner } from './spawners'; -import { terrain } from './terrain'; +import { TerrainChunkManager } from './terrain'; import { InventoryDatabaseController } from './inventory-controller'; +import { Constants, Defs, EntityManager as aEntityManager, SpatialHashGrid as aSpatialHashGrid } from 'shared'; +import { ThreeJSController } from './threejs_component'; -import { SpatialHashGrid } from 'shared/src/spatial-hash-grid'; -import { WEAPONS_DATA } from 'shared/src/defs'; -import { threejs_component } from './threejs_component'; -import { DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS } from 'shared/src/constants'; - - +const { WEAPONS_DATA, DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, EntityManager, SpatialHashGrid } = { ...Constants, ...Defs, ...aEntityManager, ...aSpatialHashGrid }; class CrappyMMOAttempt { - entityManager_: EntityManager; + entityManager_: any; grid_: any; previousRAF_: any; _guiParams: { general: {}; }; @@ -58,7 +54,7 @@ class CrappyMMOAttempt { general: { }, }; - this._gui = new GUI(); + this._gui = new GUI.GUI(null); const generalRollup = this._gui.addFolder('General'); this._gui.close(); @@ -66,7 +62,7 @@ class CrappyMMOAttempt { LoadControllers_() { const threejs = new Entity(); - threejs.AddComponent(new threejs_component.ThreeJSController()); + threejs.AddComponent(new ThreeJSController()); this.entityManager_.Add(threejs, null); // Hack @@ -83,7 +79,7 @@ class CrappyMMOAttempt { this.entityManager_.Add(network, KNOWN_ENTITIES.NETWORK); const t = new Entity(); - t.AddComponent(new terrain.TerrainChunkManager({ + t.AddComponent(new TerrainChunkManager({ scene: this.scene_, target: 'player', gui: this._gui, @@ -93,7 +89,7 @@ class CrappyMMOAttempt { this.entityManager_.Add(t, KNOWN_ENTITIES.TERRAIN); const l = new Entity(); - l.AddComponent(new load_controller.LoadController()); + l.AddComponent(new LoadController()); this.entityManager_.Add(l, KNOWN_ENTITIES.LOADER); const scenery = new Entity(); diff --git a/client/src/network-controller.ts b/packages/client/src/network-controller.ts similarity index 97% rename from client/src/network-controller.ts rename to packages/client/src/network-controller.ts index 05c7fbab..0605c1f3 100644 --- a/client/src/network-controller.ts +++ b/packages/client/src/network-controller.ts @@ -1,6 +1,7 @@ -import { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } from 'shared/src/constants'; +import {Constants} from 'shared'; import { io } from 'socket.io-client'; +const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; import { Component } from './entity'; import { UIController } from './ui-controller'; @@ -8,7 +9,7 @@ import { UIController } from './ui-controller'; class NetworkController extends Component { playerID_: any; socket_: any; - constructor(params) { + constructor(params?) { super(); this.playerID_ = null; diff --git a/client/src/network-entity-controller.ts b/packages/client/src/network-entity-controller.ts similarity index 97% rename from client/src/network-entity-controller.ts rename to packages/client/src/network-entity-controller.ts index e1ceeee3..3e45efa2 100644 --- a/client/src/network-entity-controller.ts +++ b/packages/client/src/network-entity-controller.ts @@ -1,7 +1,9 @@ -import { EVENT_TYPES } from 'shared/src/constants'; import * as THREE from 'three'; import { Component } from './entity'; +import { Constants } from 'shared'; + +const { EVENT_TYPES } = Constants; class NetworkEntityController extends Component { transformUpdates_: any[]; diff --git a/client/src/network-player-controller.ts b/packages/client/src/network-player-controller.ts similarity index 95% rename from client/src/network-player-controller.ts rename to packages/client/src/network-player-controller.ts index ad0b4d8f..4278aaf4 100644 --- a/client/src/network-player-controller.ts +++ b/packages/client/src/network-player-controller.ts @@ -1,7 +1,9 @@ -import { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } from 'shared/src/constants'; import * as THREE from 'three'; import { Component } from './entity'; +import { Constants } from 'shared'; + +const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; class NetworkEntityController extends Component { updateTimer_: number; diff --git a/packages/client/src/npc-entity.ts b/packages/client/src/npc-entity.ts new file mode 100644 index 00000000..1c682ae1 --- /dev/null +++ b/packages/client/src/npc-entity.ts @@ -0,0 +1,180 @@ +import * as THREE from 'three'; + +import { Component } from './entity'; +import { CharacterFSM, BasicCharacterControllerProxy } from './player-entity' +import { Constants, Defs } from 'shared'; + +const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, STATE_TYPES, CHARACTER_MODELS } = { ...Constants, ...Defs }; + +class NPCController extends Component { + params_: any; + group_: any; + animations_: {}; + queuedState_: any; + stateMachine_: any; + target_: any; + bones_: {}; + mixer_: THREE.AnimationMixer; + constructor(params) { + super(); + this.params_ = params; + } + + Destroy() { + this.group_.traverse(c => { + if (c.material) { + let materials = c.material; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + for (let m of materials) { + m.dispose(); + } + } + + if (c.geometry) { + c.geometry.dispose(); + } + }); + this.params_.scene.remove(this.group_); + } + + InitEntity() { + this._Init(); + } + + _Init() { + this.animations_ = {}; + this.group_ = new THREE.Group(); + + this.params_.scene.add(this.group_); + this.queuedState_ = null; + + this.LoadModels_(); + } + + InitComponent() { + this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); + this._RegisterHandler('update.position', (m) => { this.OnPosition_(m); }); + this._RegisterHandler('update.rotation', (m) => { this.OnRotation_(m); }); + } + + SetState(s) { + if (!this.stateMachine_) { + this.queuedState_ = s; + return; + } + + // hack: should propogate attacks through the events on server + // Right now, they're inferred from whatever animation we're running, blech + if (s == STATE_TYPES.ATTACK && this.stateMachine_._currentState.Name != STATE_TYPES.ATTACK) { + this.Broadcast({ + topic: EVENT_TYPES.ACTION_ATTACK, + }); + } + + this.stateMachine_.SetState(s); + } + + OnDeath_(msg) { + this.SetState(STATE_TYPES.DEATH); + } + + OnPosition_(m) { + this.group_.position.copy(m.value); + } + + OnRotation_(m) { + this.group_.quaternion.copy(m.value); + } + + LoadModels_() { + const classType = this.params_.desc.character.class; + const modelData = CHARACTER_MODELS[classType]; + + const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); + loader.LoadSkinnedGLB(modelData.path, modelData.base, (glb) => { + this.target_ = glb.scene; + this.target_.scale.setScalar(modelData.scale); + this.target_.visible = false; + + this.group_.add(this.target_); + + this.bones_ = {}; + this.target_.traverse(c => { + if (!c.skeleton) { + return; + } + for (let b of c.skeleton.bones) { + this.bones_[b.name] = b; + } + }); + + this.target_.traverse(c => { + c.castShadow = true; + c.receiveShadow = true; + if (c.material && c.material.map) { + c.material.map.encoding = THREE.sRGBEncoding; + } + }); + + this.mixer_ = new THREE.AnimationMixer(this.target_); + + + const _FindAnim = (animName) => { + for (let i = 0; i < glb.animations.length; i++) { + if (glb.animations[i].name.includes(animName)) { + const clip = glb.animations[i]; + const action = this.mixer_.clipAction(clip); + return { + clip: clip, + action: action + } + } + } + return null; + }; + + this.animations_[STATE_TYPES.IDLE] = _FindAnim(ANIM_TYPES.IDLE); + this.animations_[STATE_TYPES.WALK] = _FindAnim(ANIM_TYPES.WALK) + this.animations_[STATE_TYPES.RUN] = _FindAnim(ANIM_TYPES.RUN) + this.animations_[STATE_TYPES.DEATH] = _FindAnim(ANIM_TYPES.DEATH); + this.animations_[STATE_TYPES.ATTACK] = _FindAnim(ANIM_TYPES.ATTACK); + this.animations_[STATE_TYPES.DANCE] = _FindAnim(ANIM_TYPES.DANCE); + + this.target_.visible = true; + + this.stateMachine_ = new CharacterFSM( + new BasicCharacterControllerProxy(this.animations_)); + + if (this.queuedState_) { + this.stateMachine_.SetState(this.queuedState_) + this.queuedState_ = null; + } else { + this.stateMachine_.SetState(STATE_TYPES.IDLE); + } + + this.Broadcast({ + topic: EVENT_TYPES.LOAD_CHARACTER, + model: this.group_, + bones: this.bones_, + }); + }); + } + + Update(timeInSeconds) { + if (!this.stateMachine_) { + return; + } + this.stateMachine_.Update(timeInSeconds, null); + + if (this.mixer_) { + this.mixer_.update(timeInSeconds); + } + } +}; + + +export { + NPCController +} \ No newline at end of file diff --git a/client/src/particle-system.ts b/packages/client/src/particle-system.ts similarity index 100% rename from client/src/particle-system.ts rename to packages/client/src/particle-system.ts diff --git a/client/src/player-entity.ts b/packages/client/src/player-entity.ts similarity index 97% rename from client/src/player-entity.ts rename to packages/client/src/player-entity.ts index 41802840..8d98ae95 100644 --- a/client/src/player-entity.ts +++ b/packages/client/src/player-entity.ts @@ -3,8 +3,9 @@ import * as THREE from 'three'; import { Component } from './entity'; import { FiniteStateMachine } from './finite-state-machine'; import { IdleState, WalkState, RunState, AttackState, DanceState, DeathState } from './player-state'; -import { CHARACTER_MODELS } from 'shared/src/defs'; -import { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES } from 'shared/src/constants'; +import { Constants, Defs } from 'shared'; + +const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, CHARACTER_MODELS } = {...Constants, ...Defs}; class CharacterFSM extends FiniteStateMachine { _proxy: any; diff --git a/client/src/player-input.ts b/packages/client/src/player-input.ts similarity index 97% rename from client/src/player-input.ts rename to packages/client/src/player-input.ts index b17316ef..09b8de10 100644 --- a/client/src/player-input.ts +++ b/packages/client/src/player-input.ts @@ -1,7 +1,10 @@ -import { DOM_IDS, EVENT_TYPES } from 'shared/src/constants'; import * as THREE from 'three'; +import { Constants } from 'shared'; import { Component } from "./entity"; + +const { DOM_IDS, EVENT_TYPES } = Constants; + class PickableComponent extends Component { constructor() { super(); diff --git a/client/src/player-state.ts b/packages/client/src/player-state.ts similarity index 98% rename from client/src/player-state.ts rename to packages/client/src/player-state.ts index 8c4eabdd..1f9c8f2a 100644 --- a/client/src/player-state.ts +++ b/packages/client/src/player-state.ts @@ -1,6 +1,9 @@ -import { STATE_TYPES } from 'shared/src/constants'; import * as THREE from 'three'; +import { Constants } from 'shared'; + +const { STATE_TYPES } = Constants; + class State { _parent: any; constructor(parent) { diff --git a/client/src/quadtree.ts b/packages/client/src/quadtree.ts similarity index 100% rename from client/src/quadtree.ts rename to packages/client/src/quadtree.ts diff --git a/packages/client/src/quest-component.ts b/packages/client/src/quest-component.ts new file mode 100644 index 00000000..8f387965 --- /dev/null +++ b/packages/client/src/quest-component.ts @@ -0,0 +1,37 @@ +import { Constants } from 'shared'; +import { Component } from "./entity"; + +const { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; + +const _TITLE = 'Welcome Adventurer!'; +const _TEXT = `Welcome to Honeywood adventurer, I see you're the chosen one and also the dragon born and whatever else, you're going to save the world! Also bring the rings back to mordor and defeat the evil dragon, and all the other things. But first, I must test you with some meaningless bullshit tasks that every rpg makes you do to waste time. Go kill like uh 30 ghosts and collect their eyeballs or something. Also go get my drycleaning and pick up my kids from daycare.`; + +class QuestComponent extends Component { + constructor() { + super(); + + const e = document.getElementById(DOM_IDS.QUEST_UI); + e.style.visibility = 'hidden'; + } + + InitComponent() { + this._RegisterHandler(EVENT_TYPES.INPUT_PICKED, (m) => this._OnPicked(m)); + } + + _OnPicked(msg) { + // HARDCODE A QUEST + const quest = { + id: 'foo', + title: _TITLE, + text: _TEXT, + }; + this._AddQuestToJournal(quest); + } + + _AddQuestToJournal(quest) { + const ui = this.FindEntity(KNOWN_ENTITIES.UI).GetComponent(NAMED_COMPONENTS.UI_CONTROLLER); + ui.AddQuest(quest); + } +}; + +export { QuestComponent } \ No newline at end of file diff --git a/client/src/render-component.ts b/packages/client/src/render-component.ts similarity index 96% rename from client/src/render-component.ts rename to packages/client/src/render-component.ts index d63eeb6a..6c6dc740 100644 --- a/client/src/render-component.ts +++ b/packages/client/src/render-component.ts @@ -1,10 +1,11 @@ -import { KNOWN_ENTITIES } from 'shared/src/constants'; import * as THREE from 'three'; - -import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; -import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; +import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'; import { Component } from './entity'; +import { Constants } from 'shared'; + +const { KNOWN_ENTITIES } = { ...Constants }; class RenderComponent extends Component { group_: THREE.Group; diff --git a/client/src/scenery-controller.ts b/packages/client/src/scenery-controller.ts similarity index 97% rename from client/src/scenery-controller.ts rename to packages/client/src/scenery-controller.ts index c5b67f92..0dacf28b 100644 --- a/client/src/scenery-controller.ts +++ b/packages/client/src/scenery-controller.ts @@ -4,10 +4,11 @@ import { Entity, Component } from './entity'; import { RenderComponent } from './render-component'; import { SpatialGridController } from './spatial-grid-controller.js'; -import { math } from 'shared/src/math'; -import { Noise } from 'shared/src/noise'; -import { KNOWN_ENTITIES } from 'shared/src/constants'; +import { Math as math, Noise as noise, Constants } from 'shared'; +import type {Noise as INoise} from 'shared'; +const {KNOWN_ENTITIES} = Constants; +const {Noise} = noise; const _SCENERY = { birch1: { @@ -93,7 +94,7 @@ for (let k in multiples) { class SceneryController extends Component { params_: any; - noise_: Noise; + noise_: INoise.Noise; center_: any; crap_: any[]; constructor(params) { diff --git a/client/src/sorceror-effect.ts b/packages/client/src/sorceror-effect.ts similarity index 97% rename from client/src/sorceror-effect.ts rename to packages/client/src/sorceror-effect.ts index 177ca364..e3837aa8 100644 --- a/client/src/sorceror-effect.ts +++ b/packages/client/src/sorceror-effect.ts @@ -2,7 +2,9 @@ import * as THREE from 'three'; import { ParticleEmitter, ParticleSystem } from "./particle-system"; import { Component } from "./entity"; -import { EVENT_TYPES } from 'shared/src/constants'; +import { Constants } from 'shared'; + +const { EVENT_TYPES } = Constants; class SorcerorEffectEmitter extends ParticleEmitter { parent_: any; diff --git a/client/src/spatial-grid-controller.ts b/packages/client/src/spatial-grid-controller.ts similarity index 100% rename from client/src/spatial-grid-controller.ts rename to packages/client/src/spatial-grid-controller.ts diff --git a/client/src/spawners.ts b/packages/client/src/spawners.ts similarity index 95% rename from client/src/spawners.ts rename to packages/client/src/spawners.ts index fc605c0e..519ebb05 100644 --- a/client/src/spawners.ts +++ b/packages/client/src/spawners.ts @@ -1,6 +1,5 @@ import { Component, Entity } from './entity'; - -import { third_person_camera } from './third-person-camera'; +import { ThirdPersonCamera } from './third-person-camera'; import { BasicCharacterController } from './player-entity' import { HealthComponent } from './health-component'; import { BasicCharacterControllerInput } from './player-input'; @@ -8,14 +7,15 @@ import { SpatialGridController } from './spatial-grid-controller'; import { InventoryController, UIInventoryController } from './inventory-controller'; import { equip_weapon_component } from './equip-weapon-component'; import { AttackController } from './attacker-controller'; - import { NPCController } from './npc-entity'; import { NetworkEntityController } from './network-entity-controller'; import { NetworkEntityController as NetworkPlayerController } from './network-player-controller'; import { FloatingName } from './floating-name'; import { SorcerorEffect } from './sorceror-effect'; import { BloodEffect } from './blood-effect'; -import { CLASS_TYPES_ENUM } from 'shared/src/constants'; +import { Constants } from 'shared'; + +const { CLASS_TYPES_ENUM } = Constants; class PlayerSpawner extends Component { params_: any; @@ -57,7 +57,7 @@ class PlayerSpawner extends Component { player.AddComponent( new AttackController()); player.AddComponent( - new third_person_camera.ThirdPersonCamera({ + new ThirdPersonCamera({ camera: this.params_.camera, target: player })); diff --git a/client/src/terrain-builder-threaded-worker.ts b/packages/client/src/terrain-builder-threaded-worker.ts similarity index 97% rename from client/src/terrain-builder-threaded-worker.ts rename to packages/client/src/terrain-builder-threaded-worker.ts index c42c6daa..a67bc014 100644 --- a/client/src/terrain-builder-threaded-worker.ts +++ b/packages/client/src/terrain-builder-threaded-worker.ts @@ -1,10 +1,10 @@ import * as THREE from 'three'; -import { texture_splatter } from './texture-splatter'; +import { TextureSplatter } from './texture-splatter'; -import { math } from 'shared/src/math'; -import { Noise } from 'shared/src/noise'; -import { HeightGenerator } from 'shared/src/terrain-height'; +import { TerrainHeight, Noise as aNoise, Math as math } from 'shared'; + +const { Noise, HeightGenerator } = { ...TerrainHeight, ...aNoise }; class _TerrainBuilderThreadedWorker { @@ -21,7 +21,7 @@ class _TerrainBuilderThreadedWorker { this._params.biomeGenerator = new Noise(params.biomesParams); this._params.colourNoise = new Noise(params.colourNoiseParams); - this._params.colourGenerator = new texture_splatter.TextureSplatter( + this._params.colourGenerator = new TextureSplatter( { biomeGenerator: this._params.biomeGenerator, colourNoise: this._params.colourNoise diff --git a/client/src/terrain-builder-threaded.ts b/packages/client/src/terrain-builder-threaded.ts similarity index 99% rename from client/src/terrain-builder-threaded.ts rename to packages/client/src/terrain-builder-threaded.ts index 10ef27ed..6fff9a18 100644 --- a/client/src/terrain-builder-threaded.ts +++ b/packages/client/src/terrain-builder-threaded.ts @@ -1,4 +1,3 @@ - import { TerrainChunk } from './terrain-chunk'; @@ -174,6 +173,7 @@ class TerrainChunkRebuilder_Threaded { } } } + export { TerrainChunkRebuilder_Threaded -} \ No newline at end of file +} diff --git a/client/src/terrain-builder.ts b/packages/client/src/terrain-builder.ts similarity index 99% rename from client/src/terrain-builder.ts rename to packages/client/src/terrain-builder.ts index a4aea110..6fc8c6e9 100644 --- a/client/src/terrain-builder.ts +++ b/packages/client/src/terrain-builder.ts @@ -100,4 +100,4 @@ class TerrainChunkRebuilder { export { TerrainChunkRebuilder -} \ No newline at end of file +} diff --git a/client/src/terrain-chunk.ts b/packages/client/src/terrain-chunk.ts similarity index 99% rename from client/src/terrain-chunk.ts rename to packages/client/src/terrain-chunk.ts index 45c60232..ef2183ca 100644 --- a/client/src/terrain-chunk.ts +++ b/packages/client/src/terrain-chunk.ts @@ -1,6 +1,5 @@ import * as THREE from 'three'; - class TerrainChunk { _params: any; _geometry: THREE.BufferGeometry; @@ -63,4 +62,4 @@ class TerrainChunk { export { TerrainChunk -} \ No newline at end of file +} diff --git a/client/src/terrain-shader.ts b/packages/client/src/terrain-shader.ts similarity index 98% rename from client/src/terrain-shader.ts rename to packages/client/src/terrain-shader.ts index a69be331..3e42f2ef 100644 --- a/client/src/terrain-shader.ts +++ b/packages/client/src/terrain-shader.ts @@ -1,6 +1,5 @@ -export const terrain_shader = (function() { - const _VS_1 = ` +const VS1 = ` // Triplanar Attributes in vec4 weights1; @@ -15,7 +14,7 @@ out vec4 vWeights2; `; - const _VS_2 = ` +const VS2 = ` vCoords = transformed.xyz; vWeights1 = weights1; @@ -23,7 +22,7 @@ vWeights2 = weights2; `; - const _VS = ` +const VS = ` // Attributes in vec3 coords; @@ -51,9 +50,9 @@ void main(){ vWeights2 = weights2; } `; - - const _PS = ` + +const PS = ` precision highp float; precision highp int; @@ -260,7 +259,7 @@ void main() { `; - const _PS_1 = ` +const PS1 = ` precision mediump sampler2DArray; @@ -424,8 +423,8 @@ vec4 _TriplanarN(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { } `; - - const _PS_2 = ` + +const PS2 = ` { vec3 worldPosition = vCoords; @@ -463,13 +462,13 @@ vec4 _TriplanarN(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { `; - return { - VS: _VS, - PS: _PS, - VS1: _VS_1, - VS2: _VS_2, - PS1: _PS_1, - PS2: _PS_2, - }; - })(); - \ No newline at end of file + + +export { + VS, + PS, + VS1, + VS2, + PS1, + PS2, +} \ No newline at end of file diff --git a/packages/client/src/terrain.ts b/packages/client/src/terrain.ts new file mode 100644 index 00000000..84fd9258 --- /dev/null +++ b/packages/client/src/terrain.ts @@ -0,0 +1,303 @@ +import * as THREE from 'three'; + +import { Component } from './entity'; +import { CubeQuadTree } from './quadtree'; +import { VS1, VS2, PS1, PS2 } from './terrain-shader'; +import { TerrainChunkRebuilder_Threaded } from './terrain-builder-threaded'; +import { TextureSplatter } from './texture-splatter'; +import { TextureAtlas } from './textures'; +import { utils } from './utils'; +import { Noise as aNoise, TerrainHeight, TerrainConstants } from 'shared'; + +const { + QT_MIN_CELL_SIZE, + QT_MIN_CELL_RESOLUTION, + PLANET_RADIUS, + NOISE_PARAMS, + HeightGenerator, + Noise, +} = { ...aNoise, ...TerrainHeight, ...TerrainConstants } + +class TerrainChunkManager extends Component { + _params: any; + _material: THREE.MeshStandardMaterial; + _builder: TerrainChunkRebuilder_Threaded; + heightGenerator_: any; + _biomes: any; + _biomesParams: any; + _colourNoise: any; + _colourNoiseParams: { octaves: number; persistence: number; lacunarity: number; exponentiation: number; scale: number; noiseType: string; seed: number; height: number; }; + _groups: THREE.Group[]; + _chunks: any; + + constructor(params) { + super(); + this._Init(params); + } + + _Init(params) { + this._params = params; + + const loader = new THREE.TextureLoader(); + + const noiseTexture = loader.load('./resources/terrain/simplex-png'); + noiseTexture.wrapS = THREE.RepeatWrapping; + noiseTexture.wrapT = THREE.RepeatWrapping; + + const diffuse = new TextureAtlas(params); + diffuse.Load('diffuse', [ + './resources/terrain/dirt_01_diffuse-1024.png', + './resources/terrain/grass1-albedo3-1024.png', + './resources/terrain/sandyground-albedo-1024.png', + './resources/terrain/worn-bumpy-rock-albedo-1024.png', + './resources/terrain/rock-snow-ice-albedo-1024.png', + './resources/terrain/snow-packed-albedo-1024.png', + './resources/terrain/rough-wet-cobble-albedo-1024.png', + // './resources/terrain/sandy-rocks1-albedo-1024.png', + './resources/terrain/bark1-albedo.jpg', + ]); + + + const normal = new TextureAtlas(params); + normal.Load('normal', [ + './resources/terrain/dirt_01_normal-1024.jpg', + './resources/terrain/grass1-normal-1024.jpg', + './resources/terrain/sandyground-normal-1024.jpg', + './resources/terrain/worn-bumpy-rock-normal-1024.jpg', + './resources/terrain/rock-snow-ice-normal-1024.jpg', + './resources/terrain/snow-packed-normal-1024.jpg', + './resources/terrain/rough-wet-cobble-normal-1024.jpg', + // './resources/terrain/sandy-rocks1-normal-1024.jpg', + './resources/terrain/bark1-normal3.jpg', + ]); + + this._material = new THREE.MeshStandardMaterial({ + side: THREE.BackSide, + vertexColors: true, + }); + + this._material.onBeforeCompile = (s) => { + let a = 0; + let vsh = s.vertexShader; + vsh = VS1 + s.vertexShader; + const vi1 = vsh.search('#include '); + vsh = [vsh.slice(0, vi1) + VS2 + vsh.slice(vi1)].join(''); + s.vertexShader = vsh; + + s.fragmentShader = PS1 + s.fragmentShader; + const fi1 = s.fragmentShader.search('#include '); + s.fragmentShader = [s.fragmentShader.slice(0, fi1) + PS2 + s.fragmentShader.slice(fi1)].join(''); + + s.uniforms.TRIPLANAR_normalMap = { value: normal.Info['normal'].atlas }; + s.uniforms.TRIPLANAR_diffuseMap = { value: diffuse.Info['diffuse'].atlas }; + s.uniforms.TRIPLANAR_noiseMap = { value: noiseTexture }; + + diffuse.onLoad = () => { + s.uniforms.TRIPLANAR_diffuseMap.value = diffuse.Info['diffuse'].atlas; + }; + normal.onLoad = () => { + s.uniforms.TRIPLANAR_normalMap.value = normal.Info['normal'].atlas; + }; + + // s.fragmentShader += 'poop'; + }; + + this._builder = new TerrainChunkRebuilder_Threaded(null); + // this._builder = new terrain_builder.TerrainChunkRebuilder(); + + this._InitNoise(); + this._InitBiomes(params); + this._InitTerrain(params); + } + + _InitNoise() { + this.heightGenerator_ = new HeightGenerator(); + } + + _InitBiomes(params) { + params.guiParams.biomes = { + octaves: 2, + persistence: 0.5, + lacunarity: 2.0, + scale: 1024.0, + noiseType: 'simplex', + seed: 2, + exponentiation: 2, + height: 1.0 + }; + + const onNoiseChanged = () => { + this._builder.Rebuild(this._chunks); + }; + + const noiseRollup = params.gui.addFolder('Terrain.Biomes'); + noiseRollup.add(params.guiParams.biomes, "scale", 64.0, 4096.0).onChange( + onNoiseChanged); + noiseRollup.add(params.guiParams.biomes, "octaves", 1, 20, 1).onChange( + onNoiseChanged); + noiseRollup.add(params.guiParams.biomes, "persistence", 0.01, 1.0).onChange( + onNoiseChanged); + noiseRollup.add(params.guiParams.biomes, "lacunarity", 0.01, 4.0).onChange( + onNoiseChanged); + noiseRollup.add(params.guiParams.biomes, "exponentiation", 0.1, 10.0).onChange( + onNoiseChanged); + + this._biomes = new Noise(params.guiParams.biomes); + this._biomesParams = params.guiParams.biomes; + + const colourParams = { + octaves: 1, + persistence: 0.5, + lacunarity: 2.0, + exponentiation: 1.0, + scale: 256.0, + noiseType: 'simplex', + seed: 2, + height: 1.0, + }; + this._colourNoise = new Noise(colourParams); + this._colourNoiseParams = colourParams; + } + + _InitTerrain(params) { + params.guiParams.terrain = { + wireframe: false, + }; + + this._groups = [...new Array(6)].map(_ => new THREE.Group()); + params.scene.add(...this._groups); + + const terrainRollup = params.gui.addFolder('Terrain'); + terrainRollup.add(params.guiParams.terrain, "wireframe").onChange(() => { + for (let k in this._chunks) { + this._chunks[k].chunk._plane.material.wireframe = params.guiParams.terrain.wireframe; + } + }); + + this._chunks = {}; + this._params = params; + } + + _CreateTerrainChunk(group, groupTransform, offset, width, resolution) { + const params = { + group: group, + transform: groupTransform, + material: this._material, + width: width, + offset: offset, + // origin: this._params.camera.position.clone(), + radius: PLANET_RADIUS, + resolution: resolution, + biomeGenerator: this._biomes, + colourGenerator: new TextureSplatter( + { biomeGenerator: this._biomes, colourNoise: this._colourNoise }), + heightGenerators: [this.heightGenerator_], + noiseParams: NOISE_PARAMS, + colourNoiseParams: this._colourNoiseParams, + biomesParams: this._biomesParams, + colourGeneratorParams: { + biomeGeneratorParams: this._biomesParams, + colourNoiseParams: this._colourNoiseParams, + }, + heightGeneratorsParams: { + min: 100000, + max: 100000 + 1, + } + }; + + return this._builder.AllocateChunk(params); + } + + GetHeight(pos) { + return this.heightGenerator_.Get(pos.x, 0.0, pos.z); + } + + GetBiomeAt(pos) { + return this._biomes.Get(pos.x, 0.0, pos.z); + } + + Update(_) { + const target = this.FindEntity(this._params.target); + if (!target) { + return; + } + + this._builder.Update(); + if (!this._builder.Busy) { + this._UpdateVisibleChunks_Quadtree(target); + } + + for (let k in this._chunks) { + this._chunks[k].chunk.Update(target.Position); + } + for (let c of this._builder._old) { + c.chunk.Update(target.Position); + } + + // this._params.scattering.uniforms.planetRadius.value = PLANET_RADIUS; + // this._params.scattering.uniforms.atmosphereRadius.value = PLANET_RADIUS * 1.01; + } + + _UpdateVisibleChunks_Quadtree(target) { + function _Key(c) { + return c.position[0] + '/' + c.position[2] + ' [' + c.size + ']'; + } + + const q = new CubeQuadTree({ + radius: PLANET_RADIUS, + min_node_size: QT_MIN_CELL_SIZE, + }); + q.Insert(target.Position); + + const sides = q.GetChildren(); + + let newTerrainChunks = {}; + const center = new THREE.Vector3(); + const dimensions = new THREE.Vector3(); + for (let i = 0; i < sides.length; i++) { + for (let c of sides[i].children) { + c.bounds.getCenter(center); + c.bounds.getSize(dimensions); + + const child = { + index: i, + group: this._groups[i], + transform: sides[i].transform, + position: [center.x, center.y, center.z], + bounds: c.bounds, + size: dimensions.x, + }; + + const k = _Key(child); + newTerrainChunks[k] = child; + } + } + + const intersection = utils.DictIntersection(this._chunks, newTerrainChunks); + const difference = utils.DictDifference(newTerrainChunks, this._chunks); + const recycle = Object.values(utils.DictDifference(this._chunks, newTerrainChunks)); + + this._builder.RetireChunks(recycle); + + newTerrainChunks = intersection; + + for (let k in difference) { + const [xp, yp, zp] = difference[k].position; + + const offset = new THREE.Vector3(xp, yp, zp); + newTerrainChunks[k] = { + position: [xp, zp], + chunk: this._CreateTerrainChunk( + difference[k].group, difference[k].transform, + offset, difference[k].size, + QT_MIN_CELL_RESOLUTION), + }; + } + + this._chunks = newTerrainChunks; + } +} + +export { + TerrainChunkManager +} \ No newline at end of file diff --git a/packages/client/src/test.ts b/packages/client/src/test.ts new file mode 100644 index 00000000..b7f4c892 --- /dev/null +++ b/packages/client/src/test.ts @@ -0,0 +1,5 @@ + + + +// We got nothing. +// lol nope. from: Jeremy \ No newline at end of file diff --git a/packages/client/src/texture-splatter.ts b/packages/client/src/texture-splatter.ts new file mode 100644 index 00000000..b8b27aae --- /dev/null +++ b/packages/client/src/texture-splatter.ts @@ -0,0 +1,155 @@ +import * as THREE from 'three'; + +import { Spline, TerrainConstants, Math as math } from 'shared'; + +const { LinearSpline, NOISE_HEIGHT } = { ...Spline, ...TerrainConstants }; + +const _HEIGHT_NORMALIZATION = NOISE_HEIGHT / 10.0; + +const _WHITE = new THREE.Color(0x808080); + +const _DEEP_OCEAN = new THREE.Color(0x20020FF); +const _SHALLOW_OCEAN = new THREE.Color(0x8080FF); +const _BEACH = new THREE.Color(0xd9d592); +const _SNOW = new THREE.Color(0xFFFFFF); +const _FOREST_BOREAL = new THREE.Color(0x29c100); + +const _GREEN = new THREE.Color(0x80FF80); +const _RED = new THREE.Color(0xFF8080); +const _BLACK = new THREE.Color(0x000000); + + +class TextureSplatter { + _colourSpline: InstanceType[]; + _oceanSpline: InstanceType; + _params: any; + constructor(params) { + const _colourLerp = (t, p0, p1) => { + const c = p0.clone(); + + return c.lerp(p1, t); + }; + this._colourSpline = [ + new LinearSpline(_colourLerp), + new LinearSpline(_colourLerp) + ]; + + // Arid + this._colourSpline[0].AddPoint(0.0, new THREE.Color(0xb7a67d)); + this._colourSpline[0].AddPoint(0.5, new THREE.Color(0xf1e1bc)); + this._colourSpline[0].AddPoint(1.0, _SNOW); + + // Humid + this._colourSpline[1].AddPoint(0.0, _FOREST_BOREAL); + this._colourSpline[1].AddPoint(0.5, new THREE.Color(0x8a9343)); + this._colourSpline[1].AddPoint(1.0, _SNOW); + // this._colourSpline[1].AddPoint(0.5, new THREE.Color(0x8a9343)); + // this._colourSpline[1].AddPoint(1.0, _SNOW); + + this._oceanSpline = new LinearSpline(_colourLerp); + this._oceanSpline.AddPoint(0, _DEEP_OCEAN); + this._oceanSpline.AddPoint(0.03, _SHALLOW_OCEAN); + this._oceanSpline.AddPoint(0.05, _SHALLOW_OCEAN); + + this._params = params; + } + + _BaseColour(x, y, z) { + const m = this._params.biomeGenerator.Get(x, y, z); + const h = math.sat(z / 100.0); + + const c1 = this._colourSpline[0].Get(h); + const c2 = this._colourSpline[1].Get(h); + + let c = c1.lerp(c2, m); + + if (h < 0.1) { + c = c.lerp(new THREE.Color(0x54380e), 1.0 - math.sat(h / 0.05)); + } + return c; + } + + _Colour(x: number, y: number, z: number) { + const c = this._BaseColour(x, y, z); + const r = this._params.colourNoise.Get(x, y, z) * 2.0 - 1.0; + + c.offsetHSL(0.0, 0.0, r * 0.2); + return c; + } + + _GetTextureWeights(p, n, up) { + const m = this._params.biomeGenerator.Get(p.x, p.y, p.z); + const h = p.z / _HEIGHT_NORMALIZATION; + + const types = { + dirt: { index: 0, strength: 0.0 }, + grass: { index: 1, strength: 0.0 }, + gravel: { index: 2, strength: 0.0 }, + rock: { index: 3, strength: 0.0 }, + snow: { index: 4, strength: 0.0 }, + snowrock: { index: 5, strength: 0.0 }, + cobble: { index: 6, strength: 0.0 }, + sandyrock: { index: 7, strength: 0.0 }, + }; + + function _ApplyWeights(dst, v, m) { + for (let k in types) { + types[k].strength *= m; + } + types[dst].strength = v; + }; + + types.grass.strength = 1.0; + _ApplyWeights('gravel', 1.0 - m, m); + + if (h < 0.2) { + const s = 1.0 - math.sat((h - 0.1) / 0.05); + _ApplyWeights('cobble', s, 1.0 - s); + + if (h < 0.1) { + const s = 1.0 - math.sat((h - 0.05) / 0.05); + _ApplyWeights('sandyrock', s, 1.0 - s); + } + } else { + if (h > 0.125) { + const s = (math.sat((h - 0.125) / 1.25)); + _ApplyWeights('rock', s, 1.0 - s); + } + + if (h > 1.5) { + const s = math.sat((h - 0.75) / 2.0); + _ApplyWeights('snow', s, 1.0 - s); + } + } + + // In case nothing gets set. + types.dirt.strength = 0.01; + + let total = 0.0; + for (let k in types) { + total += types[k].strength; + } + if (total < 0.01) { + const a = 0; + } + const normalization = 1.0 / total; + + for (let k in types) { + types[k].strength / normalization; + } + + return types; + } + + GetColour(position) { + return this._Colour(position.x, position.y, position.z); + } + + GetSplat(position, normal, up) { + return this._GetTextureWeights(position, normal, up); + } +} + +export { + TextureSplatter +} \ No newline at end of file diff --git a/packages/client/src/textures.ts b/packages/client/src/textures.ts new file mode 100644 index 00000000..b69d89ed --- /dev/null +++ b/packages/client/src/textures.ts @@ -0,0 +1,95 @@ +import * as THREE from 'three'; + + +// Taken from https://github.com/mrdoob/three.js/issues/758 +function _GetImageData(image) { + var canvas = document.createElement('canvas'); + canvas.width = image.width; + canvas.height = image.height; + + var context = canvas.getContext('2d'); + context.drawImage(image, 0, 0); + + return context.getImageData(0, 0, image.width, image.height); +} + +class TextureAtlas { + onLoad: () => void; + _threejs: any; + _manager: THREE.LoadingManager; + _loader: THREE.TextureLoader; + _textures: {}; + constructor(params) { + this._threejs = params.threejs; + this._Create(); + this.onLoad = () => { }; + } + + Load(atlas, names) { + this._LoadAtlas(atlas, names); + } + + _Create() { + this._manager = new THREE.LoadingManager(); + this._loader = new THREE.TextureLoader(this._manager); + this._textures = {}; + + this._manager.onLoad = () => { + this._OnLoad(); + }; + } + + get Info() { + return this._textures; + } + + _LoadTexture(n) { + const t = this._loader.load(n); + t.encoding = THREE.sRGBEncoding; + return t; + } + + _OnLoad() { + for (let k in this._textures) { + const atlas = this._textures[k]; + const data = new Uint8Array(atlas.textures.length * 4 * 1024 * 1024); + + for (let t = 0; t < atlas.textures.length; t++) { + const curTexture = atlas.textures[t]; + const curData = _GetImageData(curTexture.image); + const offset = t * (4 * 1024 * 1024); + + data.set(curData.data, offset); + } + + const diffuse = new THREE.DataTexture2DArray(data, 1024, 1024, atlas.textures.length); + diffuse.format = THREE.RGBAFormat; + diffuse.type = THREE.UnsignedByteType; + diffuse.minFilter = THREE.LinearMipMapLinearFilter; + diffuse.magFilter = THREE.LinearFilter; + diffuse.wrapS = THREE.RepeatWrapping; + diffuse.wrapT = THREE.RepeatWrapping; + diffuse.generateMipmaps = true; + + const caps = this._threejs.capabilities; + const aniso = caps.getMaxAnisotropy(); + + diffuse.anisotropy = 4; + + atlas.atlas = diffuse; + } + + this.onLoad(); + } + + _LoadAtlas(atlas, names) { + this._textures[atlas] = { + textures: names.map(n => this._LoadTexture(n)), + atlas: null, + }; + } +} + +export { + TextureAtlas +} \ No newline at end of file diff --git a/packages/client/src/third-person-camera.ts b/packages/client/src/third-person-camera.ts new file mode 100644 index 00000000..e88839e8 --- /dev/null +++ b/packages/client/src/third-person-camera.ts @@ -0,0 +1,58 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants } from 'shared'; + +const { KNOWN_ENTITIES } = Constants; + +class ThirdPersonCamera extends Component { + _params: any; + _camera: any; + _currentPosition: THREE.Vector3; + _currentLookat: THREE.Vector3; + constructor(params) { + super(); + + this._params = params; + this._camera = params.camera; + + this._currentPosition = new THREE.Vector3(); + this._currentLookat = new THREE.Vector3(); + } + + _CalculateIdealOffset() { + const idealOffset = new THREE.Vector3(-0, 10, -15); + idealOffset.applyQuaternion(this._params.target._rotation); + idealOffset.add(this._params.target._position); + + const terrain = this.FindEntity(KNOWN_ENTITIES.TERRAIN).GetComponent('TerrainChunkManager'); + idealOffset.y = Math.max(idealOffset.y, terrain.GetHeight(idealOffset)[0] + 5.0); + + return idealOffset; + } + + _CalculateIdealLookat() { + const idealLookat = new THREE.Vector3(0, 5, 20); + idealLookat.applyQuaternion(this._params.target._rotation); + idealLookat.add(this._params.target._position); + return idealLookat; + } + + Update(timeElapsed) { + const idealOffset = this._CalculateIdealOffset(); + const idealLookat = this._CalculateIdealLookat(); + + // const t = 0.05; + // const t = 4.0 * timeElapsed; + const t = 1.0 - Math.pow(0.01, timeElapsed); + + this._currentPosition.lerp(idealOffset, t); + this._currentLookat.lerp(idealLookat, t); + + this._camera.position.copy(this._currentPosition); + this._camera.lookAt(this._currentLookat); + } +} + +export { + ThirdPersonCamera +} \ No newline at end of file diff --git a/packages/client/src/threejs_component.ts b/packages/client/src/threejs_component.ts new file mode 100644 index 00000000..f7b830aa --- /dev/null +++ b/packages/client/src/threejs_component.ts @@ -0,0 +1,199 @@ +import * as THREE from 'three'; + +import { Constants } from 'shared'; +import { Component } from "./entity"; + +const { DOM_IDS } = Constants; + +const _VS = ` + varying vec3 vWorldPosition; + + void main() { + vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); + vWorldPosition = worldPosition.xyz; + + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + }`; + + +const _FS = ` + uniform vec3 topColor; + uniform vec3 bottomColor; + uniform float offset; + uniform float exponent; + uniform samplerCube background; + + varying vec3 vWorldPosition; + + void main() { + vec3 viewDirection = normalize(vWorldPosition - cameraPosition); + vec3 stars = textureCube(background, viewDirection).xyz; + + float h = normalize(vWorldPosition + offset).y; + float t = max(pow(max(h, 0.0), exponent), 0.0); + + float f = exp(min(0.0, -vWorldPosition.y * 0.00125)); + + vec3 sky = mix(stars, bottomColor, f); + gl_FragColor = vec4(sky, 1.0); + }`; + +class ThreeJSController extends Component { + threejs_: THREE.WebGLRenderer; + camera_: THREE.PerspectiveCamera; + scene_: THREE.Scene; + sun_: THREE.DirectionalLight; + constructor() { + super(); + } + + InitEntity() { + THREE.ShaderChunk.fog_fragment = ` + #ifdef USE_FOG + vec3 fogOrigin = cameraPosition; + vec3 fogDirection = normalize(vWorldPosition - fogOrigin); + float fogDepth = distance(vWorldPosition, fogOrigin); + + fogDepth *= fogDepth; + + float heightFactor = 0.05; + float fogFactor = heightFactor * exp(-fogOrigin.y * fogDensity) * ( + 1.0 - exp(-fogDepth * fogDirection.y * fogDensity)) / fogDirection.y; + fogFactor = saturate(fogFactor); + + gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); + #endif`; + + THREE.ShaderChunk.fog_pars_fragment = ` + #ifdef USE_FOG + uniform float fogTime; + uniform vec3 fogColor; + varying vec3 vWorldPosition; + #ifdef FOG_EXP2 + uniform float fogDensity; + #else + uniform float fogNear; + uniform float fogFar; + #endif + #endif`; + + THREE.ShaderChunk.fog_vertex = ` + #ifdef USE_FOG + vWorldPosition = (modelMatrix * vec4(transformed, 1.0 )).xyz; + #endif`; + + THREE.ShaderChunk.fog_pars_vertex = ` + #ifdef USE_FOG + varying vec3 vWorldPosition; + #endif`; + + this.threejs_ = new THREE.WebGLRenderer({ + antialias: false, + }); + this.threejs_.outputEncoding = THREE.sRGBEncoding; + this.threejs_.gammaFactor = 2.2; + this.threejs_.shadowMap.enabled = true; + this.threejs_.shadowMap.type = THREE.PCFSoftShadowMap; + this.threejs_.setPixelRatio(window.devicePixelRatio); + this.threejs_.setSize(window.innerWidth, window.innerHeight); + this.threejs_.domElement.id = DOM_IDS.THREEJS; + + document.getElementById('container').appendChild(this.threejs_.domElement); + + window.addEventListener('resize', () => { + this._OnWindowResize(); + }, false); + + const fov = 60; + const aspect = 1920 / 1080; + const near = 1.0; + const far = 10000.0; + this.camera_ = new THREE.PerspectiveCamera(fov, aspect, near, far); + this.camera_.position.set(25, 10, 25); + + this.scene_ = new THREE.Scene(); + this.scene_.fog = new THREE.FogExp2(0x89b2eb, 0.00002); + + let light = new THREE.DirectionalLight(0x8088b3, 0.7); + light.position.set(-10, 500, 10); + light.target.position.set(0, 0, 0); + light.castShadow = true; + light.shadow.bias = -0.001; + light.shadow.mapSize.width = 4096; + light.shadow.mapSize.height = 4096; + light.shadow.camera.near = 0.1; + light.shadow.camera.far = 1000.0; + light.shadow.camera.left = 100; + light.shadow.camera.right = -100; + light.shadow.camera.top = 100; + light.shadow.camera.bottom = -100; + this.scene_.add(light); + + this.sun_ = light; + + this.LoadSky_(); + } + _OnWindowResize() { + throw new Error('Method not implemented.'); + } + + LoadSky_() { + const hemiLight = new THREE.HemisphereLight(0x424a75, 0x6a88b5, 0.7); + // hemiLight.color.setHSL(0.6, 1, 0.4); + // hemiLight.groundColor.setHSL(0.095, 1, 0.5); + this.scene_.add(hemiLight); + + + const loader = new THREE.CubeTextureLoader(); + const texture = loader.load([ + './resources/terrain/space-posx.jpg', + './resources/terrain/space-negx.jpg', + './resources/terrain/space-posy.jpg', + './resources/terrain/space-negy.jpg', + './resources/terrain/space-posz.jpg', + './resources/terrain/space-negz.jpg', + ]); + texture.encoding = THREE.sRGBEncoding; + + const uniforms = { + "topColor": { value: new THREE.Color(0x000000) }, + "bottomColor": { value: new THREE.Color(0x5d679e) }, + "offset": { value: -500 }, + "exponent": { value: 0.3 }, + "background": { value: texture }, + }; + // uniforms["topColor"].value.copy(hemiLight.color); + + this.scene_.fog.color.copy(uniforms["bottomColor"].value); + + + const skyGeo = new THREE.SphereBufferGeometry(5000, 32, 15); + const skyMat = new THREE.ShaderMaterial({ + uniforms: uniforms, + vertexShader: _VS, + fragmentShader: _FS, + side: THREE.BackSide + }); + + const sky = new THREE.Mesh(skyGeo, skyMat); + this.scene_.add(sky); + } + + Update(_) { + const player = this.FindEntity('player'); + if (!player) { + return; + } + const pos = player._position; + + this.sun_.position.copy(pos); + this.sun_.position.add(new THREE.Vector3(-50, 200, -10)); + this.sun_.target.position.copy(pos); + this.sun_.updateMatrixWorld(); + this.sun_.target.updateMatrixWorld(); + } +} + +export { + ThreeJSController +} \ No newline at end of file diff --git a/client/src/ui-controller.ts b/packages/client/src/ui-controller.ts similarity index 94% rename from client/src/ui-controller.ts rename to packages/client/src/ui-controller.ts index 74b7bcb8..7b6a53f7 100644 --- a/client/src/ui-controller.ts +++ b/packages/client/src/ui-controller.ts @@ -1,5 +1,8 @@ +import { Constants } from 'shared'; import { Component } from './entity'; +const { DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES } = Constants; + class UIController extends Component { _params: any; _quests: {}; diff --git a/client/src/utils.ts b/packages/client/src/utils.ts similarity index 100% rename from client/src/utils.ts rename to packages/client/src/utils.ts diff --git a/client/styles/base.css b/packages/client/styles/base.css similarity index 100% rename from client/styles/base.css rename to packages/client/styles/base.css diff --git a/client/tsconfig.json b/packages/client/tsconfig.json similarity index 56% rename from client/tsconfig.json rename to packages/client/tsconfig.json index 2e0e5d9e..c2c0b34c 100644 --- a/client/tsconfig.json +++ b/packages/client/tsconfig.json @@ -1,10 +1,12 @@ { - "extends": "../tsconfig.packages.json", + "extends": "../../tsconfig.packages.json", "compilerOptions": { "rootDir": "src", "outDir": "dist", "target": "ES6", - "lib": ["ESNext", "dom"] + "lib": ["ESNext", "DOM"], + "module": "ESNext", + "moduleResolution": "Node" }, "include": ["./src/*.ts"], "exclude": ["./dist", "node_modules"] diff --git a/server/dist/index.js b/packages/server/dist/index.js similarity index 100% rename from server/dist/index.js rename to packages/server/dist/index.js diff --git a/server/dist/scripts/login-queue.js b/packages/server/dist/scripts/login-queue.js similarity index 100% rename from server/dist/scripts/login-queue.js rename to packages/server/dist/scripts/login-queue.js diff --git a/server/dist/scripts/world-client.js b/packages/server/dist/scripts/world-client.js similarity index 100% rename from server/dist/scripts/world-client.js rename to packages/server/dist/scripts/world-client.js diff --git a/server/dist/scripts/world-entity.js b/packages/server/dist/scripts/world-entity.js similarity index 100% rename from server/dist/scripts/world-entity.js rename to packages/server/dist/scripts/world-entity.js diff --git a/server/dist/scripts/world-manager.js b/packages/server/dist/scripts/world-manager.js similarity index 100% rename from server/dist/scripts/world-manager.js rename to packages/server/dist/scripts/world-manager.js diff --git a/server/dist/scripts/world-server.js b/packages/server/dist/scripts/world-server.js similarity index 100% rename from server/dist/scripts/world-server.js rename to packages/server/dist/scripts/world-server.js diff --git a/server/package-lock.json b/packages/server/package-lock.json similarity index 100% rename from server/package-lock.json rename to packages/server/package-lock.json diff --git a/server/package.json b/packages/server/package.json similarity index 100% rename from server/package.json rename to packages/server/package.json diff --git a/server/src/index.ts b/packages/server/src/index.ts similarity index 100% rename from server/src/index.ts rename to packages/server/src/index.ts diff --git a/server/src/scripts/login-queue.ts b/packages/server/src/scripts/login-queue.ts similarity index 90% rename from server/src/scripts/login-queue.ts rename to packages/server/src/scripts/login-queue.ts index 5cf46adb..97ac4caa 100644 --- a/server/src/scripts/login-queue.ts +++ b/packages/server/src/scripts/login-queue.ts @@ -1,6 +1,7 @@ -import { EVENT_TYPES, STATE_TYPES } from "shared/src/constants"; -import type {IOnMessageArgs, TEvt} from "shared/src/globaltypes"; +import {Constants} from 'shared'; +import type {GlobalTypes} from "shared"; +const { EVENT_TYPES, STATE_TYPES } = Constants; interface IState {} interface IOnEvent { @@ -9,7 +10,7 @@ interface IOnEvent { interface IFiniteStateMachine { _currentState: IState, - onEvent(evt: TEvt, data?: any): any; + onEvent(evt: GlobalTypes.TEvt, data?: any): any; Broadcast(evt: string): void, OnMessage: IOnEvent } @@ -58,7 +59,9 @@ interface IFiniteStateMachine { this.params = params; } - Broadcast(evt: {topic: EVENT_TYPES, params: any}) { + + + Broadcast(evt: {topic: any, params: any}) { this.#parent.Broadcast(evt); } @@ -134,11 +137,11 @@ interface IFiniteStateMachine { client.onMessage = (e: string, d: any) => this.OnMessage_(e, d); - this.#fsm = new FiniteStateMachine((e: TEvt) => { this.OnEvent(e); }); + this.#fsm = new FiniteStateMachine((e: any) => { this.OnEvent(e); }); this.#fsm.SetState(new Login_Await({})); } - OnEvent(evt: TEvt) { + OnEvent(evt: any) { this.#onLogin?.(evt.params); } diff --git a/server/src/scripts/world-client.ts b/packages/server/src/scripts/world-client.ts similarity index 91% rename from server/src/scripts/world-client.ts rename to packages/server/src/scripts/world-client.ts index 9e1d32bb..4b932514 100644 --- a/server/src/scripts/world-client.ts +++ b/packages/server/src/scripts/world-client.ts @@ -1,8 +1,12 @@ import { quat, vec3 } from 'gl-matrix'; -import { _TIMEOUT, EVENT_TYPES } from 'shared/src/constants'; + import type { WorldEntity } from './world-entity'; -import {SocketWrapper} from './world-server'; -import type {EntityManager} from 'shared/src/entity-manager' +import { SocketWrapper } from './world-server'; + +import { Constants, EntityManager as aEntityManager } from 'shared'; + +const { _TIMEOUT, EVENT_TYPES, EntityManager, STATE_TYPES } = { ...Constants, ...aEntityManager }; + class WorldClient { entity: WorldEntity; client: SocketWrapper; @@ -18,10 +22,10 @@ class WorldClient { this.entity = entity; // Hack - this.entity.onEvent_ = (t: EVENT_TYPES, d?: any) => this.OnEntityEvent_(t, d); + this.entity.onEvent_ = (t: any, d?: any) => this.OnEntityEvent_(t, d); this.client = client; - this.client.onMessage = (e: EVENT_TYPES, d: any) => this.OnMessage_(e, d); + this.client.onMessage = (e: any, d: any) => this.OnMessage_(e, d); this.client.Send(EVENT_TYPES.WORLD_PLAYER, this.entity.CreatePlayerPacket_()); this.client.Send(EVENT_TYPES.WORLD_STATS, this.entity.CreateStatsPacket_()); @@ -43,13 +47,13 @@ class WorldClient { OnDeath() { } - OnEntityEvent_(t: EVENT_TYPES, d: any) { + OnEntityEvent_(t: any, d: any) { if (t == EVENT_TYPES.ATTACK_DAMAGE) { this.OnDamageEvent_(d); } } - OnMessage_(evt: EVENT_TYPES, data: any) { + OnMessage_(evt: string, data: any) { this.#timeout = _TIMEOUT; if (evt == EVENT_TYPES.WORLD_UPDATE) { @@ -183,8 +187,8 @@ class WorldNetworkClient extends WorldClient { class AIStateMachine { currentState_: any; entity: any; - terrain_: EntityManager; - constructor(entity: WorldEntity, terrain: EntityManager) { + terrain_: InstanceType; + constructor(entity: WorldEntity, terrain: InstanceType) { this.currentState_ = null; this.entity = entity; this.terrain_ = terrain; @@ -322,7 +326,7 @@ class AIState_WaitAttackDone extends AIState { class FakeClient extends SocketWrapper { constructor() { super(null) - } + } Send(msg, data) { } @@ -330,7 +334,7 @@ class FakeClient extends SocketWrapper { }; class WorldAIClient extends WorldClient { - constructor(entity: WorldEntity, terrain: EntityManager, onDeath) { + constructor(entity: WorldEntity, terrain: InstanceType, onDeath) { super(new FakeClient(), entity); this.terrain_ = terrain; this.onDeath_ = onDeath; diff --git a/server/src/scripts/world-entity.ts b/packages/server/src/scripts/world-entity.ts similarity index 96% rename from server/src/scripts/world-entity.ts rename to packages/server/src/scripts/world-entity.ts index 22ec86fd..df54f5b7 100644 --- a/server/src/scripts/world-entity.ts +++ b/packages/server/src/scripts/world-entity.ts @@ -1,9 +1,10 @@ import { quat, vec3 } from 'gl-matrix'; -import { WEAPONS_DATA } from 'shared/src/defs'; -import { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES } from 'shared/src/constants' +import { Constants, Defs } from 'shared'; // import { IWorldEntity } from 'shared/src/globaltypes'; -import type {WorldClient} from "./world-client"; +import type { WorldClient } from "./world-client"; + +const { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, WEAPONS_DATA } = { ...Constants, ...Defs }; class Action_Attack { #onAction: any; @@ -136,7 +137,7 @@ class WorldEntity { ]; } - UpdateTransform(transformData: [STATE_TYPES, vec3, quat]) { + UpdateTransform(transformData: [string, vec3, quat]) { const newState = transformData[0]; const [vecX, vecY, vecZ] = transformData[1]; const [quatX, quatY, quatZ, quatW] = transformData[2] @@ -255,7 +256,7 @@ class WorldEntity { } // this seems wrong to me. TS doesn't have a typeof ENUM it seems. - SetState(s: STATE_TYPES) { + SetState(s: string) { if (this.state_ != STATE_TYPES.DEATH) { this.state_ = s; } diff --git a/server/src/scripts/world-manager.ts b/packages/server/src/scripts/world-manager.ts similarity index 96% rename from server/src/scripts/world-manager.ts rename to packages/server/src/scripts/world-manager.ts index 732919b7..46723024 100644 --- a/server/src/scripts/world-manager.ts +++ b/packages/server/src/scripts/world-manager.ts @@ -4,9 +4,9 @@ import { WorldAIClient, WorldNetworkClient } from './world-client'; import { WorldEntity } from './world-entity'; import { SpatialHashGrid } from 'shared/src/spatial-hash-grid'; -import { HeightGenerator } from 'shared/src/terrain-height'; -import { CHARACTER_MODELS } from 'shared/src/defs'; -import {CLASS_TYPES} from 'shared/src/constants' +import { HeightGenerator } from 'shared'; +import { CHARACTER_MODELS } from 'shared'; +import {CLASS_TYPES} from 'shared' class MonsterSpawner { parent_: any; diff --git a/server/src/scripts/world-server.ts b/packages/server/src/scripts/world-server.ts similarity index 97% rename from server/src/scripts/world-server.ts rename to packages/server/src/scripts/world-server.ts index 31041626..882d385d 100644 --- a/server/src/scripts/world-server.ts +++ b/packages/server/src/scripts/world-server.ts @@ -1,5 +1,5 @@ import { performance } from 'perf_hooks'; -import {EVENT_TYPES} from 'shared/src/constants' +import {EVENT_TYPES} from 'shared' import { WorldManager } from './world-manager'; import { LoginQueue } from './login-queue'; diff --git a/server/tsconfig.json b/packages/server/tsconfig.json similarity index 57% rename from server/tsconfig.json rename to packages/server/tsconfig.json index 692edb0a..af521dca 100644 --- a/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -1,8 +1,10 @@ { - "extends": "../tsconfig.packages.json", + "extends": "../../tsconfig.packages.json", "compilerOptions": { "rootDir": "src", - "outDir": "dist" + "outDir": "dist", + "target": "ES6", + "moduleResolution": "Node" }, "include": ["./src/*.ts"], "exclude": ["./dist", "node_modules"], diff --git a/shared/package.json b/packages/shared/package.json similarity index 87% rename from shared/package.json rename to packages/shared/package.json index 3daf9629..cc049af1 100644 --- a/shared/package.json +++ b/packages/shared/package.json @@ -7,5 +7,5 @@ "tsc-watch": "^4.2.9", "typescript": "^4.2.3" }, - "main": "dist/index.js" + "main": "src/index.ts" } diff --git a/shared/src/OrbitControls.ts b/packages/shared/src/OrbitControls.ts similarity index 100% rename from shared/src/OrbitControls.ts rename to packages/shared/src/OrbitControls.ts diff --git a/shared/src/constants.ts b/packages/shared/src/constants.ts similarity index 98% rename from shared/src/constants.ts rename to packages/shared/src/constants.ts index 1b4c1db8..e3dcecf8 100644 --- a/shared/src/constants.ts +++ b/packages/shared/src/constants.ts @@ -42,6 +42,7 @@ enum EVENT_TYPES { CONNECT = 'connect', NETWORK_UPDATE = 'network.update', EVENTS_NETWORK = 'events.network', + INPUT_PICKED = 'input.picked', } enum KNOWN_ENTITIES { @@ -119,4 +120,4 @@ export { STATE_TYPES, WEAPON_TYPES_ENUM, ANIM_TYPES, -} \ No newline at end of file +}; \ No newline at end of file diff --git a/packages/shared/src/dat.gui.module.ts b/packages/shared/src/dat.gui.module.ts new file mode 100644 index 00000000..b545c77a --- /dev/null +++ b/packages/shared/src/dat.gui.module.ts @@ -0,0 +1,3576 @@ +// @ts-nocheck +/** + * dat-gui JavaScript Controller Library + * http://code.google.com/p/dat-gui + * + * Copyright 2011 Data Arts Team, Google Creative Lab + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +function ___$insertStyle(css) { + + if (!css) { + + return; + + } + if (typeof window === 'undefined') { + + return; + + } + + var style = document.createElement('style'); + + style.setAttribute('type', 'text/css'); + style.innerHTML = css; + document.head.appendChild(style); + + return css; + +} + +function colorToString(color, forceCSSHex) { + + var colorFormat = color.__state.conversionName.toString(); + var r = Math.round(color.r); + var g = Math.round(color.g); + var b = Math.round(color.b); + var a = color.a; + var h = Math.round(color.h); + var s = color.s.toFixed(1); + var v = color.v.toFixed(1); + if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') { + + var str = color.hex.toString(16); + while (str.length < 6) { + + str = '0' + str; + + } + return '#' + str; + + } else if (colorFormat === 'CSS_RGB') { + + return 'rgb(' + r + ',' + g + ',' + b + ')'; + + } else if (colorFormat === 'CSS_RGBA') { + + return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + + } else if (colorFormat === 'HEX') { + + return '0x' + color.hex.toString(16); + + } else if (colorFormat === 'RGB_ARRAY') { + + return '[' + r + ',' + g + ',' + b + ']'; + + } else if (colorFormat === 'RGBA_ARRAY') { + + return '[' + r + ',' + g + ',' + b + ',' + a + ']'; + + } else if (colorFormat === 'RGB_OBJ') { + + return '{r:' + r + ',g:' + g + ',b:' + b + '}'; + + } else if (colorFormat === 'RGBA_OBJ') { + + return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}'; + + } else if (colorFormat === 'HSV_OBJ') { + + return '{h:' + h + ',s:' + s + ',v:' + v + '}'; + + } else if (colorFormat === 'HSVA_OBJ') { + + return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}'; + + } + return 'unknown format'; + +} + +var ARR_EACH = Array.prototype.forEach; +var ARR_SLICE = Array.prototype.slice; +var Common = { + BREAK: {}, + extend: function extend(target) { + + this.each(ARR_SLICE.call(arguments, 1), function (obj) { + + var keys = this.isObject(obj) ? Object.keys(obj) : []; + keys.forEach(function (key) { + + if (!this.isUndefined(obj[key])) { + + target[key] = obj[key]; + + } + + }.bind(this)); + + }, this); + return target; + + }, + defaults: function defaults(target) { + + this.each(ARR_SLICE.call(arguments, 1), function (obj) { + + var keys = this.isObject(obj) ? Object.keys(obj) : []; + keys.forEach(function (key) { + + if (this.isUndefined(target[key])) { + + target[key] = obj[key]; + + } + + }.bind(this)); + + }, this); + return target; + + }, + compose: function compose() { + + var toCall = ARR_SLICE.call(arguments); + return function () { + + var args = ARR_SLICE.call(arguments); + for (var i = toCall.length - 1; i >= 0; i--) { + + args = [toCall[i].apply(this, args)]; + + } + return args[0]; + + }; + + }, + each: function each(obj, itr, scope) { + + if (!obj) { + + return; + + } + if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) { + + obj.forEach(itr, scope); + + } else if (obj.length === obj.length + 0) { + + var key = void 0; + var l = void 0; + for (key = 0, l = obj.length; key < l; key++) { + + if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) { + + return; + + } + + } + + } else { + + for (var _key in obj) { + + if (itr.call(scope, obj[_key], _key) === this.BREAK) { + + return; + + } + + } + + } + + }, + defer: function defer(fnc) { + + setTimeout(fnc, 0); + + }, + debounce: function debounce(func, threshold, callImmediately) { + + var timeout = void 0; + return function () { + + var obj = this; + var args = arguments; + function delayed() { + + timeout = null; + if (!callImmediately) func.apply(obj, args); + + } + var callNow = callImmediately || !timeout; + clearTimeout(timeout); + timeout = setTimeout(delayed, threshold); + if (callNow) { + + func.apply(obj, args); + + } + + }; + + }, + toArray: function toArray(obj) { + + if (obj.toArray) return obj.toArray(); + return ARR_SLICE.call(obj); + + }, + isUndefined: function isUndefined(obj) { + + return obj === undefined; + + }, + isNull: function isNull(obj) { + + return obj === null; + + }, + isNaN: function (_isNaN) { + + function isNaN() { + + return _isNaN.apply(this, arguments); + + } + isNaN.toString = function () { + + return _isNaN.toString(); + + }; + return isNaN; + + }(function (obj) { + + return isNaN(obj); + + }), + isArray: Array.isArray || function (obj) { + + return obj.constructor === Array; + + }, + isObject: function isObject(obj) { + + return obj === Object(obj); + + }, + isNumber: function isNumber(obj) { + + return obj === obj + 0; + + }, + isString: function isString(obj) { + + return obj === obj + ''; + + }, + isBoolean: function isBoolean(obj) { + + return obj === false || obj === true; + + }, + isFunction: function isFunction(obj) { + + return obj instanceof Function; + + } +}; + +var INTERPRETATIONS = [ + { + litmus: Common.isString, + conversions: { + THREE_CHAR_HEX: { + read: function read(original) { + + var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i); + if (test === null) { + + return false; + + } + return { + space: 'HEX', + hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0) + }; + + }, + write: colorToString + }, + SIX_CHAR_HEX: { + read: function read(original) { + + var test = original.match(/^#([A-F0-9]{6})$/i); + if (test === null) { + + return false; + + } + return { + space: 'HEX', + hex: parseInt('0x' + test[1].toString(), 0) + }; + + }, + write: colorToString + }, + CSS_RGB: { + read: function read(original) { + + var test = original.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + if (test === null) { + + return false; + + } + return { + space: 'RGB', + r: parseFloat(test[1]), + g: parseFloat(test[2]), + b: parseFloat(test[3]) + }; + + }, + write: colorToString + }, + CSS_RGBA: { + read: function read(original) { + + var test = original.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + if (test === null) { + + return false; + + } + return { + space: 'RGB', + r: parseFloat(test[1]), + g: parseFloat(test[2]), + b: parseFloat(test[3]), + a: parseFloat(test[4]) + }; + + }, + write: colorToString + } + } + }, + { + litmus: Common.isNumber, + conversions: { + HEX: { + read: function read(original) { + + return { + space: 'HEX', + hex: original, + conversionName: 'HEX' + }; + + }, + write: function write(color) { + + return color.hex; + + } + } + } + }, + { + litmus: Common.isArray, + conversions: { + RGB_ARRAY: { + read: function read(original) { + + if (original.length !== 3) { + + return false; + + } + return { + space: 'RGB', + r: original[0], + g: original[1], + b: original[2] + }; + + }, + write: function write(color) { + + return [color.r, color.g, color.b]; + + } + }, + RGBA_ARRAY: { + read: function read(original) { + + if (original.length !== 4) return false; + return { + space: 'RGB', + r: original[0], + g: original[1], + b: original[2], + a: original[3] + }; + + }, + write: function write(color) { + + return [color.r, color.g, color.b, color.a]; + + } + } + } + }, + { + litmus: Common.isObject, + conversions: { + RGBA_OBJ: { + read: function read(original) { + + if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) { + + return { + space: 'RGB', + r: original.r, + g: original.g, + b: original.b, + a: original.a + }; + + } + return false; + + }, + write: function write(color) { + + return { + r: color.r, + g: color.g, + b: color.b, + a: color.a + }; + + } + }, + RGB_OBJ: { + read: function read(original) { + + if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) { + + return { + space: 'RGB', + r: original.r, + g: original.g, + b: original.b + }; + + } + return false; + + }, + write: function write(color) { + + return { + r: color.r, + g: color.g, + b: color.b + }; + + } + }, + HSVA_OBJ: { + read: function read(original) { + + if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) { + + return { + space: 'HSV', + h: original.h, + s: original.s, + v: original.v, + a: original.a + }; + + } + return false; + + }, + write: function write(color) { + + return { + h: color.h, + s: color.s, + v: color.v, + a: color.a + }; + + } + }, + HSV_OBJ: { + read: function read(original) { + + if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) { + + return { + space: 'HSV', + h: original.h, + s: original.s, + v: original.v + }; + + } + return false; + + }, + write: function write(color) { + + return { + h: color.h, + s: color.s, + v: color.v + }; + + } + } + } + }]; +var result = void 0; +var toReturn = void 0; +var interpret = function interpret() { + + toReturn = false; + var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0]; + Common.each(INTERPRETATIONS, function (family) { + + if (family.litmus(original)) { + + Common.each(family.conversions, function (conversion, conversionName) { + + result = conversion.read(original); + if (toReturn === false && result !== false) { + + toReturn = result; + result.conversionName = conversionName; + result.conversion = conversion; + return Common.BREAK; + + } + + }, null); + return Common.BREAK; + + } + + }); + return toReturn; + +}; + +var tmpComponent = void 0; +var ColorMath = { + hsv_to_rgb: function hsv_to_rgb(h, s, v) { + + var hi = Math.floor(h / 60) % 6; + var f = h / 60 - Math.floor(h / 60); + var p = v * (1.0 - s); + var q = v * (1.0 - f * s); + var t = v * (1.0 - (1.0 - f) * s); + var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi]; + return { + r: c[0] * 255, + g: c[1] * 255, + b: c[2] * 255 + }; + + }, + rgb_to_hsv: function rgb_to_hsv(r, g, b) { + + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h = void 0; + var s = void 0; + if (max !== 0) { + + s = delta / max; + + } else { + + return { + h: NaN, + s: 0, + v: 0 + }; + + } + if (r === max) { + + h = (g - b) / delta; + + } else if (g === max) { + + h = 2 + (b - r) / delta; + + } else { + + h = 4 + (r - g) / delta; + + } + h /= 6; + if (h < 0) { + + h += 1; + + } + return { + h: h * 360, + s: s, + v: max / 255 + }; + + }, + rgb_to_hex: function rgb_to_hex(r, g, b) { + + var hex = this.hex_with_component(0, 2, r); + hex = this.hex_with_component(hex, 1, g); + hex = this.hex_with_component(hex, 0, b); + return hex; + + }, + component_from_hex: function component_from_hex(hex, componentIndex) { + + return hex >> componentIndex * 8 & 0xFF; + + }, + hex_with_component: function hex_with_component(hex, componentIndex, value) { + + return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent); + + } +}; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + + return typeof obj; + +} : function (obj) { + + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + + if (!(instance instanceof Constructor)) { + + throw new TypeError("Cannot call a class as a function"); + + } + +}; + +var createClass = function () { + + function defineProperties(target, props) { + + for (var i = 0; i < props.length; i++) { + + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + + } + + } + + return function (Constructor, protoProps, staticProps) { + + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + + }; + +}(); + + + + + + + +var get = function get(object, property, receiver) { + + if (object === null) object = Function.prototype; + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + + var parent = Object.getPrototypeOf(object); + + if (parent === null) { + + return undefined; + + } else { + + return get(parent, property, receiver); + + } + + } else if ("value" in desc) { + + return desc.value; + + } else { + + var getter = desc.get; + + if (getter === undefined) { + + return undefined; + + } + + return getter.call(receiver); + + } + +}; + +var inherits = function (subClass, superClass) { + + if (typeof superClass !== "function" && superClass !== null) { + + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; + +}; + + + + + + + + + + + +var possibleConstructorReturn = function (self, call) { + + if (!self) { + + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; + +}; + +var Color = function () { + + function Color() { + + classCallCheck(this, Color); + this.__state = interpret.apply(this, arguments); + if (this.__state === false) { + + throw new Error('Failed to interpret color arguments'); + + } + this.__state.a = this.__state.a || 1; + + } + createClass(Color, [{ + key: 'toString', + value: function toString() { + + return colorToString(this); + + } + }, { + key: 'toHexString', + value: function toHexString() { + + return colorToString(this, true); + + } + }, { + key: 'toOriginal', + value: function toOriginal() { + + return this.__state.conversion.write(this); + + } + }]); + return Color; + +}(); +function defineRGBComponent(target, component, componentHexIndex) { + + Object.defineProperty(target, component, { + get: function get$$1() { + + if (this.__state.space === 'RGB') { + + return this.__state[component]; + + } + Color.recalculateRGB(this, component, componentHexIndex); + return this.__state[component]; + + }, + set: function set$$1(v) { + + if (this.__state.space !== 'RGB') { + + Color.recalculateRGB(this, component, componentHexIndex); + this.__state.space = 'RGB'; + + } + this.__state[component] = v; + + } + }); + +} +function defineHSVComponent(target, component) { + + Object.defineProperty(target, component, { + get: function get$$1() { + + if (this.__state.space === 'HSV') { + + return this.__state[component]; + + } + Color.recalculateHSV(this); + return this.__state[component]; + + }, + set: function set$$1(v) { + + if (this.__state.space !== 'HSV') { + + Color.recalculateHSV(this); + this.__state.space = 'HSV'; + + } + this.__state[component] = v; + + } + }); + +} +Color.recalculateRGB = function (color, component, componentHexIndex) { + + if (color.__state.space === 'HEX') { + + color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex); + + } else if (color.__state.space === 'HSV') { + + Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v)); + + } else { + + throw new Error('Corrupted color state'); + + } + +}; +Color.recalculateHSV = function (color) { + + var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b); + Common.extend(color.__state, { + s: result.s, + v: result.v + }); + if (!Common.isNaN(result.h)) { + + color.__state.h = result.h; + + } else if (Common.isUndefined(color.__state.h)) { + + color.__state.h = 0; + + } + +}; +Color.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a']; +defineRGBComponent(Color.prototype, 'r', 2); +defineRGBComponent(Color.prototype, 'g', 1); +defineRGBComponent(Color.prototype, 'b', 0); +defineHSVComponent(Color.prototype, 'h'); +defineHSVComponent(Color.prototype, 's'); +defineHSVComponent(Color.prototype, 'v'); +Object.defineProperty(Color.prototype, 'a', { + get: function get$$1() { + + return this.__state.a; + + }, + set: function set$$1(v) { + + this.__state.a = v; + + } +}); +Object.defineProperty(Color.prototype, 'hex', { + get: function get$$1() { + + if (this.__state.space !== 'HEX') { + + this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b); + this.__state.space = 'HEX'; + + } + return this.__state.hex; + + }, + set: function set$$1(v) { + + this.__state.space = 'HEX'; + this.__state.hex = v; + + } +}); + +var Controller = function () { + + function Controller(object, property) { + + classCallCheck(this, Controller); + this.initialValue = object[property]; + this.domElement = document.createElement('div'); + this.object = object; + this.property = property; + this.__onChange = undefined; + this.__onFinishChange = undefined; + + } + createClass(Controller, [{ + key: 'onChange', + value: function onChange(fnc) { + + this.__onChange = fnc; + return this; + + } + }, { + key: 'onFinishChange', + value: function onFinishChange(fnc) { + + this.__onFinishChange = fnc; + return this; + + } + }, { + key: 'setValue', + value: function setValue(newValue) { + + this.object[this.property] = newValue; + if (this.__onChange) { + + this.__onChange.call(this, newValue); + + } + this.updateDisplay(); + return this; + + } + }, { + key: 'getValue', + value: function getValue() { + + return this.object[this.property]; + + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + + return this; + + } + }, { + key: 'isModified', + value: function isModified() { + + return this.initialValue !== this.getValue(); + + } + }]); + return Controller; + +}(); + +var EVENT_MAP = { + HTMLEvents: ['change'], + MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'], + KeyboardEvents: ['keydown'] +}; +var EVENT_MAP_INV = {}; +Common.each(EVENT_MAP, function (v, k) { + + Common.each(v, function (e) { + + EVENT_MAP_INV[e] = k; + + }); + +}); +var CSS_VALUE_PIXELS = /(\d+(\.\d+)?)px/; +function cssValueToPixels(val) { + + if (val === '0' || Common.isUndefined(val)) { + + return 0; + + } + var match = val.match(CSS_VALUE_PIXELS); + if (!Common.isNull(match)) { + + return parseFloat(match[1]); + + } + return 0; + +} +var dom = { + makeSelectable: function makeSelectable(elem, selectable) { + + if (elem === undefined || elem.style === undefined) return; + elem.onselectstart = selectable ? function () { + + return false; + + } : function () { }; + elem.style.MozUserSelect = selectable ? 'auto' : 'none'; + elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none'; + elem.unselectable = selectable ? 'on' : 'off'; + + }, + makeFullscreen: function makeFullscreen(elem, hor, vert) { + + var vertical = vert; + var horizontal = hor; + if (Common.isUndefined(horizontal)) { + + horizontal = true; + + } + if (Common.isUndefined(vertical)) { + + vertical = true; + + } + elem.style.position = 'absolute'; + if (horizontal) { + + elem.style.left = 0; + elem.style.right = 0; + + } + if (vertical) { + + elem.style.top = 0; + elem.style.bottom = 0; + + } + + }, + fakeEvent: function fakeEvent(elem, eventType, pars, aux) { + + var params = pars || {}; + var className = EVENT_MAP_INV[eventType]; + if (!className) { + + throw new Error('Event type ' + eventType + ' not supported.'); + + } + var evt = document.createEvent(className); + switch (className) { + + case 'MouseEvents': + { + + var clientX = params.x || params.clientX || 0; + var clientY = params.y || params.clientY || 0; + evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0, + 0, + clientX, + clientY, + false, false, false, false, 0, null); + break; + + } + case 'KeyboardEvents': + { + + var init = evt.initKeyboardEvent || evt.initKeyEvent; + Common.defaults(params, { + cancelable: true, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + keyCode: undefined, + charCode: undefined + }); + init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode); + break; + + } + default: + { + + evt.initEvent(eventType, params.bubbles || false, params.cancelable || true); + break; + + } + + } + Common.defaults(evt, aux); + elem.dispatchEvent(evt); + + }, + bind: function bind(elem, event, func, newBool) { + + var bool = newBool || false; + if (elem.addEventListener) { + + elem.addEventListener(event, func, bool); + + } else if (elem.attachEvent) { + + elem.attachEvent('on' + event, func); + + } + return dom; + + }, + unbind: function unbind(elem, event, func, newBool) { + + var bool = newBool || false; + if (elem.removeEventListener) { + + elem.removeEventListener(event, func, bool); + + } else if (elem.detachEvent) { + + elem.detachEvent('on' + event, func); + + } + return dom; + + }, + addClass: function addClass(elem, className) { + + if (elem.className === undefined) { + + elem.className = className; + + } else if (elem.className !== className) { + + var classes = elem.className.split(/ +/); + if (classes.indexOf(className) === - 1) { + + classes.push(className); + elem.className = classes.join(' ').replace(/^\s+/, '').replace(/\s+$/, ''); + + } + + } + return dom; + + }, + removeClass: function removeClass(elem, className) { + + if (className) { + + if (elem.className === className) { + + elem.removeAttribute('class'); + + } else { + + var classes = elem.className.split(/ +/); + var index = classes.indexOf(className); + if (index !== - 1) { + + classes.splice(index, 1); + elem.className = classes.join(' '); + + } + + } + + } else { + + elem.className = undefined; + + } + return dom; + + }, + hasClass: function hasClass(elem, className) { + + return new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)').test(elem.className) || false; + + }, + getWidth: function getWidth(elem) { + + var style = getComputedStyle(elem); + return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width); + + }, + getHeight: function getHeight(elem) { + + var style = getComputedStyle(elem); + return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height); + + }, + getOffset: function getOffset(el) { + + var elem = el; + var offset = { left: 0, top: 0 }; + if (elem.offsetParent) { + + do { + + offset.left += elem.offsetLeft; + offset.top += elem.offsetTop; + elem = elem.offsetParent; + + } while (elem); + + } + return offset; + + }, + isActive: function isActive(elem) { + + return elem === document.activeElement && (elem.type || elem.href); + + } +}; + +var BooleanController = function (_Controller) { + + inherits(BooleanController, _Controller); + function BooleanController(object, property) { + + classCallCheck(this, BooleanController); + var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property)); + var _this = _this2; + _this2.__prev = _this2.getValue(); + _this2.__checkbox = document.createElement('input'); + _this2.__checkbox.setAttribute('type', 'checkbox'); + function onChange() { + + _this.setValue(!_this.__prev); + + } + dom.bind(_this2.__checkbox, 'change', onChange, false); + _this2.domElement.appendChild(_this2.__checkbox); + _this2.updateDisplay(); + return _this2; + + } + createClass(BooleanController, [{ + key: 'setValue', + value: function setValue(v) { + + var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v); + if (this.__onFinishChange) { + + this.__onFinishChange.call(this, this.getValue()); + + } + this.__prev = this.getValue(); + return toReturn; + + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + + if (this.getValue() === true) { + + this.__checkbox.setAttribute('checked', 'checked'); + this.__checkbox.checked = true; + this.__prev = true; + + } else { + + this.__checkbox.checked = false; + this.__prev = false; + + } + return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this); + + } + }]); + return BooleanController; + +}(Controller); + +var OptionController = function (_Controller) { + + inherits(OptionController, _Controller); + function OptionController(object, property, opts) { + + classCallCheck(this, OptionController); + var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property)); + var options = opts; + var _this = _this2; + _this2.__select = document.createElement('select'); + if (Common.isArray(options)) { + + var map = {}; + Common.each(options, function (element) { + + map[element] = element; + + }); + options = map; + + } + Common.each(options, function (value, key) { + + var opt = document.createElement('option'); + opt.innerHTML = key; + opt.setAttribute('value', value); + _this.__select.appendChild(opt); + + }); + _this2.updateDisplay(); + dom.bind(_this2.__select, 'change', function () { + + var desiredValue = this.options[this.selectedIndex].value; + _this.setValue(desiredValue); + + }); + _this2.domElement.appendChild(_this2.__select); + return _this2; + + } + createClass(OptionController, [{ + key: 'setValue', + value: function setValue(v) { + + var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v); + if (this.__onFinishChange) { + + this.__onFinishChange.call(this, this.getValue()); + + } + return toReturn; + + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + + if (dom.isActive(this.__select)) return this; + this.__select.value = this.getValue(); + return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this); + + } + }]); + return OptionController; + +}(Controller); + +var StringController = function (_Controller) { + + inherits(StringController, _Controller); + function StringController(object, property) { + + classCallCheck(this, StringController); + var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property)); + var _this = _this2; + function onChange() { + + _this.setValue(_this.__input.value); + + } + function onBlur() { + + if (_this.__onFinishChange) { + + _this.__onFinishChange.call(_this, _this.getValue()); + + } + + } + _this2.__input = document.createElement('input'); + _this2.__input.setAttribute('type', 'text'); + dom.bind(_this2.__input, 'keyup', onChange); + dom.bind(_this2.__input, 'change', onChange); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__input, 'keydown', function (e) { + + if (e.keyCode === 13) { + + this.blur(); + + } + + }); + _this2.updateDisplay(); + _this2.domElement.appendChild(_this2.__input); + return _this2; + + } + createClass(StringController, [{ + key: 'updateDisplay', + value: function updateDisplay() { + + if (!dom.isActive(this.__input)) { + + this.__input.value = this.getValue(); + + } + return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this); + + } + }]); + return StringController; + +}(Controller); + +function numDecimals(x) { + + var _x = x.toString(); + if (_x.indexOf('.') > - 1) { + + return _x.length - _x.indexOf('.') - 1; + + } + return 0; + +} +var NumberController = function (_Controller) { + + inherits(NumberController, _Controller); + function NumberController(object, property, params) { + + classCallCheck(this, NumberController); + var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property)); + var _params = params || {}; + _this.__min = _params.min; + _this.__max = _params.max; + _this.__step = _params.step; + if (Common.isUndefined(_this.__step)) { + + if (_this.initialValue === 0) { + + _this.__impliedStep = 1; + + } else { + + _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10; + + } + + } else { + + _this.__impliedStep = _this.__step; + + } + _this.__precision = numDecimals(_this.__impliedStep); + return _this; + + } + createClass(NumberController, [{ + key: 'setValue', + value: function setValue(v) { + + var _v = v; + if (this.__min !== undefined && _v < this.__min) { + + _v = this.__min; + + } else if (this.__max !== undefined && _v > this.__max) { + + _v = this.__max; + + } + if (this.__step !== undefined && _v % this.__step !== 0) { + + _v = Math.round(_v / this.__step) * this.__step; + + } + return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v); + + } + }, { + key: 'min', + value: function min(minValue) { + + this.__min = minValue; + return this; + + } + }, { + key: 'max', + value: function max(maxValue) { + + this.__max = maxValue; + return this; + + } + }, { + key: 'step', + value: function step(stepValue) { + + this.__step = stepValue; + this.__impliedStep = stepValue; + this.__precision = numDecimals(stepValue); + return this; + + } + }]); + return NumberController; + +}(Controller); + +function roundToDecimal(value, decimals) { + + var tenTo = Math.pow(10, decimals); + return Math.round(value * tenTo) / tenTo; + +} +var NumberControllerBox = function (_NumberController) { + + inherits(NumberControllerBox, _NumberController); + function NumberControllerBox(object, property, params) { + + classCallCheck(this, NumberControllerBox); + var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params)); + _this2.__truncationSuspended = false; + var _this = _this2; + var prevY = void 0; + function onChange() { + + var attempted = parseFloat(_this.__input.value); + if (!Common.isNaN(attempted)) { + + _this.setValue(attempted); + + } + + } + function onFinish() { + + if (_this.__onFinishChange) { + + _this.__onFinishChange.call(_this, _this.getValue()); + + } + + } + function onBlur() { + + onFinish(); + + } + function onMouseDrag(e) { + + var diff = prevY - e.clientY; + _this.setValue(_this.getValue() + diff * _this.__impliedStep); + prevY = e.clientY; + + } + function onMouseUp() { + + dom.unbind(window, 'mousemove', onMouseDrag); + dom.unbind(window, 'mouseup', onMouseUp); + onFinish(); + + } + function onMouseDown(e) { + + dom.bind(window, 'mousemove', onMouseDrag); + dom.bind(window, 'mouseup', onMouseUp); + prevY = e.clientY; + + } + _this2.__input = document.createElement('input'); + _this2.__input.setAttribute('type', 'text'); + dom.bind(_this2.__input, 'change', onChange); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__input, 'mousedown', onMouseDown); + dom.bind(_this2.__input, 'keydown', function (e) { + + if (e.keyCode === 13) { + + _this.__truncationSuspended = true; + this.blur(); + _this.__truncationSuspended = false; + onFinish(); + + } + + }); + _this2.updateDisplay(); + _this2.domElement.appendChild(_this2.__input); + return _this2; + + } + createClass(NumberControllerBox, [{ + key: 'updateDisplay', + value: function updateDisplay() { + + this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision); + return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this); + + } + }]); + return NumberControllerBox; + +}(NumberController); + +function map(v, i1, i2, o1, o2) { + + return o1 + (o2 - o1) * ((v - i1) / (i2 - i1)); + +} +var NumberControllerSlider = function (_NumberController) { + + inherits(NumberControllerSlider, _NumberController); + function NumberControllerSlider(object, property, min, max, step) { + + classCallCheck(this, NumberControllerSlider); + var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step })); + var _this = _this2; + _this2.__background = document.createElement('div'); + _this2.__foreground = document.createElement('div'); + dom.bind(_this2.__background, 'mousedown', onMouseDown); + dom.bind(_this2.__background, 'touchstart', onTouchStart); + dom.addClass(_this2.__background, 'slider'); + dom.addClass(_this2.__foreground, 'slider-fg'); + function onMouseDown(e) { + + document.activeElement.blur(); + dom.bind(window, 'mousemove', onMouseDrag); + dom.bind(window, 'mouseup', onMouseUp); + onMouseDrag(e); + + } + function onMouseDrag(e) { + + e.preventDefault(); + var bgRect = _this.__background.getBoundingClientRect(); + _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)); + return false; + + } + function onMouseUp() { + + dom.unbind(window, 'mousemove', onMouseDrag); + dom.unbind(window, 'mouseup', onMouseUp); + if (_this.__onFinishChange) { + + _this.__onFinishChange.call(_this, _this.getValue()); + + } + + } + function onTouchStart(e) { + + if (e.touches.length !== 1) { + + return; + + } + dom.bind(window, 'touchmove', onTouchMove); + dom.bind(window, 'touchend', onTouchEnd); + onTouchMove(e); + + } + function onTouchMove(e) { + + var clientX = e.touches[0].clientX; + var bgRect = _this.__background.getBoundingClientRect(); + _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)); + + } + function onTouchEnd() { + + dom.unbind(window, 'touchmove', onTouchMove); + dom.unbind(window, 'touchend', onTouchEnd); + if (_this.__onFinishChange) { + + _this.__onFinishChange.call(_this, _this.getValue()); + + } + + } + _this2.updateDisplay(); + _this2.__background.appendChild(_this2.__foreground); + _this2.domElement.appendChild(_this2.__background); + return _this2; + + } + createClass(NumberControllerSlider, [{ + key: 'updateDisplay', + value: function updateDisplay() { + + var pct = (this.getValue() - this.__min) / (this.__max - this.__min); + this.__foreground.style.width = pct * 100 + '%'; + return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this); + + } + }]); + return NumberControllerSlider; + +}(NumberController); + +var FunctionController = function (_Controller) { + + inherits(FunctionController, _Controller); + function FunctionController(object, property, text) { + + classCallCheck(this, FunctionController); + var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property)); + var _this = _this2; + _this2.__button = document.createElement('div'); + _this2.__button.innerHTML = text === undefined ? 'Fire' : text; + dom.bind(_this2.__button, 'click', function (e) { + + e.preventDefault(); + _this.fire(); + return false; + + }); + dom.addClass(_this2.__button, 'button'); + _this2.domElement.appendChild(_this2.__button); + return _this2; + + } + createClass(FunctionController, [{ + key: 'fire', + value: function fire() { + + if (this.__onChange) { + + this.__onChange.call(this); + + } + this.getValue().call(this.object); + if (this.__onFinishChange) { + + this.__onFinishChange.call(this, this.getValue()); + + } + + } + }]); + return FunctionController; + +}(Controller); + +var ColorController = function (_Controller) { + + inherits(ColorController, _Controller); + function ColorController(object, property) { + + classCallCheck(this, ColorController); + var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property)); + _this2.__color = new Color(_this2.getValue()); + _this2.__temp = new Color(0); + var _this = _this2; + _this2.domElement = document.createElement('div'); + dom.makeSelectable(_this2.domElement, false); + _this2.__selector = document.createElement('div'); + _this2.__selector.className = 'selector'; + _this2.__saturation_field = document.createElement('div'); + _this2.__saturation_field.className = 'saturation-field'; + _this2.__field_knob = document.createElement('div'); + _this2.__field_knob.className = 'field-knob'; + _this2.__field_knob_border = '2px solid '; + _this2.__hue_knob = document.createElement('div'); + _this2.__hue_knob.className = 'hue-knob'; + _this2.__hue_field = document.createElement('div'); + _this2.__hue_field.className = 'hue-field'; + _this2.__input = document.createElement('input'); + _this2.__input.type = 'text'; + _this2.__input_textShadow = '0 1px 1px '; + dom.bind(_this2.__input, 'keydown', function (e) { + + if (e.keyCode === 13) { + + onBlur.call(this); + + } + + }); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__selector, 'mousedown', function () { + + dom.addClass(this, 'drag').bind(window, 'mouseup', function () { + + dom.removeClass(_this.__selector, 'drag'); + + }); + + }); + dom.bind(_this2.__selector, 'touchstart', function () { + + dom.addClass(this, 'drag').bind(window, 'touchend', function () { + + dom.removeClass(_this.__selector, 'drag'); + + }); + + }); + var valueField = document.createElement('div'); + Common.extend(_this2.__selector.style, { + width: '122px', + height: '102px', + padding: '3px', + backgroundColor: '#222', + boxShadow: '0px 1px 3px rgba(0,0,0,0.3)' + }); + Common.extend(_this2.__field_knob.style, { + position: 'absolute', + width: '12px', + height: '12px', + border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'), + boxShadow: '0px 1px 3px rgba(0,0,0,0.5)', + borderRadius: '12px', + zIndex: 1 + }); + Common.extend(_this2.__hue_knob.style, { + position: 'absolute', + width: '15px', + height: '2px', + borderRight: '4px solid #fff', + zIndex: 1 + }); + Common.extend(_this2.__saturation_field.style, { + width: '100px', + height: '100px', + border: '1px solid #555', + marginRight: '3px', + display: 'inline-block', + cursor: 'pointer' + }); + Common.extend(valueField.style, { + width: '100%', + height: '100%', + background: 'none' + }); + linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000'); + Common.extend(_this2.__hue_field.style, { + width: '15px', + height: '100px', + border: '1px solid #555', + cursor: 'ns-resize', + position: 'absolute', + top: '3px', + right: '3px' + }); + hueGradient(_this2.__hue_field); + Common.extend(_this2.__input.style, { + outline: 'none', + textAlign: 'center', + color: '#fff', + border: 0, + fontWeight: 'bold', + textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)' + }); + dom.bind(_this2.__saturation_field, 'mousedown', fieldDown); + dom.bind(_this2.__saturation_field, 'touchstart', fieldDown); + dom.bind(_this2.__field_knob, 'mousedown', fieldDown); + dom.bind(_this2.__field_knob, 'touchstart', fieldDown); + dom.bind(_this2.__hue_field, 'mousedown', fieldDownH); + dom.bind(_this2.__hue_field, 'touchstart', fieldDownH); + function fieldDown(e) { + + setSV(e); + dom.bind(window, 'mousemove', setSV); + dom.bind(window, 'touchmove', setSV); + dom.bind(window, 'mouseup', fieldUpSV); + dom.bind(window, 'touchend', fieldUpSV); + + } + function fieldDownH(e) { + + setH(e); + dom.bind(window, 'mousemove', setH); + dom.bind(window, 'touchmove', setH); + dom.bind(window, 'mouseup', fieldUpH); + dom.bind(window, 'touchend', fieldUpH); + + } + function fieldUpSV() { + + dom.unbind(window, 'mousemove', setSV); + dom.unbind(window, 'touchmove', setSV); + dom.unbind(window, 'mouseup', fieldUpSV); + dom.unbind(window, 'touchend', fieldUpSV); + onFinish(); + + } + function fieldUpH() { + + dom.unbind(window, 'mousemove', setH); + dom.unbind(window, 'touchmove', setH); + dom.unbind(window, 'mouseup', fieldUpH); + dom.unbind(window, 'touchend', fieldUpH); + onFinish(); + + } + function onBlur() { + + var i = interpret(this.value); + if (i !== false) { + + _this.__color.__state = i; + _this.setValue(_this.__color.toOriginal()); + + } else { + + this.value = _this.__color.toString(); + + } + + } + function onFinish() { + + if (_this.__onFinishChange) { + + _this.__onFinishChange.call(_this, _this.__color.toOriginal()); + + } + + } + _this2.__saturation_field.appendChild(valueField); + _this2.__selector.appendChild(_this2.__field_knob); + _this2.__selector.appendChild(_this2.__saturation_field); + _this2.__selector.appendChild(_this2.__hue_field); + _this2.__hue_field.appendChild(_this2.__hue_knob); + _this2.domElement.appendChild(_this2.__input); + _this2.domElement.appendChild(_this2.__selector); + _this2.updateDisplay(); + function setSV(e) { + + if (e.type.indexOf('touch') === - 1) { + + e.preventDefault(); + + } + var fieldRect = _this.__saturation_field.getBoundingClientRect(); + var _ref = e.touches && e.touches[0] || e, + clientX = _ref.clientX, + clientY = _ref.clientY; + var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left); + var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); + if (v > 1) { + + v = 1; + + } else if (v < 0) { + + v = 0; + + } + if (s > 1) { + + s = 1; + + } else if (s < 0) { + + s = 0; + + } + _this.__color.v = v; + _this.__color.s = s; + _this.setValue(_this.__color.toOriginal()); + return false; + + } + function setH(e) { + + if (e.type.indexOf('touch') === - 1) { + + e.preventDefault(); + + } + var fieldRect = _this.__hue_field.getBoundingClientRect(); + var _ref2 = e.touches && e.touches[0] || e, + clientY = _ref2.clientY; + var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); + if (h > 1) { + + h = 1; + + } else if (h < 0) { + + h = 0; + + } + _this.__color.h = h * 360; + _this.setValue(_this.__color.toOriginal()); + return false; + + } + return _this2; + + } + createClass(ColorController, [{ + key: 'updateDisplay', + value: function updateDisplay() { + + var i = interpret(this.getValue()); + if (i !== false) { + + var mismatch = false; + Common.each(Color.COMPONENTS, function (component) { + + if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) { + + mismatch = true; + return {}; + + } + + }, this); + if (mismatch) { + + Common.extend(this.__color.__state, i); + + } + + } + Common.extend(this.__temp.__state, this.__color.__state); + this.__temp.a = 1; + var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0; + var _flip = 255 - flip; + Common.extend(this.__field_knob.style, { + marginLeft: 100 * this.__color.s - 7 + 'px', + marginTop: 100 * (1 - this.__color.v) - 7 + 'px', + backgroundColor: this.__temp.toHexString(), + border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')' + }); + this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px'; + this.__temp.s = 1; + this.__temp.v = 1; + linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString()); + this.__input.value = this.__color.toString(); + Common.extend(this.__input.style, { + backgroundColor: this.__color.toHexString(), + color: 'rgb(' + flip + ',' + flip + ',' + flip + ')', + textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)' + }); + + } + }]); + return ColorController; + +}(Controller); +var vendors = ['-moz-', '-o-', '-webkit-', '-ms-', '']; +function linearGradient(elem, x, a, b) { + + elem.style.background = ''; + Common.each(vendors, function (vendor) { + + elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); '; + + }); + +} +function hueGradient(elem) { + + elem.style.background = ''; + elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);'; + elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + +} + +var css = { + load: function load(url, indoc) { + + var doc = indoc || document; + var link = doc.createElement('link'); + link.type = 'text/css'; + link.rel = 'stylesheet'; + link.href = url; + doc.getElementsByTagName('head')[0].appendChild(link); + + }, + inject: function inject(cssContent, indoc) { + + var doc = indoc || document; + var injected = document.createElement('style'); + injected.type = 'text/css'; + injected.innerHTML = cssContent; + var head = doc.getElementsByTagName('head')[0]; + try { + + head.appendChild(injected); + + } catch (e) { + } + + } +}; + +var saveDialogContents = "
\n\n Here's the new load parameter for your GUI's constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI's constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
"; + +var ControllerFactory = function ControllerFactory(object, property) { + + var initialValue = object[property]; + if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) { + + return new OptionController(object, property, arguments[2]); + + } + if (Common.isNumber(initialValue)) { + + if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) { + + if (Common.isNumber(arguments[4])) { + + return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]); + + } + return new NumberControllerSlider(object, property, arguments[2], arguments[3]); + + } + if (Common.isNumber(arguments[4])) { + + return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] }); + + } + return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] }); + + } + if (Common.isString(initialValue)) { + + return new StringController(object, property); + + } + if (Common.isFunction(initialValue)) { + + return new FunctionController(object, property, ''); + + } + if (Common.isBoolean(initialValue)) { + + return new BooleanController(object, property); + + } + return null; + +}; + +function requestAnimationFrame(callback) { + + setTimeout(callback, 1000 / 60); + +} +var requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame; + +var CenteredDiv = function () { + + function CenteredDiv() { + + classCallCheck(this, CenteredDiv); + this.backgroundElement = document.createElement('div'); + Common.extend(this.backgroundElement.style, { + backgroundColor: 'rgba(0,0,0,0.8)', + top: 0, + left: 0, + display: 'none', + zIndex: '1000', + opacity: 0, + WebkitTransition: 'opacity 0.2s linear', + transition: 'opacity 0.2s linear' + }); + dom.makeFullscreen(this.backgroundElement); + this.backgroundElement.style.position = 'fixed'; + this.domElement = document.createElement('div'); + Common.extend(this.domElement.style, { + position: 'fixed', + display: 'none', + zIndex: '1001', + opacity: 0, + WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear', + transition: 'transform 0.2s ease-out, opacity 0.2s linear' + }); + document.body.appendChild(this.backgroundElement); + document.body.appendChild(this.domElement); + var _this = this; + dom.bind(this.backgroundElement, 'click', function () { + + _this.hide(); + + }); + + } + createClass(CenteredDiv, [{ + key: 'show', + value: function show() { + + var _this = this; + this.backgroundElement.style.display = 'block'; + this.domElement.style.display = 'block'; + this.domElement.style.opacity = 0; + this.domElement.style.webkitTransform = 'scale(1.1)'; + this.layout(); + Common.defer(function () { + + _this.backgroundElement.style.opacity = 1; + _this.domElement.style.opacity = 1; + _this.domElement.style.webkitTransform = 'scale(1)'; + + }); + + } + }, { + key: 'hide', + value: function hide() { + + var _this = this; + var hide = function hide() { + + _this.domElement.style.display = 'none'; + _this.backgroundElement.style.display = 'none'; + dom.unbind(_this.domElement, 'webkitTransitionEnd', hide); + dom.unbind(_this.domElement, 'transitionend', hide); + dom.unbind(_this.domElement, 'oTransitionEnd', hide); + + }; + dom.bind(this.domElement, 'webkitTransitionEnd', hide); + dom.bind(this.domElement, 'transitionend', hide); + dom.bind(this.domElement, 'oTransitionEnd', hide); + this.backgroundElement.style.opacity = 0; + this.domElement.style.opacity = 0; + this.domElement.style.webkitTransform = 'scale(1.1)'; + + } + }, { + key: 'layout', + value: function layout() { + + this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px'; + this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px'; + + } + }]); + return CenteredDiv; + +}(); + +var styleSheet = ___$insertStyle(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"); + +css.inject(styleSheet); +var CSS_NAMESPACE = 'dg'; +var HIDE_KEY_CODE = 72; +var CLOSE_BUTTON_HEIGHT = 20; +var DEFAULT_DEFAULT_PRESET_NAME = 'Default'; +var SUPPORTS_LOCAL_STORAGE = function () { + + try { + + return !!window.localStorage; + + } catch (e) { + + return false; + + } + +}(); +var SAVE_DIALOGUE = void 0; +var autoPlaceVirgin = true; +var autoPlaceContainer = void 0; +var hide = false; +var hideableGuis = []; +var GUI = function GUI(pars) { + + var _this = this; + var params = pars || {}; + this.domElement = document.createElement('div'); + this.__ul = document.createElement('ul'); + this.domElement.appendChild(this.__ul); + dom.addClass(this.domElement, CSS_NAMESPACE); + this.__folders = {}; + this.__controllers = []; + this.__rememberedObjects = []; + this.__rememberedObjectIndecesToControllers = []; + this.__listening = []; + params = Common.defaults(params, { + closeOnTop: false, + autoPlace: true, + width: GUI.DEFAULT_WIDTH + }); + params = Common.defaults(params, { + resizable: params.autoPlace, + hideable: params.autoPlace + }); + if (!Common.isUndefined(params.load)) { + + if (params.preset) { + + params.load.preset = params.preset; + + } + + } else { + + params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME }; + + } + if (Common.isUndefined(params.parent) && params.hideable) { + + hideableGuis.push(this); + + } + params.resizable = Common.isUndefined(params.parent) && params.resizable; + if (params.autoPlace && Common.isUndefined(params.scrollable)) { + + params.scrollable = true; + + } + var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true'; + var saveToLocalStorage = void 0; + var titleRow = void 0; + Object.defineProperties(this, + { + parent: { + get: function get$$1() { + + return params.parent; + + } + }, + scrollable: { + get: function get$$1() { + + return params.scrollable; + + } + }, + autoPlace: { + get: function get$$1() { + + return params.autoPlace; + + } + }, + closeOnTop: { + get: function get$$1() { + + return params.closeOnTop; + + } + }, + preset: { + get: function get$$1() { + + if (_this.parent) { + + return _this.getRoot().preset; + + } + return params.load.preset; + + }, + set: function set$$1(v) { + + if (_this.parent) { + + _this.getRoot().preset = v; + + } else { + + params.load.preset = v; + + } + setPresetSelectIndex(this); + _this.revert(); + + } + }, + width: { + get: function get$$1() { + + return params.width; + + }, + set: function set$$1(v) { + + params.width = v; + setWidth(_this, v); + + } + }, + name: { + get: function get$$1() { + + return params.name; + + }, + set: function set$$1(v) { + + params.name = v; + if (titleRow) { + + titleRow.innerHTML = params.name; + + } + + } + }, + closed: { + get: function get$$1() { + + return params.closed; + + }, + set: function set$$1(v) { + + params.closed = v; + if (params.closed) { + + dom.addClass(_this.__ul, GUI.CLASS_CLOSED); + + } else { + + dom.removeClass(_this.__ul, GUI.CLASS_CLOSED); + + } + this.onResize(); + if (_this.__closeButton) { + + _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED; + + } + + } + }, + load: { + get: function get$$1() { + + return params.load; + + } + }, + useLocalStorage: { + get: function get$$1() { + + return useLocalStorage; + + }, + set: function set$$1(bool) { + + if (SUPPORTS_LOCAL_STORAGE) { + + useLocalStorage = bool; + if (bool) { + + dom.bind(window, 'unload', saveToLocalStorage); + + } else { + + dom.unbind(window, 'unload', saveToLocalStorage); + + } + localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool); + + } + + } + } + }); + if (Common.isUndefined(params.parent)) { + + this.closed = params.closed || false; + dom.addClass(this.domElement, GUI.CLASS_MAIN); + dom.makeSelectable(this.domElement, false); + if (SUPPORTS_LOCAL_STORAGE) { + + if (useLocalStorage) { + + _this.useLocalStorage = true; + var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui')); + if (savedGui) { + + params.load = JSON.parse(savedGui); + + } + + } + + } + this.__closeButton = document.createElement('div'); + this.__closeButton.innerHTML = GUI.TEXT_CLOSED; + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON); + if (params.closeOnTop) { + + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP); + this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]); + + } else { + + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM); + this.domElement.appendChild(this.__closeButton); + + } + dom.bind(this.__closeButton, 'click', function () { + + _this.closed = !_this.closed; + + }); + + } else { + + if (params.closed === undefined) { + + params.closed = true; + + } + var titleRowName = document.createTextNode(params.name); + dom.addClass(titleRowName, 'controller-name'); + titleRow = addRow(_this, titleRowName); + var onClickTitle = function onClickTitle(e) { + + e.preventDefault(); + _this.closed = !_this.closed; + return false; + + }; + dom.addClass(this.__ul, GUI.CLASS_CLOSED); + dom.addClass(titleRow, 'title'); + dom.bind(titleRow, 'click', onClickTitle); + if (!params.closed) { + + this.closed = false; + + } + + } + if (params.autoPlace) { + + if (Common.isUndefined(params.parent)) { + + if (autoPlaceVirgin) { + + autoPlaceContainer = document.createElement('div'); + dom.addClass(autoPlaceContainer, CSS_NAMESPACE); + dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER); + document.body.appendChild(autoPlaceContainer); + autoPlaceVirgin = false; + + } + autoPlaceContainer.appendChild(this.domElement); + dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE); + + } + if (!this.parent) { + + setWidth(_this, params.width); + + } + + } + this.__resizeHandler = function () { + + _this.onResizeDebounced(); + + }; + dom.bind(window, 'resize', this.__resizeHandler); + dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler); + dom.bind(this.__ul, 'transitionend', this.__resizeHandler); + dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler); + this.onResize(); + if (params.resizable) { + + addResizeHandle(this); + + } + saveToLocalStorage = function saveToLocalStorage() { + + if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') { + + localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject())); + + } + + }; + this.saveToLocalStorageIfPossible = saveToLocalStorage; + function resetWidth() { + + var root = _this.getRoot(); + root.width += 1; + Common.defer(function () { + + root.width -= 1; + + }); + + } + if (!params.parent) { + + resetWidth(); + + } + +}; +GUI.toggleHide = function () { + + hide = !hide; + Common.each(hideableGuis, function (gui) { + + gui.domElement.style.display = hide ? 'none' : ''; + + }); + +}; +GUI.CLASS_AUTO_PLACE = 'a'; +GUI.CLASS_AUTO_PLACE_CONTAINER = 'ac'; +GUI.CLASS_MAIN = 'main'; +GUI.CLASS_CONTROLLER_ROW = 'cr'; +GUI.CLASS_TOO_TALL = 'taller-than-window'; +GUI.CLASS_CLOSED = 'closed'; +GUI.CLASS_CLOSE_BUTTON = 'close-button'; +GUI.CLASS_CLOSE_TOP = 'close-top'; +GUI.CLASS_CLOSE_BOTTOM = 'close-bottom'; +GUI.CLASS_DRAG = 'drag'; +GUI.DEFAULT_WIDTH = 245; +GUI.TEXT_CLOSED = 'Close Controls'; +GUI.TEXT_OPEN = 'Open Controls'; +GUI._keydownHandler = function (e) { + + if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) { + + GUI.toggleHide(); + + } + +}; +dom.bind(window, 'keydown', GUI._keydownHandler, false); +Common.extend(GUI.prototype, + { + add: function add(object, property) { + + return _add(this, object, property, { + factoryArgs: Array.prototype.slice.call(arguments, 2) + }); + + }, + addColor: function addColor(object, property) { + + return _add(this, object, property, { + color: true + }); + + }, + remove: function remove(controller) { + + this.__ul.removeChild(controller.__li); + this.__controllers.splice(this.__controllers.indexOf(controller), 1); + var _this = this; + Common.defer(function () { + + _this.onResize(); + + }); + + }, + destroy: function destroy() { + + if (this.parent) { + + throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.'); + + } + if (this.autoPlace) { + + autoPlaceContainer.removeChild(this.domElement); + + } + var _this = this; + Common.each(this.__folders, function (subfolder) { + + _this.removeFolder(subfolder); + + }); + dom.unbind(window, 'keydown', GUI._keydownHandler, false); + removeListeners(this); + + }, + addFolder: function addFolder(name) { + + if (this.__folders[name] !== undefined) { + + throw new Error('You already have a folder in this GUI by the' + ' name "' + name + '"'); + + } + var newGuiParams = { name: name, parent: this }; + newGuiParams.autoPlace = this.autoPlace; + if (this.load && + this.load.folders && + this.load.folders[name]) { + + newGuiParams.closed = this.load.folders[name].closed; + newGuiParams.load = this.load.folders[name]; + + } + var gui = new GUI(newGuiParams); + this.__folders[name] = gui; + var li = addRow(this, gui.domElement); + dom.addClass(li, 'folder'); + return gui; + + }, + removeFolder: function removeFolder(folder) { + + this.__ul.removeChild(folder.domElement.parentElement); + delete this.__folders[folder.name]; + if (this.load && + this.load.folders && + this.load.folders[folder.name]) { + + delete this.load.folders[folder.name]; + + } + removeListeners(folder); + var _this = this; + Common.each(folder.__folders, function (subfolder) { + + folder.removeFolder(subfolder); + + }); + Common.defer(function () { + + _this.onResize(); + + }); + + }, + open: function open() { + + this.closed = false; + + }, + close: function close() { + + this.closed = true; + + }, + hide: function hide() { + + this.domElement.style.display = 'none'; + + }, + show: function show() { + + this.domElement.style.display = ''; + + }, + onResize: function onResize() { + + var root = this.getRoot(); + if (root.scrollable) { + + var top = dom.getOffset(root.__ul).top; + var h = 0; + Common.each(root.__ul.childNodes, function (node) { + + if (!(root.autoPlace && node === root.__save_row)) { + + h += dom.getHeight(node); + + } + + }); + if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) { + + dom.addClass(root.domElement, GUI.CLASS_TOO_TALL); + root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px'; + + } else { + + dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL); + root.__ul.style.height = 'auto'; + + } + + } + if (root.__resize_handle) { + + Common.defer(function () { + + root.__resize_handle.style.height = root.__ul.offsetHeight + 'px'; + + }); + + } + if (root.__closeButton) { + + root.__closeButton.style.width = root.width + 'px'; + + } + + }, + onResizeDebounced: Common.debounce(function () { + + this.onResize(); + + }, 50), + remember: function remember() { + + if (Common.isUndefined(SAVE_DIALOGUE)) { + + SAVE_DIALOGUE = new CenteredDiv(); + SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents; + + } + if (this.parent) { + + throw new Error('You can only call remember on a top level GUI.'); + + } + var _this = this; + Common.each(Array.prototype.slice.call(arguments), function (object) { + + if (_this.__rememberedObjects.length === 0) { + + addSaveMenu(_this); + + } + if (_this.__rememberedObjects.indexOf(object) === - 1) { + + _this.__rememberedObjects.push(object); + + } + + }); + if (this.autoPlace) { + + setWidth(this, this.width); + + } + + }, + getRoot: function getRoot() { + + var gui = this; + while (gui.parent) { + + gui = gui.parent; + + } + return gui; + + }, + getSaveObject: function getSaveObject() { + + var toReturn = this.load; + toReturn.closed = this.closed; + if (this.__rememberedObjects.length > 0) { + + toReturn.preset = this.preset; + if (!toReturn.remembered) { + + toReturn.remembered = {}; + + } + toReturn.remembered[this.preset] = getCurrentPreset(this); + + } + toReturn.folders = {}; + Common.each(this.__folders, function (element, key) { + + toReturn.folders[key] = element.getSaveObject(); + + }); + return toReturn; + + }, + save: function save() { + + if (!this.load.remembered) { + + this.load.remembered = {}; + + } + this.load.remembered[this.preset] = getCurrentPreset(this); + markPresetModified(this, false); + this.saveToLocalStorageIfPossible(); + + }, + saveAs: function saveAs(presetName) { + + if (!this.load.remembered) { + + this.load.remembered = {}; + this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true); + + } + this.load.remembered[presetName] = getCurrentPreset(this); + this.preset = presetName; + addPresetOption(this, presetName, true); + this.saveToLocalStorageIfPossible(); + + }, + revert: function revert(gui) { + + Common.each(this.__controllers, function (controller) { + + if (!this.getRoot().load.remembered) { + + controller.setValue(controller.initialValue); + + } else { + + recallSavedValue(gui || this.getRoot(), controller); + + } + if (controller.__onFinishChange) { + + controller.__onFinishChange.call(controller, controller.getValue()); + + } + + }, this); + Common.each(this.__folders, function (folder) { + + folder.revert(folder); + + }); + if (!gui) { + + markPresetModified(this.getRoot(), false); + + } + + }, + listen: function listen(controller) { + + var init = this.__listening.length === 0; + this.__listening.push(controller); + if (init) { + + updateDisplays(this.__listening); + + } + + }, + updateDisplay: function updateDisplay() { + + Common.each(this.__controllers, function (controller) { + + controller.updateDisplay(); + + }); + Common.each(this.__folders, function (folder) { + + folder.updateDisplay(); + + }); + + } + }); +function addRow(gui, newDom, liBefore) { + + var li = document.createElement('li'); + if (newDom) { + + li.appendChild(newDom); + + } + if (liBefore) { + + gui.__ul.insertBefore(li, liBefore); + + } else { + + gui.__ul.appendChild(li); + + } + gui.onResize(); + return li; + +} +function removeListeners(gui) { + + dom.unbind(window, 'resize', gui.__resizeHandler); + if (gui.saveToLocalStorageIfPossible) { + + dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible); + + } + +} +function markPresetModified(gui, modified) { + + var opt = gui.__preset_select[gui.__preset_select.selectedIndex]; + if (modified) { + + opt.innerHTML = opt.value + '*'; + + } else { + + opt.innerHTML = opt.value; + + } + +} +function augmentController(gui, li, controller) { + + controller.__li = li; + controller.__gui = gui; + Common.extend(controller, { + options: function options(_options) { + + if (arguments.length > 1) { + + var nextSibling = controller.__li.nextElementSibling; + controller.remove(); + return _add(gui, controller.object, controller.property, { + before: nextSibling, + factoryArgs: [Common.toArray(arguments)] + }); + + } + if (Common.isArray(_options) || Common.isObject(_options)) { + + var _nextSibling = controller.__li.nextElementSibling; + controller.remove(); + return _add(gui, controller.object, controller.property, { + before: _nextSibling, + factoryArgs: [_options] + }); + + } + + }, + name: function name(_name) { + + controller.__li.firstElementChild.firstElementChild.innerHTML = _name; + return controller; + + }, + listen: function listen() { + + controller.__gui.listen(controller); + return controller; + + }, + remove: function remove() { + + controller.__gui.remove(controller); + return controller; + + } + }); + if (controller instanceof NumberControllerSlider) { + + var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step }); + Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) { + + var pc = controller[method]; + var pb = box[method]; + controller[method] = box[method] = function () { + + var args = Array.prototype.slice.call(arguments); + pb.apply(box, args); + return pc.apply(controller, args); + + }; + + }); + dom.addClass(li, 'has-slider'); + controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild); + + } else if (controller instanceof NumberControllerBox) { + + var r = function r(returned) { + + if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) { + + var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML; + var wasListening = controller.__gui.__listening.indexOf(controller) > - 1; + controller.remove(); + var newController = _add(gui, controller.object, controller.property, { + before: controller.__li.nextElementSibling, + factoryArgs: [controller.__min, controller.__max, controller.__step] + }); + newController.name(oldName); + if (wasListening) newController.listen(); + return newController; + + } + return returned; + + }; + controller.min = Common.compose(r, controller.min); + controller.max = Common.compose(r, controller.max); + + } else if (controller instanceof BooleanController) { + + dom.bind(li, 'click', function () { + + dom.fakeEvent(controller.__checkbox, 'click'); + + }); + dom.bind(controller.__checkbox, 'click', function (e) { + + e.stopPropagation(); + + }); + + } else if (controller instanceof FunctionController) { + + dom.bind(li, 'click', function () { + + dom.fakeEvent(controller.__button, 'click'); + + }); + dom.bind(li, 'mouseover', function () { + + dom.addClass(controller.__button, 'hover'); + + }); + dom.bind(li, 'mouseout', function () { + + dom.removeClass(controller.__button, 'hover'); + + }); + + } else if (controller instanceof ColorController) { + + dom.addClass(li, 'color'); + controller.updateDisplay = Common.compose(function (val) { + + li.style.borderLeftColor = controller.__color.toString(); + return val; + + }, controller.updateDisplay); + controller.updateDisplay(); + + } + controller.setValue = Common.compose(function (val) { + + if (gui.getRoot().__preset_select && controller.isModified()) { + + markPresetModified(gui.getRoot(), true); + + } + return val; + + }, controller.setValue); + +} +function recallSavedValue(gui, controller) { + + var root = gui.getRoot(); + var matchedIndex = root.__rememberedObjects.indexOf(controller.object); + if (matchedIndex !== - 1) { + + var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex]; + if (controllerMap === undefined) { + + controllerMap = {}; + root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap; + + } + controllerMap[controller.property] = controller; + if (root.load && root.load.remembered) { + + var presetMap = root.load.remembered; + var preset = void 0; + if (presetMap[gui.preset]) { + + preset = presetMap[gui.preset]; + + } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) { + + preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME]; + + } else { + + return; + + } + if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) { + + var value = preset[matchedIndex][controller.property]; + controller.initialValue = value; + controller.setValue(value); + + } + + } + + } + +} +function _add(gui, object, property, params) { + + if (object[property] === undefined) { + + throw new Error('Object "' + object + '" has no property "' + property + '"'); + + } + var controller = void 0; + if (params.color) { + + controller = new ColorController(object, property); + + } else { + + var factoryArgs = [object, property].concat(params.factoryArgs); + controller = ControllerFactory.apply(gui, factoryArgs); + + } + if (params.before instanceof Controller) { + + params.before = params.before.__li; + + } + recallSavedValue(gui, controller); + dom.addClass(controller.domElement, 'c'); + var name = document.createElement('span'); + dom.addClass(name, 'property-name'); + name.innerHTML = controller.property; + var container = document.createElement('div'); + container.appendChild(name); + container.appendChild(controller.domElement); + var li = addRow(gui, container, params.before); + dom.addClass(li, GUI.CLASS_CONTROLLER_ROW); + if (controller instanceof ColorController) { + + dom.addClass(li, 'color'); + + } else { + + dom.addClass(li, _typeof(controller.getValue())); + + } + augmentController(gui, li, controller); + gui.__controllers.push(controller); + return controller; + +} +function getLocalStorageHash(gui, key) { + + return document.location.href + '.' + key; + +} +function addPresetOption(gui, name, setSelected) { + + var opt = document.createElement('option'); + opt.innerHTML = name; + opt.value = name; + gui.__preset_select.appendChild(opt); + if (setSelected) { + + gui.__preset_select.selectedIndex = gui.__preset_select.length - 1; + + } + +} +function showHideExplain(gui, explain) { + + explain.style.display = gui.useLocalStorage ? 'block' : 'none'; + +} +function addSaveMenu(gui) { + + var div = gui.__save_row = document.createElement('li'); + dom.addClass(gui.domElement, 'has-save'); + gui.__ul.insertBefore(div, gui.__ul.firstChild); + dom.addClass(div, 'save-row'); + var gears = document.createElement('span'); + gears.innerHTML = ' '; + dom.addClass(gears, 'button gears'); + var button = document.createElement('span'); + button.innerHTML = 'Save'; + dom.addClass(button, 'button'); + dom.addClass(button, 'save'); + var button2 = document.createElement('span'); + button2.innerHTML = 'New'; + dom.addClass(button2, 'button'); + dom.addClass(button2, 'save-as'); + var button3 = document.createElement('span'); + button3.innerHTML = 'Revert'; + dom.addClass(button3, 'button'); + dom.addClass(button3, 'revert'); + var select = gui.__preset_select = document.createElement('select'); + if (gui.load && gui.load.remembered) { + + Common.each(gui.load.remembered, function (value, key) { + + addPresetOption(gui, key, key === gui.preset); + + }); + + } else { + + addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false); + + } + dom.bind(select, 'change', function () { + + for (var index = 0; index < gui.__preset_select.length; index++) { + + gui.__preset_select[index].innerHTML = gui.__preset_select[index].value; + + } + gui.preset = this.value; + + }); + div.appendChild(select); + div.appendChild(gears); + div.appendChild(button); + div.appendChild(button2); + div.appendChild(button3); + if (SUPPORTS_LOCAL_STORAGE) { + + var explain = document.getElementById('dg-local-explain'); + var localStorageCheckBox = document.getElementById('dg-local-storage'); + var saveLocally = document.getElementById('dg-save-locally'); + saveLocally.style.display = 'block'; + if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') { + + localStorageCheckBox.setAttribute('checked', 'checked'); + + } + showHideExplain(gui, explain); + dom.bind(localStorageCheckBox, 'change', function () { + + gui.useLocalStorage = !gui.useLocalStorage; + showHideExplain(gui, explain); + + }); + + } + var newConstructorTextArea = document.getElementById('dg-new-constructor'); + dom.bind(newConstructorTextArea, 'keydown', function (e) { + + if (e.metaKey && (e.which === 67 || e.keyCode === 67)) { + + SAVE_DIALOGUE.hide(); + + } + + }); + dom.bind(gears, 'click', function () { + + newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2); + SAVE_DIALOGUE.show(); + newConstructorTextArea.focus(); + newConstructorTextArea.select(); + + }); + dom.bind(button, 'click', function () { + + gui.save(); + + }); + dom.bind(button2, 'click', function () { + + var presetName = prompt('Enter a new preset name.'); + if (presetName) { + + gui.saveAs(presetName); + + } + + }); + dom.bind(button3, 'click', function () { + + gui.revert(); + + }); + +} +function addResizeHandle(gui) { + + var pmouseX = void 0; + gui.__resize_handle = document.createElement('div'); + Common.extend(gui.__resize_handle.style, { + width: '6px', + marginLeft: '-3px', + height: '200px', + cursor: 'ew-resize', + position: 'absolute' + }); + function drag(e) { + + e.preventDefault(); + gui.width += pmouseX - e.clientX; + gui.onResize(); + pmouseX = e.clientX; + return false; + + } + function dragStop() { + + dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG); + dom.unbind(window, 'mousemove', drag); + dom.unbind(window, 'mouseup', dragStop); + + } + function dragStart(e) { + + e.preventDefault(); + pmouseX = e.clientX; + dom.addClass(gui.__closeButton, GUI.CLASS_DRAG); + dom.bind(window, 'mousemove', drag); + dom.bind(window, 'mouseup', dragStop); + return false; + + } + dom.bind(gui.__resize_handle, 'mousedown', dragStart); + dom.bind(gui.__closeButton, 'mousedown', dragStart); + gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild); + +} +function setWidth(gui, w) { + + gui.domElement.style.width = w + 'px'; + if (gui.__save_row && gui.autoPlace) { + + gui.__save_row.style.width = w + 'px'; + + } + if (gui.__closeButton) { + + gui.__closeButton.style.width = w + 'px'; + + } + +} +function getCurrentPreset(gui, useInitialValues) { + + var toReturn = {}; + Common.each(gui.__rememberedObjects, function (val, index) { + + var savedValues = {}; + var controllerMap = gui.__rememberedObjectIndecesToControllers[index]; + Common.each(controllerMap, function (controller, property) { + + savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue(); + + }); + toReturn[index] = savedValues; + + }); + return toReturn; + +} +function setPresetSelectIndex(gui) { + + for (var index = 0; index < gui.__preset_select.length; index++) { + + if (gui.__preset_select[index].value === gui.preset) { + + gui.__preset_select.selectedIndex = index; + + } + + } + +} +function updateDisplays(controllerArray) { + + if (controllerArray.length !== 0) { + + requestAnimationFrame$1.call(window, function () { + + updateDisplays(controllerArray); + + }); + + } + Common.each(controllerArray, function (c) { + + c.updateDisplay(); + + }); + +} + +var color = { + Color: Color, + math: ColorMath, + interpret: interpret +}; +var controllers = { + Controller: Controller, + BooleanController: BooleanController, + OptionController: OptionController, + StringController: StringController, + NumberController: NumberController, + NumberControllerBox: NumberControllerBox, + NumberControllerSlider: NumberControllerSlider, + FunctionController: FunctionController, + ColorController: ColorController +}; +var dom$1 = { dom: dom }; +var gui = { GUI: GUI }; +var GUI$1 = GUI; +var index = { + color: color, + controllers: controllers, + dom: dom$1, + gui: gui, + GUI: GUI$1 +}; + +export { color, controllers, dom$1 as dom, gui, GUI$1 as GUI }; +export default index; diff --git a/shared/src/defs.ts b/packages/shared/src/defs.ts similarity index 100% rename from shared/src/defs.ts rename to packages/shared/src/defs.ts diff --git a/shared/src/entity-manager.ts b/packages/shared/src/entity-manager.ts similarity index 100% rename from shared/src/entity-manager.ts rename to packages/shared/src/entity-manager.ts diff --git a/shared/src/globaltypes.ts b/packages/shared/src/globaltypes.ts similarity index 100% rename from shared/src/globaltypes.ts rename to packages/shared/src/globaltypes.ts diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts new file mode 100644 index 00000000..9d8eaff1 --- /dev/null +++ b/packages/shared/src/index.ts @@ -0,0 +1,27 @@ +import * as Constants from './constants'; +import * as Defs from './defs'; +import * as Math from './math'; +import * as EntityManager from './entity-manager'; +import * as SpatialHashGrid from './spatial-hash-grid'; +import * as Noise from './noise'; +import * as TerrainHeight from './terrain-height'; +import * as TerrainConstants from './terrain-constants'; +import * as Spline from './spline'; +import GUI from './dat.gui.module' + +import type * as GlobalTypes from './globaltypes'; + +export type {GlobalTypes} + +export { + Constants, + Defs, + Math, + EntityManager, + SpatialHashGrid, + Noise, + TerrainHeight, + TerrainConstants, + Spline, + GUI +}; \ No newline at end of file diff --git a/packages/shared/src/math.ts b/packages/shared/src/math.ts new file mode 100644 index 00000000..71579e70 --- /dev/null +++ b/packages/shared/src/math.ts @@ -0,0 +1,51 @@ + +const rand_range = function (a: number, b: number): number { + return Math.random() * (b - a) + a; +} + +const rand_normalish = function (): number { + const r = Math.random() + Math.random() + Math.random() + Math.random(); + return (r / 4.0) * 2.0 - 1; +} + +const rand_int = function (a: number, b: number): number { + return Math.round(Math.random() * (b - a) + a); +} + +const lerp = function (x: number, a: number, b: number): number { + return x * (b - a) + a; +} + +const smoothstep = function (x: number, a: number, b: number): number { + x = x * x * (3.0 - 2.0 * x); + return x * (b - a) + a; +} + +const smootherstep = function (x: number, a: number, b: number): number { + x = x * x * x * (x * (x * 6 - 15) + 10); + return x * (b - a) + a; +} + +const clamp = function (x: number, a: number, b: number): number { + return Math.min(Math.max(x, a), b); +} + +const sat = function (x: number): number { + return Math.min(Math.max(x, 0.0), 1.0); +} + +const in_range = (x: number, a: number, b: number):boolean => { + return x >= a && x <= b; +} + +export { + rand_range, + rand_int, + rand_normalish, + lerp, + smoothstep, + smootherstep, + clamp, + sat, + in_range, +} \ No newline at end of file diff --git a/shared/src/noise.ts b/packages/shared/src/noise.ts similarity index 100% rename from shared/src/noise.ts rename to packages/shared/src/noise.ts diff --git a/shared/src/simplex-noise.ts b/packages/shared/src/simplex-noise.ts similarity index 100% rename from shared/src/simplex-noise.ts rename to packages/shared/src/simplex-noise.ts diff --git a/shared/src/spatial-hash-grid.ts b/packages/shared/src/spatial-hash-grid.ts similarity index 95% rename from shared/src/spatial-hash-grid.ts rename to packages/shared/src/spatial-hash-grid.ts index b6a6f5d5..2c049a81 100644 --- a/shared/src/spatial-hash-grid.ts +++ b/packages/shared/src/spatial-hash-grid.ts @@ -1,4 +1,4 @@ -import { math } from './math'; +import * as math from './math'; class SpatialHashGrid { _cells: any[][]; diff --git a/shared/src/spline.ts b/packages/shared/src/spline.ts similarity index 100% rename from shared/src/spline.ts rename to packages/shared/src/spline.ts diff --git a/shared/src/terrain-constants.ts b/packages/shared/src/terrain-constants.ts similarity index 100% rename from shared/src/terrain-constants.ts rename to packages/shared/src/terrain-constants.ts diff --git a/shared/src/terrain-height.ts b/packages/shared/src/terrain-height.ts similarity index 100% rename from shared/src/terrain-height.ts rename to packages/shared/src/terrain-height.ts diff --git a/shared/tsconfig.json b/packages/shared/tsconfig.json similarity index 66% rename from shared/tsconfig.json rename to packages/shared/tsconfig.json index 9bc46265..ddc517c3 100644 --- a/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig.packages.json", + "extends": "../../tsconfig.packages.json", "compilerOptions": { "declaration": true, "declarationMap": true, @@ -7,11 +7,13 @@ "composite": true, "rootDir": "src", "outDir": "dist", - "lib": ["dom"] + "lib": ["dom"], + "allowJs": true, + "checkJs": false }, "include": [ "src/*.ts" - ], +, "src/dat.gui.module.ts" ], "exclude": [ "dist", "node_modules" diff --git a/shared/tsconfig.tsbuildinfo b/packages/shared/tsconfig.tsbuildinfo similarity index 100% rename from shared/tsconfig.tsbuildinfo rename to packages/shared/tsconfig.tsbuildinfo diff --git a/shared/dist/OrbitControls.d.ts b/shared/dist/OrbitControls.d.ts deleted file mode 100644 index a32f3200..00000000 --- a/shared/dist/OrbitControls.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare var OrbitControls: (object: any, domElement: any) => void; -declare var MapControls: (object: any, domElement: any) => void; -export { OrbitControls, MapControls }; -//# sourceMappingURL=OrbitControls.d.ts.map \ No newline at end of file diff --git a/shared/dist/OrbitControls.d.ts.map b/shared/dist/OrbitControls.d.ts.map deleted file mode 100644 index 789423dc..00000000 --- a/shared/dist/OrbitControls.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"OrbitControls.d.ts","sourceRoot":"","sources":["../src/OrbitControls.ts"],"names":[],"mappings":"AAiBA,QAAA,IAAI,aAAa,wCAkpChB,CAAC;AAcF,QAAA,IAAI,WAAW,wCAYd,CAAC;AAKF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC"} \ No newline at end of file diff --git a/shared/dist/OrbitControls.js b/shared/dist/OrbitControls.js deleted file mode 100644 index b1fe3ec7..00000000 --- a/shared/dist/OrbitControls.js +++ /dev/null @@ -1,751 +0,0 @@ -import { EventDispatcher, MOUSE, Quaternion, Spherical, TOUCH, Vector2, Vector3 } from 'three'; -// This set of controls performs orbiting, dollying (zooming), and panning. -// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). -// -// Orbit - left mouse / touch: one-finger move -// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish -// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move -var OrbitControls = function (object, domElement) { - if (domElement === undefined) - console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.'); - if (domElement === document) - console.error('THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'); - this.object = object; - this.domElement = domElement; - // Set to false to disable this control - this.enabled = true; - // "target" sets the location of focus, where the object orbits around - this.target = new Vector3(); - // How far you can dolly in and out ( PerspectiveCamera only ) - this.minDistance = 0; - this.maxDistance = Infinity; - // How far you can zoom in and out ( OrthographicCamera only ) - this.minZoom = 0; - this.maxZoom = Infinity; - // How far you can orbit vertically, upper and lower limits. - // Range is 0 to Math.PI radians. - this.minPolarAngle = 0; // radians - this.maxPolarAngle = Math.PI; // radians - // How far you can orbit horizontally, upper and lower limits. - // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI ) - this.minAzimuthAngle = -Infinity; // radians - this.maxAzimuthAngle = Infinity; // radians - // Set to true to enable damping (inertia) - // If damping is enabled, you must call controls.update() in your animation loop - this.enableDamping = false; - this.dampingFactor = 0.05; - // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. - // Set to false to disable zooming - this.enableZoom = true; - this.zoomSpeed = 1.0; - // Set to false to disable rotating - this.enableRotate = true; - this.rotateSpeed = 1.0; - // Set to false to disable panning - this.enablePan = true; - this.panSpeed = 1.0; - this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up - this.keyPanSpeed = 7.0; // pixels moved per arrow key push - // Set to true to automatically rotate around the target - // If auto-rotate is enabled, you must call controls.update() in your animation loop - this.autoRotate = false; - this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 - // Set to false to disable use of the keys - this.enableKeys = true; - // The four arrow keys - this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; - // Mouse buttons - this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; - // Touch fingers - this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }; - // for reset - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.zoom0 = this.object.zoom; - // - // public methods - // - this.getPolarAngle = function () { - return spherical.phi; - }; - this.getAzimuthalAngle = function () { - return spherical.theta; - }; - this.saveState = function () { - scope.target0.copy(scope.target); - scope.position0.copy(scope.object.position); - scope.zoom0 = scope.object.zoom; - }; - this.reset = function () { - scope.target.copy(scope.target0); - scope.object.position.copy(scope.position0); - scope.object.zoom = scope.zoom0; - scope.object.updateProjectionMatrix(); - scope.dispatchEvent(changeEvent); - scope.update(); - state = STATE.NONE; - }; - // this method is exposed, but perhaps it would be better if we can make it private... - this.update = function () { - var offset = new Vector3(); - // so camera.up is the orbit axis - var quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0)); - var quatInverse = quat.clone().invert(); - var lastPosition = new Vector3(); - var lastQuaternion = new Quaternion(); - var twoPI = 2 * Math.PI; - return function update() { - var position = scope.object.position; - offset.copy(position).sub(scope.target); - // rotate offset to "y-axis-is-up" space - offset.applyQuaternion(quat); - // angle from z-axis around y-axis - spherical.setFromVector3(offset); - if (scope.autoRotate && state === STATE.NONE) { - rotateLeft(getAutoRotationAngle()); - } - if (scope.enableDamping) { - spherical.theta += sphericalDelta.theta * scope.dampingFactor; - spherical.phi += sphericalDelta.phi * scope.dampingFactor; - } - else { - spherical.theta += sphericalDelta.theta; - spherical.phi += sphericalDelta.phi; - } - // restrict theta to be between desired limits - var min = scope.minAzimuthAngle; - var max = scope.maxAzimuthAngle; - if (isFinite(min) && isFinite(max)) { - if (min < -Math.PI) - min += twoPI; - else if (min > Math.PI) - min -= twoPI; - if (max < -Math.PI) - max += twoPI; - else if (max > Math.PI) - max -= twoPI; - if (min <= max) { - spherical.theta = Math.max(min, Math.min(max, spherical.theta)); - } - else { - spherical.theta = (spherical.theta > (min + max) / 2) ? - Math.max(min, spherical.theta) : - Math.min(max, spherical.theta); - } - } - // restrict phi to be between desired limits - spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); - spherical.makeSafe(); - spherical.radius *= scale; - // restrict radius to be between desired limits - spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius)); - // move target to panned location - if (scope.enableDamping === true) { - scope.target.addScaledVector(panOffset, scope.dampingFactor); - } - else { - scope.target.add(panOffset); - } - offset.setFromSpherical(spherical); - // rotate offset back to "camera-up-vector-is-up" space - offset.applyQuaternion(quatInverse); - position.copy(scope.target).add(offset); - scope.object.lookAt(scope.target); - if (scope.enableDamping === true) { - sphericalDelta.theta *= (1 - scope.dampingFactor); - sphericalDelta.phi *= (1 - scope.dampingFactor); - panOffset.multiplyScalar(1 - scope.dampingFactor); - } - else { - sphericalDelta.set(0, 0, 0); - panOffset.set(0, 0, 0); - } - scale = 1; - // update condition is: - // min(camera displacement, camera rotation in radians)^2 > EPS - // using small-angle approximation cos(x/2) = 1 - x^2 / 8 - if (zoomChanged || - lastPosition.distanceToSquared(scope.object.position) > EPS || - 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) { - scope.dispatchEvent(changeEvent); - lastPosition.copy(scope.object.position); - lastQuaternion.copy(scope.object.quaternion); - zoomChanged = false; - return true; - } - return false; - }; - }(); - this.dispose = function () { - scope.domElement.removeEventListener('contextmenu', onContextMenu, false); - scope.domElement.removeEventListener('pointerdown', onPointerDown, false); - scope.domElement.removeEventListener('wheel', onMouseWheel, false); - scope.domElement.removeEventListener('touchstart', onTouchStart, false); - scope.domElement.removeEventListener('touchend', onTouchEnd, false); - scope.domElement.removeEventListener('touchmove', onTouchMove, false); - scope.domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, false); - scope.domElement.ownerDocument.removeEventListener('pointerup', onPointerUp, false); - scope.domElement.removeEventListener('keydown', onKeyDown, false); - //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? - }; - // - // internals - // - var scope = this; - var changeEvent = { type: 'change' }; - var startEvent = { type: 'start' }; - var endEvent = { type: 'end' }; - var STATE = { - NONE: -1, - ROTATE: 0, - DOLLY: 1, - PAN: 2, - TOUCH_ROTATE: 3, - TOUCH_PAN: 4, - TOUCH_DOLLY_PAN: 5, - TOUCH_DOLLY_ROTATE: 6 - }; - var state = STATE.NONE; - var EPS = 0.000001; - // current position in spherical coordinates - var spherical = new Spherical(); - var sphericalDelta = new Spherical(); - var scale = 1; - var panOffset = new Vector3(); - var zoomChanged = false; - var rotateStart = new Vector2(); - var rotateEnd = new Vector2(); - var rotateDelta = new Vector2(); - var panStart = new Vector2(); - var panEnd = new Vector2(); - var panDelta = new Vector2(); - var dollyStart = new Vector2(); - var dollyEnd = new Vector2(); - var dollyDelta = new Vector2(); - function getAutoRotationAngle() { - return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; - } - function getZoomScale() { - return Math.pow(0.95, scope.zoomSpeed); - } - function rotateLeft(angle) { - sphericalDelta.theta -= angle; - } - function rotateUp(angle) { - sphericalDelta.phi -= angle; - } - var panLeft = function () { - var v = new Vector3(); - return function panLeft(distance, objectMatrix) { - v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix - v.multiplyScalar(-distance); - panOffset.add(v); - }; - }(); - var panUp = function () { - var v = new Vector3(); - return function panUp(distance, objectMatrix) { - if (scope.screenSpacePanning === true) { - v.setFromMatrixColumn(objectMatrix, 1); - } - else { - v.setFromMatrixColumn(objectMatrix, 0); - v.crossVectors(scope.object.up, v); - } - v.multiplyScalar(distance); - panOffset.add(v); - }; - }(); - // deltaX and deltaY are in pixels; right and down are positive - var pan = function () { - var offset = new Vector3(); - return function pan(deltaX, deltaY) { - var element = scope.domElement; - if (scope.object.isPerspectiveCamera) { - // perspective - var position = scope.object.position; - offset.copy(position).sub(scope.target); - var targetDistance = offset.length(); - // half of the fov is center to top of screen - targetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0); - // we use only clientHeight here so aspect ratio does not distort speed - panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); - panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); - } - else if (scope.object.isOrthographicCamera) { - // orthographic - panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); - panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); - } - else { - // camera neither orthographic nor perspective - console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.'); - scope.enablePan = false; - } - }; - }(); - function dollyOut(dollyScale) { - if (scope.object.isPerspectiveCamera) { - scale /= dollyScale; - } - else if (scope.object.isOrthographicCamera) { - scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale)); - scope.object.updateProjectionMatrix(); - zoomChanged = true; - } - else { - console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); - scope.enableZoom = false; - } - } - function dollyIn(dollyScale) { - if (scope.object.isPerspectiveCamera) { - scale *= dollyScale; - } - else if (scope.object.isOrthographicCamera) { - scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale)); - scope.object.updateProjectionMatrix(); - zoomChanged = true; - } - else { - console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); - scope.enableZoom = false; - } - } - // - // event callbacks - update the object state - // - function handleMouseDownRotate(event) { - rotateStart.set(event.clientX, event.clientY); - } - function handleMouseDownDolly(event) { - dollyStart.set(event.clientX, event.clientY); - } - function handleMouseDownPan(event) { - panStart.set(event.clientX, event.clientY); - } - function handleMouseMoveRotate(event) { - rotateEnd.set(event.clientX, event.clientY); - rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); - var element = scope.domElement; - rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height - rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); - rotateStart.copy(rotateEnd); - scope.update(); - } - function handleMouseMoveDolly(event) { - dollyEnd.set(event.clientX, event.clientY); - dollyDelta.subVectors(dollyEnd, dollyStart); - if (dollyDelta.y > 0) { - dollyOut(getZoomScale()); - } - else if (dollyDelta.y < 0) { - dollyIn(getZoomScale()); - } - dollyStart.copy(dollyEnd); - scope.update(); - } - function handleMouseMovePan(event) { - panEnd.set(event.clientX, event.clientY); - panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); - pan(panDelta.x, panDelta.y); - panStart.copy(panEnd); - scope.update(); - } - function handleMouseUp(e) { - // no-op - } - function handleMouseWheel(event) { - if (event.deltaY < 0) { - dollyIn(getZoomScale()); - } - else if (event.deltaY > 0) { - dollyOut(getZoomScale()); - } - scope.update(); - } - function handleKeyDown(event) { - var needsUpdate = false; - switch (event.keyCode) { - case scope.keys.UP: - pan(0, scope.keyPanSpeed); - needsUpdate = true; - break; - case scope.keys.BOTTOM: - pan(0, -scope.keyPanSpeed); - needsUpdate = true; - break; - case scope.keys.LEFT: - pan(scope.keyPanSpeed, 0); - needsUpdate = true; - break; - case scope.keys.RIGHT: - pan(-scope.keyPanSpeed, 0); - needsUpdate = true; - break; - } - if (needsUpdate) { - // prevent the browser from scrolling on cursor keys - event.preventDefault(); - scope.update(); - } - } - function handleTouchStartRotate(event) { - if (event.touches.length == 1) { - rotateStart.set(event.touches[0].pageX, event.touches[0].pageY); - } - else { - var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); - var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); - rotateStart.set(x, y); - } - } - function handleTouchStartPan(event) { - if (event.touches.length == 1) { - panStart.set(event.touches[0].pageX, event.touches[0].pageY); - } - else { - var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); - var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); - panStart.set(x, y); - } - } - function handleTouchStartDolly(event) { - var dx = event.touches[0].pageX - event.touches[1].pageX; - var dy = event.touches[0].pageY - event.touches[1].pageY; - var distance = Math.sqrt(dx * dx + dy * dy); - dollyStart.set(0, distance); - } - function handleTouchStartDollyPan(event) { - if (scope.enableZoom) - handleTouchStartDolly(event); - if (scope.enablePan) - handleTouchStartPan(event); - } - function handleTouchStartDollyRotate(event) { - if (scope.enableZoom) - handleTouchStartDolly(event); - if (scope.enableRotate) - handleTouchStartRotate(event); - } - function handleTouchMoveRotate(event) { - if (event.touches.length == 1) { - rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY); - } - else { - var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); - var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); - rotateEnd.set(x, y); - } - rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); - var element = scope.domElement; - rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height - rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); - rotateStart.copy(rotateEnd); - } - function handleTouchMovePan(event) { - if (event.touches.length == 1) { - panEnd.set(event.touches[0].pageX, event.touches[0].pageY); - } - else { - var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); - var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); - panEnd.set(x, y); - } - panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); - pan(panDelta.x, panDelta.y); - panStart.copy(panEnd); - } - function handleTouchMoveDolly(event) { - var dx = event.touches[0].pageX - event.touches[1].pageX; - var dy = event.touches[0].pageY - event.touches[1].pageY; - var distance = Math.sqrt(dx * dx + dy * dy); - dollyEnd.set(0, distance); - dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); - dollyOut(dollyDelta.y); - dollyStart.copy(dollyEnd); - } - function handleTouchMoveDollyPan(event) { - if (scope.enableZoom) - handleTouchMoveDolly(event); - if (scope.enablePan) - handleTouchMovePan(event); - } - function handleTouchMoveDollyRotate(event) { - if (scope.enableZoom) - handleTouchMoveDolly(event); - if (scope.enableRotate) - handleTouchMoveRotate(event); - } - function handleTouchEnd(e) { - // no-op - } - // - // event handlers - FSM: listen for events and reset state - // - function onPointerDown(event) { - if (scope.enabled === false) - return; - switch (event.pointerType) { - case 'mouse': - case 'pen': - onMouseDown(event); - break; - // TODO touch - } - } - function onPointerMove(event) { - if (scope.enabled === false) - return; - switch (event.pointerType) { - case 'mouse': - case 'pen': - onMouseMove(event); - break; - // TODO touch - } - } - function onPointerUp(event) { - switch (event.pointerType) { - case 'mouse': - case 'pen': - onMouseUp(event); - break; - // TODO touch - } - } - function onMouseDown(event) { - // Prevent the browser from scrolling. - event.preventDefault(); - // Manually set the focus since calling preventDefault above - // prevents the browser from setting it automatically. - scope.domElement.focus ? scope.domElement.focus() : window.focus(); - var mouseAction; - switch (event.button) { - case 0: - mouseAction = scope.mouseButtons.LEFT; - break; - case 1: - mouseAction = scope.mouseButtons.MIDDLE; - break; - case 2: - mouseAction = scope.mouseButtons.RIGHT; - break; - default: - mouseAction = -1; - } - switch (mouseAction) { - case MOUSE.DOLLY: - if (scope.enableZoom === false) - return; - handleMouseDownDolly(event); - state = STATE.DOLLY; - break; - case MOUSE.ROTATE: - if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (scope.enablePan === false) - return; - handleMouseDownPan(event); - state = STATE.PAN; - } - else { - if (scope.enableRotate === false) - return; - handleMouseDownRotate(event); - state = STATE.ROTATE; - } - break; - case MOUSE.PAN: - if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (scope.enableRotate === false) - return; - handleMouseDownRotate(event); - state = STATE.ROTATE; - } - else { - if (scope.enablePan === false) - return; - handleMouseDownPan(event); - state = STATE.PAN; - } - break; - default: - state = STATE.NONE; - } - if (state !== STATE.NONE) { - scope.domElement.ownerDocument.addEventListener('pointermove', onPointerMove, false); - scope.domElement.ownerDocument.addEventListener('pointerup', onPointerUp, false); - scope.dispatchEvent(startEvent); - } - } - function onMouseMove(event) { - if (scope.enabled === false) - return; - event.preventDefault(); - switch (state) { - case STATE.ROTATE: - if (scope.enableRotate === false) - return; - handleMouseMoveRotate(event); - break; - case STATE.DOLLY: - if (scope.enableZoom === false) - return; - handleMouseMoveDolly(event); - break; - case STATE.PAN: - if (scope.enablePan === false) - return; - handleMouseMovePan(event); - break; - } - } - function onMouseUp(event) { - scope.domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, false); - scope.domElement.ownerDocument.removeEventListener('pointerup', onPointerUp, false); - if (scope.enabled === false) - return; - handleMouseUp(event); - scope.dispatchEvent(endEvent); - state = STATE.NONE; - } - function onMouseWheel(event) { - if (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE)) - return; - event.preventDefault(); - event.stopPropagation(); - scope.dispatchEvent(startEvent); - handleMouseWheel(event); - scope.dispatchEvent(endEvent); - } - function onKeyDown(event) { - if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) - return; - handleKeyDown(event); - } - function onTouchStart(event) { - if (scope.enabled === false) - return; - event.preventDefault(); // prevent scrolling - switch (event.touches.length) { - case 1: - switch (scope.touches.ONE) { - case TOUCH.ROTATE: - if (scope.enableRotate === false) - return; - handleTouchStartRotate(event); - state = STATE.TOUCH_ROTATE; - break; - case TOUCH.PAN: - if (scope.enablePan === false) - return; - handleTouchStartPan(event); - state = STATE.TOUCH_PAN; - break; - default: - state = STATE.NONE; - } - break; - case 2: - switch (scope.touches.TWO) { - case TOUCH.DOLLY_PAN: - if (scope.enableZoom === false && scope.enablePan === false) - return; - handleTouchStartDollyPan(event); - state = STATE.TOUCH_DOLLY_PAN; - break; - case TOUCH.DOLLY_ROTATE: - if (scope.enableZoom === false && scope.enableRotate === false) - return; - handleTouchStartDollyRotate(event); - state = STATE.TOUCH_DOLLY_ROTATE; - break; - default: - state = STATE.NONE; - } - break; - default: - state = STATE.NONE; - } - if (state !== STATE.NONE) { - scope.dispatchEvent(startEvent); - } - } - function onTouchMove(event) { - if (scope.enabled === false) - return; - event.preventDefault(); // prevent scrolling - event.stopPropagation(); - switch (state) { - case STATE.TOUCH_ROTATE: - if (scope.enableRotate === false) - return; - handleTouchMoveRotate(event); - scope.update(); - break; - case STATE.TOUCH_PAN: - if (scope.enablePan === false) - return; - handleTouchMovePan(event); - scope.update(); - break; - case STATE.TOUCH_DOLLY_PAN: - if (scope.enableZoom === false && scope.enablePan === false) - return; - handleTouchMoveDollyPan(event); - scope.update(); - break; - case STATE.TOUCH_DOLLY_ROTATE: - if (scope.enableZoom === false && scope.enableRotate === false) - return; - handleTouchMoveDollyRotate(event); - scope.update(); - break; - default: - state = STATE.NONE; - } - } - function onTouchEnd(event) { - if (scope.enabled === false) - return; - handleTouchEnd(event); - scope.dispatchEvent(endEvent); - state = STATE.NONE; - } - function onContextMenu(event) { - if (scope.enabled === false) - return; - event.preventDefault(); - } - // - scope.domElement.addEventListener('contextmenu', onContextMenu, false); - scope.domElement.addEventListener('pointerdown', onPointerDown, false); - scope.domElement.addEventListener('wheel', onMouseWheel, false); - scope.domElement.addEventListener('touchstart', onTouchStart, false); - scope.domElement.addEventListener('touchend', onTouchEnd, false); - scope.domElement.addEventListener('touchmove', onTouchMove, false); - scope.domElement.addEventListener('keydown', onKeyDown, false); - // force an update at start - this.update(); -}; -OrbitControls.prototype = Object.create(EventDispatcher.prototype); -OrbitControls.prototype.constructor = OrbitControls; -// This set of controls performs orbiting, dollying (zooming), and panning. -// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). -// This is very similar to OrbitControls, another set of touch behavior -// -// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate -// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish -// Pan - left mouse, or arrow keys / touch: one-finger move -var MapControls = function (object, domElement) { - OrbitControls.call(this, object, domElement); - this.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up - this.mouseButtons.LEFT = MOUSE.PAN; - this.mouseButtons.RIGHT = MOUSE.ROTATE; - this.touches.ONE = TOUCH.PAN; - this.touches.TWO = TOUCH.DOLLY_ROTATE; -}; -MapControls.prototype = Object.create(EventDispatcher.prototype); -MapControls.prototype.constructor = MapControls; -export { OrbitControls, MapControls }; -//# sourceMappingURL=OrbitControls.js.map \ No newline at end of file diff --git a/shared/dist/OrbitControls.js.map b/shared/dist/OrbitControls.js.map deleted file mode 100644 index 14a9d13b..00000000 --- a/shared/dist/OrbitControls.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"OrbitControls.js","sourceRoot":"","sources":["../src/OrbitControls.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/constants.d.ts b/shared/dist/constants.d.ts deleted file mode 100644 index 3f3d953b..00000000 --- a/shared/dist/constants.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -declare enum STATE_TYPES { - DEATH = "death", - IDLE = "idle", - ATTACK = "attack", - WALK = "walk", - RUN = "run", - DANCE = "dance" -} -declare enum EVENT_TYPES { - ACTION_ATTACK = "action.attack", - ATTACK = "attack", - ATTACK_DAMAGE = "attack.damage", - CHAT_MSG = "chat.msg", - CHAT_MESSAGE = "chat.message", - LOGIN_COMMIT = "login.commit", - WORLD_INVENTORY = "world.inventory", - WORLD_UPDATE = "world.update", - WORLD_PLAYER = "world.player", - WORLD_STATS = "world.stats" -} -declare enum ATTACK_TYPES { - MELEE = "melee" -} -declare const _TIMEOUT: number; -export { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, _TIMEOUT }; -//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/shared/dist/constants.d.ts.map b/shared/dist/constants.d.ts.map deleted file mode 100644 index 398886c2..00000000 --- a/shared/dist/constants.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,aAAK,WAAW;IACZ,KAAK,UAAU;IACf,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;CAClB;AAED,aAAK,WAAW;IACZ,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;CAC9B;AAED,aAAK,YAAY;IACb,KAAK,UAAU;CAClB;AAED,QAAA,MAAM,QAAQ,EAAC,MAAc,CAAC;AAE9B,OAAO,EACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACX,CAAA"} \ No newline at end of file diff --git a/shared/dist/constants.js b/shared/dist/constants.js deleted file mode 100644 index df741d06..00000000 --- a/shared/dist/constants.js +++ /dev/null @@ -1,29 +0,0 @@ -var STATE_TYPES; -(function (STATE_TYPES) { - STATE_TYPES["DEATH"] = "death"; - STATE_TYPES["IDLE"] = "idle"; - STATE_TYPES["ATTACK"] = "attack"; - STATE_TYPES["WALK"] = "walk"; - STATE_TYPES["RUN"] = "run"; - STATE_TYPES["DANCE"] = "dance"; -})(STATE_TYPES || (STATE_TYPES = {})); -var EVENT_TYPES; -(function (EVENT_TYPES) { - EVENT_TYPES["ACTION_ATTACK"] = "action.attack"; - EVENT_TYPES["ATTACK"] = "attack"; - EVENT_TYPES["ATTACK_DAMAGE"] = "attack.damage"; - EVENT_TYPES["CHAT_MSG"] = "chat.msg"; - EVENT_TYPES["CHAT_MESSAGE"] = "chat.message"; - EVENT_TYPES["LOGIN_COMMIT"] = "login.commit"; - EVENT_TYPES["WORLD_INVENTORY"] = "world.inventory"; - EVENT_TYPES["WORLD_UPDATE"] = "world.update"; - EVENT_TYPES["WORLD_PLAYER"] = "world.player"; - EVENT_TYPES["WORLD_STATS"] = "world.stats"; -})(EVENT_TYPES || (EVENT_TYPES = {})); -var ATTACK_TYPES; -(function (ATTACK_TYPES) { - ATTACK_TYPES["MELEE"] = "melee"; -})(ATTACK_TYPES || (ATTACK_TYPES = {})); -const _TIMEOUT = 600.0; -export { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, _TIMEOUT }; -//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/shared/dist/constants.js.map b/shared/dist/constants.js.map deleted file mode 100644 index abee4c86..00000000 --- a/shared/dist/constants.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,IAAK,WAOJ;AAPD,WAAK,WAAW;IACZ,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,0BAAW,CAAA;IACX,8BAAe,CAAA;AACnB,CAAC,EAPI,WAAW,KAAX,WAAW,QAOf;AAED,IAAK,WAWJ;AAXD,WAAK,WAAW;IACZ,8CAA+B,CAAA;IAC/B,gCAAiB,CAAA;IACjB,8CAA+B,CAAA;IAC/B,oCAAqB,CAAA;IACrB,4CAA6B,CAAA;IAC7B,4CAA6B,CAAA;IAC7B,kDAAmC,CAAA;IACnC,4CAA6B,CAAA;IAC7B,4CAA6B,CAAA;IAC7B,0CAA2B,CAAA;AAC/B,CAAC,EAXI,WAAW,KAAX,WAAW,QAWf;AAED,IAAK,YAEJ;AAFD,WAAK,YAAY;IACb,+BAAe,CAAA;AACnB,CAAC,EAFI,YAAY,KAAZ,YAAY,QAEhB;AAED,MAAM,QAAQ,GAAU,KAAK,CAAC;AAE9B,OAAO,EACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACX,CAAA"} \ No newline at end of file diff --git a/shared/dist/defs.d.ts b/shared/dist/defs.d.ts deleted file mode 100644 index 8db8898b..00000000 --- a/shared/dist/defs.d.ts +++ /dev/null @@ -1,145 +0,0 @@ -declare const CHARACTER_MODELS: { - paladin: { - base: string; - path: string; - anchors: { - rightHand: string; - }; - nameOffset: number; - attack: { - timing: number; - cooldown: number; - type: string; - range: number; - }; - scale: number; - inventory: { - 'inventory-1': string; - 'inventory-2': string; - 'inventory-equip-1': string; - }; - stats: { - health: number; - maxHealth: number; - strength: number; - wisdomness: number; - benchpress: number; - curl: number; - experience: number; - level: number; - }; - name: string; - }; - sorceror: { - base: string; - path: string; - anchors: { - rightHand: string; - }; - nameOffset: number; - attack: { - timing: number; - cooldown: number; - type: string; - range: number; - }; - scale: number; - inventory: {}; - stats: { - health: number; - maxHealth: number; - strength: number; - wisdomness: number; - benchpress: number; - curl: number; - experience: number; - level: number; - }; - name: string; - }; - warrok: { - base: string; - path: string; - anchors: { - rightHand: string; - }; - nameOffset: number; - attack: { - timing: number; - cooldown: number; - type: string; - range: number; - }; - scale: number; - inventory: {}; - stats: { - health: number; - maxHealth: number; - strength: number; - wisdomness: number; - benchpress: number; - curl: number; - experience: number; - level: number; - }; - name: string; - }; - zombie: { - base: string; - path: string; - anchors: { - rightHand: string; - }; - nameOffset: number; - attack: { - timing: number; - cooldown: number; - type: string; - range: number; - }; - scale: number; - inventory: {}; - stats: { - health: number; - maxHealth: number; - strength: number; - wisdomness: number; - benchpress: number; - curl: number; - experience: number; - level: number; - }; - name: string; - }; -}; -declare const WEAPONS_DATA: { - 'weapon.axe1': { - type: string; - damage: number; - renderParams: { - name: string; - scale: number; - icon: string; - }; - }; - 'weapon.sword1': { - type: string; - damage: number; - renderParams: { - name: string; - scale: number; - icon: string; - }; - }; - 'weapon.hammer1': { - type: string; - damage: number; - renderParams: { - name: string; - scale: number; - icon: string; - }; - }; -}; -export { CHARACTER_MODELS, WEAPONS_DATA }; -//# sourceMappingURL=defs.d.ts.map \ No newline at end of file diff --git a/shared/dist/defs.d.ts.map b/shared/dist/defs.d.ts.map deleted file mode 100644 index 9cb916f1..00000000 --- a/shared/dist/defs.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"defs.d.ts","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":"AAuJA,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoB,CAAC;AAC3C,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAgB,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/defs.js b/shared/dist/defs.js deleted file mode 100644 index 826bf3eb..00000000 --- a/shared/dist/defs.js +++ /dev/null @@ -1,147 +0,0 @@ -const _CHARACTER_MODELS = { - paladin: { - base: 'paladin.glb', - path: './resources/characters/', - anchors: { - rightHand: 'RightHandIndex1', - }, - nameOffset: 11, - attack: { - timing: 0.35, - cooldown: 1.0, - type: 'melee', - range: 10, - }, - scale: 6.0, - inventory: { - 'inventory-1': 'weapon.axe1', - 'inventory-2': 'weapon.hammer1', - 'inventory-equip-1': 'weapon.sword1', - }, - stats: { - health: 200, - maxHealth: 200, - strength: 50, - wisdomness: 5, - benchpress: 20, - curl: 100, - experience: 0, - level: 1, - }, - name: 'Paladin', - }, - sorceror: { - base: 'sorceror.glb', - path: './resources/characters/', - anchors: { - rightHand: 'RightHandIndex1', - }, - nameOffset: 10, - attack: { - timing: 1.0, - cooldown: 1.5, - type: 'magic', - range: 40, - }, - scale: 4.0, - inventory: {}, - stats: { - health: 100, - maxHealth: 100, - strength: 10, - wisdomness: 200, - benchpress: 3, - curl: 17, - experience: 0, - level: 1, - }, - name: 'Sorceror', - }, - warrok: { - base: 'warrok.glb', - path: './resources/characters/', - anchors: { - rightHand: 'RightHandIndex1', - }, - nameOffset: 16, - attack: { - timing: 1.5, - cooldown: 2.6, - type: 'melee', - range: 15, - }, - scale: 8.0, - inventory: {}, - stats: { - health: 1000, - maxHealth: 1000, - strength: 200, - wisdomness: 4, - benchpress: 3, - curl: 200, - experience: 0, - level: 1, - }, - name: 'Monster Guy', - }, - zombie: { - base: 'zombie-guy.glb', - path: './resources/characters/', - anchors: { - rightHand: 'RightHandIndex1', - }, - nameOffset: 8, - attack: { - timing: 1.0, - cooldown: 3.0, - type: 'melee', - range: 10, - }, - scale: 4.0, - inventory: {}, - stats: { - health: 20, - maxHealth: 50, - strength: 25, - wisdomness: 4, - benchpress: 3, - curl: 20, - experience: 0, - level: 1, - }, - name: 'Zombie', - }, -}; -const _WEAPONS_DATA = { - 'weapon.axe1': { - type: 'weapon', - damage: 3, - renderParams: { - name: 'Axe', - scale: 0.125, - icon: 'war-axe-64.png', - }, - }, - 'weapon.sword1': { - type: 'weapon', - damage: 3, - renderParams: { - name: 'Sword', - scale: 0.125, - icon: 'pointy-sword-64.png', - }, - }, - 'weapon.hammer1': { - type: 'weapon', - damage: 3, - renderParams: { - name: 'Hammer_Small', - scale: 0.125, - icon: 'hammer-64.png', - }, - }, -}; -const CHARACTER_MODELS = _CHARACTER_MODELS; -const WEAPONS_DATA = _WEAPONS_DATA; -export { CHARACTER_MODELS, WEAPONS_DATA }; -//# sourceMappingURL=defs.js.map \ No newline at end of file diff --git a/shared/dist/defs.js.map b/shared/dist/defs.js.map deleted file mode 100644 index 1a831650..00000000 --- a/shared/dist/defs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/entity-manager.d.ts b/shared/dist/entity-manager.d.ts deleted file mode 100644 index 648147c7..00000000 --- a/shared/dist/entity-manager.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -declare class EntityManager { - _ids: number; - _entitiesMap: {}; - _entities: any[]; - constructor(); - _GenerateName(): string; - Get(n: any): any; - Filter(cb: any): any[]; - Add(e: any, n: any): void; - SetActive(e: any, b: any): void; - Update(timeElapsed: any): void; -} -export { EntityManager }; -//# sourceMappingURL=entity-manager.d.ts.map \ No newline at end of file diff --git a/shared/dist/entity-manager.d.ts.map b/shared/dist/entity-manager.d.ts.map deleted file mode 100644 index 3a54875e..00000000 --- a/shared/dist/entity-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,EAAE,CAAC;IACjB,SAAS,EAAE,GAAG,EAAE,CAAC;;IAQjB,aAAa;IAMb,GAAG,CAAC,CAAC,KAAA;IAIL,MAAM,CAAC,EAAE,KAAA;IAIT,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAaR,SAAS,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAkBd,MAAM,CAAC,WAAW,KAAA;CAyBnB;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/entity-manager.js b/shared/dist/entity-manager.js deleted file mode 100644 index 864da439..00000000 --- a/shared/dist/entity-manager.js +++ /dev/null @@ -1,64 +0,0 @@ -class EntityManager { - constructor() { - this._ids = 0; - this._entitiesMap = {}; - this._entities = []; - } - _GenerateName() { - this._ids += 1; - return '__name__' + this._ids; - } - Get(n) { - return this._entitiesMap[n]; - } - Filter(cb) { - return this._entities.filter(cb); - } - Add(e, n) { - if (!n) { - n = this._GenerateName(); - } - this._entitiesMap[n] = e; - this._entities.push(e); - e.SetParent(this); - e.SetName(n); - e.InitEntity(); - } - SetActive(e, b) { - const i = this._entities.indexOf(e); - if (!b) { - if (i < 0) { - return; - } - this._entities.splice(i, 1); - } - else { - if (i >= 0) { - return; - } - this._entities.push(e); - } - } - Update(timeElapsed) { - const dead = []; - const alive = []; - for (let i = 0; i < this._entities.length; ++i) { - const e = this._entities[i]; - e.Update(timeElapsed); - if (e.dead_) { - dead.push(e); - } - else { - alive.push(e); - } - } - for (let i = 0; i < dead.length; ++i) { - const e = dead[i]; - delete this._entitiesMap[e.Name]; - e.Destroy(); - } - this._entities = alive; - } -} -export { EntityManager }; -//# sourceMappingURL=entity-manager.js.map \ No newline at end of file diff --git a/shared/dist/entity-manager.js.map b/shared/dist/entity-manager.js.map deleted file mode 100644 index ed593fef..00000000 --- a/shared/dist/entity-manager.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"entity-manager.js","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa;IAKjB;QACE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAEf,OAAO,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,EAAE;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,CAAC,EAAE,CAAC;QACN,IAAI,CAAC,CAAC,EAAE;YACN,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;SAC1B;QAED,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEvB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,UAAU,EAAE,CAAC;IACjB,CAAC;IAED,SAAS,CAAC,CAAC,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,CAAC,EAAE;YACN,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,EAAE;gBACV,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;IACH,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAE5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,KAAK,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACd;iBAAM;gBACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACf;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACpC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEjC,CAAC,CAAC,OAAO,EAAE,CAAC;SACb;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;CACF;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/globaltypes.d.ts b/shared/dist/globaltypes.d.ts deleted file mode 100644 index 5ce113d0..00000000 --- a/shared/dist/globaltypes.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { EVENT_TYPES } from "./constants"; -interface IOnMessageArgs { - (evt: TEvt, params: { - accountName?: string; - }): void; -} -/** - * shared event type - */ -declare type TEvt = { - topic: EVENT_TYPES; - params: any; -}; -export type { IOnMessageArgs, TEvt, }; -//# sourceMappingURL=globaltypes.d.ts.map \ No newline at end of file diff --git a/shared/dist/globaltypes.d.ts.map b/shared/dist/globaltypes.d.ts.map deleted file mode 100644 index e08b8baf..00000000 --- a/shared/dist/globaltypes.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"globaltypes.d.ts","sourceRoot":"","sources":["../src/globaltypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,UAAU,cAAc;IACpB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAA;CACX;AAGD;;GAEG;AACH,aAAK,IAAI,GAAG;IACR,KAAK,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAClC,CAAA;AAED,YAAY,EACR,cAAc,EACd,IAAI,GACP,CAAC"} \ No newline at end of file diff --git a/shared/dist/globaltypes.js b/shared/dist/globaltypes.js deleted file mode 100644 index 1dbc950a..00000000 --- a/shared/dist/globaltypes.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=globaltypes.js.map \ No newline at end of file diff --git a/shared/dist/globaltypes.js.map b/shared/dist/globaltypes.js.map deleted file mode 100644 index 7aad7e03..00000000 --- a/shared/dist/globaltypes.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"globaltypes.js","sourceRoot":"","sources":["../src/globaltypes.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/shared/dist/index.d.ts b/shared/dist/index.d.ts deleted file mode 100644 index 08279ec3..00000000 --- a/shared/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare const test = "asdf"; -export { test }; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/shared/dist/index.d.ts.map b/shared/dist/index.d.ts.map deleted file mode 100644 index 5757b8e0..00000000 --- a/shared/dist/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,IAAI,SAAS,CAAC;AAEpB,OAAO,EAAC,IAAI,EAAC,CAAC"} \ No newline at end of file diff --git a/shared/dist/index.js b/shared/dist/index.js deleted file mode 100644 index 3a37feb2..00000000 --- a/shared/dist/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const test = "asdf"; -export { test }; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/shared/dist/index.js.map b/shared/dist/index.js.map deleted file mode 100644 index cb23b658..00000000 --- a/shared/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,MAAM,CAAC;AAEpB,OAAO,EAAC,IAAI,EAAC,CAAC"} \ No newline at end of file diff --git a/shared/dist/math.d.ts b/shared/dist/math.d.ts deleted file mode 100644 index a6794dd3..00000000 --- a/shared/dist/math.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export declare const math: { - rand_range: (a: any, b: any) => any; - rand_normalish: () => number; - rand_int: (a: any, b: any) => number; - lerp: (x: any, a: any, b: any) => any; - smoothstep: (x: any, a: any, b: any) => any; - smootherstep: (x: any, a: any, b: any) => any; - clamp: (x: any, a: any, b: any) => number; - sat: (x: any) => number; - in_range: (x: any, a: any, b: any) => boolean; -}; -//# sourceMappingURL=math.d.ts.map \ No newline at end of file diff --git a/shared/dist/math.d.ts.map b/shared/dist/math.d.ts.map deleted file mode 100644 index e699b750..00000000 --- a/shared/dist/math.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;CAyCb,CAAC"} \ No newline at end of file diff --git a/shared/dist/math.js b/shared/dist/math.js deleted file mode 100644 index 19cb8e27..00000000 --- a/shared/dist/math.js +++ /dev/null @@ -1,35 +0,0 @@ -export const math = (function () { - return { - rand_range: function (a, b) { - return Math.random() * (b - a) + a; - }, - rand_normalish: function () { - const r = Math.random() + Math.random() + Math.random() + Math.random(); - return (r / 4.0) * 2.0 - 1; - }, - rand_int: function (a, b) { - return Math.round(Math.random() * (b - a) + a); - }, - lerp: function (x, a, b) { - return x * (b - a) + a; - }, - smoothstep: function (x, a, b) { - x = x * x * (3.0 - 2.0 * x); - return x * (b - a) + a; - }, - smootherstep: function (x, a, b) { - x = x * x * x * (x * (x * 6 - 15) + 10); - return x * (b - a) + a; - }, - clamp: function (x, a, b) { - return Math.min(Math.max(x, a), b); - }, - sat: function (x) { - return Math.min(Math.max(x, 0.0), 1.0); - }, - in_range: (x, a, b) => { - return x >= a && x <= b; - }, - }; -})(); -//# sourceMappingURL=math.js.map \ No newline at end of file diff --git a/shared/dist/math.js.map b/shared/dist/math.js.map deleted file mode 100644 index ff2f034d..00000000 --- a/shared/dist/math.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;IACnB,OAAO;QACL,UAAU,EAAE,UAAS,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,cAAc,EAAE;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,QAAQ,EAAE,UAAS,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,EAAE,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,UAAU,EAAE,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,YAAY,EAAE,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,EAAE,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,GAAG,EAAE,UAAS,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC"} \ No newline at end of file diff --git a/shared/dist/noise.d.ts b/shared/dist/noise.d.ts deleted file mode 100644 index 60309423..00000000 --- a/shared/dist/noise.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -declare class Noise { - _params: any; - _noise: any; - constructor(params: any); - _Init(): void; - Get(x: any, y: any, z: any): number; -} -export { Noise }; -//# sourceMappingURL=noise.d.ts.map \ No newline at end of file diff --git a/shared/dist/noise.d.ts.map b/shared/dist/noise.d.ts.map deleted file mode 100644 index f3824484..00000000 --- a/shared/dist/noise.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AACA,cAAM,KAAK;IACT,OAAO,EAAE,GAAG,CAAC;IAGb,MAAM,EAAE,GAAG,CAAC;gBAEA,MAAM,KAAA;IAKlB,KAAK;IAIL,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,CAAC,KAAA;CAwBZ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/noise.js b/shared/dist/noise.js deleted file mode 100644 index b9f8b920..00000000 --- a/shared/dist/noise.js +++ /dev/null @@ -1,32 +0,0 @@ -import { SimplexNoise } from './simplex-noise'; -class Noise { - constructor(params) { - this._params = params; - this._Init(); - } - _Init() { - this._noise = new SimplexNoise(this._params.seed); - } - Get(x, y, z) { - const G = Math.pow(2.0, (-this._params.persistence)); - const xs = x / this._params.scale; - const ys = y / this._params.scale; - const zs = z / this._params.scale; - const noiseFunc = this._noise; - let amplitude = 1.0; - let frequency = 1.0; - let normalization = 0; - let total = 0; - for (let o = 0; o < this._params.octaves; o++) { - const noiseValue = noiseFunc.noise3D(xs * frequency, ys * frequency, zs * frequency) * 0.5 + 0.5; - total += noiseValue * amplitude; - normalization += amplitude; - amplitude *= G; - frequency *= this._params.lacunarity; - } - total /= normalization; - return Math.pow(total, this._params.exponentiation) * this._params.height; - } -} -export { Noise }; -//# sourceMappingURL=noise.js.map \ No newline at end of file diff --git a/shared/dist/noise.js.map b/shared/dist/noise.js.map deleted file mode 100644 index f1da74c4..00000000 --- a/shared/dist/noise.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"noise.js","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,MAAM,KAAK;IAMT,YAAY,MAAM;QAChB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,SAAA,GAAG,EAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA,CAAC;QAC7C,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAE9B,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAClC,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YAE9D,KAAK,IAAI,UAAU,GAAG,SAAS,CAAC;YAChC,aAAa,IAAI,SAAS,CAAC;YAC3B,SAAS,IAAI,CAAC,CAAC;YACf,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SACtC;QACD,KAAK,IAAI,aAAa,CAAC;QACvB,OAAO,IAAI,CAAC,GAAG,CACb,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9D,CAAC;CACF;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/simplex-noise.d.ts b/shared/dist/simplex-noise.d.ts deleted file mode 100644 index cae26ba2..00000000 --- a/shared/dist/simplex-noise.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare function SimplexNoise(randomOrSeed: any): void; -declare namespace SimplexNoise { - var _buildPermutationTable: typeof buildPermutationTable; -} -declare function buildPermutationTable(random: any): Uint8Array; -export { SimplexNoise }; -//# sourceMappingURL=simplex-noise.d.ts.map \ No newline at end of file diff --git a/shared/dist/simplex-noise.d.ts.map b/shared/dist/simplex-noise.d.ts.map deleted file mode 100644 index 64dc327f..00000000 --- a/shared/dist/simplex-noise.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"simplex-noise.d.ts","sourceRoot":"","sources":["../src/simplex-noise.ts"],"names":[],"mappings":"AA0CE,iBAAS,YAAY,CAAC,YAAY,KAAA,QAkBjC;kBAlBQ,YAAY;;;AAkWrB,iBAAS,qBAAqB,CAAC,MAAM,KAAA,cAapC;AAkED,OAAO,EAAC,YAAY,EAAC,CAAA"} \ No newline at end of file diff --git a/shared/dist/simplex-noise.js b/shared/dist/simplex-noise.js deleted file mode 100644 index c72b8a90..00000000 --- a/shared/dist/simplex-noise.js +++ /dev/null @@ -1,483 +0,0 @@ -'use strict'; -/* - * A fast javascript implementation of simplex noise by Jonas Wagner - -Based on a speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. -Which is based on example code by Stefan Gustavson (stegu@itn.liu.se). -With Optimisations by Peter Eastman (peastman@drizzle.stanford.edu). -Better rank ordering method by Stefan Gustavson in 2012. - - - Copyright (c) 2018 Jonas Wagner - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - */ -// (function() { -var F2 = 0.5 * (Math.sqrt(3.0) - 1.0); -var G2 = (3.0 - Math.sqrt(3.0)) / 6.0; -var F3 = 1.0 / 3.0; -var G3 = 1.0 / 6.0; -var F4 = (Math.sqrt(5.0) - 1.0) / 4.0; -var G4 = (5.0 - Math.sqrt(5.0)) / 20.0; -function SimplexNoise(randomOrSeed) { - var random; - if (typeof randomOrSeed == 'function') { - random = randomOrSeed; - } - else if (randomOrSeed) { - random = alea(randomOrSeed); - } - else { - random = Math.random; - } - this.p = buildPermutationTable(random); - this.perm = new Uint8Array(512); - this.permMod12 = new Uint8Array(512); - for (var i = 0; i < 512; i++) { - this.perm[i] = this.p[i & 255]; - this.permMod12[i] = this.perm[i] % 12; - } -} -SimplexNoise.prototype = { - grad3: new Float32Array([1, 1, 0, - -1, 1, 0, - 1, -1, 0, - -1, -1, 0, - 1, 0, 1, - -1, 0, 1, - 1, 0, -1, - -1, 0, -1, - 0, 1, 1, - 0, -1, 1, - 0, 1, -1, - 0, -1, -1]), - grad4: new Float32Array([0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, - 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, - 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, 0, -1, -1, - -1, 0, 1, 1, -1, 0, 1, -1, -1, 0, -1, 1, -1, 0, -1, -1, - 1, 1, 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1, - -1, 1, 0, 1, -1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, -1, - 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0, - -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0]), - noise2D: function (xin, yin) { - var permMod12 = this.permMod12; - var perm = this.perm; - var grad3 = this.grad3; - var n0 = 0; // Noise contributions from the three corners - var n1 = 0; - var n2 = 0; - // Skew the input space to determine which simplex cell we're in - var s = (xin + yin) * F2; // Hairy factor for 2D - var i = Math.floor(xin + s); - var j = Math.floor(yin + s); - var t = (i + j) * G2; - var X0 = i - t; // Unskew the cell origin back to (x,y) space - var Y0 = j - t; - var x0 = xin - X0; // The x,y distances from the cell origin - var y0 = yin - Y0; - // For the 2D case, the simplex shape is an equilateral triangle. - // Determine which simplex we are in. - var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords - if (x0 > y0) { - i1 = 1; - j1 = 0; - } // lower triangle, XY order: (0,0)->(1,0)->(1,1) - else { - i1 = 0; - j1 = 1; - } // upper triangle, YX order: (0,0)->(0,1)->(1,1) - // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and - // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where - // c = (3-sqrt(3))/6 - var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords - var y1 = y0 - j1 + G2; - var x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords - var y2 = y0 - 1.0 + 2.0 * G2; - // Work out the hashed gradient indices of the three simplex corners - var ii = i & 255; - var jj = j & 255; - // Calculate the contribution from the three corners - var t0 = 0.5 - x0 * x0 - y0 * y0; - if (t0 >= 0) { - var gi0 = permMod12[ii + perm[jj]] * 3; - t0 *= t0; - n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0); // (x,y) of grad3 used for 2D gradient - } - var t1 = 0.5 - x1 * x1 - y1 * y1; - if (t1 >= 0) { - var gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3; - t1 *= t1; - n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1); - } - var t2 = 0.5 - x2 * x2 - y2 * y2; - if (t2 >= 0) { - var gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3; - t2 *= t2; - n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2); - } - // Add contributions from each corner to get the final noise value. - // The result is scaled to return values in the interval [-1,1]. - return 70.0 * (n0 + n1 + n2); - }, - // 3D simplex noise - noise3D: function (xin, yin, zin) { - var permMod12 = this.permMod12; - var perm = this.perm; - var grad3 = this.grad3; - var n0, n1, n2, n3; // Noise contributions from the four corners - // Skew the input space to determine which simplex cell we're in - var s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D - var i = Math.floor(xin + s); - var j = Math.floor(yin + s); - var k = Math.floor(zin + s); - var t = (i + j + k) * G3; - var X0 = i - t; // Unskew the cell origin back to (x,y,z) space - var Y0 = j - t; - var Z0 = k - t; - var x0 = xin - X0; // The x,y,z distances from the cell origin - var y0 = yin - Y0; - var z0 = zin - Z0; - // For the 3D case, the simplex shape is a slightly irregular tetrahedron. - // Determine which simplex we are in. - var i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords - var i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords - if (x0 >= y0) { - if (y0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 1; - k2 = 0; - } // X Y Z order - else if (x0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 0; - k2 = 1; - } // X Z Y order - else { - i1 = 0; - j1 = 0; - k1 = 1; - i2 = 1; - j2 = 0; - k2 = 1; - } // Z X Y order - } - else { // x0 y0) - rankx++; - else - ranky++; - if (x0 > z0) - rankx++; - else - rankz++; - if (x0 > w0) - rankx++; - else - rankw++; - if (y0 > z0) - ranky++; - else - rankz++; - if (y0 > w0) - ranky++; - else - rankw++; - if (z0 > w0) - rankz++; - else - rankw++; - var i1, j1, k1, l1; // The integer offsets for the second simplex corner - var i2, j2, k2, l2; // The integer offsets for the third simplex corner - var i3, j3, k3, l3; // The integer offsets for the fourth simplex corner - // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. - // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0; - j1 = ranky >= 3 ? 1 : 0; - k1 = rankz >= 3 ? 1 : 0; - l1 = rankw >= 3 ? 1 : 0; - // Rank 2 denotes the second largest coordinate. - i2 = rankx >= 2 ? 1 : 0; - j2 = ranky >= 2 ? 1 : 0; - k2 = rankz >= 2 ? 1 : 0; - l2 = rankw >= 2 ? 1 : 0; - // Rank 1 denotes the second smallest coordinate. - i3 = rankx >= 1 ? 1 : 0; - j3 = ranky >= 1 ? 1 : 0; - k3 = rankz >= 1 ? 1 : 0; - l3 = rankw >= 1 ? 1 : 0; - // The fifth corner has all coordinate offsets = 1, so no need to compute that. - var x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords - var y1 = y0 - j1 + G4; - var z1 = z0 - k1 + G4; - var w1 = w0 - l1 + G4; - var x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords - var y2 = y0 - j2 + 2.0 * G4; - var z2 = z0 - k2 + 2.0 * G4; - var w2 = w0 - l2 + 2.0 * G4; - var x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords - var y3 = y0 - j3 + 3.0 * G4; - var z3 = z0 - k3 + 3.0 * G4; - var w3 = w0 - l3 + 3.0 * G4; - var x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords - var y4 = y0 - 1.0 + 4.0 * G4; - var z4 = z0 - 1.0 + 4.0 * G4; - var w4 = w0 - 1.0 + 4.0 * G4; - // Work out the hashed gradient indices of the five simplex corners - var ii = i & 255; - var jj = j & 255; - var kk = k & 255; - var ll = l & 255; - // Calculate the contribution from the five corners - var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; - if (t0 < 0) - n0 = 0.0; - else { - var gi0 = (perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32) * 4; - t0 *= t0; - n0 = t0 * t0 * (grad4[gi0] * x0 + grad4[gi0 + 1] * y0 + grad4[gi0 + 2] * z0 + grad4[gi0 + 3] * w0); - } - var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; - if (t1 < 0) - n1 = 0.0; - else { - var gi1 = (perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32) * 4; - t1 *= t1; - n1 = t1 * t1 * (grad4[gi1] * x1 + grad4[gi1 + 1] * y1 + grad4[gi1 + 2] * z1 + grad4[gi1 + 3] * w1); - } - var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; - if (t2 < 0) - n2 = 0.0; - else { - var gi2 = (perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32) * 4; - t2 *= t2; - n2 = t2 * t2 * (grad4[gi2] * x2 + grad4[gi2 + 1] * y2 + grad4[gi2 + 2] * z2 + grad4[gi2 + 3] * w2); - } - var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; - if (t3 < 0) - n3 = 0.0; - else { - var gi3 = (perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32) * 4; - t3 *= t3; - n3 = t3 * t3 * (grad4[gi3] * x3 + grad4[gi3 + 1] * y3 + grad4[gi3 + 2] * z3 + grad4[gi3 + 3] * w3); - } - var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; - if (t4 < 0) - n4 = 0.0; - else { - var gi4 = (perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32) * 4; - t4 *= t4; - n4 = t4 * t4 * (grad4[gi4] * x4 + grad4[gi4 + 1] * y4 + grad4[gi4 + 2] * z4 + grad4[gi4 + 3] * w4); - } - // Sum up and scale the result to cover the range [-1,1] - return 27.0 * (n0 + n1 + n2 + n3 + n4); - } -}; -function buildPermutationTable(random) { - var i; - var p = new Uint8Array(256); - for (i = 0; i < 256; i++) { - p[i] = i; - } - for (i = 0; i < 255; i++) { - var r = i + ~~(random() * (256 - i)); - var aux = p[i]; - p[i] = p[r]; - p[r] = aux; - } - return p; -} -SimplexNoise._buildPermutationTable = buildPermutationTable; -function alea(input) { - // Johannes Baagøe , 2010 - var s0 = 0; - var s1 = 0; - var s2 = 0; - var c = 1; - var mash = masher(); - s0 = mash(' '); - s1 = mash(' '); - s2 = mash(' '); - for (var i = 0; i < arguments.length; i++) { - s0 -= mash(arguments[i]); - if (s0 < 0) { - s0 += 1; - } - s1 -= mash(arguments[i]); - if (s1 < 0) { - s1 += 1; - } - s2 -= mash(arguments[i]); - if (s2 < 0) { - s2 += 1; - } - } - mash = null; - return function () { - var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32 - s0 = s1; - s1 = s2; - return s2 = t - (c = t | 0); - }; -} -function masher() { - var n = 0xefc8249d; - return function (data) { - data = data.toString(); - for (var i = 0; i < data.length; i++) { - n += data.charCodeAt(i); - var h = 0.02519603282416938 * n; - n = h >>> 0; - h -= n; - h *= n; - n = h >>> 0; - h -= n; - n += h * 0x100000000; // 2^32 - } - return (n >>> 0) * 2.3283064365386963e-10; // 2^-32 - }; -} -// // amd -// if (typeof define !== 'undefined' && define.amd) define(function() {return SimplexNoise;}); -// // common js -// if (typeof exports !== 'undefined') exports.SimplexNoise = SimplexNoise; -// // browser -// else if (typeof window !== 'undefined') window.SimplexNoise = SimplexNoise; -// // nodejs -// if (typeof module !== 'undefined') { -// module.exports = SimplexNoise; -// } -export { SimplexNoise }; -//# sourceMappingURL=simplex-noise.js.map \ No newline at end of file diff --git a/shared/dist/simplex-noise.js.map b/shared/dist/simplex-noise.js.map deleted file mode 100644 index 3db5b6ff..00000000 --- a/shared/dist/simplex-noise.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"simplex-noise.js","sourceRoot":"","sources":["../src/simplex-noise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/spatial-hash-grid.d.ts b/shared/dist/spatial-hash-grid.d.ts deleted file mode 100644 index 30ab20f1..00000000 --- a/shared/dist/spatial-hash-grid.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -declare class SpatialHashGrid { - _cells: any[][]; - _dimensions: any; - _bounds: any; - _queryIds: number; - constructor(bounds: any, dimensions: any); - _GetCellIndex(position: any): number[]; - NewClient(position: any, dimensions: any): { - position: any; - dimensions: any; - _cells: { - min: any; - max: any; - nodes: any; - }; - _queryId: number; - }; - UpdateClient(client: any): void; - FindNear(position: any, bounds: any): any[]; - _Insert(client: any): void; - Remove(client: any): void; -} -export { SpatialHashGrid }; -//# sourceMappingURL=spatial-hash-grid.d.ts.map \ No newline at end of file diff --git a/shared/dist/spatial-hash-grid.d.ts.map b/shared/dist/spatial-hash-grid.d.ts.map deleted file mode 100644 index 2632657e..00000000 --- a/shared/dist/spatial-hash-grid.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"spatial-hash-grid.d.ts","sourceRoot":"","sources":["../src/spatial-hash-grid.ts"],"names":[],"mappings":"AAEA,cAAM,eAAe;IACnB,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;gBACN,MAAM,KAAA,EAAE,UAAU,KAAA;IAQ9B,aAAa,CAAC,QAAQ,KAAA;IAYtB,SAAS,CAAC,QAAQ,KAAA,EAAE,UAAU,KAAA;;;;;;;;;;IAiB9B,YAAY,CAAC,MAAM,KAAA;IAkBnB,QAAQ,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA;IA4BzB,OAAO,CAAC,MAAM,KAAA;IAqCd,MAAM,CAAC,MAAM,KAAA;CA2Bd;AACD,OAAO,EAAE,eAAe,EAAE,CAAA"} \ No newline at end of file diff --git a/shared/dist/spatial-hash-grid.js b/shared/dist/spatial-hash-grid.js deleted file mode 100644 index 7d43c42a..00000000 --- a/shared/dist/spatial-hash-grid.js +++ /dev/null @@ -1,119 +0,0 @@ -import { math } from './math'; -class SpatialHashGrid { - constructor(bounds, dimensions) { - const [x, y] = dimensions; - this._cells = [...Array(x)].map(_ => [...Array(y)].map(_ => (null))); - this._dimensions = dimensions; - this._bounds = bounds; - this._queryIds = 0; - } - _GetCellIndex(position) { - const x = math.sat((position[0] - this._bounds[0][0]) / (this._bounds[1][0] - this._bounds[0][0])); - const y = math.sat((position[1] - this._bounds[0][1]) / (this._bounds[1][1] - this._bounds[0][1])); - const xIndex = Math.floor(x * (this._dimensions[0] - 1)); - const yIndex = Math.floor(y * (this._dimensions[1] - 1)); - return [xIndex, yIndex]; - } - NewClient(position, dimensions) { - const client = { - position: position, - dimensions: dimensions, - _cells: { - min: null, - max: null, - nodes: null, - }, - _queryId: -1, - }; - this._Insert(client); - return client; - } - UpdateClient(client) { - const [x, y] = client.position; - const [w, h] = client.dimensions; - const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); - const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); - if (client._cells.min[0] == i1[0] && - client._cells.min[1] == i1[1] && - client._cells.max[0] == i2[0] && - client._cells.max[1] == i2[1]) { - return; - } - this.Remove(client); - this._Insert(client); - } - FindNear(position, bounds) { - const [x, y] = position; - const [w, h] = bounds; - const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); - const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); - const clients = []; - const queryId = this._queryIds++; - for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { - for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { - let head = this._cells[x][y]; - while (head) { - const v = head.client; - head = head.next; - if (v._queryId != queryId) { - v._queryId = queryId; - clients.push(v); - } - } - } - } - return clients; - } - _Insert(client) { - const [x, y] = client.position; - const [w, h] = client.dimensions; - const i1 = this._GetCellIndex([x - w / 2, y - h / 2]); - const i2 = this._GetCellIndex([x + w / 2, y + h / 2]); - const nodes = []; - for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { - nodes.push([]); - for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { - const xi = x - i1[0]; - const head = { - next: null, - prev: null, - client: client, - }; - nodes[xi].push(head); - head.next = this._cells[x][y]; - if (this._cells[x][y]) { - this._cells[x][y].prev = head; - } - this._cells[x][y] = head; - } - } - client._cells.min = i1; - client._cells.max = i2; - client._cells.nodes = nodes; - } - Remove(client) { - const i1 = client._cells.min; - const i2 = client._cells.max; - for (let x = i1[0], xn = i2[0]; x <= xn; ++x) { - for (let y = i1[1], yn = i2[1]; y <= yn; ++y) { - const xi = x - i1[0]; - const yi = y - i1[1]; - const node = client._cells.nodes[xi][yi]; - if (node.next) { - node.next.prev = node.prev; - } - if (node.prev) { - node.prev.next = node.next; - } - if (!node.prev) { - this._cells[x][y] = node.next; - } - } - } - client._cells.min = null; - client._cells.max = null; - client._cells.nodes = null; - } -} -export { SpatialHashGrid }; -//# sourceMappingURL=spatial-hash-grid.js.map \ No newline at end of file diff --git a/shared/dist/spatial-hash-grid.js.map b/shared/dist/spatial-hash-grid.js.map deleted file mode 100644 index b008c8c9..00000000 --- a/shared/dist/spatial-hash-grid.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"spatial-hash-grid.js","sourceRoot":"","sources":["../src/spatial-hash-grid.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/spline.d.ts b/shared/dist/spline.d.ts deleted file mode 100644 index d22c8ed6..00000000 --- a/shared/dist/spline.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -declare class CubicHermiteSpline { - _points: any[]; - _lerp: any; - constructor(lerp: any); - AddPoint(t: any, d: any): void; - Get(t: any): any; -} -declare class LinearSpline { - _points: any[]; - _lerp: any; - constructor(lerp: any); - AddPoint(t: any, d: any): void; - Get(t: any): any; -} -export { CubicHermiteSpline, LinearSpline }; -//# sourceMappingURL=spline.d.ts.map \ No newline at end of file diff --git a/shared/dist/spline.d.ts.map b/shared/dist/spline.d.ts.map deleted file mode 100644 index 156dec6d..00000000 --- a/shared/dist/spline.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"spline.d.ts","sourceRoot":"","sources":["../src/spline.ts"],"names":[],"mappings":"AACE,cAAM,kBAAkB;IACtB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;gBACC,IAAI,KAAA;IAKhB,QAAQ,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAIb,GAAG,CAAC,CAAC,KAAA;CAwBN;AAED,cAAM,YAAY;IAChB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;gBACC,IAAI,KAAA;IAKhB,QAAQ,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAIb,GAAG,CAAC,CAAC,KAAA;CAqBN;AAGH,OAAO,EAAC,kBAAkB,EAAE,YAAY,EAAC,CAAA"} \ No newline at end of file diff --git a/shared/dist/spline.js b/shared/dist/spline.js deleted file mode 100644 index 098e603e..00000000 --- a/shared/dist/spline.js +++ /dev/null @@ -1,51 +0,0 @@ -class CubicHermiteSpline { - constructor(lerp) { - this._points = []; - this._lerp = lerp; - } - AddPoint(t, d) { - this._points.push([t, d]); - } - Get(t) { - let p1 = 0; - for (let i = 0; i < this._points.length; i++) { - if (this._points[i][0] >= t) { - break; - } - p1 = i; - } - const p0 = Math.max(0, p1 - 1); - const p2 = Math.min(this._points.length - 1, p1 + 1); - const p3 = Math.min(this._points.length - 1, p1 + 2); - if (p1 == p2) { - return this._points[p1][1]; - } - return this._lerp((t - this._points[p1][0]) / (this._points[p2][0] - this._points[p1][0]), this._points[p0][1], this._points[p1][1], this._points[p2][1], this._points[p3][1]); - } -} -; -class LinearSpline { - constructor(lerp) { - this._points = []; - this._lerp = lerp; - } - AddPoint(t, d) { - this._points.push([t, d]); - } - Get(t) { - let p1 = 0; - for (let i = 0; i < this._points.length; i++) { - if (this._points[i][0] >= t) { - break; - } - p1 = i; - } - const p2 = Math.min(this._points.length - 1, p1 + 1); - if (p1 == p2) { - return this._points[p1][1]; - } - return this._lerp((t - this._points[p1][0]) / (this._points[p2][0] - this._points[p1][0]), this._points[p1][1], this._points[p2][1]); - } -} -export { CubicHermiteSpline, LinearSpline }; -//# sourceMappingURL=spline.js.map \ No newline at end of file diff --git a/shared/dist/spline.js.map b/shared/dist/spline.js.map deleted file mode 100644 index ba84636e..00000000 --- a/shared/dist/spline.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"spline.js","sourceRoot":"","sources":["../src/spline.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/shared/dist/terrain-constants.d.ts b/shared/dist/terrain-constants.d.ts deleted file mode 100644 index 1d215828..00000000 --- a/shared/dist/terrain-constants.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -declare const QT_MIN_CELL_SIZE = 100; -declare const QT_MIN_CELL_RESOLUTION = 16; -declare const PLANET_RADIUS = 8000; -declare const NOISE_HEIGHT = 800; -declare const NOISE_SCALE = 1800; -declare const NOISE_PARAMS: { - octaves: number; - persistence: number; - lacunarity: number; - exponentiation: number; - height: number; - scale: number; - seed: number; -}; -export { QT_MIN_CELL_SIZE, QT_MIN_CELL_RESOLUTION, PLANET_RADIUS, NOISE_HEIGHT, NOISE_SCALE, NOISE_PARAMS, }; -//# sourceMappingURL=terrain-constants.d.ts.map \ No newline at end of file diff --git a/shared/dist/terrain-constants.d.ts.map b/shared/dist/terrain-constants.d.ts.map deleted file mode 100644 index ae659b64..00000000 --- a/shared/dist/terrain-constants.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"terrain-constants.d.ts","sourceRoot":"","sources":["../src/terrain-constants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB,MAAM,CAAC;AAE7B,QAAA,MAAM,sBAAsB,KAAK,CAAC;AAElC,QAAA,MAAM,aAAa,OAAS,CAAC;AAE7B,QAAA,MAAM,YAAY,MAAQ,CAAC;AAE3B,QAAA,MAAM,WAAW,OAAS,CAAC;AAC3B,QAAA,MAAM,YAAY;;;;;;;;CAQjB,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,CAAA"} \ No newline at end of file diff --git a/shared/dist/terrain-constants.js b/shared/dist/terrain-constants.js deleted file mode 100644 index d466247c..00000000 --- a/shared/dist/terrain-constants.js +++ /dev/null @@ -1,19 +0,0 @@ -const QT_MIN_CELL_SIZE = 100; -// const QT_MIN_CELL_RESOLUTION = 24; -const QT_MIN_CELL_RESOLUTION = 16; -// const QT_MIN_CELL_RESOLUTION = 4; -const PLANET_RADIUS = 8000.0; -const NOISE_HEIGHT = 800.0; -// const NOISE_HEIGHT = 0.0; -const NOISE_SCALE = 1800.0; -const NOISE_PARAMS = { - octaves: 10, - persistence: 0.5, - lacunarity: 1.6, - exponentiation: 7.5, - height: NOISE_HEIGHT, - scale: NOISE_SCALE, - seed: 1 -}; -export { QT_MIN_CELL_SIZE, QT_MIN_CELL_RESOLUTION, PLANET_RADIUS, NOISE_HEIGHT, NOISE_SCALE, NOISE_PARAMS, }; -//# sourceMappingURL=terrain-constants.js.map \ No newline at end of file diff --git a/shared/dist/terrain-constants.js.map b/shared/dist/terrain-constants.js.map deleted file mode 100644 index 96e99e00..00000000 --- a/shared/dist/terrain-constants.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"terrain-constants.js","sourceRoot":"","sources":["../src/terrain-constants.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,qCAAqC;AACrC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,oCAAoC;AACpC,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,MAAM,YAAY,GAAG,KAAK,CAAC;AAC3B,4BAA4B;AAC5B,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,GAAG;IACf,cAAc,EAAE,GAAG;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,CAAC;CACR,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,CAAA"} \ No newline at end of file diff --git a/shared/dist/terrain-height.d.ts b/shared/dist/terrain-height.d.ts deleted file mode 100644 index b370e722..00000000 --- a/shared/dist/terrain-height.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Noise } from './noise'; -declare class HeightGenerator { - noise_: Noise; - constructor(); - Get(x: any, y: any, z: any): number[]; -} -export { HeightGenerator }; -//# sourceMappingURL=terrain-height.d.ts.map \ No newline at end of file diff --git a/shared/dist/terrain-height.d.ts.map b/shared/dist/terrain-height.d.ts.map deleted file mode 100644 index d090a053..00000000 --- a/shared/dist/terrain-height.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"terrain-height.d.ts","sourceRoot":"","sources":["../src/terrain-height.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,cAAM,eAAe;IACnB,MAAM,EAAE,KAAK,CAAC;;IAKd,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,CAAC,KAAA;CAGZ;AAED,OAAO,EAAC,eAAe,EAAC,CAAA"} \ No newline at end of file diff --git a/shared/dist/terrain-height.js b/shared/dist/terrain-height.js deleted file mode 100644 index 46a05eea..00000000 --- a/shared/dist/terrain-height.js +++ /dev/null @@ -1,13 +0,0 @@ -import { NOISE_PARAMS } from './terrain-constants'; -import { Noise } from './noise'; -class HeightGenerator { - constructor() { - this.noise_ = new Noise(NOISE_PARAMS); - } - Get(x, y, z) { - return [this.noise_.Get(x, y, z), 1]; - } -} -; -export { HeightGenerator }; -//# sourceMappingURL=terrain-height.js.map \ No newline at end of file diff --git a/shared/dist/terrain-height.js.map b/shared/dist/terrain-height.js.map deleted file mode 100644 index 574ea49a..00000000 --- a/shared/dist/terrain-height.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"terrain-height.js","sourceRoot":"","sources":["../src/terrain-height.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,eAAe;IAEnB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;CACF;AAAA,CAAC;AAEF,OAAO,EAAC,eAAe,EAAC,CAAA"} \ No newline at end of file diff --git a/shared/src/index.ts b/shared/src/index.ts deleted file mode 100644 index 93206f90..00000000 --- a/shared/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -const test = "asdf"; - -export {test}; \ No newline at end of file diff --git a/shared/src/math.ts b/shared/src/math.ts deleted file mode 100644 index 08d5f86f..00000000 --- a/shared/src/math.ts +++ /dev/null @@ -1,42 +0,0 @@ -export const math = (function() { - return { - rand_range: function(a, b) { - return Math.random() * (b - a) + a; - }, - - rand_normalish: function() { - const r = Math.random() + Math.random() + Math.random() + Math.random(); - return (r / 4.0) * 2.0 - 1; - }, - - rand_int: function(a, b) { - return Math.round(Math.random() * (b - a) + a); - }, - - lerp: function(x, a, b) { - return x * (b - a) + a; - }, - - smoothstep: function(x, a, b) { - x = x * x * (3.0 - 2.0 * x); - return x * (b - a) + a; - }, - - smootherstep: function(x, a, b) { - x = x * x * x * (x * (x * 6 - 15) + 10); - return x * (b - a) + a; - }, - - clamp: function(x, a, b) { - return Math.min(Math.max(x, a), b); - }, - - sat: function(x) { - return Math.min(Math.max(x, 0.0), 1.0); - }, - - in_range: (x, a, b) => { - return x >= a && x <= b; - }, - }; -})(); diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 00000000..f7ef2778 --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,1406 @@ +Arguments: + /home/kadajett/.nvm/versions/node/v15.11.0/bin/node /home/kadajett/.nvm/versions/node/v15.11.0/bin/yarn workspace client install + +PATH: + /tmp/yarn--1617207041185-0.2755529015571232:/home/kadajett/dev/Quick_3D_MMORPG/node_modules/.bin:/home/kadajett/.config/yarn/link/node_modules/.bin:/home/kadajett/dev/Quick_3D_MMORPG/node_modules/.bin:/home/kadajett/.yarn/bin:/home/kadajett/.nvm/versions/node/v15.11.0/libexec/lib/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.nvm/versions/node/v15.11.0/lib/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.nvm/versions/node/v15.11.0/bin/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.vscode-server/bin/2b9aebd5354a3629c3aba0a5f5df49f43d6689f8/bin:/home/kadajett/.nvm/versions/node/v15.11.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222.0_x64__79rhkp1fndgsc:/mnt/c/Program Files (x86)/Razer Chroma SDK/bin:/mnt/c/Program Files/Razer Chroma SDK/bin:/mnt/c/Program Files (x86)/Razer/ChromaBroadcast/bin:/mnt/c/Program Files/Razer/ChromaBroadcast/bin:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/windows/system32/config/systemprofile/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/jerem/AppData/Local/Microsoft/WindowsApps:/mnt/c/Program Files/TortoiseSVN/bin:/mnt/c/Users/jerem/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/jerem/AppData/Local/GitHubDesktop/bin:/snap/bin + +Yarn version: + 1.22.10 + +Node version: + 15.11.0 + +Platform: + linux x64 + +Trace: + SyntaxError: /home/kadajett/dev/Quick_3D_MMORPG/packages/client/package.json: Unexpected token } in JSON at position 355 + at JSON.parse () + at /home/kadajett/.nvm/versions/node/v15.11.0/lib/node_modules/yarn/lib/cli.js:1625:59 + at Generator.next () + at step (/home/kadajett/.nvm/versions/node/v15.11.0/lib/node_modules/yarn/lib/cli.js:310:30) + at /home/kadajett/.nvm/versions/node/v15.11.0/lib/node_modules/yarn/lib/cli.js:321:13 + +npm manifest: + { + "private": true, + "workspaces": [ + "packages/*" + ], + "dependencies": { + "typescript": "^4.2.3" + }, + "scripts": { + "server": "yarn workspace server", + "client": "yarn workspace client", + "shared": "yarn workspace shared", + "start:server:dev": "yarn server start:dev", + "start:client:dev": "yarn client start:dev", + "start:shared:dev": "yarn shared start:dev" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + "@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + + "@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + + "@types/component-emitter@^1.2.10": + version "1.2.10" + resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" + integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== + + "@types/cookie@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.0.tgz#14f854c0f93d326e39da6e3b6f34f7d37513d108" + integrity sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg== + + "@types/cors@^2.8.8": + version "2.8.10" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" + integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== + + "@types/node@>=10.0.0": + version "14.14.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" + integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + + abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + + accepts@~1.3.4: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + + ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + + ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + + ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + + ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + + anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + + async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + + backo2@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + + balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + + base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + + base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + + basic-auth@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" + integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= + + binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + + boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + + brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + + braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + + cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + + call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + + camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + + chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + + chokidar@^3.2.2: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + + ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + + cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + + clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + + color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + + color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + + colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + + component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + + concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + + configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + + cookie@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + + cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + + corser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" + integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= + + cross-env@^5.0.5: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" + integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== + dependencies: + cross-spawn "^6.0.5" + + cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + + cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + + crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + + debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + + debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + + debug@~4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + + decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + + deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + + defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + + dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + + duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + + duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + + ecstatic@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48" + integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog== + dependencies: + he "^1.1.1" + mime "^1.6.0" + minimist "^1.1.0" + url-join "^2.0.5" + + emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + + emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + + end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + + engine.io-client@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.0.0.tgz#65733887c8999d280e1dd7f241779a2c66e9559e" + integrity sha512-e6GK0Fqvq45Nu/j7YdIVqXtDPvlsggAcfml3QiEiGdJ1qeh7IQU6knxSN3+yy9BmbnXtIfjo1hK4MFyHKdc9mQ== + dependencies: + base64-arraybuffer "0.1.4" + component-emitter "~1.3.0" + debug "~4.3.1" + engine.io-parser "~4.0.1" + has-cors "1.1.0" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~7.4.2" + yeast "0.1.2" + + engine.io-parser@~4.0.0, engine.io-parser@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" + integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg== + dependencies: + base64-arraybuffer "0.1.4" + + engine.io@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-5.0.0.tgz#470dc94a8a4907fa4d2cd1fa6611426afcee61bf" + integrity sha512-BATIdDV3H1SrE9/u2BAotvsmjJg0t1P4+vGedImSs1lkFAtQdvk4Ev1y4LDiPF7BPWgXWEG+NDY+nLvW3UrMWw== + dependencies: + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~4.0.0" + ws "~7.4.2" + + escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + + event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + + eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + + fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + + follow-redirects@^1.0.0: + version "1.13.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" + integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + + from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + + fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + + function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + + get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + + get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + + get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + + gl-matrix@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" + integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== + + glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + + global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + dependencies: + ini "1.3.7" + + got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + + graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + + has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + + has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + + has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + + has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + + has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + + has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + + he@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + + http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + + http-proxy@^1.18.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + + http-server@^0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.12.3.tgz#ba0471d0ecc425886616cb35c4faf279140a0d37" + integrity sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA== + dependencies: + basic-auth "^1.0.3" + colors "^1.4.0" + corser "^2.0.1" + ecstatic "^3.3.2" + http-proxy "^1.18.0" + minimist "^1.2.5" + opener "^1.5.1" + portfinder "^1.0.25" + secure-compare "3.0.1" + union "~0.5.0" + + http@^0.0.1-security: + version "0.0.1-security" + resolved "https://registry.yarnpkg.com/http/-/http-0.0.1-security.tgz#3aac09129d12dc2747bbce4157afde20ad1f7995" + integrity sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g== + + ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + + import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + + imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + + ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + + ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + + is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + + is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + + is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + + is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + + is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + + is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + + is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + + is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + + is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + + is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + + is-path-inside@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + + is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + + is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + + isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + + json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + + keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + + latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + + lodash@^4.17.14: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + + lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + + make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + + map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= + + mime-db@1.46.0: + version "1.46.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" + integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== + + mime-types@~2.1.24: + version "2.1.29" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" + integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + dependencies: + mime-db "1.46.0" + + mime@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + + mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + + minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + + minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + + mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + + ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + + ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + + ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + + negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + + nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + + node-cleanup@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" + integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= + + nodemon@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" + integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.3" + update-notifier "^4.1.0" + + nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + + normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + + normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + + object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + + object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + + once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + + opener@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + + p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + + package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + + parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== + + parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== + + path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + + path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + + pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + + picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + + portfinder@^1.0.25: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + + prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + + ps-tree@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + + pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + + pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + + pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + + qs@^6.4.0: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + + rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + + readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + + registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + + registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + + requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + + responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + + secure-compare@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" + integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= + + semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + + semver@^5.5.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + + semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + + shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + + shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + + shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + + shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + + side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + + signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + + socket.io-adapter@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz#43af9157c4609e74b8addc6867873ac7eb48fda2" + integrity sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg== + + socket.io-client@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.0.0.tgz#643cc25e5b5bbe37be75ecd317156a3335bb495a" + integrity sha512-27yQxmXJAEYF19Ygyl8FPJ0if0wegpSmkIIbrWJeI7n7ST1JyH8bbD5v3fjjGY5cfCanACJ3dARUAyiVFNrlTQ== + dependencies: + "@types/component-emitter" "^1.2.10" + backo2 "~1.0.2" + component-emitter "~1.3.0" + debug "~4.3.1" + engine.io-client "~5.0.0" + parseuri "0.0.6" + socket.io-parser "~4.0.4" + + socket.io-parser@~4.0.3, socket.io-parser@~4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" + integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== + dependencies: + "@types/component-emitter" "^1.2.10" + component-emitter "~1.3.0" + debug "~4.3.1" + + socket.io@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.0.0.tgz#ee484a95dc6a38698491aaf63b6ec1f3ceeac0a8" + integrity sha512-/c1riZMV/4yz7KEpaMhDQbwhJDIoO55whXaRKgyEBQrLU9zUHXo9rzeTMvTOqwL9mbKfHKdrXcMoCeQ/1YtMsg== + dependencies: + "@types/cookie" "^0.4.0" + "@types/cors" "^2.8.8" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "~2.0.0" + debug "~4.3.1" + engine.io "~5.0.0" + socket.io-adapter "~2.2.0" + socket.io-parser "~4.0.3" + + split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + dependencies: + through "2" + + stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= + dependencies: + duplexer "~0.1.1" + + string-argv@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.1.2.tgz#c5b7bc03fb2b11983ba3a72333dd0559e77e4738" + integrity sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA== + + string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + + string-width@^4.0.0, string-width@^4.1.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + + strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + + strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + + strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + + supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + + supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + + term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + + three@^0.124: + version "0.124.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.124.0.tgz#14ab1a26ba6c56e51190e1b55695cd3c1e69ea55" + integrity sha512-ROXp1Ly7YyF+jC910DQyAWj++Qlw2lQv0qwYLNQwdDbjk4bsOXAfGO92wYTMPNei1GMJUmCxSxc3MjGBTS09Rg== + + through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + + to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + + to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + + touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + + tsc-watch@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.2.9.tgz#d93fc74233ca4ef7ee6b12d08c0fe6aca3e19044" + integrity sha512-DlTaoDs74+KUpyWr7dCGhuscAUKCz6CiFduBN7R9RbLJSSN1moWdwoCLASE7+zLgGvV5AwXfYDiEMAsPGaO+Vw== + dependencies: + cross-spawn "^7.0.3" + node-cleanup "^2.1.2" + ps-tree "^1.2.0" + string-argv "^0.1.1" + strip-ansi "^6.0.0" + + type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + + typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + + typescript@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" + integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== + + undefsafe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + + union@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" + integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== + dependencies: + qs "^6.4.0" + + unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + + update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + + url-join@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" + integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= + + url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + + vary@^1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + + which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + + which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + + widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + + wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + + write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + + ws@~7.4.2: + version "7.4.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" + integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== + + xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + + yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= diff --git a/yarn.lock b/yarn.lock index fead8228..13b0d907 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,6 +29,11 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/node@>=10.0.0": version "14.14.37" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" @@ -79,6 +84,13 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + backo2@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -99,6 +111,11 @@ base64id@2.0.0, base64id@~2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +basic-auth@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" + integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -146,6 +163,14 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -159,6 +184,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chokidar@^3.2.2: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -203,6 +236,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -238,6 +276,11 @@ cors@~2.8.5: object-assign "^4" vary "^1" +corser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" + integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= + cross-env@^5.0.5: version "5.2.1" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" @@ -277,7 +320,7 @@ debug@^2.2.0: dependencies: ms "2.0.0" -debug@^3.2.6: +debug@^3.1.1, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -325,6 +368,16 @@ duplexer@~0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +ecstatic@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48" + integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog== + dependencies: + he "^1.1.1" + mime "^1.6.0" + minimist "^1.1.0" + url-join "^2.0.5" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -377,6 +430,14 @@ engine.io@~5.0.0: engine.io-parser "~4.0.0" ws "~7.4.2" +enhanced-resolve@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" + integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" @@ -395,6 +456,11 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -402,6 +468,11 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +follow-redirects@^1.0.0: + version "1.13.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" + integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" @@ -412,6 +483,20 @@ fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -462,7 +547,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.2: +graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -482,16 +567,58 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-proxy@^1.18.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-server@^0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.12.3.tgz#ba0471d0ecc425886616cb35c4faf279140a0d37" + integrity sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA== + dependencies: + basic-auth "^1.0.3" + colors "^1.4.0" + corser "^2.0.1" + ecstatic "^3.3.2" + http-proxy "^1.18.0" + minimist "^1.2.5" + opener "^1.5.1" + portfinder "^1.0.25" + secure-compare "3.0.1" + union "~0.5.0" + http@^0.0.1-security: version "0.0.1-security" resolved "https://registry.yarnpkg.com/http/-/http-0.0.1-security.tgz#3aac09129d12dc2747bbce4157afde20ad1f7995" @@ -606,6 +733,13 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -620,6 +754,11 @@ latest-version@^5.0.0: dependencies: package-json "^6.3.0" +lodash@^4.17.14: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -654,6 +793,11 @@ mime-types@~2.1.24: dependencies: mime-db "1.46.0" +mime@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -666,11 +810,18 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0: +minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -739,6 +890,11 @@ object-assign@^4: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -746,6 +902,11 @@ once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +opener@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -793,6 +954,15 @@ picomatch@^2.0.4, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +portfinder@^1.0.25: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -825,6 +995,13 @@ pupa@^2.0.1: dependencies: escape-goat "^2.0.0" +qs@^6.4.0: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -856,6 +1033,11 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -863,6 +1045,11 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +secure-compare@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" + integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -904,6 +1091,15 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -1002,6 +1198,11 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -1021,15 +1222,20 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + term-size@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== -three@^0.124: - version "0.124.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.124.0.tgz#14ab1a26ba6c56e51190e1b55695cd3c1e69ea55" - integrity sha512-ROXp1Ly7YyF+jC910DQyAWj++Qlw2lQv0qwYLNQwdDbjk4bsOXAfGO92wYTMPNei1GMJUmCxSxc3MjGBTS09Rg== +three@^0.127.0: + version "0.127.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.127.0.tgz#c463f4d41b2c735dcf8e9e51a388815e80cd3791" + integrity sha512-wtgrn+mhYUbobxT7QN3GPdu3SRpSBQvwY6uOzLChWS7QE//f7paDU/+wlzbg+ngeIvBBqjBHSRuywTh8A99Jng== through@2, through@~2.3, through@~2.3.1: version "2.3.8" @@ -1066,6 +1272,25 @@ tsc-watch@^4.2.9: string-argv "^0.1.1" strip-ansi "^6.0.0" +tsconfig-paths-webpack-plugin@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.1.tgz#e4dbf492a20dca9caab60086ddacb703afc2b726" + integrity sha512-n5CMlUUj+N5pjBhBACLq4jdr9cPTitySCjIosoQm0zwK99gmrcTGAfY9CwxRFT9+9OleNWXPRUcxsKP4AYExxQ== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.7.0" + tsconfig-paths "^3.9.0" + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -1090,6 +1315,13 @@ undefsafe@^2.0.3: dependencies: debug "^2.2.0" +union@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" + integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== + dependencies: + qs "^6.4.0" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -1116,6 +1348,11 @@ update-notifier@^4.1.0: semver-diff "^3.1.1" xdg-basedir "^4.0.0" +url-join@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" + integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg= + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" From 4d53466996aef8e02b6ab8fe1c18ce70a27490e7 Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Sat, 3 Apr 2021 17:03:57 -0400 Subject: [PATCH 10/13] working --- .build-cache/foo.tsbuildinfo | 1488 +++++ .editorconfig | 19 + .eslintignore | 2 + .eslintrc.js | 66 + .prettierrc.js | 10 + .vscode/launch.json | 35 + commitlint.config.js | 6 + jest.config.js | 180 + lerna.json | 6 + package.json | 25 +- .../client/dist/equip-weapon-component.js | 107 - packages/client/package.json | 24 - packages/client/src/equip-weapon-component.ts | 135 - packages/client/tsconfig.json | 13 - packages/quick-3d-mmo-client/.babelrc | 1 + .../{client => quick-3d-mmo-client}/LICENSE | 0 .../dist/scripts/attacker-controller.d.ts | 8 + .../dist/scripts}/attacker-controller.js | 3 +- .../dist/scripts/attacker-controller.js.map | 1 + .../dist/scripts/blood-effect.d.ts | 60 + .../dist/scripts}/blood-effect.js | 3 +- .../dist/scripts/blood-effect.js.map | 1 + .../dist/scripts/entity.d.ts | 46 + .../dist/scripts}/entity.js | 1 + .../dist/scripts/entity.js.map | 1 + .../dist/scripts/equip-weapon-component.d.ts | 17 + .../dist/scripts/equip-weapon-component.js | 104 + .../scripts/equip-weapon-component.js.map | 1 + .../dist/scripts/finite-state-machine.d.ts | 9 + .../dist/scripts}/finite-state-machine.js | 1 + .../dist/scripts/finite-state-machine.js.map | 1 + .../dist/scripts/floating-name.d.ts | 23 + .../dist/scripts}/floating-name.js | 3 +- .../dist/scripts/floating-name.js.map | 1 + .../dist/scripts/gltf-component.d.ts | 30 + .../dist/scripts}/gltf-component.js | 3 +- .../dist/scripts/gltf-component.js.map | 1 + .../dist/scripts/health-bar.d.ts | 18 + .../dist/scripts}/health-bar.js | 3 +- .../dist/scripts/health-bar.js.map | 1 + .../dist/scripts/health-component.d.ts | 28 + .../dist/scripts}/health-component.js | 3 +- .../dist/scripts/health-component.js.map | 1 + .../dist/scripts/index.d.ts | 1 + .../dist/scripts}/index.js | 3 +- .../dist/scripts/index.js.map | 1 + .../dist/scripts/inventory-controller.d.ts | 36 + .../dist/scripts}/inventory-controller.js | 3 +- .../dist/scripts/inventory-controller.js.map | 1 + .../dist/scripts/level-up-component.d.ts | 14 + .../dist/scripts}/level-up-component.js | 1 + .../dist/scripts/level-up-component.js.map | 1 + .../dist/scripts/load-controller.d.ts | 10 + .../dist/scripts}/load-controller.js | 1 + .../dist/scripts/load-controller.js.map | 1 + .../dist/scripts/loading-manager.d.ts | 8 + .../dist/scripts}/loading-manager.js | 1 + .../dist/scripts/loading-manager.js.map | 1 + .../dist/scripts/main.d.ts | 1 + .../dist/scripts}/main.js | 5 +- .../dist/scripts/main.js.map | 1 + .../dist/scripts/network-controller.d.ts | 15 + .../dist/scripts}/network-controller.js | 3 +- .../dist/scripts/network-controller.js.map | 1 + .../scripts/network-entity-controller.d.ts | 13 + .../scripts}/network-entity-controller.js | 3 +- .../scripts/network-entity-controller.js.map | 1 + .../scripts/network-player-controller.d.ts | 16 + .../scripts}/network-player-controller.js | 3 +- .../scripts/network-player-controller.js.map | 1 + .../dist/scripts/npc-entity.d.ts | 24 + .../dist/scripts}/npc-entity.js | 3 +- .../dist/scripts/npc-entity.js.map | 1 + .../dist/scripts/particle-system.d.ts | 50 + .../dist/scripts}/particle-system.js | 1 + .../dist/scripts/particle-system.js.map | 1 + .../dist/scripts/player-entity.d.ts | 36 + .../dist/scripts}/player-entity.js | 3 +- .../dist/scripts/player-entity.js.map | 1 + .../dist/scripts/player-input.d.ts | 25 + .../dist/scripts}/player-input.js | 3 +- .../dist/scripts/player-input.js.map | 1 + .../dist/scripts/player-state.d.ts | 57 + .../dist/scripts}/player-state.js | 3 +- .../dist/scripts/player-state.js.map | 1 + .../dist/scripts/quadtree.d.ts | 31 + .../dist/scripts}/quadtree.js | 1 + .../dist/scripts/quadtree.js.map | 1 + .../dist/scripts/quest-component.d.ts | 8 + .../dist/scripts}/quest-component.js | 3 +- .../dist/scripts/quest-component.js.map | 1 + .../dist/scripts/render-component.d.ts | 21 + .../dist/scripts}/render-component.js | 3 +- .../dist/scripts/render-component.js.map | 1 + .../dist/scripts/scenery-controller.d.ts | 16 + .../dist/scripts}/scenery-controller.js | 23 +- .../dist/scripts/scenery-controller.js.map | 1 + .../dist/scripts/sorceror-effect.d.ts | 13 + .../dist/scripts}/sorceror-effect.js | 3 +- .../dist/scripts/sorceror-effect.js.map | 1 + .../dist/scripts/spatial-grid-controller.d.ts | 11 + .../dist/scripts}/spatial-grid-controller.js | 1 + .../scripts/spatial-grid-controller.js.map | 1 + .../dist/scripts/spawners.d.ts | 12 + .../dist/scripts}/spawners.js | 9 +- .../dist/scripts/spawners.js.map | 1 + .../terrain-builder-threaded-worker.d.ts | 1 + .../terrain-builder-threaded-worker.js | 3 +- .../terrain-builder-threaded-worker.js.map | 1 + .../scripts/terrain-builder-threaded.d.ts | 35 + .../dist/scripts}/terrain-builder-threaded.js | 1 + .../scripts/terrain-builder-threaded.js.map | 1 + .../dist/scripts/terrain-builder.d.ts | 17 + .../dist/scripts}/terrain-builder.js | 1 + .../dist/scripts/terrain-builder.js.map | 1 + .../dist/scripts/terrain-chunk.d.ts | 15 + .../dist/scripts}/terrain-chunk.js | 1 + .../dist/scripts/terrain-chunk.js.map | 1 + .../dist/scripts/terrain-shader.d.ts | 7 + .../dist/scripts}/terrain-shader.js | 1 + .../dist/scripts/terrain-shader.js.map | 1 + .../dist/scripts/terrain.d.ts | 35 + .../dist/scripts}/terrain.js | 3 +- .../dist/scripts/terrain.js.map | 1 + .../dist/scripts/terrain.worker.js | 271 + .../dist/scripts/test.d.ts | 0 .../dist/scripts}/test.js | 1 + .../dist/scripts/test.js.map | 1 + .../dist/scripts/texture-splatter.d.ts | 78 + .../dist/scripts}/texture-splatter.js | 3 +- .../dist/scripts/texture-splatter.js.map | 1 + .../dist/scripts/textures.d.ts | 16 + .../dist/scripts}/textures.js | 1 + .../dist/scripts/textures.js.map | 1 + .../dist/scripts/third-person-camera.d.ts | 13 + .../dist/scripts}/third-person-camera.js | 3 +- .../dist/scripts/third-person-camera.js.map | 1 + .../dist/scripts/threejs_component.d.ts | 14 + .../dist/scripts}/threejs_component.js | 3 +- .../dist/scripts/threejs_component.js.map | 1 + .../dist/scripts/ui-controller.d.ts | 30 + .../dist/scripts}/ui-controller.js | 3 +- .../dist/scripts/ui-controller.js.map | 1 + .../dist/scripts/utils.d.ts | 4 + .../dist/scripts}/utils.js | 1 + .../dist/scripts/utils.js.map | 1 + .../dist/tsconfig.tsbuildinfo | 1833 ++++++ packages/quick-3d-mmo-client/package.json | 40 + .../src}/index.html | 31 +- .../src}/resources/background-2.jpg | Bin .../src}/resources/background-3.png | Bin .../src}/resources/background.jpg | Bin .../src}/resources/characters/guard.glb | Bin .../src}/resources/characters/paladin.glb | Bin .../src}/resources/characters/readme.txt | 0 .../src}/resources/characters/sorceror.glb | Bin .../src}/resources/characters/warrok.glb | Bin .../src}/resources/characters/zombie-guy.glb | Bin .../src}/resources/characters/zombie.glb | Bin .../src}/resources/icons/readme.txt | 0 .../src}/resources/icons/ui/backpack.png | Bin .../src}/resources/icons/ui/health-bar.png | Bin .../icons/ui/inventory-character.png | Bin .../src}/resources/icons/ui/skills.png | Bin .../src}/resources/icons/ui/tied-scroll.png | Bin .../resources/icons/weapons/hammer-64.png | Bin .../icons/weapons/pointy-sword-64.png | Bin .../resources/icons/weapons/pointy-sword.png | Bin .../resources/icons/weapons/thor-hammer.png | Bin .../resources/icons/weapons/war-axe-64.png | Bin .../src}/resources/icons/weapons/war-axe.png | Bin .../resources/nature/Blends/BirchTree_1.blend | Bin .../resources/nature/Blends/BirchTree_2.blend | Bin .../resources/nature/Blends/BirchTree_3.blend | Bin .../resources/nature/Blends/BirchTree_4.blend | Bin .../resources/nature/Blends/BirchTree_5.blend | Bin .../nature/Blends/BirchTree_Autumn_1.blend | Bin .../nature/Blends/BirchTree_Autumn_2.blend | Bin .../nature/Blends/BirchTree_Autumn_3.blend | Bin .../nature/Blends/BirchTree_Autumn_4.blend | Bin .../nature/Blends/BirchTree_Autumn_5.blend | Bin .../nature/Blends/BirchTree_Dead_1.blend | Bin .../nature/Blends/BirchTree_Dead_2.blend | Bin .../nature/Blends/BirchTree_Dead_3.blend | Bin .../nature/Blends/BirchTree_Dead_4.blend | Bin .../nature/Blends/BirchTree_Dead_5.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_1.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_2.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_3.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_4.blend | Bin .../nature/Blends/BirchTree_Dead_Snow_5.blend | Bin .../nature/Blends/BirchTree_Snow_1.blend | Bin .../nature/Blends/BirchTree_Snow_2.blend | Bin .../nature/Blends/BirchTree_Snow_3.blend | Bin .../nature/Blends/BirchTree_Snow_4.blend | Bin .../nature/Blends/BirchTree_Snow_5.blend | Bin .../nature/Blends/BushBerries_1.blend | Bin .../nature/Blends/BushBerries_2.blend | Bin .../src}/resources/nature/Blends/Bush_1.blend | Bin .../src}/resources/nature/Blends/Bush_2.blend | Bin .../resources/nature/Blends/Bush_Snow_1.blend | Bin .../resources/nature/Blends/Bush_Snow_2.blend | Bin .../nature/Blends/CactusFlower_1.blend | Bin .../nature/Blends/CactusFlowers_2.blend | Bin .../nature/Blends/CactusFlowers_3.blend | Bin .../nature/Blends/CactusFlowers_4.blend | Bin .../nature/Blends/CactusFlowers_5.blend | Bin .../resources/nature/Blends/Cactus_1.blend | Bin .../resources/nature/Blends/Cactus_2.blend | Bin .../resources/nature/Blends/Cactus_3.blend | Bin .../resources/nature/Blends/Cactus_4.blend | Bin .../resources/nature/Blends/Cactus_5.blend | Bin .../nature/Blends/CommonTree_1.blend | Bin .../nature/Blends/CommonTree_2.blend | Bin .../nature/Blends/CommonTree_3.blend | Bin .../nature/Blends/CommonTree_4.blend | Bin .../nature/Blends/CommonTree_5.blend | Bin .../nature/Blends/CommonTree_Autumn_1.blend | Bin .../nature/Blends/CommonTree_Autumn_2.blend | Bin .../nature/Blends/CommonTree_Autumn_3.blend | Bin .../nature/Blends/CommonTree_Autumn_4.blend | Bin .../nature/Blends/CommonTree_Autumn_5.blend | Bin .../nature/Blends/CommonTree_Dead_1.blend | Bin .../nature/Blends/CommonTree_Dead_2.blend | Bin .../nature/Blends/CommonTree_Dead_3.blend | Bin .../nature/Blends/CommonTree_Dead_4.blend | Bin .../nature/Blends/CommonTree_Dead_5.blend | Bin .../Blends/CommonTree_Dead_Snow_1.blend | Bin .../Blends/CommonTree_Dead_Snow_2.blend | Bin .../Blends/CommonTree_Dead_Snow_3.blend | Bin .../Blends/CommonTree_Dead_Snow_4.blend | Bin .../Blends/CommonTree_Dead_Snow_5.blend | Bin .../nature/Blends/CommonTree_Snow_1.blend | Bin .../nature/Blends/CommonTree_Snow_2.blend | Bin .../nature/Blends/CommonTree_Snow_3.blend | Bin .../nature/Blends/CommonTree_Snow_4.blend | Bin .../nature/Blends/CommonTree_Snow_5.blend | Bin .../src}/resources/nature/Blends/Corn_1.blend | Bin .../src}/resources/nature/Blends/Corn_2.blend | Bin .../resources/nature/Blends/Flowers.blend | Bin .../src}/resources/nature/Blends/Grass.blend | Bin .../resources/nature/Blends/Grass_2.blend | Bin .../resources/nature/Blends/Grass_Short.blend | Bin .../resources/nature/Blends/Lilypad.blend | Bin .../resources/nature/Blends/PalmTree_1.blend | Bin .../resources/nature/Blends/PalmTree_2.blend | Bin .../resources/nature/Blends/PalmTree_3.blend | Bin .../resources/nature/Blends/PalmTree_4.blend | Bin .../resources/nature/Blends/PineTree_1.blend | Bin .../resources/nature/Blends/PineTree_2.blend | Bin .../resources/nature/Blends/PineTree_3.blend | Bin .../resources/nature/Blends/PineTree_4.blend | Bin .../resources/nature/Blends/PineTree_5.blend | Bin .../nature/Blends/PineTree_Autumn_1.blend | Bin .../nature/Blends/PineTree_Autumn_2.blend | Bin .../nature/Blends/PineTree_Autumn_3.blend | Bin .../nature/Blends/PineTree_Autumn_4.blend | Bin .../nature/Blends/PineTree_Autumn_5.blend | Bin .../nature/Blends/PineTree_Snow_1.blend | Bin .../nature/Blends/PineTree_Snow_2.blend | Bin .../nature/Blends/PineTree_Snow_3.blend | Bin .../nature/Blends/PineTree_Snow_4.blend | Bin .../nature/Blends/PineTree_Snow_5.blend | Bin .../resources/nature/Blends/Plant_1.blend | Bin .../resources/nature/Blends/Plant_2.blend | Bin .../resources/nature/Blends/Plant_3.blend | Bin .../resources/nature/Blends/Plant_4.blend | Bin .../resources/nature/Blends/Plant_5.blend | Bin .../src}/resources/nature/Blends/Rock_1.blend | Bin .../src}/resources/nature/Blends/Rock_2.blend | Bin .../src}/resources/nature/Blends/Rock_3.blend | Bin .../src}/resources/nature/Blends/Rock_4.blend | Bin .../src}/resources/nature/Blends/Rock_5.blend | Bin .../src}/resources/nature/Blends/Rock_6.blend | Bin .../src}/resources/nature/Blends/Rock_7.blend | Bin .../resources/nature/Blends/Rock_Moss_1.blend | Bin .../resources/nature/Blends/Rock_Moss_2.blend | Bin .../resources/nature/Blends/Rock_Moss_3.blend | Bin .../resources/nature/Blends/Rock_Moss_4.blend | Bin .../resources/nature/Blends/Rock_Moss_5.blend | Bin .../resources/nature/Blends/Rock_Moss_6.blend | Bin .../resources/nature/Blends/Rock_Moss_7.blend | Bin .../resources/nature/Blends/Rock_Snow_1.blend | Bin .../resources/nature/Blends/Rock_Snow_2.blend | Bin .../resources/nature/Blends/Rock_Snow_3.blend | Bin .../resources/nature/Blends/Rock_Snow_4.blend | Bin .../resources/nature/Blends/Rock_Snow_5.blend | Bin .../resources/nature/Blends/Rock_Snow_6.blend | Bin .../resources/nature/Blends/Rock_Snow_7.blend | Bin .../resources/nature/Blends/TreeStump.blend | Bin .../nature/Blends/TreeStump_Moss.blend | Bin .../nature/Blends/TreeStump_Snow.blend | Bin .../src}/resources/nature/Blends/Wheat.blend | Bin .../resources/nature/Blends/Willow_1.blend | Bin .../resources/nature/Blends/Willow_2.blend | Bin .../resources/nature/Blends/Willow_3.blend | Bin .../resources/nature/Blends/Willow_4.blend | Bin .../resources/nature/Blends/Willow_5.blend | Bin .../nature/Blends/Willow_Autumn_1.blend | Bin .../nature/Blends/Willow_Autumn_2.blend | Bin .../nature/Blends/Willow_Autumn_3.blend | Bin .../nature/Blends/Willow_Autumn_4.blend | Bin .../nature/Blends/Willow_Autumn_5.blend | Bin .../nature/Blends/Willow_Dead_1.blend | Bin .../nature/Blends/Willow_Dead_2.blend | Bin .../nature/Blends/Willow_Dead_3.blend | Bin .../nature/Blends/Willow_Dead_4.blend | Bin .../nature/Blends/Willow_Dead_5.blend | Bin .../nature/Blends/Willow_Dead_Snow_1.blend | Bin .../nature/Blends/Willow_Dead_Snow_2.blend | Bin .../nature/Blends/Willow_Dead_Snow_3.blend | Bin .../nature/Blends/Willow_Dead_Snow_4.blend | Bin .../nature/Blends/Willow_Dead_Snow_5.blend | Bin .../nature/Blends/Willow_Snow_1.blend | Bin .../nature/Blends/Willow_Snow_2.blend | Bin .../nature/Blends/Willow_Snow_3.blend | Bin .../nature/Blends/Willow_Snow_4.blend | Bin .../nature/Blends/Willow_Snow_5.blend | Bin .../resources/nature/Blends/WoodLog.blend | Bin .../nature/Blends/WoodLog_Moss.blend | Bin .../nature/Blends/WoodLog_Snow.blend | Bin .../src}/resources/nature/FBX/BirchTree_1.fbx | Bin .../src}/resources/nature/FBX/BirchTree_2.fbx | Bin .../src}/resources/nature/FBX/BirchTree_3.fbx | Bin .../src}/resources/nature/FBX/BirchTree_4.fbx | Bin .../src}/resources/nature/FBX/BirchTree_5.fbx | Bin .../nature/FBX/BirchTree_Autumn_1.fbx | Bin .../nature/FBX/BirchTree_Autumn_2.fbx | Bin .../nature/FBX/BirchTree_Autumn_3.fbx | Bin .../nature/FBX/BirchTree_Autumn_4.fbx | Bin .../nature/FBX/BirchTree_Autumn_5.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_1.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_2.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_3.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_4.fbx | Bin .../resources/nature/FBX/BirchTree_Dead_5.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_1.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_2.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_3.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_4.fbx | Bin .../nature/FBX/BirchTree_Dead_Snow_5.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_1.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_2.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_3.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_4.fbx | Bin .../resources/nature/FBX/BirchTree_Snow_5.fbx | Bin .../resources/nature/FBX/BushBerries_1.fbx | Bin .../resources/nature/FBX/BushBerries_2.fbx | Bin .../src}/resources/nature/FBX/Bush_1.fbx | Bin .../src}/resources/nature/FBX/Bush_2.fbx | Bin .../src}/resources/nature/FBX/Bush_Snow_1.fbx | Bin .../src}/resources/nature/FBX/Bush_Snow_2.fbx | Bin .../resources/nature/FBX/CactusFlower_1.fbx | Bin .../resources/nature/FBX/CactusFlowers_2.fbx | Bin .../resources/nature/FBX/CactusFlowers_3.fbx | Bin .../resources/nature/FBX/CactusFlowers_4.fbx | Bin .../resources/nature/FBX/CactusFlowers_5.fbx | Bin .../src}/resources/nature/FBX/Cactus_1.fbx | Bin .../src}/resources/nature/FBX/Cactus_2.fbx | Bin .../src}/resources/nature/FBX/Cactus_3.fbx | Bin .../src}/resources/nature/FBX/Cactus_4.fbx | Bin .../src}/resources/nature/FBX/Cactus_5.fbx | Bin .../resources/nature/FBX/CommonTree_1.fbx | Bin .../resources/nature/FBX/CommonTree_2.fbx | Bin .../resources/nature/FBX/CommonTree_3.fbx | Bin .../resources/nature/FBX/CommonTree_4.fbx | Bin .../resources/nature/FBX/CommonTree_5.fbx | Bin .../nature/FBX/CommonTree_Autumn_1.fbx | Bin .../nature/FBX/CommonTree_Autumn_2.fbx | Bin .../nature/FBX/CommonTree_Autumn_3.fbx | Bin .../nature/FBX/CommonTree_Autumn_4.fbx | Bin .../nature/FBX/CommonTree_Autumn_5.fbx | Bin .../nature/FBX/CommonTree_Dead_1.fbx | Bin .../nature/FBX/CommonTree_Dead_2.fbx | Bin .../nature/FBX/CommonTree_Dead_3.fbx | Bin .../nature/FBX/CommonTree_Dead_4.fbx | Bin .../nature/FBX/CommonTree_Dead_5.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_1.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_2.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_3.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_4.fbx | Bin .../nature/FBX/CommonTree_Dead_Snow_5.fbx | Bin .../nature/FBX/CommonTree_Snow_1.fbx | Bin .../nature/FBX/CommonTree_Snow_2.fbx | Bin .../nature/FBX/CommonTree_Snow_3.fbx | Bin .../nature/FBX/CommonTree_Snow_4.fbx | Bin .../nature/FBX/CommonTree_Snow_5.fbx | Bin .../src}/resources/nature/FBX/Corn_1.fbx | Bin .../src}/resources/nature/FBX/Corn_2.fbx | Bin .../src}/resources/nature/FBX/Flowers.fbx | Bin .../src}/resources/nature/FBX/Grass_1.fbx | Bin .../src}/resources/nature/FBX/Grass_2.fbx | Bin .../src}/resources/nature/FBX/Grass_Short.fbx | Bin .../src}/resources/nature/FBX/Lilypad.fbx | Bin .../src}/resources/nature/FBX/PalmTree_1.fbx | Bin .../src}/resources/nature/FBX/PalmTree_2.fbx | Bin .../src}/resources/nature/FBX/PalmTree_3.fbx | Bin .../src}/resources/nature/FBX/PalmTree_4.fbx | Bin .../src}/resources/nature/FBX/PineTree_1.fbx | Bin .../src}/resources/nature/FBX/PineTree_2.fbx | Bin .../src}/resources/nature/FBX/PineTree_3.fbx | Bin .../src}/resources/nature/FBX/PineTree_4.fbx | Bin .../src}/resources/nature/FBX/PineTree_5.fbx | Bin .../nature/FBX/PineTree_Autumn_1.fbx | Bin .../nature/FBX/PineTree_Autumn_2.fbx | Bin .../nature/FBX/PineTree_Autumn_3.fbx | Bin .../nature/FBX/PineTree_Autumn_4.fbx | Bin .../nature/FBX/PineTree_Autumn_5.fbx | Bin .../resources/nature/FBX/PineTree_Snow_1.fbx | Bin .../resources/nature/FBX/PineTree_Snow_2.fbx | Bin .../resources/nature/FBX/PineTree_Snow_3.fbx | Bin .../resources/nature/FBX/PineTree_Snow_4.fbx | Bin .../resources/nature/FBX/PineTree_Snow_5.fbx | Bin .../src}/resources/nature/FBX/Plant_1.fbx | Bin .../src}/resources/nature/FBX/Plant_2.fbx | Bin .../src}/resources/nature/FBX/Plant_3.fbx | Bin .../src}/resources/nature/FBX/Plant_4.fbx | Bin .../src}/resources/nature/FBX/Plant_5.fbx | Bin .../src}/resources/nature/FBX/Rock_1.fbx | Bin .../src}/resources/nature/FBX/Rock_2.fbx | Bin .../src}/resources/nature/FBX/Rock_3.fbx | Bin .../src}/resources/nature/FBX/Rock_4.fbx | Bin .../src}/resources/nature/FBX/Rock_5.fbx | Bin .../src}/resources/nature/FBX/Rock_6.fbx | Bin .../src}/resources/nature/FBX/Rock_7.fbx | Bin .../src}/resources/nature/FBX/Rock_Moss_1.fbx | Bin .../src}/resources/nature/FBX/Rock_Moss_2.fbx | Bin .../src}/resources/nature/FBX/Rock_Moss_3.fbx | Bin .../src}/resources/nature/FBX/Rock_Moss_4.fbx | Bin .../src}/resources/nature/FBX/Rock_Moss_5.fbx | Bin .../src}/resources/nature/FBX/Rock_Moss_6.fbx | Bin .../src}/resources/nature/FBX/Rock_Moss_7.fbx | Bin .../src}/resources/nature/FBX/Rock_Snow_1.fbx | Bin .../src}/resources/nature/FBX/Rock_Snow_2.fbx | Bin .../src}/resources/nature/FBX/Rock_Snow_3.fbx | Bin .../src}/resources/nature/FBX/Rock_Snow_4.fbx | Bin .../src}/resources/nature/FBX/Rock_Snow_5.fbx | Bin .../src}/resources/nature/FBX/Rock_Snow_6.fbx | Bin .../src}/resources/nature/FBX/Rock_Snow_7.fbx | Bin .../src}/resources/nature/FBX/TreeStump.fbx | Bin .../resources/nature/FBX/TreeStump_Moss.fbx | Bin .../resources/nature/FBX/TreeStump_Snow.fbx | Bin .../src}/resources/nature/FBX/Wheat.fbx | Bin .../src}/resources/nature/FBX/Willow_1.fbx | Bin .../src}/resources/nature/FBX/Willow_2.fbx | Bin .../src}/resources/nature/FBX/Willow_3.fbx | Bin .../src}/resources/nature/FBX/Willow_4.fbx | Bin .../src}/resources/nature/FBX/Willow_5.fbx | Bin .../resources/nature/FBX/Willow_Autumn_1.fbx | Bin .../resources/nature/FBX/Willow_Autumn_2.fbx | Bin .../resources/nature/FBX/Willow_Autumn_3.fbx | Bin .../resources/nature/FBX/Willow_Autumn_4.fbx | Bin .../resources/nature/FBX/Willow_Autumn_5.fbx | Bin .../resources/nature/FBX/Willow_Dead_1.fbx | Bin .../resources/nature/FBX/Willow_Dead_2.fbx | Bin .../resources/nature/FBX/Willow_Dead_3.fbx | Bin .../resources/nature/FBX/Willow_Dead_4.fbx | Bin .../resources/nature/FBX/Willow_Dead_5.fbx | Bin .../nature/FBX/Willow_Dead_Snow_1.fbx | Bin .../nature/FBX/Willow_Dead_Snow_2.fbx | Bin .../nature/FBX/Willow_Dead_Snow_3.fbx | Bin .../nature/FBX/Willow_Dead_Snow_4.fbx | Bin .../nature/FBX/Willow_Dead_Snow_5.fbx | Bin .../resources/nature/FBX/Willow_Snow_1.fbx | Bin .../resources/nature/FBX/Willow_Snow_2.fbx | Bin .../resources/nature/FBX/Willow_Snow_3.fbx | Bin .../resources/nature/FBX/Willow_Snow_4.fbx | Bin .../resources/nature/FBX/Willow_Snow_5.fbx | Bin .../src}/resources/nature/FBX/WoodLog.fbx | Bin .../resources/nature/FBX/WoodLog_Moss.fbx | Bin .../resources/nature/FBX/WoodLog_Snow.fbx | Bin .../src}/resources/nature/License.txt | 0 .../src}/resources/nature/OBJ/BirchTree_1.mtl | 0 .../src}/resources/nature/OBJ/BirchTree_1.obj | 0 .../src}/resources/nature/OBJ/BirchTree_2.mtl | 0 .../src}/resources/nature/OBJ/BirchTree_2.obj | 0 .../src}/resources/nature/OBJ/BirchTree_3.mtl | 0 .../src}/resources/nature/OBJ/BirchTree_3.obj | 0 .../src}/resources/nature/OBJ/BirchTree_4.mtl | 0 .../src}/resources/nature/OBJ/BirchTree_4.obj | 0 .../src}/resources/nature/OBJ/BirchTree_5.mtl | 0 .../src}/resources/nature/OBJ/BirchTree_5.obj | 0 .../nature/OBJ/BirchTree_Autumn_1.mtl | 0 .../nature/OBJ/BirchTree_Autumn_1.obj | 0 .../nature/OBJ/BirchTree_Autumn_2.mtl | 0 .../nature/OBJ/BirchTree_Autumn_2.obj | 0 .../nature/OBJ/BirchTree_Autumn_3.mtl | 0 .../nature/OBJ/BirchTree_Autumn_3.obj | 0 .../nature/OBJ/BirchTree_Autumn_4.mtl | 0 .../nature/OBJ/BirchTree_Autumn_4.obj | 0 .../nature/OBJ/BirchTree_Autumn_5.mtl | 0 .../nature/OBJ/BirchTree_Autumn_5.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_1.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_1.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_2.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_2.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_3.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_3.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_4.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_4.obj | 0 .../resources/nature/OBJ/BirchTree_Dead_5.mtl | 0 .../resources/nature/OBJ/BirchTree_Dead_5.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_1.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_1.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_2.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_2.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_3.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_3.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_4.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_4.obj | 0 .../nature/OBJ/BirchTree_Dead_Snow_5.mtl | 0 .../nature/OBJ/BirchTree_Dead_Snow_5.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_1.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_1.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_2.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_2.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_3.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_3.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_4.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_4.obj | 0 .../resources/nature/OBJ/BirchTree_Snow_5.mtl | 0 .../resources/nature/OBJ/BirchTree_Snow_5.obj | 0 .../resources/nature/OBJ/BushBerries_1.mtl | 0 .../resources/nature/OBJ/BushBerries_1.obj | 0 .../resources/nature/OBJ/BushBerries_2.mtl | 0 .../resources/nature/OBJ/BushBerries_2.obj | 0 .../src}/resources/nature/OBJ/Bush_1.mtl | 0 .../src}/resources/nature/OBJ/Bush_1.obj | 0 .../src}/resources/nature/OBJ/Bush_2.mtl | 0 .../src}/resources/nature/OBJ/Bush_2.obj | 0 .../src}/resources/nature/OBJ/Bush_Snow_1.mtl | 0 .../src}/resources/nature/OBJ/Bush_Snow_1.obj | 0 .../src}/resources/nature/OBJ/Bush_Snow_2.mtl | 0 .../src}/resources/nature/OBJ/Bush_Snow_2.obj | 0 .../resources/nature/OBJ/CactusFlower_1.mtl | 0 .../resources/nature/OBJ/CactusFlower_1.obj | 0 .../resources/nature/OBJ/CactusFlowers_2.mtl | 0 .../resources/nature/OBJ/CactusFlowers_2.obj | 0 .../resources/nature/OBJ/CactusFlowers_3.mtl | 0 .../resources/nature/OBJ/CactusFlowers_3.obj | 0 .../resources/nature/OBJ/CactusFlowers_4.mtl | 0 .../resources/nature/OBJ/CactusFlowers_4.obj | 0 .../resources/nature/OBJ/CactusFlowers_5.mtl | 0 .../resources/nature/OBJ/CactusFlowers_5.obj | 0 .../src}/resources/nature/OBJ/Cactus_1.mtl | 0 .../src}/resources/nature/OBJ/Cactus_1.obj | 0 .../src}/resources/nature/OBJ/Cactus_2.mtl | 0 .../src}/resources/nature/OBJ/Cactus_2.obj | 0 .../src}/resources/nature/OBJ/Cactus_3.mtl | 0 .../src}/resources/nature/OBJ/Cactus_3.obj | 0 .../src}/resources/nature/OBJ/Cactus_4.mtl | 0 .../src}/resources/nature/OBJ/Cactus_4.obj | 0 .../src}/resources/nature/OBJ/Cactus_5.mtl | 0 .../src}/resources/nature/OBJ/Cactus_5.obj | 0 .../resources/nature/OBJ/CommonTree_1.mtl | 0 .../resources/nature/OBJ/CommonTree_1.obj | 0 .../resources/nature/OBJ/CommonTree_2.mtl | 0 .../resources/nature/OBJ/CommonTree_2.obj | 0 .../resources/nature/OBJ/CommonTree_3.mtl | 0 .../resources/nature/OBJ/CommonTree_3.obj | 0 .../resources/nature/OBJ/CommonTree_4.mtl | 0 .../resources/nature/OBJ/CommonTree_4.obj | 0 .../resources/nature/OBJ/CommonTree_5.mtl | 0 .../resources/nature/OBJ/CommonTree_5.obj | 0 .../nature/OBJ/CommonTree_Autumn_1.mtl | 0 .../nature/OBJ/CommonTree_Autumn_1.obj | 0 .../nature/OBJ/CommonTree_Autumn_2.mtl | 0 .../nature/OBJ/CommonTree_Autumn_2.obj | 0 .../nature/OBJ/CommonTree_Autumn_3.mtl | 0 .../nature/OBJ/CommonTree_Autumn_3.obj | 0 .../nature/OBJ/CommonTree_Autumn_4.mtl | 0 .../nature/OBJ/CommonTree_Autumn_4.obj | 0 .../nature/OBJ/CommonTree_Autumn_5.mtl | 0 .../nature/OBJ/CommonTree_Autumn_5.obj | 0 .../nature/OBJ/CommonTree_Dead_1.mtl | 0 .../nature/OBJ/CommonTree_Dead_1.obj | 0 .../nature/OBJ/CommonTree_Dead_2.mtl | 0 .../nature/OBJ/CommonTree_Dead_2.obj | 0 .../nature/OBJ/CommonTree_Dead_3.mtl | 0 .../nature/OBJ/CommonTree_Dead_3.obj | 0 .../nature/OBJ/CommonTree_Dead_4.mtl | 0 .../nature/OBJ/CommonTree_Dead_4.obj | 0 .../nature/OBJ/CommonTree_Dead_5.mtl | 0 .../nature/OBJ/CommonTree_Dead_5.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_1.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_1.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_2.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_2.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_3.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_3.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_4.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_4.obj | 0 .../nature/OBJ/CommonTree_Dead_Snow_5.mtl | 0 .../nature/OBJ/CommonTree_Dead_Snow_5.obj | 0 .../nature/OBJ/CommonTree_Snow_1.mtl | 0 .../nature/OBJ/CommonTree_Snow_1.obj | 0 .../nature/OBJ/CommonTree_Snow_2.mtl | 0 .../nature/OBJ/CommonTree_Snow_2.obj | 0 .../nature/OBJ/CommonTree_Snow_3.mtl | 0 .../nature/OBJ/CommonTree_Snow_3.obj | 0 .../nature/OBJ/CommonTree_Snow_4.mtl | 0 .../nature/OBJ/CommonTree_Snow_4.obj | 0 .../nature/OBJ/CommonTree_Snow_5.mtl | 0 .../nature/OBJ/CommonTree_Snow_5.obj | 0 .../src}/resources/nature/OBJ/Corn_1.mtl | 0 .../src}/resources/nature/OBJ/Corn_1.obj | 0 .../src}/resources/nature/OBJ/Corn_2.mtl | 0 .../src}/resources/nature/OBJ/Corn_2.obj | 0 .../src}/resources/nature/OBJ/Flowers.mtl | 0 .../src}/resources/nature/OBJ/Flowers.obj | 0 .../src}/resources/nature/OBJ/Grass.mtl | 0 .../src}/resources/nature/OBJ/Grass.obj | 0 .../src}/resources/nature/OBJ/Grass_2.mtl | 0 .../src}/resources/nature/OBJ/Grass_2.obj | 0 .../src}/resources/nature/OBJ/Grass_Short.mtl | 0 .../src}/resources/nature/OBJ/Grass_Short.obj | 0 .../src}/resources/nature/OBJ/Lilypad.mtl | 0 .../src}/resources/nature/OBJ/Lilypad.obj | 0 .../src}/resources/nature/OBJ/PalmTree_1.mtl | 0 .../src}/resources/nature/OBJ/PalmTree_1.obj | 0 .../src}/resources/nature/OBJ/PalmTree_2.mtl | 0 .../src}/resources/nature/OBJ/PalmTree_2.obj | 0 .../src}/resources/nature/OBJ/PalmTree_3.mtl | 0 .../src}/resources/nature/OBJ/PalmTree_3.obj | 0 .../src}/resources/nature/OBJ/PalmTree_4.mtl | 0 .../src}/resources/nature/OBJ/PalmTree_4.obj | 0 .../src}/resources/nature/OBJ/PineTree_1.mtl | 0 .../src}/resources/nature/OBJ/PineTree_1.obj | 0 .../src}/resources/nature/OBJ/PineTree_2.mtl | 0 .../src}/resources/nature/OBJ/PineTree_2.obj | 0 .../src}/resources/nature/OBJ/PineTree_3.mtl | 0 .../src}/resources/nature/OBJ/PineTree_3.obj | 0 .../src}/resources/nature/OBJ/PineTree_4.mtl | 0 .../src}/resources/nature/OBJ/PineTree_4.obj | 0 .../src}/resources/nature/OBJ/PineTree_5.mtl | 0 .../src}/resources/nature/OBJ/PineTree_5.obj | 0 .../nature/OBJ/PineTree_Autumn_1.mtl | 0 .../nature/OBJ/PineTree_Autumn_1.obj | 0 .../nature/OBJ/PineTree_Autumn_2.mtl | 0 .../nature/OBJ/PineTree_Autumn_2.obj | 0 .../nature/OBJ/PineTree_Autumn_3.mtl | 0 .../nature/OBJ/PineTree_Autumn_3.obj | 0 .../nature/OBJ/PineTree_Autumn_4.mtl | 0 .../nature/OBJ/PineTree_Autumn_4.obj | 0 .../nature/OBJ/PineTree_Autumn_5.mtl | 0 .../nature/OBJ/PineTree_Autumn_5.obj | 0 .../resources/nature/OBJ/PineTree_Snow_1.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_1.obj | 0 .../resources/nature/OBJ/PineTree_Snow_2.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_2.obj | 0 .../resources/nature/OBJ/PineTree_Snow_3.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_3.obj | 0 .../resources/nature/OBJ/PineTree_Snow_4.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_4.obj | 0 .../resources/nature/OBJ/PineTree_Snow_5.mtl | 0 .../resources/nature/OBJ/PineTree_Snow_5.obj | 0 .../src}/resources/nature/OBJ/Plant_1.mtl | 0 .../src}/resources/nature/OBJ/Plant_1.obj | 0 .../src}/resources/nature/OBJ/Plant_2.mtl | 0 .../src}/resources/nature/OBJ/Plant_2.obj | 0 .../src}/resources/nature/OBJ/Plant_3.mtl | 0 .../src}/resources/nature/OBJ/Plant_3.obj | 0 .../src}/resources/nature/OBJ/Plant_4.mtl | 0 .../src}/resources/nature/OBJ/Plant_4.obj | 0 .../src}/resources/nature/OBJ/Plant_5.mtl | 0 .../src}/resources/nature/OBJ/Plant_5.obj | 0 .../src}/resources/nature/OBJ/Rock_1.mtl | 0 .../src}/resources/nature/OBJ/Rock_1.obj | 0 .../src}/resources/nature/OBJ/Rock_2.mtl | 0 .../src}/resources/nature/OBJ/Rock_2.obj | 0 .../src}/resources/nature/OBJ/Rock_3.mtl | 0 .../src}/resources/nature/OBJ/Rock_3.obj | 0 .../src}/resources/nature/OBJ/Rock_4.mtl | 0 .../src}/resources/nature/OBJ/Rock_4.obj | 0 .../src}/resources/nature/OBJ/Rock_5.mtl | 0 .../src}/resources/nature/OBJ/Rock_5.obj | 0 .../src}/resources/nature/OBJ/Rock_6.mtl | 0 .../src}/resources/nature/OBJ/Rock_6.obj | 0 .../src}/resources/nature/OBJ/Rock_7.mtl | 0 .../src}/resources/nature/OBJ/Rock_7.obj | 0 .../src}/resources/nature/OBJ/Rock_Moss_1.mtl | 0 .../src}/resources/nature/OBJ/Rock_Moss_1.obj | 0 .../src}/resources/nature/OBJ/Rock_Moss_2.mtl | 0 .../src}/resources/nature/OBJ/Rock_Moss_2.obj | 0 .../src}/resources/nature/OBJ/Rock_Moss_3.mtl | 0 .../src}/resources/nature/OBJ/Rock_Moss_3.obj | 0 .../src}/resources/nature/OBJ/Rock_Moss_4.mtl | 0 .../src}/resources/nature/OBJ/Rock_Moss_4.obj | 0 .../src}/resources/nature/OBJ/Rock_Moss_5.mtl | 0 .../src}/resources/nature/OBJ/Rock_Moss_5.obj | 0 .../src}/resources/nature/OBJ/Rock_Moss_6.mtl | 0 .../src}/resources/nature/OBJ/Rock_Moss_6.obj | 0 .../src}/resources/nature/OBJ/Rock_Moss_7.mtl | 0 .../src}/resources/nature/OBJ/Rock_Moss_7.obj | 0 .../src}/resources/nature/OBJ/Rock_Snow_1.mtl | 0 .../src}/resources/nature/OBJ/Rock_Snow_1.obj | 0 .../src}/resources/nature/OBJ/Rock_Snow_2.mtl | 0 .../src}/resources/nature/OBJ/Rock_Snow_2.obj | 0 .../src}/resources/nature/OBJ/Rock_Snow_3.mtl | 0 .../src}/resources/nature/OBJ/Rock_Snow_3.obj | 0 .../src}/resources/nature/OBJ/Rock_Snow_4.mtl | 0 .../src}/resources/nature/OBJ/Rock_Snow_4.obj | 0 .../src}/resources/nature/OBJ/Rock_Snow_5.mtl | 0 .../src}/resources/nature/OBJ/Rock_Snow_5.obj | 0 .../src}/resources/nature/OBJ/Rock_Snow_6.mtl | 0 .../src}/resources/nature/OBJ/Rock_Snow_6.obj | 0 .../src}/resources/nature/OBJ/Rock_Snow_7.mtl | 0 .../src}/resources/nature/OBJ/Rock_Snow_7.obj | 0 .../src}/resources/nature/OBJ/TreeStump.mtl | 0 .../src}/resources/nature/OBJ/TreeStump.obj | 0 .../resources/nature/OBJ/TreeStump_Moss.mtl | 0 .../resources/nature/OBJ/TreeStump_Moss.obj | 0 .../resources/nature/OBJ/TreeStump_Snow.mtl | 0 .../resources/nature/OBJ/TreeStump_Snow.obj | 0 .../src}/resources/nature/OBJ/Wheat.mtl | 0 .../src}/resources/nature/OBJ/Wheat.obj | 0 .../src}/resources/nature/OBJ/Willow_1.mtl | 0 .../src}/resources/nature/OBJ/Willow_1.obj | 0 .../src}/resources/nature/OBJ/Willow_2.mtl | 0 .../src}/resources/nature/OBJ/Willow_2.obj | 0 .../src}/resources/nature/OBJ/Willow_3.mtl | 0 .../src}/resources/nature/OBJ/Willow_3.obj | 0 .../src}/resources/nature/OBJ/Willow_4.mtl | 0 .../src}/resources/nature/OBJ/Willow_4.obj | 0 .../src}/resources/nature/OBJ/Willow_5.mtl | 0 .../src}/resources/nature/OBJ/Willow_5.obj | 0 .../resources/nature/OBJ/Willow_Autumn_1.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_1.obj | 0 .../resources/nature/OBJ/Willow_Autumn_2.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_2.obj | 0 .../resources/nature/OBJ/Willow_Autumn_3.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_3.obj | 0 .../resources/nature/OBJ/Willow_Autumn_4.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_4.obj | 0 .../resources/nature/OBJ/Willow_Autumn_5.mtl | 0 .../resources/nature/OBJ/Willow_Autumn_5.obj | 0 .../resources/nature/OBJ/Willow_Dead_1.mtl | 0 .../resources/nature/OBJ/Willow_Dead_1.obj | 0 .../resources/nature/OBJ/Willow_Dead_2.mtl | 0 .../resources/nature/OBJ/Willow_Dead_2.obj | 0 .../resources/nature/OBJ/Willow_Dead_3.mtl | 0 .../resources/nature/OBJ/Willow_Dead_3.obj | 0 .../resources/nature/OBJ/Willow_Dead_4.mtl | 0 .../resources/nature/OBJ/Willow_Dead_4.obj | 0 .../resources/nature/OBJ/Willow_Dead_5.mtl | 0 .../resources/nature/OBJ/Willow_Dead_5.obj | 0 .../nature/OBJ/Willow_Dead_Snow_1.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_1.obj | 0 .../nature/OBJ/Willow_Dead_Snow_2.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_2.obj | 0 .../nature/OBJ/Willow_Dead_Snow_3.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_3.obj | 0 .../nature/OBJ/Willow_Dead_Snow_4.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_4.obj | 0 .../nature/OBJ/Willow_Dead_Snow_5.mtl | 0 .../nature/OBJ/Willow_Dead_Snow_5.obj | 0 .../resources/nature/OBJ/Willow_Snow_1.mtl | 0 .../resources/nature/OBJ/Willow_Snow_1.obj | 0 .../resources/nature/OBJ/Willow_Snow_2.mtl | 0 .../resources/nature/OBJ/Willow_Snow_2.obj | 0 .../resources/nature/OBJ/Willow_Snow_3.mtl | 0 .../resources/nature/OBJ/Willow_Snow_3.obj | 0 .../resources/nature/OBJ/Willow_Snow_4.mtl | 0 .../resources/nature/OBJ/Willow_Snow_4.obj | 0 .../resources/nature/OBJ/Willow_Snow_5.mtl | 0 .../resources/nature/OBJ/Willow_Snow_5.obj | 0 .../src}/resources/nature/OBJ/WoodLog.mtl | 0 .../src}/resources/nature/OBJ/WoodLog.obj | 0 .../resources/nature/OBJ/WoodLog_Moss.mtl | 0 .../resources/nature/OBJ/WoodLog_Moss.obj | 0 .../resources/nature/OBJ/WoodLog_Snow.mtl | 0 .../resources/nature/OBJ/WoodLog_Snow.obj | 0 .../src}/resources/nature/Preview.jpg | Bin .../resources/nature2/Blends/BigBush.blend | Bin .../nature2/Blends/BigTreeWithLeaves.blend | Bin .../resources/nature2/Blends/BushTexture.png | Bin .../resources/nature2/Blends/Cloud1.blend | Bin .../resources/nature2/Blends/Cloud1.blend1 | Bin .../resources/nature2/Blends/Cloud2.blend | Bin .../resources/nature2/Blends/Cloud3.blend | Bin .../resources/nature2/Blends/EveryModel.blend | Bin .../nature2/Blends/MoreNature.blend1 | Bin .../resources/nature2/Blends/SmallBush.blend | Bin .../nature2/Blends/SmallTreeWithLeave.blend | Bin .../nature2/Blends/TreeNoLeavesBig.blend | Bin .../nature2/Blends/TreeNoLeavesBig.blend1 | Bin .../nature2/Blends/TreeNoLeavesSmall.blend | Bin .../nature2/Blends/TreeNoLeavesSmall.blend1 | Bin .../resources/nature2/Blends/TreeTexture.png | Bin .../src}/resources/nature2/GLTF/Cloud1.glb | Bin .../src}/resources/nature2/GLTF/Cloud2.glb | Bin .../src}/resources/nature2/GLTF/Cloud3.glb | Bin .../src}/resources/nature2/License.txt | 0 .../src}/resources/nature2/OBJ/BigBush.mtl | 0 .../src}/resources/nature2/OBJ/BigBush.obj | 0 .../nature2/OBJ/BigTreeWithLeaves.mtl | 0 .../nature2/OBJ/BigTreeWithLeaves.obj | 0 .../src}/resources/nature2/OBJ/Cloud1.mtl | 0 .../src}/resources/nature2/OBJ/Cloud1.obj | 0 .../src}/resources/nature2/OBJ/Cloud2.mtl | 0 .../src}/resources/nature2/OBJ/Cloud2.obj | 0 .../src}/resources/nature2/OBJ/Cloud3.mtl | 0 .../src}/resources/nature2/OBJ/Cloud3.obj | 0 .../src}/resources/nature2/OBJ/EveryModel.mtl | 0 .../src}/resources/nature2/OBJ/EveryModel.obj | 0 .../src}/resources/nature2/OBJ/SmallBush.mtl | 0 .../src}/resources/nature2/OBJ/SmallBush.obj | 0 .../nature2/OBJ/SmallTreeWithLeave.mtl | 0 .../nature2/OBJ/SmallTreeWithLeave.obj | 0 .../resources/nature2/OBJ/TreeNoLeavesBig.mtl | 0 .../resources/nature2/OBJ/TreeNoLeavesBig.obj | 0 .../nature2/OBJ/TreeNoLeavesSmall.mtl | 0 .../nature2/OBJ/TreeNoLeavesSmall.obj | 0 .../src}/resources/terrain/README.txt | 0 .../src}/resources/terrain/bark1-albedo.jpg | Bin .../src}/resources/terrain/bark1-albedo.png | Bin .../src}/resources/terrain/bark1-normal3.jpg | Bin .../src}/resources/terrain/bark1-normal3.png | Bin .../terrain/dirt_01_diffuse-1024.png | Bin .../resources/terrain/dirt_01_normal-1024.jpg | Bin .../resources/terrain/grass1-albedo-512.jpg | Bin .../resources/terrain/grass1-albedo3-1024.png | Bin .../resources/terrain/grass1-normal-1024.jpg | Bin .../terrain/rock-snow-ice-albedo-1024.png | Bin .../terrain/rock-snow-ice-normal-1024.jpg | Bin .../terrain/rough-wet-cobble-albedo-1024.png | Bin .../terrain/rough-wet-cobble-normal-1024.jpg | Bin .../terrain/sandy-rocks1-albedo-1024.png | Bin .../terrain/sandy-rocks1-normal-1024.jpg | Bin .../terrain/sandyground-albedo-1024.png | Bin .../terrain/sandyground-normal-1024.jpg | Bin .../src}/resources/terrain/simplex-noise.png | Bin .../terrain/snow-packed-albedo-1024.png | Bin .../terrain/snow-packed-normal-1024.jpg | Bin .../src}/resources/terrain/space-negx.jpg | Bin .../src}/resources/terrain/space-negy.jpg | Bin .../src}/resources/terrain/space-negz.jpg | Bin .../src}/resources/terrain/space-posx.jpg | Bin .../src}/resources/terrain/space-posy.jpg | Bin .../src}/resources/terrain/space-posz.jpg | Bin .../terrain/worn-bumpy-rock-albedo-1024.png | Bin .../terrain/worn-bumpy-rock-albedo-512.jpg | Bin .../terrain/worn-bumpy-rock-normal-1024.jpg | Bin .../src}/resources/textures/ball.png | Bin .../src}/resources/textures/fire.png | Bin .../src}/resources/textures/whitePuff14.png | Bin .../src}/resources/trees/Blends/Birch_1.blend | Bin .../resources/trees/Blends/Birch_10.blend | Bin .../src}/resources/trees/Blends/Birch_2.blend | Bin .../src}/resources/trees/Blends/Birch_3.blend | Bin .../src}/resources/trees/Blends/Birch_4.blend | Bin .../src}/resources/trees/Blends/Birch_5.blend | Bin .../src}/resources/trees/Blends/Birch_6.blend | Bin .../src}/resources/trees/Blends/Birch_7.blend | Bin .../src}/resources/trees/Blends/Birch_8.blend | Bin .../src}/resources/trees/Blends/Birch_9.blend | Bin .../resources/trees/Blends/DeadBirch_1.blend | Bin .../resources/trees/Blends/DeadBirch_10.blend | Bin .../resources/trees/Blends/DeadBirch_2.blend | Bin .../resources/trees/Blends/DeadBirch_3.blend | Bin .../resources/trees/Blends/DeadBirch_4.blend | Bin .../resources/trees/Blends/DeadBirch_5.blend | Bin .../resources/trees/Blends/DeadBirch_6.blend | Bin .../resources/trees/Blends/DeadBirch_7.blend | Bin .../resources/trees/Blends/DeadBirch_8.blend | Bin .../resources/trees/Blends/DeadBirch_9.blend | Bin .../resources/trees/Blends/DeadTree_1.blend | Bin .../resources/trees/Blends/DeadTree_10.blend | Bin .../resources/trees/Blends/DeadTree_2.blend | Bin .../resources/trees/Blends/DeadTree_3.blend | Bin .../resources/trees/Blends/DeadTree_4.blend | Bin .../resources/trees/Blends/DeadTree_5.blend | Bin .../resources/trees/Blends/DeadTree_6.blend | Bin .../resources/trees/Blends/DeadTree_7.blend | Bin .../resources/trees/Blends/DeadTree_8.blend | Bin .../resources/trees/Blends/DeadTree_9.blend | Bin .../src}/resources/trees/Blends/Pine_1.blend | Bin .../src}/resources/trees/Blends/Pine_2.blend | Bin .../src}/resources/trees/Blends/Pine_3.blend | Bin .../src}/resources/trees/Blends/Pine_4.blend | Bin .../src}/resources/trees/Blends/Pine_5.blend | Bin .../src}/resources/trees/Blends/Tree_1.blend | Bin .../src}/resources/trees/Blends/Tree_10.blend | Bin .../src}/resources/trees/Blends/Tree_2.blend | Bin .../src}/resources/trees/Blends/Tree_3.blend | Bin .../src}/resources/trees/Blends/Tree_4.blend | Bin .../src}/resources/trees/Blends/Tree_5.blend | Bin .../src}/resources/trees/Blends/Tree_6.blend | Bin .../src}/resources/trees/Blends/Tree_7.blend | Bin .../src}/resources/trees/Blends/Tree_8.blend | Bin .../src}/resources/trees/Blends/Tree_9.blend | Bin .../src}/resources/trees/FBX/Birch_1.fbx | Bin .../src}/resources/trees/FBX/Birch_10.fbx | Bin .../src}/resources/trees/FBX/Birch_2.fbx | Bin .../src}/resources/trees/FBX/Birch_3.fbx | Bin .../src}/resources/trees/FBX/Birch_4.fbx | Bin .../src}/resources/trees/FBX/Birch_5.fbx | Bin .../src}/resources/trees/FBX/Birch_6.fbx | Bin .../src}/resources/trees/FBX/Birch_7.fbx | Bin .../src}/resources/trees/FBX/Birch_8.fbx | Bin .../src}/resources/trees/FBX/Birch_9.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_1.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_10.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_2.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_3.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_4.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_5.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_6.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_7.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_8.fbx | Bin .../src}/resources/trees/FBX/DeadBirch_9.fbx | Bin .../src}/resources/trees/FBX/DeadTree_1.fbx | Bin .../src}/resources/trees/FBX/DeadTree_10.fbx | Bin .../src}/resources/trees/FBX/DeadTree_2.fbx | Bin .../src}/resources/trees/FBX/DeadTree_3.fbx | Bin .../src}/resources/trees/FBX/DeadTree_4.fbx | Bin .../src}/resources/trees/FBX/DeadTree_5.fbx | Bin .../src}/resources/trees/FBX/DeadTree_6.fbx | Bin .../src}/resources/trees/FBX/DeadTree_7.fbx | Bin .../src}/resources/trees/FBX/DeadTree_8.fbx | Bin .../src}/resources/trees/FBX/DeadTree_9.fbx | Bin .../src}/resources/trees/FBX/Pine_1.fbx | Bin .../src}/resources/trees/FBX/Pine_2.fbx | Bin .../src}/resources/trees/FBX/Pine_3.fbx | Bin .../src}/resources/trees/FBX/Pine_4.fbx | Bin .../src}/resources/trees/FBX/Pine_5.fbx | Bin .../src}/resources/trees/FBX/Tree_1.fbx | Bin .../src}/resources/trees/FBX/Tree_10.fbx | Bin .../src}/resources/trees/FBX/Tree_2.fbx | Bin .../src}/resources/trees/FBX/Tree_3.fbx | Bin .../src}/resources/trees/FBX/Tree_4.fbx | Bin .../src}/resources/trees/FBX/Tree_5.fbx | Bin .../src}/resources/trees/FBX/Tree_6.fbx | Bin .../src}/resources/trees/FBX/Tree_7.fbx | Bin .../src}/resources/trees/FBX/Tree_8.fbx | Bin .../src}/resources/trees/FBX/Tree_9.fbx | Bin .../src}/resources/trees/License.txt | 0 .../src}/resources/trees/OBJ/Birch_1.mtl | 0 .../src}/resources/trees/OBJ/Birch_1.obj | 0 .../src}/resources/trees/OBJ/Birch_10.mtl | 0 .../src}/resources/trees/OBJ/Birch_10.obj | 0 .../src}/resources/trees/OBJ/Birch_2.mtl | 0 .../src}/resources/trees/OBJ/Birch_2.obj | 0 .../src}/resources/trees/OBJ/Birch_3.mtl | 0 .../src}/resources/trees/OBJ/Birch_3.obj | 0 .../src}/resources/trees/OBJ/Birch_4.mtl | 0 .../src}/resources/trees/OBJ/Birch_4.obj | 0 .../src}/resources/trees/OBJ/Birch_5.mtl | 0 .../src}/resources/trees/OBJ/Birch_5.obj | 0 .../src}/resources/trees/OBJ/Birch_6.mtl | 0 .../src}/resources/trees/OBJ/Birch_6.obj | 0 .../src}/resources/trees/OBJ/Birch_7.mtl | 0 .../src}/resources/trees/OBJ/Birch_7.obj | 0 .../src}/resources/trees/OBJ/Birch_8.mtl | 0 .../src}/resources/trees/OBJ/Birch_8.obj | 0 .../src}/resources/trees/OBJ/Birch_9.mtl | 0 .../src}/resources/trees/OBJ/Birch_9.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_1.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_1.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_10.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_10.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_2.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_2.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_3.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_3.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_4.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_4.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_5.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_5.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_6.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_6.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_7.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_7.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_8.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_8.obj | 0 .../src}/resources/trees/OBJ/DeadBirch_9.mtl | 0 .../src}/resources/trees/OBJ/DeadBirch_9.obj | 0 .../src}/resources/trees/OBJ/DeadTree_1.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_1.obj | 0 .../src}/resources/trees/OBJ/DeadTree_10.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_10.obj | 0 .../src}/resources/trees/OBJ/DeadTree_2.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_2.obj | 0 .../src}/resources/trees/OBJ/DeadTree_3.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_3.obj | 0 .../src}/resources/trees/OBJ/DeadTree_4.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_4.obj | 0 .../src}/resources/trees/OBJ/DeadTree_5.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_5.obj | 0 .../src}/resources/trees/OBJ/DeadTree_6.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_6.obj | 0 .../src}/resources/trees/OBJ/DeadTree_7.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_7.obj | 0 .../src}/resources/trees/OBJ/DeadTree_8.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_8.obj | 0 .../src}/resources/trees/OBJ/DeadTree_9.mtl | 0 .../src}/resources/trees/OBJ/DeadTree_9.obj | 0 .../src}/resources/trees/OBJ/Pine_1.mtl | 0 .../src}/resources/trees/OBJ/Pine_1.obj | 0 .../src}/resources/trees/OBJ/Pine_2.mtl | 0 .../src}/resources/trees/OBJ/Pine_2.obj | 0 .../src}/resources/trees/OBJ/Pine_3.mtl | 0 .../src}/resources/trees/OBJ/Pine_3.obj | 0 .../src}/resources/trees/OBJ/Pine_4.mtl | 0 .../src}/resources/trees/OBJ/Pine_4.obj | 0 .../src}/resources/trees/OBJ/Pine_5.mtl | 0 .../src}/resources/trees/OBJ/Pine_5.obj | 0 .../src}/resources/trees/OBJ/Tree_1.mtl | 0 .../src}/resources/trees/OBJ/Tree_1.obj | 0 .../src}/resources/trees/OBJ/Tree_10.mtl | 0 .../src}/resources/trees/OBJ/Tree_10.obj | 0 .../src}/resources/trees/OBJ/Tree_2.mtl | 0 .../src}/resources/trees/OBJ/Tree_2.obj | 0 .../src}/resources/trees/OBJ/Tree_3.mtl | 0 .../src}/resources/trees/OBJ/Tree_3.obj | 0 .../src}/resources/trees/OBJ/Tree_4.mtl | 0 .../src}/resources/trees/OBJ/Tree_4.obj | 0 .../src}/resources/trees/OBJ/Tree_5.mtl | 0 .../src}/resources/trees/OBJ/Tree_5.obj | 0 .../src}/resources/trees/OBJ/Tree_6.mtl | 0 .../src}/resources/trees/OBJ/Tree_6.obj | 0 .../src}/resources/trees/OBJ/Tree_7.mtl | 0 .../src}/resources/trees/OBJ/Tree_7.obj | 0 .../src}/resources/trees/OBJ/Tree_8.mtl | 0 .../src}/resources/trees/OBJ/Tree_8.obj | 0 .../src}/resources/trees/OBJ/Tree_9.mtl | 0 .../src}/resources/trees/OBJ/Tree_9.obj | 0 .../src}/resources/trees/Preview.jpg | Bin .../resources/trees/Textures/Birch_Bark.png | Bin .../trees/Textures/Birch_Leaves_Green.png | Bin .../trees/Textures/Birch_Leaves_Yellow.png | Bin .../Textures/Color Variations/Bark_Dead.png | Bin .../Color Variations/Birch_Bark_Dead.png | Bin .../Textures/Color Variations/Leaves_Cyan.png | Bin .../Color Variations/Leaves_DarkRed.png | Bin .../Color Variations/Leaves_Light.png | Bin .../Color Variations/Leaves_Orange.png | Bin .../Textures/Color Variations/Leaves_Pink.png | Bin .../Color Variations/Leaves_Purple.png | Bin .../Textures/Color Variations/Leaves_Red.png | Bin .../Color Variations/Pine_Leaves_Light.png | Bin .../Color Variations/Pine_Leaves_Red.png | Bin .../resources/trees/Textures/Leaves_Blue.png | Bin .../resources/trees/Textures/Pine_Leaves.png | Bin .../resources/trees/Textures/Tree_Bark.jpg | Bin .../resources/trees/Textures/Tree_Leaves.png | Bin .../src}/resources/weapons/Blends/Arrow.blend | Bin .../src}/resources/weapons/Blends/Axe.blend | Bin .../resources/weapons/Blends/Axe_Double.blend | Bin .../resources/weapons/Blends/Axe_Small.blend | Bin .../resources/weapons/Blends/Bow_Evil.blend | Bin .../resources/weapons/Blends/Bow_Golden.blend | Bin .../resources/weapons/Blends/Bow_Wooden.blend | Bin .../weapons/Blends/Bow_Wooden2.blend | Bin .../resources/weapons/Blends/Claymore.blend | Bin .../resources/weapons/Blends/Dagger.blend | Bin .../resources/weapons/Blends/Dagger_2.blend | Bin .../weapons/Blends/Hammer_Double.blend | Bin .../weapons/Blends/Hammer_Small.blend | Bin .../resources/weapons/Blends/Scythe.blend | Bin .../weapons/Blends/Shield_Celtic_Golden.blend | Bin .../weapons/Blends/Shield_Heater.blend | Bin .../weapons/Blends/Shield_Heater_2.blend | Bin .../weapons/Blends/Shield_Round.blend | Bin .../weapons/Blends/Shield_Round_2.blend | Bin .../src}/resources/weapons/Blends/Spear.blend | Bin .../src}/resources/weapons/Blends/Sword.blend | Bin .../resources/weapons/Blends/Sword_2.blend | Bin .../resources/weapons/Blends/Sword_Big.blend | Bin .../weapons/Blends/Sword_Golden.blend | Bin .../src}/resources/weapons/FBX/Arrow.fbx | Bin .../src}/resources/weapons/FBX/Axe.fbx | Bin .../src}/resources/weapons/FBX/Axe_Double.fbx | Bin .../src}/resources/weapons/FBX/Axe_Small.fbx | Bin .../src}/resources/weapons/FBX/Bow_Evil.fbx | Bin .../src}/resources/weapons/FBX/Bow_Golden.fbx | Bin .../src}/resources/weapons/FBX/Bow_Wooden.fbx | Bin .../resources/weapons/FBX/Bow_Wooden2.fbx | Bin .../src}/resources/weapons/FBX/Claymore.fbx | Bin .../src}/resources/weapons/FBX/Dagger.fbx | Bin .../src}/resources/weapons/FBX/Dagger_2.fbx | Bin .../resources/weapons/FBX/Hammer_Double.fbx | Bin .../resources/weapons/FBX/Hammer_Small.fbx | Bin .../src}/resources/weapons/FBX/Scythe.fbx | Bin .../weapons/FBX/Shield_Celtic_Golden.fbx | Bin .../resources/weapons/FBX/Shield_Heater.fbx | Bin .../resources/weapons/FBX/Shield_Heater_2.fbx | Bin .../resources/weapons/FBX/Shield_Round.fbx | Bin .../resources/weapons/FBX/Shield_Round_2.fbx | Bin .../src}/resources/weapons/FBX/Spear.fbx | Bin .../src}/resources/weapons/FBX/Sword.fbx | Bin .../src}/resources/weapons/FBX/Sword_2.fbx | Bin .../src}/resources/weapons/FBX/Sword_Big.fbx | Bin .../resources/weapons/FBX/Sword_Golden.fbx | Bin .../src}/resources/weapons/License.txt | 0 .../src}/resources/weapons/OBJ/Arrow.mtl | 0 .../src}/resources/weapons/OBJ/Arrow.obj | 0 .../src}/resources/weapons/OBJ/Axe.mtl | 0 .../src}/resources/weapons/OBJ/Axe.obj | 0 .../src}/resources/weapons/OBJ/Axe_Double.mtl | 0 .../src}/resources/weapons/OBJ/Axe_Double.obj | 0 .../src}/resources/weapons/OBJ/Axe_Small.mtl | 0 .../src}/resources/weapons/OBJ/Axe_Small.obj | 0 .../src}/resources/weapons/OBJ/Bow_Evil.mtl | 0 .../src}/resources/weapons/OBJ/Bow_Evil.obj | 0 .../src}/resources/weapons/OBJ/Bow_Golden.mtl | 0 .../src}/resources/weapons/OBJ/Bow_Golden.obj | 0 .../src}/resources/weapons/OBJ/Bow_Wooden.mtl | 0 .../src}/resources/weapons/OBJ/Bow_Wooden.obj | 0 .../resources/weapons/OBJ/Bow_Wooden2.mtl | 0 .../resources/weapons/OBJ/Bow_Wooden2.obj | 0 .../src}/resources/weapons/OBJ/Claymore.mtl | 0 .../src}/resources/weapons/OBJ/Claymore.obj | 0 .../src}/resources/weapons/OBJ/Dagger.mtl | 0 .../src}/resources/weapons/OBJ/Dagger.obj | 0 .../src}/resources/weapons/OBJ/Dagger_2.mtl | 0 .../src}/resources/weapons/OBJ/Dagger_2.obj | 0 .../resources/weapons/OBJ/Hammer_Double.mtl | 0 .../resources/weapons/OBJ/Hammer_Double.obj | 0 .../resources/weapons/OBJ/Hammer_Small.mtl | 0 .../resources/weapons/OBJ/Hammer_Small.obj | 0 .../src}/resources/weapons/OBJ/Scythe.mtl | 0 .../src}/resources/weapons/OBJ/Scythe.obj | 0 .../weapons/OBJ/Shield_Celtic_Golden.mtl | 0 .../weapons/OBJ/Shield_Celtic_Golden.obj | 0 .../resources/weapons/OBJ/Shield_Heater.mtl | 0 .../resources/weapons/OBJ/Shield_Heater.obj | 0 .../resources/weapons/OBJ/Shield_Heater_2.mtl | 0 .../resources/weapons/OBJ/Shield_Heater_2.obj | 0 .../resources/weapons/OBJ/Shield_Round.mtl | 0 .../resources/weapons/OBJ/Shield_Round.obj | 0 .../resources/weapons/OBJ/Shield_Round_2.mtl | 0 .../resources/weapons/OBJ/Shield_Round_2.obj | 0 .../src}/resources/weapons/OBJ/Spear.mtl | 0 .../src}/resources/weapons/OBJ/Spear.obj | 0 .../src}/resources/weapons/OBJ/Sword.mtl | 0 .../src}/resources/weapons/OBJ/Sword.obj | 0 .../src}/resources/weapons/OBJ/Sword_2.mtl | 0 .../src}/resources/weapons/OBJ/Sword_2.obj | 0 .../src}/resources/weapons/OBJ/Sword_Big.mtl | 0 .../src}/resources/weapons/OBJ/Sword_Big.obj | 0 .../resources/weapons/OBJ/Sword_Golden.mtl | 0 .../resources/weapons/OBJ/Sword_Golden.obj | 0 .../src}/resources/weapons/Preview.png | Bin .../src/scripts}/attacker-controller.ts | 2 +- .../src/scripts}/blood-effect.ts | 14 +- .../src/scripts}/entity.ts | 2 +- .../src/scripts/equip-weapon-component.ts | 133 + .../src/scripts}/finite-state-machine.ts | 0 .../src/scripts}/floating-name.ts | 2 +- .../src/scripts}/gltf-component.ts | 2 +- .../src/scripts}/health-bar.ts | 2 +- .../src/scripts}/health-component.ts | 2 +- .../src/scripts}/inventory-controller.ts | 4 +- .../src/scripts}/level-up-component.ts | 2 +- .../src/scripts}/load-controller.ts | 0 .../src/scripts}/loading-manager.ts | 0 .../src/scripts}/main.ts | 45 +- .../src/scripts}/network-controller.ts | 11 +- .../src/scripts}/network-entity-controller.ts | 2 +- .../src/scripts}/network-player-controller.ts | 2 +- .../src/scripts}/npc-entity.ts | 7 +- .../src/scripts}/particle-system.ts | 0 .../src/scripts}/player-entity.ts | 8 +- .../src/scripts}/player-input.ts | 2 +- .../src/scripts}/player-state.ts | 2 +- .../src/scripts}/quadtree.ts | 0 .../src/scripts}/quest-component.ts | 2 +- .../src/scripts}/render-component.ts | 2 +- .../src/scripts}/scenery-controller.ts | 26 +- .../src/scripts}/sorceror-effect.ts | 4 +- .../src/scripts}/spatial-grid-controller.ts | 0 .../src/scripts}/spawners.ts | 19 +- .../terrain-builder-threaded-worker.ts | 2 +- .../src/scripts}/terrain-builder-threaded.ts | 12 +- .../src/scripts}/terrain-builder.ts | 0 .../src/scripts}/terrain-chunk.ts | 0 .../src/scripts}/terrain-shader.ts | 0 .../src/scripts}/terrain.ts | 96 +- .../src/scripts}/test.ts | 0 .../src/scripts}/texture-splatter.ts | 6 +- .../src/scripts}/textures.ts | 25 +- .../src/scripts}/third-person-camera.ts | 2 +- .../src/scripts}/threejs_component.ts | 24 +- .../src/scripts/types.d.ts | 7 + .../src/scripts}/ui-controller.ts | 24 +- .../src/scripts}/utils.ts | 0 .../quick-3d-mmo-client/src/scripts/worker.ts | 340 ++ .../src}/styles/base.css | 6 +- packages/quick-3d-mmo-client/tsconfig.json | 33 + .../quick-3d-mmo-client/tsconfig.tsbuildinfo | 1834 ++++++ .../quick-3d-mmo-client/webpack.config.js | 71 + packages/quick-3d-mmo-server/dist/index.d.ts | 1 + packages/quick-3d-mmo-server/dist/index.js | 21 + .../quick-3d-mmo-server/dist/index.js.map | 1 + .../dist/scripts/login-queue.d.ts | 10 + .../dist/scripts/login-queue.js | 26 +- .../dist/scripts/login-queue.js.map | 1 + .../dist/scripts/world-client.d.ts | 42 + .../dist/scripts/world-client.js | 9 +- .../dist/scripts/world-client.js.map | 1 + .../dist/scripts/world-entity.d.ts | 57 + .../dist/scripts/world-entity.js | 52 +- .../dist/scripts/world-entity.js.map | 1 + .../dist/scripts/world-manager.d.ts | 16 + .../dist/scripts/world-manager.js | 40 +- .../dist/scripts/world-manager.js.map | 1 + .../dist/scripts/world-server.d.ts | 24 + .../dist/scripts/world-server.js | 86 + .../dist/scripts/world-server.js.map | 1 + .../package-lock.json | 0 packages/quick-3d-mmo-server/package.json | 22 + .../src/index.ts | 14 +- .../src/scripts/login-queue.ts | 26 +- .../src/scripts/world-client.ts | 12 +- .../src/scripts/world-entity.ts | 4 +- .../src/scripts/world-manager.ts | 47 +- .../src/scripts/world-server.ts | 48 +- packages/quick-3d-mmo-server/tsconfig.json | 16 + .../dist/OrbitControls.d.ts | 4 + .../dist/OrbitControls.d.ts.map | 1 + .../quick-3d-mmo-shared/dist/OrbitControls.js | 755 +++ .../dist/OrbitControls.js.map | 1 + .../quick-3d-mmo-shared/dist/constants.d.ts | 102 + .../dist/constants.d.ts.map | 1 + .../quick-3d-mmo-shared/dist/constants.js | 124 + .../quick-3d-mmo-shared/dist/constants.js.map | 1 + packages/quick-3d-mmo-shared/dist/defs.d.ts | 64 + .../quick-3d-mmo-shared/dist/defs.d.ts.map | 1 + packages/quick-3d-mmo-shared/dist/defs.js | 151 + packages/quick-3d-mmo-shared/dist/defs.js.map | 1 + .../dist/entity-manager.d.ts | 14 + .../dist/entity-manager.d.ts.map | 1 + .../dist/entity-manager.js | 69 + .../dist/entity-manager.js.map | 1 + .../quick-3d-mmo-shared/dist/globaltypes.d.ts | 15 + .../dist/globaltypes.d.ts.map | 1 + .../quick-3d-mmo-shared/dist/globaltypes.js | 3 + .../dist/globaltypes.js.map | 1 + packages/quick-3d-mmo-shared/dist/index.d.ts | 13 + .../quick-3d-mmo-shared/dist/index.d.ts.map | 1 + packages/quick-3d-mmo-shared/dist/index.js | 22 + .../quick-3d-mmo-shared/dist/index.js.map | 1 + packages/quick-3d-mmo-shared/dist/math.d.ts | 11 + .../quick-3d-mmo-shared/dist/math.d.ts.map | 1 + packages/quick-3d-mmo-shared/dist/math.js | 43 + packages/quick-3d-mmo-shared/dist/math.js.map | 1 + packages/quick-3d-mmo-shared/dist/noise.d.ts | 9 + .../quick-3d-mmo-shared/dist/noise.d.ts.map | 1 + packages/quick-3d-mmo-shared/dist/noise.js | 36 + .../quick-3d-mmo-shared/dist/noise.js.map | 1 + .../dist/simplex-noise.d.ts | 7 + .../dist/simplex-noise.d.ts.map | 1 + .../quick-3d-mmo-shared/dist/simplex-noise.js | 475 ++ .../dist/simplex-noise.js.map | 1 + .../dist/spatial-hash-grid.d.ts | 24 + .../dist/spatial-hash-grid.d.ts.map | 1 + .../dist/spatial-hash-grid.js | 128 + .../dist/spatial-hash-grid.js.map | 1 + packages/quick-3d-mmo-shared/dist/spline.d.ts | 16 + .../quick-3d-mmo-shared/dist/spline.d.ts.map | 1 + packages/quick-3d-mmo-shared/dist/spline.js | 57 + .../quick-3d-mmo-shared/dist/spline.js.map | 1 + .../dist/terrain-constants.d.ts | 16 + .../dist/terrain-constants.d.ts.map | 1 + .../dist/terrain-constants.js | 27 + .../dist/terrain-constants.js.map | 1 + .../dist/terrain-height.d.ts | 8 + .../dist/terrain-height.d.ts.map | 1 + .../dist/terrain-height.js | 17 + .../dist/terrain-height.js.map | 1 + packages/quick-3d-mmo-shared/package.json | 14 + .../src/OrbitControls.ts | 0 .../src/constants.ts | 9 +- .../src/defs.ts | 10 +- .../src/entity-manager.ts | 9 +- .../src/globaltypes.ts | 2 +- packages/quick-3d-mmo-shared/src/index.ts | 25 + .../src/math.ts | 0 .../src/noise.ts | 2 +- .../src/simplex-noise.ts | 0 .../src/spatial-hash-grid.ts | 2 +- .../src/spline.ts | 0 .../src/terrain-constants.ts | 0 .../src/terrain-height.ts | 4 +- packages/quick-3d-mmo-shared/tsconfig.json | 15 + .../quick-3d-mmo-shared/tsconfig.tsbuildinfo | 5102 ++++++++++++++++ packages/server/dist/index.js | 19 - packages/server/dist/scripts/world-server.js | 77 - packages/server/package.json | 21 - packages/server/tsconfig.json | 12 - packages/shared/package.json | 11 - packages/shared/src/dat.gui.module.ts | 3576 ----------- packages/shared/src/index.ts | 27 - packages/shared/tsconfig.json | 21 - packages/shared/tsconfig.tsbuildinfo | 5384 ----------------- packages/client/src/index.ts => trash/main.ts | 48 +- tsconfig.build.json | 9 + tsconfig.json | 29 +- yarn-error.log | 4697 +++++++++++++- yarn.lock | 4279 ++++++++++++- 1301 files changed, 24560 insertions(+), 9923 deletions(-) create mode 100644 .build-cache/foo.tsbuildinfo create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .prettierrc.js create mode 100644 .vscode/launch.json create mode 100644 commitlint.config.js create mode 100644 jest.config.js create mode 100644 lerna.json delete mode 100644 packages/client/dist/equip-weapon-component.js delete mode 100644 packages/client/package.json delete mode 100644 packages/client/src/equip-weapon-component.ts delete mode 100644 packages/client/tsconfig.json create mode 100644 packages/quick-3d-mmo-client/.babelrc rename packages/{client => quick-3d-mmo-client}/LICENSE (100%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/attacker-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/attacker-controller.js (87%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/blood-effect.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/blood-effect.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/blood-effect.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/entity.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/entity.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/entity.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.d.ts create mode 100644 packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.js create mode 100644 packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/finite-state-machine.js (93%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/floating-name.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/floating-name.js (96%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/floating-name.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/gltf-component.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/gltf-component.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/gltf-component.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/health-bar.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/health-bar.js (96%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/health-bar.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/health-component.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/health-component.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/health-component.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/index.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/index.js (99%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/index.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/inventory-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/inventory-controller.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/level-up-component.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/level-up-component.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/level-up-component.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/load-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/load-controller.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/load-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/loading-manager.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/loading-manager.js (93%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/loading-manager.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/main.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/main.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/main.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/network-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/network-controller.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/network-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/network-entity-controller.js (96%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/network-player-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/network-player-controller.js (95%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/npc-entity.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/npc-entity.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/npc-entity.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/particle-system.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/particle-system.js (99%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/particle-system.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/player-entity.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/player-entity.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/player-entity.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/player-input.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/player-input.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/player-input.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/player-state.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/player-state.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/player-state.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/quadtree.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/quadtree.js (99%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/quadtree.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/quest-component.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/quest-component.js (93%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/quest-component.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/render-component.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/render-component.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/render-component.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/scenery-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/scenery-controller.js (92%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/sorceror-effect.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/spatial-grid-controller.js (95%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/spawners.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/spawners.js (93%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/spawners.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/terrain-builder-threaded-worker.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/terrain-builder-threaded.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-builder.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/terrain-builder.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/terrain-chunk.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-shader.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/terrain-shader.js (99%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/terrain.js (99%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/terrain.worker.js create mode 100644 packages/quick-3d-mmo-client/dist/scripts/test.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/test.js (58%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/test.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/texture-splatter.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/texture-splatter.js (97%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/textures.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/textures.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/textures.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/third-person-camera.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/third-person-camera.js (94%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/threejs_component.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/threejs_component.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/threejs_component.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/ui-controller.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/ui-controller.js (98%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/ui-controller.js.map create mode 100644 packages/quick-3d-mmo-client/dist/scripts/utils.d.ts rename packages/{client/dist => quick-3d-mmo-client/dist/scripts}/utils.js (94%) create mode 100644 packages/quick-3d-mmo-client/dist/scripts/utils.js.map create mode 100644 packages/quick-3d-mmo-client/dist/tsconfig.tsbuildinfo create mode 100644 packages/quick-3d-mmo-client/package.json rename packages/{client => quick-3d-mmo-client/src}/index.html (84%) rename packages/{client => quick-3d-mmo-client/src}/resources/background-2.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/background-3.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/background.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/characters/guard.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/characters/paladin.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/characters/readme.txt (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/characters/sorceror.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/characters/warrok.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/characters/zombie-guy.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/characters/zombie.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/readme.txt (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/ui/backpack.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/ui/health-bar.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/ui/inventory-character.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/ui/skills.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/ui/tied-scroll.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/weapons/hammer-64.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/weapons/pointy-sword-64.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/weapons/pointy-sword.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/weapons/thor-hammer.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/weapons/war-axe-64.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/icons/weapons/war-axe.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Autumn_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Autumn_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Autumn_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Autumn_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Autumn_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_Snow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_Snow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Dead_Snow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Snow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Snow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BirchTree_Snow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BushBerries_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/BushBerries_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Bush_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Bush_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Bush_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Bush_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CactusFlower_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CactusFlowers_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CactusFlowers_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CactusFlowers_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CactusFlowers_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Cactus_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Cactus_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Cactus_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Cactus_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Cactus_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Autumn_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Autumn_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Autumn_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Autumn_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Autumn_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_Snow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_Snow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Dead_Snow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Snow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Snow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/CommonTree_Snow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Corn_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Corn_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Flowers.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Grass.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Grass_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Grass_Short.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Lilypad.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PalmTree_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PalmTree_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PalmTree_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PalmTree_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Autumn_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Autumn_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Autumn_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Autumn_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Autumn_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Snow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Snow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/PineTree_Snow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Plant_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Plant_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Plant_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Plant_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Plant_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_6.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_7.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Moss_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Moss_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Moss_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Moss_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Moss_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Moss_6.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Moss_7.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Snow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Snow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Snow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Snow_6.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Rock_Snow_7.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/TreeStump.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/TreeStump_Moss.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/TreeStump_Snow.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Wheat.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Autumn_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Autumn_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Autumn_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Autumn_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Autumn_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_Snow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_Snow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Dead_Snow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Snow_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Snow_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Snow_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Snow_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/Willow_Snow_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/WoodLog.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/WoodLog_Moss.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Blends/WoodLog_Snow.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Autumn_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Autumn_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Autumn_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Autumn_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Autumn_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Snow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Snow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BirchTree_Snow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BushBerries_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/BushBerries_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Bush_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Bush_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Bush_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Bush_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CactusFlower_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CactusFlowers_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CactusFlowers_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CactusFlowers_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CactusFlowers_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Cactus_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Cactus_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Cactus_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Cactus_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Cactus_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Autumn_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Autumn_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Autumn_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Autumn_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Autumn_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Snow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Snow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/CommonTree_Snow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Corn_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Corn_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Flowers.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Grass_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Grass_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Grass_Short.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Lilypad.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PalmTree_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PalmTree_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PalmTree_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PalmTree_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Autumn_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Autumn_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Autumn_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Autumn_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Autumn_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Snow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Snow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/PineTree_Snow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Plant_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Plant_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Plant_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Plant_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Plant_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_6.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_7.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Moss_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Moss_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Moss_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Moss_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Moss_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Moss_6.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Moss_7.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Snow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Snow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Snow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Snow_6.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Rock_Snow_7.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/TreeStump.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/TreeStump_Moss.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/TreeStump_Snow.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Wheat.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Autumn_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Autumn_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Autumn_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Autumn_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Autumn_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_Snow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_Snow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Dead_Snow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Snow_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Snow_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Snow_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Snow_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/Willow_Snow_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/WoodLog.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/WoodLog_Moss.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/FBX/WoodLog_Snow.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/License.txt (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Autumn_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BirchTree_Snow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BushBerries_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BushBerries_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BushBerries_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/BushBerries_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Bush_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Bush_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Bush_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Bush_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Bush_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Bush_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Bush_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Bush_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlower_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlower_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlowers_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlowers_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlowers_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlowers_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlowers_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlowers_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlowers_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CactusFlowers_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Cactus_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Autumn_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/CommonTree_Snow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Corn_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Corn_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Corn_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Corn_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Flowers.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Flowers.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Grass.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Grass.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Grass_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Grass_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Grass_Short.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Grass_Short.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Lilypad.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Lilypad.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PalmTree_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PalmTree_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PalmTree_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PalmTree_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PalmTree_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PalmTree_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PalmTree_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PalmTree_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Autumn_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/PineTree_Snow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Plant_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_6.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_6.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_7.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_7.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_6.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_6.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_7.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Moss_7.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_6.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_6.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_7.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Rock_Snow_7.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/TreeStump.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/TreeStump.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/TreeStump_Moss.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/TreeStump_Moss.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/TreeStump_Snow.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/TreeStump_Snow.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Wheat.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Wheat.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Autumn_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Dead_Snow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/Willow_Snow_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/WoodLog.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/WoodLog.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/WoodLog_Moss.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/WoodLog_Moss.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/WoodLog_Snow.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/OBJ/WoodLog_Snow.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature/Preview.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/BigBush.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/BigTreeWithLeaves.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/BushTexture.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/Cloud1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/Cloud1.blend1 (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/Cloud2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/Cloud3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/EveryModel.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/MoreNature.blend1 (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/SmallBush.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/SmallTreeWithLeave.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/TreeNoLeavesBig.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/TreeNoLeavesBig.blend1 (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/TreeNoLeavesSmall.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/TreeNoLeavesSmall.blend1 (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/Blends/TreeTexture.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/GLTF/Cloud1.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/GLTF/Cloud2.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/GLTF/Cloud3.glb (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/License.txt (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/BigBush.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/BigBush.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/BigTreeWithLeaves.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/BigTreeWithLeaves.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/Cloud1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/Cloud1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/Cloud2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/Cloud2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/Cloud3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/Cloud3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/EveryModel.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/EveryModel.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/SmallBush.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/SmallBush.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/SmallTreeWithLeave.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/SmallTreeWithLeave.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/TreeNoLeavesBig.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/TreeNoLeavesBig.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/TreeNoLeavesSmall.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/nature2/OBJ/TreeNoLeavesSmall.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/README.txt (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/bark1-albedo.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/bark1-albedo.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/bark1-normal3.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/bark1-normal3.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/dirt_01_diffuse-1024.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/dirt_01_normal-1024.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/grass1-albedo-512.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/grass1-albedo3-1024.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/grass1-normal-1024.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/rock-snow-ice-albedo-1024.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/rock-snow-ice-normal-1024.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/rough-wet-cobble-albedo-1024.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/rough-wet-cobble-normal-1024.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/sandy-rocks1-albedo-1024.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/sandy-rocks1-normal-1024.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/sandyground-albedo-1024.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/sandyground-normal-1024.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/simplex-noise.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/snow-packed-albedo-1024.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/snow-packed-normal-1024.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/space-negx.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/space-negy.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/space-negz.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/space-posx.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/space-posy.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/space-posz.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/worn-bumpy-rock-albedo-1024.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/worn-bumpy-rock-albedo-512.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/terrain/worn-bumpy-rock-normal-1024.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/textures/ball.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/textures/fire.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/textures/whitePuff14.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_10.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_6.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_7.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_8.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Birch_9.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_10.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_6.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_7.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_8.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadBirch_9.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_10.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_6.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_7.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_8.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/DeadTree_9.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Pine_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Pine_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Pine_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Pine_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Pine_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_1.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_10.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_3.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_4.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_5.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_6.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_7.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_8.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Blends/Tree_9.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_10.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_6.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_7.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_8.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Birch_9.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_10.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_6.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_7.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_8.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadBirch_9.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_10.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_6.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_7.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_8.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/DeadTree_9.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Pine_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Pine_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Pine_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Pine_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Pine_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_1.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_10.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_3.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_4.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_5.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_6.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_7.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_8.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/FBX/Tree_9.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/License.txt (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_10.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_10.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_6.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_6.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_7.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_7.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_8.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_8.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_9.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Birch_9.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_10.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_10.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_6.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_6.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_7.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_7.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_8.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_8.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_9.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadBirch_9.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_10.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_10.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_6.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_6.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_7.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_7.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_8.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_8.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_9.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/DeadTree_9.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Pine_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_1.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_1.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_10.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_10.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_3.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_3.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_4.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_4.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_5.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_5.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_6.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_6.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_7.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_7.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_8.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_8.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_9.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/OBJ/Tree_9.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Preview.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Birch_Bark.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Birch_Leaves_Green.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Birch_Leaves_Yellow.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Bark_Dead.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Leaves_Cyan.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Leaves_DarkRed.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Leaves_Light.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Leaves_Orange.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Leaves_Pink.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Leaves_Purple.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Leaves_Red.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Leaves_Blue.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Pine_Leaves.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Tree_Bark.jpg (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/trees/Textures/Tree_Leaves.png (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Arrow.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Axe.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Axe_Double.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Axe_Small.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Bow_Evil.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Bow_Golden.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Bow_Wooden.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Bow_Wooden2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Claymore.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Dagger.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Dagger_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Hammer_Double.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Hammer_Small.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Scythe.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Shield_Celtic_Golden.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Shield_Heater.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Shield_Heater_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Shield_Round.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Shield_Round_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Spear.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Sword.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Sword_2.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Sword_Big.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Blends/Sword_Golden.blend (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Arrow.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Axe.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Axe_Double.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Axe_Small.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Bow_Evil.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Bow_Golden.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Bow_Wooden.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Bow_Wooden2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Claymore.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Dagger.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Dagger_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Hammer_Double.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Hammer_Small.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Scythe.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Shield_Celtic_Golden.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Shield_Heater.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Shield_Heater_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Shield_Round.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Shield_Round_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Spear.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Sword.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Sword_2.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Sword_Big.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/FBX/Sword_Golden.fbx (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/License.txt (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Arrow.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Arrow.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Axe.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Axe.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Axe_Double.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Axe_Double.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Axe_Small.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Axe_Small.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Bow_Evil.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Bow_Evil.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Bow_Golden.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Bow_Golden.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Bow_Wooden.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Bow_Wooden.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Bow_Wooden2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Bow_Wooden2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Claymore.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Claymore.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Dagger.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Dagger.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Dagger_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Dagger_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Hammer_Double.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Hammer_Double.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Hammer_Small.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Hammer_Small.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Scythe.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Scythe.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Celtic_Golden.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Celtic_Golden.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Heater.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Heater.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Heater_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Heater_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Round.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Round.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Round_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Shield_Round_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Spear.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Spear.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Sword.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Sword.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Sword_2.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Sword_2.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Sword_Big.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Sword_Big.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Sword_Golden.mtl (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/OBJ/Sword_Golden.obj (100%) rename packages/{client => quick-3d-mmo-client/src}/resources/weapons/Preview.png (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/attacker-controller.ts (89%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/blood-effect.ts (94%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/entity.ts (93%) create mode 100644 packages/quick-3d-mmo-client/src/scripts/equip-weapon-component.ts rename packages/{client/src => quick-3d-mmo-client/src/scripts}/finite-state-machine.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/floating-name.ts (97%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/gltf-component.ts (95%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/health-bar.ts (94%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/health-component.ts (94%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/inventory-controller.ts (93%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/level-up-component.ts (93%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/load-controller.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/loading-manager.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/main.ts (86%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/network-controller.ts (95%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/network-entity-controller.ts (98%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/network-player-controller.ts (97%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/npc-entity.ts (92%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/particle-system.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/player-entity.ts (97%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/player-input.ts (98%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/player-state.ts (99%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/quadtree.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/quest-component.ts (93%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/render-component.ts (98%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/scenery-controller.ts (90%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/sorceror-effect.ts (96%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/spatial-grid-controller.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/spawners.ts (88%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/terrain-builder-threaded-worker.ts (99%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/terrain-builder-threaded.ts (91%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/terrain-builder.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/terrain-chunk.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/terrain-shader.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/terrain.ts (73%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/test.ts (100%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/texture-splatter.ts (95%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/textures.ts (78%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/third-person-camera.ts (96%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/threejs_component.ts (91%) create mode 100644 packages/quick-3d-mmo-client/src/scripts/types.d.ts rename packages/{client/src => quick-3d-mmo-client/src/scripts}/ui-controller.ts (84%) rename packages/{client/src => quick-3d-mmo-client/src/scripts}/utils.ts (100%) create mode 100644 packages/quick-3d-mmo-client/src/scripts/worker.ts rename packages/{client => quick-3d-mmo-client/src}/styles/base.css (90%) create mode 100644 packages/quick-3d-mmo-client/tsconfig.json create mode 100644 packages/quick-3d-mmo-client/tsconfig.tsbuildinfo create mode 100644 packages/quick-3d-mmo-client/webpack.config.js create mode 100644 packages/quick-3d-mmo-server/dist/index.d.ts create mode 100644 packages/quick-3d-mmo-server/dist/index.js create mode 100644 packages/quick-3d-mmo-server/dist/index.js.map create mode 100644 packages/quick-3d-mmo-server/dist/scripts/login-queue.d.ts rename packages/{server => quick-3d-mmo-server}/dist/scripts/login-queue.js (82%) create mode 100644 packages/quick-3d-mmo-server/dist/scripts/login-queue.js.map create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-client.d.ts rename packages/{server => quick-3d-mmo-server}/dist/scripts/world-client.js (95%) create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-client.js.map create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-entity.d.ts rename packages/{server => quick-3d-mmo-server}/dist/scripts/world-entity.js (78%) create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-entity.js.map create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-manager.d.ts rename packages/{server => quick-3d-mmo-server}/dist/scripts/world-manager.js (74%) create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-manager.js.map create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-server.d.ts create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-server.js create mode 100644 packages/quick-3d-mmo-server/dist/scripts/world-server.js.map rename packages/{server => quick-3d-mmo-server}/package-lock.json (100%) create mode 100644 packages/quick-3d-mmo-server/package.json rename packages/{server => quick-3d-mmo-server}/src/index.ts (50%) rename packages/{server => quick-3d-mmo-server}/src/scripts/login-queue.ts (85%) rename packages/{server => quick-3d-mmo-server}/src/scripts/world-client.ts (96%) rename packages/{server => quick-3d-mmo-server}/src/scripts/world-entity.ts (98%) rename packages/{server => quick-3d-mmo-server}/src/scripts/world-manager.ts (77%) rename packages/{server => quick-3d-mmo-server}/src/scripts/world-server.ts (51%) create mode 100644 packages/quick-3d-mmo-server/tsconfig.json create mode 100644 packages/quick-3d-mmo-shared/dist/OrbitControls.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/OrbitControls.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/OrbitControls.js create mode 100644 packages/quick-3d-mmo-shared/dist/OrbitControls.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/constants.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/constants.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/constants.js create mode 100644 packages/quick-3d-mmo-shared/dist/constants.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/defs.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/defs.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/defs.js create mode 100644 packages/quick-3d-mmo-shared/dist/defs.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/entity-manager.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/entity-manager.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/entity-manager.js create mode 100644 packages/quick-3d-mmo-shared/dist/entity-manager.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/globaltypes.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/globaltypes.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/globaltypes.js create mode 100644 packages/quick-3d-mmo-shared/dist/globaltypes.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/index.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/index.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/index.js create mode 100644 packages/quick-3d-mmo-shared/dist/index.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/math.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/math.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/math.js create mode 100644 packages/quick-3d-mmo-shared/dist/math.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/noise.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/noise.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/noise.js create mode 100644 packages/quick-3d-mmo-shared/dist/noise.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/simplex-noise.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/simplex-noise.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/simplex-noise.js create mode 100644 packages/quick-3d-mmo-shared/dist/simplex-noise.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/spatial-hash-grid.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/spatial-hash-grid.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js create mode 100644 packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/spline.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/spline.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/spline.js create mode 100644 packages/quick-3d-mmo-shared/dist/spline.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/terrain-constants.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/terrain-constants.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/terrain-constants.js create mode 100644 packages/quick-3d-mmo-shared/dist/terrain-constants.js.map create mode 100644 packages/quick-3d-mmo-shared/dist/terrain-height.d.ts create mode 100644 packages/quick-3d-mmo-shared/dist/terrain-height.d.ts.map create mode 100644 packages/quick-3d-mmo-shared/dist/terrain-height.js create mode 100644 packages/quick-3d-mmo-shared/dist/terrain-height.js.map create mode 100644 packages/quick-3d-mmo-shared/package.json rename packages/{shared => quick-3d-mmo-shared}/src/OrbitControls.ts (100%) rename packages/{shared => quick-3d-mmo-shared}/src/constants.ts (95%) rename packages/{shared => quick-3d-mmo-shared}/src/defs.ts (96%) rename packages/{shared => quick-3d-mmo-shared}/src/entity-manager.ts (91%) rename packages/{shared => quick-3d-mmo-shared}/src/globaltypes.ts (83%) create mode 100644 packages/quick-3d-mmo-shared/src/index.ts rename packages/{shared => quick-3d-mmo-shared}/src/math.ts (100%) rename packages/{shared => quick-3d-mmo-shared}/src/noise.ts (95%) rename packages/{shared => quick-3d-mmo-shared}/src/simplex-noise.ts (100%) rename packages/{shared => quick-3d-mmo-shared}/src/spatial-hash-grid.ts (94%) rename packages/{shared => quick-3d-mmo-shared}/src/spline.ts (100%) rename packages/{shared => quick-3d-mmo-shared}/src/terrain-constants.ts (100%) rename packages/{shared => quick-3d-mmo-shared}/src/terrain-height.ts (69%) create mode 100644 packages/quick-3d-mmo-shared/tsconfig.json create mode 100644 packages/quick-3d-mmo-shared/tsconfig.tsbuildinfo delete mode 100644 packages/server/dist/index.js delete mode 100644 packages/server/dist/scripts/world-server.js delete mode 100644 packages/server/package.json delete mode 100644 packages/server/tsconfig.json delete mode 100644 packages/shared/package.json delete mode 100644 packages/shared/src/dat.gui.module.ts delete mode 100644 packages/shared/src/index.ts delete mode 100644 packages/shared/tsconfig.json delete mode 100644 packages/shared/tsconfig.tsbuildinfo rename packages/client/src/index.ts => trash/main.ts (92%) create mode 100644 tsconfig.build.json diff --git a/.build-cache/foo.tsbuildinfo b/.build-cache/foo.tsbuildinfo new file mode 100644 index 00000000..1ac71cea --- /dev/null +++ b/.build-cache/foo.tsbuildinfo @@ -0,0 +1,1488 @@ +{ + "program": { + "fileInfos": { + "../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "signature": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2019.d.ts": { + "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2020.d.ts": { + "version": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "signature": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.esnext.d.ts": { + "version": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "signature": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.array.d.ts": { + "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.object.d.ts": { + "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.string.d.ts": { + "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { + "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.promise.d.ts": { + "version": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "signature": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts": { + "version": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", + "signature": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.string.d.ts": { + "version": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "signature": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": { + "version": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "signature": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2020.intl.d.ts": { + "version": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", + "signature": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.string.d.ts": { + "version": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "signature": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.promise.d.ts": { + "version": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "signature": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.esnext.weakref.d.ts": { + "version": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", + "signature": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", + "affectsGlobalScope": true + }, + "../packages/foo/src/hello.ts": { + "version": "e0f2227716170febf17dd6793290a15ee86a0a732781842059cd138e7a429904", + "signature": "c7227b3a178b8b30547bc2851e64f2cb798943c06fffe4f76d4377f194ba1fbc", + "affectsGlobalScope": false + }, + "../packages/foo/src/index.ts": { + "version": "9f1174e9de34b5fba8f97a366ac4fbfee339e33d3567fffd7a71d2d053db01da", + "signature": "a574f17b95fe83ac91037b83b61b8f76c6b5f4e942426bed5e881e2539c27195", + "affectsGlobalScope": false + }, + "../node_modules/@types/component-emitter/index.d.ts": { + "version": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "signature": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "affectsGlobalScope": false + }, + "../node_modules/@types/cookie/index.d.ts": { + "version": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "signature": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "affectsGlobalScope": false + }, + "../node_modules/@types/cors/index.d.ts": { + "version": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "signature": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "affectsGlobalScope": false + }, + "../node_modules/@types/eslint/helpers.d.ts": { + "version": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46", + "signature": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46", + "affectsGlobalScope": true + }, + "../node_modules/@types/eslint/lib/rules/index.d.ts": { + "version": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0", + "signature": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0", + "affectsGlobalScope": false + }, + "../node_modules/@types/json-schema/index.d.ts": { + "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "affectsGlobalScope": false + }, + "../node_modules/@types/estree/index.d.ts": { + "version": "f1e8ecd1d960d12e57316fd2889b0a57635f38f8c4c976d8deafa29650bbf320", + "signature": "f1e8ecd1d960d12e57316fd2889b0a57635f38f8c4c976d8deafa29650bbf320", + "affectsGlobalScope": false + }, + "../node_modules/@types/eslint/index.d.ts": { + "version": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c", + "signature": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c", + "affectsGlobalScope": false + }, + "../node_modules/@types/eslint-scope/index.d.ts": { + "version": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed", + "signature": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/globals.d.ts": { + "version": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "signature": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/async_hooks.d.ts": { + "version": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "signature": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/buffer.d.ts": { + "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/child_process.d.ts": { + "version": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "signature": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/cluster.d.ts": { + "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/console.d.ts": { + "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/constants.d.ts": { + "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/crypto.d.ts": { + "version": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "signature": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/dgram.d.ts": { + "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/dns.d.ts": { + "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/domain.d.ts": { + "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/events.d.ts": { + "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/fs.d.ts": { + "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/fs/promises.d.ts": { + "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/http.d.ts": { + "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/http2.d.ts": { + "version": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "signature": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/https.d.ts": { + "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/inspector.d.ts": { + "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/module.d.ts": { + "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/net.d.ts": { + "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/os.d.ts": { + "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/path.d.ts": { + "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/perf_hooks.d.ts": { + "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/process.d.ts": { + "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/punycode.d.ts": { + "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/querystring.d.ts": { + "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/readline.d.ts": { + "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/repl.d.ts": { + "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/stream.d.ts": { + "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/string_decoder.d.ts": { + "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/timers.d.ts": { + "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/tls.d.ts": { + "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/trace_events.d.ts": { + "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/tty.d.ts": { + "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/url.d.ts": { + "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/util.d.ts": { + "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/v8.d.ts": { + "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/vm.d.ts": { + "version": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "signature": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/worker_threads.d.ts": { + "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/zlib.d.ts": { + "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/wasi.d.ts": { + "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/ts3.6/base.d.ts": { + "version": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "signature": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/assert.d.ts": { + "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/base.d.ts": { + "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/index.d.ts": { + "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "affectsGlobalScope": false + }, + "../node_modules/@types/minimatch/index.d.ts": { + "version": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "signature": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "affectsGlobalScope": false + }, + "../node_modules/@types/glob/index.d.ts": { + "version": "393137c76bd922ba70a2f8bf1ade4f59a16171a02fb25918c168d48875b0cfb0", + "signature": "393137c76bd922ba70a2f8bf1ade4f59a16171a02fb25918c168d48875b0cfb0", + "affectsGlobalScope": false + }, + "../node_modules/@types/html-minifier-terser/index.d.ts": { + "version": "6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d", + "signature": "6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d", + "affectsGlobalScope": false + }, + "../node_modules/@types/json5/index.d.ts": { + "version": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538", + "signature": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538", + "affectsGlobalScope": false + }, + "../node_modules/@types/minimist/index.d.ts": { + "version": "e437d83044ba17246a861aa9691aa14223ff4a9d6f338ab1269c41c758586a88", + "signature": "e437d83044ba17246a861aa9691aa14223ff4a9d6f338ab1269c41c758586a88", + "affectsGlobalScope": false + }, + "../node_modules/@types/normalize-package-data/index.d.ts": { + "version": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", + "signature": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", + "affectsGlobalScope": false + }, + "../node_modules/@types/parse-json/index.d.ts": { + "version": "2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b", + "signature": "2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b", + "affectsGlobalScope": false + } + }, + "options": { + "target": 2, + "module": 5, + "lib": [ + "lib.esnext.d.ts" + ], + "strict": true, + "moduleResolution": 2, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "rootDir": "../packages/foo/src", + "baseUrl": "../packages", + "paths": { + "*": [ + "*/src" + ], + "~shared/*": [ + "shared/src/*" + ], + "~server/*": [ + "server/src/*" + ], + "~client/*": [ + "client/src/scripts/*" + ] + }, + "incremental": true, + "resolveJsonModule": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "removeComments": true, + "composite": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "pathsBasePath": "/home/kadajett/dev/Quick_3D_MMORPG", + "outDir": "../packages/foo/dist", + "tsBuildInfoFile": "./foo.tsbuildinfo", + "configFilePath": "../packages/foo/tsconfig.build.json" + }, + "referencedMap": { + "../node_modules/@types/cors/index.d.ts": [ + "../node_modules/@types/node/http.d.ts" + ], + "../node_modules/@types/eslint-scope/index.d.ts": [ + "../node_modules/@types/eslint/index.d.ts", + "../node_modules/@types/estree/index.d.ts" + ], + "../node_modules/@types/eslint/index.d.ts": [ + "../node_modules/@types/eslint/helpers.d.ts", + "../node_modules/@types/eslint/lib/rules/index.d.ts", + "../node_modules/@types/estree/index.d.ts", + "../node_modules/@types/json-schema/index.d.ts" + ], + "../node_modules/@types/eslint/lib/rules/index.d.ts": [ + "../node_modules/@types/eslint/index.d.ts" + ], + "../node_modules/@types/glob/index.d.ts": [ + "../node_modules/@types/minimatch/index.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "../node_modules/@types/node/assert.d.ts": [ + "../node_modules/@types/node/assert.d.ts" + ], + "../node_modules/@types/node/async_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../node_modules/@types/node/buffer.d.ts": [ + "../node_modules/@types/node/buffer.d.ts" + ], + "../node_modules/@types/node/child_process.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/cluster.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/console.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/constants.d.ts": [ + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/crypto.d.ts": [ + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/dgram.d.ts": [ + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/dns.d.ts": [ + "../node_modules/@types/node/dns.d.ts" + ], + "../node_modules/@types/node/domain.d.ts": [ + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/events.d.ts": [ + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/fs.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/fs/promises.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts" + ], + "../node_modules/@types/node/http.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/http2.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/https.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/index.d.ts": [ + "../node_modules/@types/node/base.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/inspector.d.ts" + ], + "../node_modules/@types/node/module.d.ts": [ + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/net.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/os.d.ts": [ + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/path.d.ts": [ + "../node_modules/@types/node/path.d.ts" + ], + "../node_modules/@types/node/perf_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts" + ], + "../node_modules/@types/node/process.d.ts": [ + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/punycode.d.ts": [ + "../node_modules/@types/node/punycode.d.ts" + ], + "../node_modules/@types/node/querystring.d.ts": [ + "../node_modules/@types/node/querystring.d.ts" + ], + "../node_modules/@types/node/readline.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/readline.d.ts" + ], + "../node_modules/@types/node/repl.d.ts": [ + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/stream.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/string_decoder.d.ts": [ + "../node_modules/@types/node/string_decoder.d.ts" + ], + "../node_modules/@types/node/timers.d.ts": [ + "../node_modules/@types/node/timers.d.ts" + ], + "../node_modules/@types/node/tls.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tls.d.ts" + ], + "../node_modules/@types/node/trace_events.d.ts": [ + "../node_modules/@types/node/trace_events.d.ts" + ], + "../node_modules/@types/node/ts3.6/base.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "../node_modules/@types/node/tty.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/url.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/util.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/v8.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/v8.d.ts" + ], + "../node_modules/@types/node/vm.d.ts": [ + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/wasi.d.ts": [ + "../node_modules/@types/node/wasi.d.ts" + ], + "../node_modules/@types/node/worker_threads.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts" + ], + "../node_modules/@types/node/zlib.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ] + }, + "exportedModulesMap": { + "../node_modules/@types/cors/index.d.ts": [ + "../node_modules/@types/node/http.d.ts" + ], + "../node_modules/@types/eslint-scope/index.d.ts": [ + "../node_modules/@types/eslint/index.d.ts", + "../node_modules/@types/estree/index.d.ts" + ], + "../node_modules/@types/eslint/index.d.ts": [ + "../node_modules/@types/eslint/helpers.d.ts", + "../node_modules/@types/eslint/lib/rules/index.d.ts", + "../node_modules/@types/estree/index.d.ts", + "../node_modules/@types/json-schema/index.d.ts" + ], + "../node_modules/@types/eslint/lib/rules/index.d.ts": [ + "../node_modules/@types/eslint/index.d.ts" + ], + "../node_modules/@types/glob/index.d.ts": [ + "../node_modules/@types/minimatch/index.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/index.d.ts" + ], + "../node_modules/@types/node/assert.d.ts": [ + "../node_modules/@types/node/assert.d.ts" + ], + "../node_modules/@types/node/async_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../node_modules/@types/node/buffer.d.ts": [ + "../node_modules/@types/node/buffer.d.ts" + ], + "../node_modules/@types/node/child_process.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/cluster.d.ts": [ + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/console.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/constants.d.ts": [ + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/crypto.d.ts": [ + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/dgram.d.ts": [ + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts" + ], + "../node_modules/@types/node/dns.d.ts": [ + "../node_modules/@types/node/dns.d.ts" + ], + "../node_modules/@types/node/domain.d.ts": [ + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/events.d.ts": [ + "../node_modules/@types/node/events.d.ts" + ], + "../node_modules/@types/node/fs.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/fs/promises.d.ts": [ + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts" + ], + "../node_modules/@types/node/http.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/http2.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/https.d.ts": [ + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/index.d.ts": [ + "../node_modules/@types/node/base.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/inspector.d.ts" + ], + "../node_modules/@types/node/module.d.ts": [ + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/net.d.ts": [ + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/os.d.ts": [ + "../node_modules/@types/node/os.d.ts" + ], + "../node_modules/@types/node/path.d.ts": [ + "../node_modules/@types/node/path.d.ts" + ], + "../node_modules/@types/node/perf_hooks.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts" + ], + "../node_modules/@types/node/process.d.ts": [ + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/punycode.d.ts": [ + "../node_modules/@types/node/punycode.d.ts" + ], + "../node_modules/@types/node/querystring.d.ts": [ + "../node_modules/@types/node/querystring.d.ts" + ], + "../node_modules/@types/node/readline.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/readline.d.ts" + ], + "../node_modules/@types/node/repl.d.ts": [ + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/stream.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/stream.d.ts" + ], + "../node_modules/@types/node/string_decoder.d.ts": [ + "../node_modules/@types/node/string_decoder.d.ts" + ], + "../node_modules/@types/node/timers.d.ts": [ + "../node_modules/@types/node/timers.d.ts" + ], + "../node_modules/@types/node/tls.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tls.d.ts" + ], + "../node_modules/@types/node/trace_events.d.ts": [ + "../node_modules/@types/node/trace_events.d.ts" + ], + "../node_modules/@types/node/ts3.6/base.d.ts": [ + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ], + "../node_modules/@types/node/tty.d.ts": [ + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/tty.d.ts" + ], + "../node_modules/@types/node/url.d.ts": [ + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/url.d.ts" + ], + "../node_modules/@types/node/util.d.ts": [ + "../node_modules/@types/node/util.d.ts" + ], + "../node_modules/@types/node/v8.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/v8.d.ts" + ], + "../node_modules/@types/node/vm.d.ts": [ + "../node_modules/@types/node/vm.d.ts" + ], + "../node_modules/@types/node/wasi.d.ts": [ + "../node_modules/@types/node/wasi.d.ts" + ], + "../node_modules/@types/node/worker_threads.d.ts": [ + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/worker_threads.d.ts" + ], + "../node_modules/@types/node/zlib.d.ts": [ + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/zlib.d.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../node_modules/@types/component-emitter/index.d.ts", + "../node_modules/@types/cookie/index.d.ts", + "../node_modules/@types/cors/index.d.ts", + "../node_modules/@types/eslint-scope/index.d.ts", + "../node_modules/@types/eslint/helpers.d.ts", + "../node_modules/@types/eslint/index.d.ts", + "../node_modules/@types/eslint/lib/rules/index.d.ts", + "../node_modules/@types/estree/index.d.ts", + "../node_modules/@types/glob/index.d.ts", + "../node_modules/@types/html-minifier-terser/index.d.ts", + "../node_modules/@types/json-schema/index.d.ts", + "../node_modules/@types/json5/index.d.ts", + "../node_modules/@types/minimatch/index.d.ts", + "../node_modules/@types/minimist/index.d.ts", + "../node_modules/@types/node/assert.d.ts", + "../node_modules/@types/node/async_hooks.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/buffer.d.ts", + "../node_modules/@types/node/child_process.d.ts", + "../node_modules/@types/node/cluster.d.ts", + "../node_modules/@types/node/console.d.ts", + "../node_modules/@types/node/constants.d.ts", + "../node_modules/@types/node/crypto.d.ts", + "../node_modules/@types/node/dgram.d.ts", + "../node_modules/@types/node/dns.d.ts", + "../node_modules/@types/node/domain.d.ts", + "../node_modules/@types/node/events.d.ts", + "../node_modules/@types/node/fs.d.ts", + "../node_modules/@types/node/fs/promises.d.ts", + "../node_modules/@types/node/globals.d.ts", + "../node_modules/@types/node/globals.global.d.ts", + "../node_modules/@types/node/http.d.ts", + "../node_modules/@types/node/http2.d.ts", + "../node_modules/@types/node/https.d.ts", + "../node_modules/@types/node/index.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/module.d.ts", + "../node_modules/@types/node/net.d.ts", + "../node_modules/@types/node/os.d.ts", + "../node_modules/@types/node/path.d.ts", + "../node_modules/@types/node/perf_hooks.d.ts", + "../node_modules/@types/node/process.d.ts", + "../node_modules/@types/node/punycode.d.ts", + "../node_modules/@types/node/querystring.d.ts", + "../node_modules/@types/node/readline.d.ts", + "../node_modules/@types/node/repl.d.ts", + "../node_modules/@types/node/stream.d.ts", + "../node_modules/@types/node/string_decoder.d.ts", + "../node_modules/@types/node/timers.d.ts", + "../node_modules/@types/node/tls.d.ts", + "../node_modules/@types/node/trace_events.d.ts", + "../node_modules/@types/node/ts3.6/base.d.ts", + "../node_modules/@types/node/tty.d.ts", + "../node_modules/@types/node/url.d.ts", + "../node_modules/@types/node/util.d.ts", + "../node_modules/@types/node/v8.d.ts", + "../node_modules/@types/node/vm.d.ts", + "../node_modules/@types/node/wasi.d.ts", + "../node_modules/@types/node/worker_threads.d.ts", + "../node_modules/@types/node/zlib.d.ts", + "../node_modules/@types/normalize-package-data/index.d.ts", + "../node_modules/@types/parse-json/index.d.ts", + "../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../node_modules/typescript/lib/lib.es2015.d.ts", + "../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../node_modules/typescript/lib/lib.es2016.d.ts", + "../node_modules/typescript/lib/lib.es2017.d.ts", + "../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../node_modules/typescript/lib/lib.es2018.d.ts", + "../node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../node_modules/typescript/lib/lib.es2019.array.d.ts", + "../node_modules/typescript/lib/lib.es2019.d.ts", + "../node_modules/typescript/lib/lib.es2019.object.d.ts", + "../node_modules/typescript/lib/lib.es2019.string.d.ts", + "../node_modules/typescript/lib/lib.es2019.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../node_modules/typescript/lib/lib.es2020.d.ts", + "../node_modules/typescript/lib/lib.es2020.intl.d.ts", + "../node_modules/typescript/lib/lib.es2020.promise.d.ts", + "../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts", + "../node_modules/typescript/lib/lib.es2020.string.d.ts", + "../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts", + "../node_modules/typescript/lib/lib.es5.d.ts", + "../node_modules/typescript/lib/lib.esnext.d.ts", + "../node_modules/typescript/lib/lib.esnext.intl.d.ts", + "../node_modules/typescript/lib/lib.esnext.promise.d.ts", + "../node_modules/typescript/lib/lib.esnext.string.d.ts", + "../node_modules/typescript/lib/lib.esnext.weakref.d.ts", + "../packages/foo/src/hello.ts", + [ + "../packages/foo/src/index.ts", + [ + { + "file": "../packages/foo/src/index.ts", + "start": 175, + "length": 12, + "messageText": "Cannot find module '~foo/hello' or its corresponding type declarations.", + "category": 1, + "code": 2307 + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "../node_modules/@types/component-emitter/index.d.ts", + 1 + ], + [ + "../node_modules/@types/cookie/index.d.ts", + 1 + ], + [ + "../node_modules/@types/cors/index.d.ts", + 1 + ], + [ + "../node_modules/@types/eslint-scope/index.d.ts", + 1 + ], + [ + "../node_modules/@types/eslint/helpers.d.ts", + 1 + ], + [ + "../node_modules/@types/eslint/index.d.ts", + 1 + ], + [ + "../node_modules/@types/eslint/lib/rules/index.d.ts", + 1 + ], + [ + "../node_modules/@types/estree/index.d.ts", + 1 + ], + [ + "../node_modules/@types/glob/index.d.ts", + 1 + ], + [ + "../node_modules/@types/html-minifier-terser/index.d.ts", + 1 + ], + [ + "../node_modules/@types/json-schema/index.d.ts", + 1 + ], + [ + "../node_modules/@types/json5/index.d.ts", + 1 + ], + [ + "../node_modules/@types/minimatch/index.d.ts", + 1 + ], + [ + "../node_modules/@types/minimist/index.d.ts", + 1 + ], + [ + "../node_modules/@types/node/assert.d.ts", + 1 + ], + [ + "../node_modules/@types/node/async_hooks.d.ts", + 1 + ], + [ + "../node_modules/@types/node/base.d.ts", + 1 + ], + [ + "../node_modules/@types/node/buffer.d.ts", + 1 + ], + [ + "../node_modules/@types/node/child_process.d.ts", + 1 + ], + [ + "../node_modules/@types/node/cluster.d.ts", + 1 + ], + [ + "../node_modules/@types/node/console.d.ts", + 1 + ], + [ + "../node_modules/@types/node/constants.d.ts", + 1 + ], + [ + "../node_modules/@types/node/crypto.d.ts", + 1 + ], + [ + "../node_modules/@types/node/dgram.d.ts", + 1 + ], + [ + "../node_modules/@types/node/dns.d.ts", + 1 + ], + [ + "../node_modules/@types/node/domain.d.ts", + 1 + ], + [ + "../node_modules/@types/node/events.d.ts", + 1 + ], + [ + "../node_modules/@types/node/fs.d.ts", + 1 + ], + [ + "../node_modules/@types/node/fs/promises.d.ts", + 1 + ], + [ + "../node_modules/@types/node/globals.d.ts", + 1 + ], + [ + "../node_modules/@types/node/globals.global.d.ts", + 1 + ], + [ + "../node_modules/@types/node/http.d.ts", + 1 + ], + [ + "../node_modules/@types/node/http2.d.ts", + 1 + ], + [ + "../node_modules/@types/node/https.d.ts", + 1 + ], + [ + "../node_modules/@types/node/index.d.ts", + 1 + ], + [ + "../node_modules/@types/node/inspector.d.ts", + 1 + ], + [ + "../node_modules/@types/node/module.d.ts", + 1 + ], + [ + "../node_modules/@types/node/net.d.ts", + 1 + ], + [ + "../node_modules/@types/node/os.d.ts", + 1 + ], + [ + "../node_modules/@types/node/path.d.ts", + 1 + ], + [ + "../node_modules/@types/node/perf_hooks.d.ts", + 1 + ], + [ + "../node_modules/@types/node/process.d.ts", + 1 + ], + [ + "../node_modules/@types/node/punycode.d.ts", + 1 + ], + [ + "../node_modules/@types/node/querystring.d.ts", + 1 + ], + [ + "../node_modules/@types/node/readline.d.ts", + 1 + ], + [ + "../node_modules/@types/node/repl.d.ts", + 1 + ], + [ + "../node_modules/@types/node/stream.d.ts", + 1 + ], + [ + "../node_modules/@types/node/string_decoder.d.ts", + 1 + ], + [ + "../node_modules/@types/node/timers.d.ts", + 1 + ], + [ + "../node_modules/@types/node/tls.d.ts", + 1 + ], + [ + "../node_modules/@types/node/trace_events.d.ts", + 1 + ], + [ + "../node_modules/@types/node/ts3.6/base.d.ts", + 1 + ], + [ + "../node_modules/@types/node/tty.d.ts", + 1 + ], + [ + "../node_modules/@types/node/url.d.ts", + 1 + ], + [ + "../node_modules/@types/node/util.d.ts", + 1 + ], + [ + "../node_modules/@types/node/v8.d.ts", + 1 + ], + [ + "../node_modules/@types/node/vm.d.ts", + 1 + ], + [ + "../node_modules/@types/node/wasi.d.ts", + 1 + ], + [ + "../node_modules/@types/node/worker_threads.d.ts", + 1 + ], + [ + "../node_modules/@types/node/zlib.d.ts", + 1 + ], + [ + "../node_modules/@types/normalize-package-data/index.d.ts", + 1 + ], + [ + "../node_modules/@types/parse-json/index.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2015.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2016.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2017.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2018.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2019.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.es2020.d.ts", + 1 + ], + [ + "../node_modules/typescript/lib/lib.esnext.d.ts", + 1 + ], + [ + "../packages/foo/src/hello.ts", + 1 + ], + [ + "../packages/foo/src/index.ts", + 1 + ] + ] + }, + "version": "4.2.3" +} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..4e01cdcd --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 + +# Indentation override for all JS under lib directory +[*.{js,ts,json,yml,yaml}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +[*.md] +max_line_length = off diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..76add878 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..d24344ad --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,66 @@ +const common = { + env: { + node: true, + es6: true, + 'jest/globals': true, + }, + plugins: ['prettier', 'jest', 'markdown'], + extends: ['airbnb-base', 'prettier', 'plugin:jest/all'], + rules: { + 'prettier/prettier': 'error', + 'jest/no-disabled-tests': 'warn', + 'jest/no-focused-tests': 'error', + 'jest/no-identical-title': 'error', + 'jest/prefer-to-have-length': 'warn', + 'jest/valid-expect': 'error', + 'jest/expect-expect': 'off', + 'jest/prefer-expect-assertions': 'off', + 'jest/no-test-return-statement': 'off', + 'import/prefer-default-export': 'off', + 'import/extensions': 'off', + 'no-console': 'off', + 'no-iterator': 'off', + 'no-restricted-syntax': 'off', + 'no-await-in-loop': 'off', + 'consistent-return': 'off', + 'no-shadow': 'off', + 'no-unused-vars': 'off', + }, +} + +module.exports = { + root: true, + overrides: [ + { + /* + eslint-plugin-markdown only finds javascript code block snippet. + For specific spec, refer to https://github.com/eslint/eslint-plugin-markdown + */ + files: ['**/*.js', '**/*.md'], + ...common, + }, + { + files: ['**/*.ts'], + parser: '@typescript-eslint/parser', + env: common.env, + plugins: [...common.plugins, '@typescript-eslint'], + extends: [ + ...common.extends, + 'prettier/@typescript-eslint', + 'plugin:@typescript-eslint/recommended', + 'plugin:import/errors', + 'plugin:import/warnings', + 'plugin:import/typescript', + ], + rules: { + ...common.rules, + '@typescript-eslint/explicit-function-return-type': 'off', + }, + settings: { + 'import/resolver': { + typescript: {}, + }, + }, + }, + ], +} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..39a3c1cc --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,10 @@ +module.exports = { + singleQuote: true, + semi: false, + useTabs: false, + tabWidth: 2, + trailingComma: 'all', + endOfLine: 'lf', + // bracketSpacing: true + // printWidth: 80 +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..fc752e31 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,35 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to server", + "port": 9229, + "request": "attach", + "sourceMaps": true, + + "skipFiles": [ + "/**" + ], + "type": "pwa-node", + "outFiles": [ + "${workspaceFolder}/packages/quick-3d-mmo-server/dist", + "!**/node_modules/**" + ] + }, + + { + "type": "pwa-node", + "request": "launch", + "name": "Debug Server", + "skipFiles": [ + "/**" + ], + "runtimeExecutable": "yarn", + "runtimeArgs": ["run-script", "server", "debug"], + "preLaunchTask": "yarn: server build" + } + ] +} \ No newline at end of file diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..4d4cae00 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,6 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], + rules: { + 'header-max-length': [0, 'always', 100], // corresponding to maxHeaderWidth of commitizen + }, +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..39999b53 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,180 @@ +const { pathsToModuleNameMapper } = require('ts-jest/utils') +const { compilerOptions } = require('./tsconfig') + +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html + +module.exports = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // Respect "browser" field in package.json when resolving modules + // browser: false, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/tmp/jest_rs", + + // Automatically clear mock calls and instances between every test + // clearMocks: false, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: null, + + // The directory where Jest should output its coverage files + // coverageDirectory: null, + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "/node_modules/" + // ], + + // A list of reporter names that Jest uses when writing coverage reports + coverageReporters: ['json', 'html'], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: null, + + // A path to a custom dependency extractor + // dependencyExtractor: null, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: null, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: null, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // An array of directory names to be searched recursively up from the requiring module's location + moduleDirectories: ['.', 'node_modules', 'src'], + + // An array of file extensions your modules use + moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'], + + // A map from regular expressions to module names that allow to stub out resources with a single module + // moduleNameMapper: { + // '^~/(.*)$': '/src/$1', + // '^@jjangga0214/(.*)$': '/../$1/src' + // }, + moduleNameMapper: { + ...pathsToModuleNameMapper( + compilerOptions.paths /* , { prefix: '/' }, */, + ), + }, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + preset: 'ts-jest', + + // Run tests from one or more projects + // projects: null, + + // Use this configuration option to add custom reporters to Jest + // reporters: ['default', 'jest-junit'], + + // Automatically reset mock state between every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: null, + + // Automatically restore mock state between every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: null, + + // A list of paths to directories that Jest should use to search for files in + // roots: [''], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: 'node', + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: null, + + // This option allows use of a custom test runner + // testRunner: "jasmine2", + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: "http://localhost", + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: "real", + + // A map from regular expressions to paths to transformers + // transform: { + // '.(ts|tsx)': 'ts-jest', + // }, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: ['/node_modules/'], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: null, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +} diff --git a/lerna.json b/lerna.json new file mode 100644 index 00000000..7055214f --- /dev/null +++ b/lerna.json @@ -0,0 +1,6 @@ +{ + "npmClient": "yarn", + "packages": ["packages/*"], + "version": "1.0.0", + "useWorkspaces": true +} diff --git a/package.json b/package.json index a16c014a..0d73b269 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,24 @@ { + "name": "quick-3d-mmo", "private": true, + "version": "1.0.0", + "license": "MIT", + "main": "index.js", "workspaces": [ "packages/*" ], - "dependencies": { + "scripts": { + "server": "yarn workspace quick-3d-mmo-server", + "client": "yarn workspace quick-3d-mmo-client", + "shared": "yarn workspace quick-3d-mmo-shared" + }, + "devDependencies": { "typescript": "^4.2.3" }, - "scripts": { - "server": "yarn workspace server", - "client": "yarn workspace client", - "shared": "yarn workspace shared", - "start:server:dev": "yarn server start:dev", - "start:client:dev": "yarn client start:dev", - "start:shared:dev": "yarn shared start:dev" + "dependencies": { + "@babel/core": "^7.13.14", + "gl-matrix": "^3.3.0", + "webpack": "^5.30.0", + "webpack-cli": "^4.6.0" } -} \ No newline at end of file +} diff --git a/packages/client/dist/equip-weapon-component.js b/packages/client/dist/equip-weapon-component.js deleted file mode 100644 index 18e2bf24..00000000 --- a/packages/client/dist/equip-weapon-component.js +++ /dev/null @@ -1,107 +0,0 @@ -import * as THREE from 'three'; -import { Component } from './entity'; -import { Defs, Constants } from 'shared'; -import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; -const { CHARACTER_MODELS } = Defs; -const { EVENT_TYPES, KNOWN_ENTITIES } = Constants; -export const equip_weapon_component = (() => { - class EquipWeapon extends Component { - constructor(params) { - super(); - this.params_ = params; - this.target_ = null; - this.name_ = null; - const classType = this.params_.desc.character.class; - const modelData = CHARACTER_MODELS[classType]; - this.anchor_ = modelData.anchors.rightHand; - } - InitComponent() { - this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this._OnCharacterLoaded(m)); - this._RegisterHandler(EVENT_TYPES.INVENTORY_EQUIP, (m) => this._OnEquip(m)); - } - _OnCharacterLoaded(msg) { - this._bones = msg.bones; - this._AttachTarget(); - } - _AttachTarget() { - if (this._bones && this.target_) { - this._bones[this.anchor_].add(this.target_); - } - } - GetItemDefinition_(name) { - const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent(KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); - return database.Find(name); - } - _OnEquip(msg) { - if (msg.value == this.name_) { - return; - } - if (this.target_) { - this._UnloadModels(); - } - const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER); - const item = this.GetItemDefinition_(msg.value); - this.name_ = msg.value; - if (item) { - this._LoadModels(item, () => { - this._AttachTarget(); - }); - } - } - _UnloadModels() { - if (this.target_) { - this.target_.parent.remove(this.target_); - // Probably need to free the memory properly, whatever - this.target_ = null; - } - } - _LoadModels(item, cb) { - const loader = new FBXLoader(); - loader.setPath('./resources/weapons/FBX/'); - loader.load(item.renderParams.name + '.fbx', (fbx) => { - this.target_ = fbx; - this.target_.scale.setScalar(item.renderParams.scale); - // this.target_.rotateY(Math.PI); - this.target_.rotateX(Math.PI / 2); - // this.target_.rotateY(-1); - this.target_.traverse(c => { - c.castShadow = true; - c.receiveShadow = true; - // Do this instead of something smart like re-exporting. - let materials = c.material; - let newMaterials = []; - if (!(c.material instanceof Array)) { - materials = [c.material]; - } - for (let m of materials) { - if (m) { - const c = new THREE.Color().copy(m.color); - c.multiplyScalar(0.75); - newMaterials.push(new THREE.MeshStandardMaterial({ - color: c, - name: m.name, - metalness: 1.0, - })); - } - } - if (!(c.material instanceof Array)) { - c.material = newMaterials[0]; - } - else { - c.material = newMaterials; - } - }); - cb(); - this.Broadcast({ - topic: EVENT_TYPES.LOAD_WEAPON, - model: this.target_, - bones: this._bones, - }); - }); - } - } - ; - return { - EquipWeapon: EquipWeapon, - }; -})(); diff --git a/packages/client/package.json b/packages/client/package.json deleted file mode 100644 index 507a09b0..00000000 --- a/packages/client/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "client", - "version": "0.0.1", - "devDependencies": { - "cross-env": "^5.0.5", - "http-server": "^0.12.3", - "nodemon": "^2.0.7", - "tsc-watch": "^4.2.9", - "tsconfig-paths-webpack-plugin": "^3.5.1" - }, - "peerDependencies": { - "shared": "0.0.1" - }, - "dependencies": { - "socket.io-client": "^4.0.0", - "three": "^0.127.0", - "typescript": "^4.2.3" - }, - "scripts": { - "build": "tsc --build", - "start:dev": "tsc-watch --onSuccess 'http-server'", - "start": "node ./dist/index.js" - } -} diff --git a/packages/client/src/equip-weapon-component.ts b/packages/client/src/equip-weapon-component.ts deleted file mode 100644 index ab94284f..00000000 --- a/packages/client/src/equip-weapon-component.ts +++ /dev/null @@ -1,135 +0,0 @@ -import * as THREE from 'three'; - -import {Component} from './entity'; -import {Defs, Constants} from 'shared'; -import {FBXLoader} from 'three/examples/jsm/loaders/FBXLoader'; - -const {CHARACTER_MODELS} = Defs; -const { EVENT_TYPES, KNOWN_ENTITIES } = Constants; - -export const equip_weapon_component = (() => { - - class EquipWeapon extends Component { - params_: any; - target_: any; - name_: any; - anchor_: any; - _bones: any; - - constructor(params) { - super(); - this.params_ = params; - this.target_ = null; - this.name_ = null; - - const classType = this.params_.desc.character.class; - const modelData = CHARACTER_MODELS[classType]; - this.anchor_ = modelData.anchors.rightHand; - } - - InitComponent() { - this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this._OnCharacterLoaded(m)); - this._RegisterHandler(EVENT_TYPES.INVENTORY_EQUIP, (m) => this._OnEquip(m)); - } - - _OnCharacterLoaded(msg) { - this._bones = msg.bones; - this._AttachTarget(); - } - - _AttachTarget() { - if (this._bones && this.target_) { - this._bones[this.anchor_].add(this.target_); - } - } - - GetItemDefinition_(name) { - const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent( - KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); - return database.Find(name); - } - - _OnEquip(msg) { - if (msg.value == this.name_) { - return; - } - - if (this.target_) { - this._UnloadModels(); - } - const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER); - const item = this.GetItemDefinition_(msg.value); - - this.name_ = msg.value; - - if (item) { - this._LoadModels(item, () => { - this._AttachTarget(); - }); - } - } - - _UnloadModels() { - if (this.target_) { - this.target_.parent.remove(this.target_); - // Probably need to free the memory properly, whatever - this.target_ = null; - } - } - - _LoadModels(item, cb) { - const loader = new FBXLoader(); - loader.setPath('./resources/weapons/FBX/'); - loader.load(item.renderParams.name + '.fbx', (fbx) => { - this.target_ = fbx; - this.target_.scale.setScalar(item.renderParams.scale); - // this.target_.rotateY(Math.PI); - this.target_.rotateX(Math.PI / 2); - // this.target_.rotateY(-1); - - this.target_.traverse(c => { - c.castShadow = true; - c.receiveShadow = true; - - // Do this instead of something smart like re-exporting. - let materials = c.material; - let newMaterials = []; - if (!(c.material instanceof Array)) { - materials = [c.material]; - } - - for (let m of materials) { - if (m) { - const c = new THREE.Color().copy(m.color); - c.multiplyScalar(0.75); - newMaterials.push(new THREE.MeshStandardMaterial({ - color: c, - name: m.name, - metalness: 1.0, - })); - } - } - - if (!(c.material instanceof Array)) { - c.material = newMaterials[0]; - } else { - c.material = newMaterials; - } - - }); - - cb(); - - this.Broadcast({ - topic: EVENT_TYPES.LOAD_WEAPON, - model: this.target_, - bones: this._bones, - }); - }); - } - }; - - return { - EquipWeapon: EquipWeapon, - }; -})(); \ No newline at end of file diff --git a/packages/client/tsconfig.json b/packages/client/tsconfig.json deleted file mode 100644 index c2c0b34c..00000000 --- a/packages/client/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.packages.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "target": "ES6", - "lib": ["ESNext", "DOM"], - "module": "ESNext", - "moduleResolution": "Node" - }, - "include": ["./src/*.ts"], - "exclude": ["./dist", "node_modules"] -} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/.babelrc b/packages/quick-3d-mmo-client/.babelrc new file mode 100644 index 00000000..d8307aaa --- /dev/null +++ b/packages/quick-3d-mmo-client/.babelrc @@ -0,0 +1 @@ +{ "presets": [ "env" ] } \ No newline at end of file diff --git a/packages/client/LICENSE b/packages/quick-3d-mmo-client/LICENSE similarity index 100% rename from packages/client/LICENSE rename to packages/quick-3d-mmo-client/LICENSE diff --git a/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.d.ts new file mode 100644 index 00000000..74f33654 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.d.ts @@ -0,0 +1,8 @@ +import { Component } from './entity'; +declare class AttackController extends Component { + action_: any; + constructor(); + InitComponent(): void; + _OnAnimAction(m: any): void; +} +export { AttackController }; diff --git a/packages/client/dist/attacker-controller.js b/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js similarity index 87% rename from packages/client/dist/attacker-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js index 4322d9cd..16879b94 100644 --- a/packages/client/dist/attacker-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js @@ -1,5 +1,5 @@ import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { EVENT_TYPES } = Object.assign({}, Constants); class AttackController extends Component { constructor() { @@ -24,3 +24,4 @@ class AttackController extends Component { } ; export { AttackController }; +//# sourceMappingURL=attacker-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js.map new file mode 100644 index 00000000..618dc97a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"attacker-controller.js","sourceRoot":"","sources":["../../src/scripts/attacker-controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,MAAM,EAAE,WAAW,EAAE,qBAAQ,SAAS,CAAE,CAAC;AAEzC,MAAM,gBAAiB,SAAQ,SAAS;IAGtC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAiC,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,aAAa,CAAC,CAAC;QACb,IAAI,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE;YAClC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;YACxB,OAAO;SACR;aAAM,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC;gBACb,KAAK,EAAE,WAAW,CAAC,aAAa;aACjC,CAAC,CAAC;SACJ;IACH,CAAC;CACF;AAAA,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/blood-effect.d.ts b/packages/quick-3d-mmo-client/dist/scripts/blood-effect.d.ts new file mode 100644 index 00000000..a88444f4 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/blood-effect.d.ts @@ -0,0 +1,60 @@ +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; +declare class BloodEffectEmitter extends ParticleEmitter { + parent_: any; + blend_: number; + emitterLife_: number; + alphaSpline_: any; + colourSpline_: any; + sizeSpline_: any; + constructor(parent: any); + OnUpdate_(): void; + CreateParticle_(): { + position: any; + size: number; + colour: any; + alpha: number; + life: number; + maxLife: number; + rotation: number; + velocity: any; + blend: number; + }; +} +declare class FireFXEmitter extends ParticleEmitter { + parent_: any; + blend_: number; + particles_: any; + alphaSpline_: any; + colourSpline_: any; + sizeSpline_: any; + constructor(parent: any); + OnUpdate_(): void; + AddParticles(num: any): void; + CreateParticle_(): { + position: any; + size: number; + colour: any; + alpha: number; + life: number; + maxLife: number; + rotation: number; + velocity: any; + blend: number; + }; +} +declare class BloodEffect extends Component { + params_: any; + bloodFX_: ParticleSystem; + fireFX_: ParticleSystem; + bones_: any; + constructor(params: any); + Destroy(): void; + InitComponent(): void; + OnCharacterLoaded_(msg: any): void; + OnEvents_(msg: any): void; + EmitFireFX_(): void; + EmitBloodFX_(): void; + Update(timeElapsed: any): void; +} +export { BloodEffect, FireFXEmitter, BloodEffectEmitter }; diff --git a/packages/client/dist/blood-effect.js b/packages/quick-3d-mmo-client/dist/scripts/blood-effect.js similarity index 98% rename from packages/client/dist/blood-effect.js rename to packages/quick-3d-mmo-client/dist/scripts/blood-effect.js index a67fac8b..14a42ea0 100644 --- a/packages/client/dist/blood-effect.js +++ b/packages/quick-3d-mmo-client/dist/scripts/blood-effect.js @@ -1,7 +1,7 @@ import * as THREE from 'three'; import { ParticleEmitter, ParticleSystem } from "./particle-system"; import { Component } from "./entity"; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { CLASS_TYPES_ENUM, EVENT_TYPES, STATE_TYPES } = Constants; class BloodEffectEmitter extends ParticleEmitter { constructor(parent) { @@ -180,3 +180,4 @@ class BloodEffect extends Component { } } export { BloodEffect, FireFXEmitter, BloodEffectEmitter }; +//# sourceMappingURL=blood-effect.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/blood-effect.js.map b/packages/quick-3d-mmo-client/dist/scripts/blood-effect.js.map new file mode 100644 index 00000000..675df54b --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/blood-effect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"blood-effect.js","sourceRoot":"","sources":["../../src/scripts/blood-effect.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/entity.d.ts b/packages/quick-3d-mmo-client/dist/scripts/entity.d.ts new file mode 100644 index 00000000..549bcff4 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/entity.d.ts @@ -0,0 +1,46 @@ +import * as THREE from 'three'; +declare class Entity { + _name: any; + _components: {}; + _position: THREE.Vector3; + _rotation: THREE.Quaternion; + _handlers: {}; + parent_: any; + dead_: boolean; + Account: any; + constructor(); + Destroy(): void; + _RegisterHandler(n: any, h: any): void; + SetParent(p: any): void; + SetName(n: any): void; + get Name(): any; + get Manager(): any; + SetActive(b: any): void; + SetDead(): void; + AddComponent(c: any): void; + InitEntity(): void; + GetComponent(n: any): any; + FindEntity(n: any): any; + Broadcast(msg: any): void; + SetPosition(p: any): void; + SetQuaternion(r: any): void; + get Position(): any; + get Quaternion(): any; + Update(timeElapsed: any): void; +} +declare class Component { + parent_: any; + constructor(params?: any); + Destroy(): void; + SetParent(p: any): void; + InitComponent(): void; + InitEntity(): void; + GetComponent(n: any): any; + get Manager(): any; + get Parent(): any; + FindEntity(n: any): any; + Broadcast(m: any): void; + Update(_: any): void; + _RegisterHandler(n: any, h: any): void; +} +export { Entity, Component }; diff --git a/packages/client/dist/entity.js b/packages/quick-3d-mmo-client/dist/scripts/entity.js similarity index 98% rename from packages/client/dist/entity.js rename to packages/quick-3d-mmo-client/dist/scripts/entity.js index 91a480a0..54fd913a 100644 --- a/packages/client/dist/entity.js +++ b/packages/quick-3d-mmo-client/dist/scripts/entity.js @@ -125,3 +125,4 @@ class Component { } ; export { Entity, Component }; +//# sourceMappingURL=entity.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/entity.js.map b/packages/quick-3d-mmo-client/dist/scripts/entity.js.map new file mode 100644 index 00000000..445466dc --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/scripts/entity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.d.ts b/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.d.ts new file mode 100644 index 00000000..d3e69437 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.d.ts @@ -0,0 +1,17 @@ +import { Component } from './entity'; +declare class EquipWeapon extends Component { + params_: any; + target_: any; + name_: any; + anchor_: any; + _bones: any; + constructor(params: any); + InitComponent(): void; + _OnCharacterLoaded(msg: any): void; + _AttachTarget(): void; + GetItemDefinition_(name: any): any; + _OnEquip(msg: any): void; + _UnloadModels(): void; + _LoadModels(item: any, cb: any): void; +} +export { EquipWeapon }; diff --git a/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.js b/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.js new file mode 100644 index 00000000..98c8fb43 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.js @@ -0,0 +1,104 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Defs, Constants } from '@quick-3d-mmo/shared'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; +const { CHARACTER_MODELS } = Defs; +const { EVENT_TYPES, KNOWN_ENTITIES } = Constants; +class EquipWeapon extends Component { + constructor(params) { + super(); + this.params_ = params; + this.target_ = null; + this.name_ = null; + const classType = this.params_.desc.character.class; + const modelData = CHARACTER_MODELS[classType]; + this.anchor_ = modelData.anchors.rightHand; + } + InitComponent() { + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this._OnCharacterLoaded(m)); + this._RegisterHandler(EVENT_TYPES.INVENTORY_EQUIP, (m) => this._OnEquip(m)); + } + _OnCharacterLoaded(msg) { + this._bones = msg.bones; + this._AttachTarget(); + } + _AttachTarget() { + if (this._bones && this.target_) { + this._bones[this.anchor_].add(this.target_); + } + } + GetItemDefinition_(name) { + const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent(KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); + return database.Find(name); + } + _OnEquip(msg) { + if (msg.value == this.name_) { + return; + } + if (this.target_) { + this._UnloadModels(); + } + const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER); + const item = this.GetItemDefinition_(msg.value); + this.name_ = msg.value; + if (item) { + this._LoadModels(item, () => { + this._AttachTarget(); + }); + } + } + _UnloadModels() { + if (this.target_) { + this.target_.parent.remove(this.target_); + // Probably need to free the memory properly, whatever + this.target_ = null; + } + } + _LoadModels(item, cb) { + const loader = new FBXLoader(); + loader.setPath('./resources/weapons/FBX/'); + loader.load(item.renderParams.name + '.fbx', (fbx) => { + this.target_ = fbx; + this.target_.scale.setScalar(item.renderParams.scale); + // this.target_.rotateY(Math.PI); + this.target_.rotateX(Math.PI / 2); + // this.target_.rotateY(-1); + this.target_.traverse(c => { + c.castShadow = true; + c.receiveShadow = true; + // Do this instead of something smart like re-exporting. + let materials = c.material; + let newMaterials = []; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + for (let m of materials) { + if (m) { + const c = new THREE.Color().copy(m.color); + c.multiplyScalar(0.75); + newMaterials.push(new THREE.MeshStandardMaterial({ + color: c, + name: m.name, + metalness: 1.0, + })); + } + } + if (!(c.material instanceof Array)) { + c.material = newMaterials[0]; + } + else { + c.material = newMaterials; + } + }); + cb(); + this.Broadcast({ + topic: EVENT_TYPES.LOAD_WEAPON, + model: this.target_, + bones: this._bones, + }); + }); + } +} +; +export { EquipWeapon }; +//# sourceMappingURL=equip-weapon-component.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.js.map b/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.js.map new file mode 100644 index 00000000..be495e75 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/equip-weapon-component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"equip-weapon-component.js","sourceRoot":"","sources":["../../src/scripts/equip-weapon-component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.d.ts b/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.d.ts new file mode 100644 index 00000000..e1157974 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.d.ts @@ -0,0 +1,9 @@ +declare class FiniteStateMachine { + _states: {}; + _currentState: any; + constructor(); + _AddState(name: any, type: any): void; + SetState(name: any): void; + Update(timeElapsed: any, input: any): void; +} +export { FiniteStateMachine }; diff --git a/packages/client/dist/finite-state-machine.js b/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js similarity index 93% rename from packages/client/dist/finite-state-machine.js rename to packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js index 2931c6d2..99e67905 100644 --- a/packages/client/dist/finite-state-machine.js +++ b/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js @@ -26,3 +26,4 @@ class FiniteStateMachine { } ; export { FiniteStateMachine }; +//# sourceMappingURL=finite-state-machine.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js.map b/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js.map new file mode 100644 index 00000000..de52195e --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js.map @@ -0,0 +1 @@ +{"version":3,"file":"finite-state-machine.js","sourceRoot":"","sources":["../../src/scripts/finite-state-machine.ts"],"names":[],"mappings":"AACA,MAAM,kBAAkB;IAItB;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,SAAS,CAAC,IAAI,EAAE,IAAI;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,IAAI;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QAErC,IAAI,SAAS,EAAE;YACb,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE;gBAC1B,OAAO;aACR;YACD,SAAS,CAAC,IAAI,EAAE,CAAC;SAClB;QAED,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,WAAW,EAAE,KAAK;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SAC/C;IACH,CAAC;CACF;AAAA,CAAC;AACF,OAAO,EAAE,kBAAkB,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/floating-name.d.ts b/packages/quick-3d-mmo-client/dist/scripts/floating-name.d.ts new file mode 100644 index 00000000..efc07942 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/floating-name.d.ts @@ -0,0 +1,23 @@ +import { Component } from './entity'; +declare class FloatingName extends Component { + params_: { + desc: { + character: { + class: string; + }; + account: { + name: string; + }; + }; + }; + visible_: boolean; + sprite_: any; + element_: HTMLCanvasElement; + context2d_: any; + constructor(params: any); + Destroy(): void; + InitComponent(): void; + OnDeath_(e: any): void; + CreateSprite_(msg: any): void; +} +export { FloatingName }; diff --git a/packages/client/dist/floating-name.js b/packages/quick-3d-mmo-client/dist/scripts/floating-name.js similarity index 96% rename from packages/client/dist/floating-name.js rename to packages/quick-3d-mmo-client/dist/scripts/floating-name.js index 7bb59c07..5e71ca60 100644 --- a/packages/client/dist/floating-name.js +++ b/packages/quick-3d-mmo-client/dist/scripts/floating-name.js @@ -1,6 +1,6 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants, Defs } from 'shared'; +import { Constants, Defs } from '@quick-3d-mmo/shared'; const { EVENT_TYPES, CHARACTER_MODELS } = Object.assign(Object.assign({}, Constants), Defs); class FloatingName extends Component { constructor(params) { @@ -64,3 +64,4 @@ class FloatingName extends Component { } ; export { FloatingName }; +//# sourceMappingURL=floating-name.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/floating-name.js.map b/packages/quick-3d-mmo-client/dist/scripts/floating-name.js.map new file mode 100644 index 00000000..2c38cb35 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/floating-name.js.map @@ -0,0 +1 @@ +{"version":3,"file":"floating-name.js","sourceRoot":"","sources":["../../src/scripts/floating-name.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/gltf-component.d.ts b/packages/quick-3d-mmo-client/dist/scripts/gltf-component.d.ts new file mode 100644 index 00000000..fcdc2d11 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/gltf-component.d.ts @@ -0,0 +1,30 @@ +import { Component } from './entity'; +declare class StaticModelComponent extends Component { + _params: any; + _target: any; + constructor(params: any); + _Init(params: any): void; + InitComponent(): void; + _OnPosition(m: any): void; + _LoadModels(): void; + _OnLoaded(obj: any): void; + _LoadGLB(): void; + _LoadFBX(): void; + Update(timeInSeconds: any): void; +} +declare class AnimatedModelComponent extends Component { + _target: any; + _params: any; + _parent: any; + _mixer: any; + constructor(params: any); + InitComponent(): void; + _OnPosition(m: any): void; + _Init(params: any): void; + _LoadModels(): void; + _OnLoaded(obj: any, animations: any): void; + _LoadGLB(): void; + _LoadFBX(): void; + Update(timeInSeconds: any): void; +} +export { StaticModelComponent, AnimatedModelComponent }; diff --git a/packages/client/dist/gltf-component.js b/packages/quick-3d-mmo-client/dist/scripts/gltf-component.js similarity index 98% rename from packages/client/dist/gltf-component.js rename to packages/quick-3d-mmo-client/dist/scripts/gltf-component.js index 6f6b3775..4b7d35a5 100644 --- a/packages/client/dist/gltf-component.js +++ b/packages/quick-3d-mmo-client/dist/scripts/gltf-component.js @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { EVENT_TYPES } = Constants; class StaticModelComponent extends Component { constructor(params) { @@ -193,3 +193,4 @@ class AnimatedModelComponent extends Component { } ; export { StaticModelComponent, AnimatedModelComponent }; +//# sourceMappingURL=gltf-component.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/gltf-component.js.map b/packages/quick-3d-mmo-client/dist/scripts/gltf-component.js.map new file mode 100644 index 00000000..c500b0a8 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/gltf-component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"gltf-component.js","sourceRoot":"","sources":["../../src/scripts/gltf-component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/health-bar.d.ts b/packages/quick-3d-mmo-client/dist/scripts/health-bar.d.ts new file mode 100644 index 00000000..25624d21 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/health-bar.d.ts @@ -0,0 +1,18 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +declare class HealthBar extends Component { + params_: any; + material_: any; + geometry_: any; + bar_: THREE.Mesh; + realHealth_: number; + animHealth_: number; + constructor(params: any); + Destroy(): void; + Initialize_(): void; + InitComponent(): void; + OnHealth_(msg: any): void; + Update(timeElapsed: any): void; + GenerateBuffers_(): void; +} +export { HealthBar }; diff --git a/packages/client/dist/health-bar.js b/packages/quick-3d-mmo-client/dist/scripts/health-bar.js similarity index 96% rename from packages/client/dist/health-bar.js rename to packages/quick-3d-mmo-client/dist/scripts/health-bar.js index 1bb86ddb..0d08bcc4 100644 --- a/packages/client/dist/health-bar.js +++ b/packages/quick-3d-mmo-client/dist/scripts/health-bar.js @@ -1,6 +1,6 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Math as math } from 'shared'; +import { Math as math } from '@quick-3d-mmo/shared'; const _VS = ` varying vec2 vUV; @@ -104,3 +104,4 @@ class HealthBar extends Component { } ; export { HealthBar }; +//# sourceMappingURL=health-bar.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/health-bar.js.map b/packages/quick-3d-mmo-client/dist/scripts/health-bar.js.map new file mode 100644 index 00000000..8c2fa90f --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/health-bar.js.map @@ -0,0 +1 @@ +{"version":3,"file":"health-bar.js","sourceRoot":"","sources":["../../src/scripts/health-bar.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/health-component.d.ts b/packages/quick-3d-mmo-client/dist/scripts/health-component.d.ts new file mode 100644 index 00000000..1ba09af9 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/health-component.d.ts @@ -0,0 +1,28 @@ +import { Component } from "./entity"; +declare class HealthComponent extends Component { + stats_: { + level: number; + updateUI: boolean; + health: number; + maxHealth: number; + strength: number; + wisdomness: number; + benchpress: number; + curl: number; + experience: number; + }; + constructor(params: any); + InitComponent(): void; + IsAlive(): boolean; + get Health(): number; + UpdateUI_(): void; + _ComputeLevelXPRequirement(): number; + OnAddExperience_(msg: any): void; + _OnDeath(): void; + OnHealthChanged_(): void; + OnNetworkUpdate_(msg: any): void; + OnDamage_(msg: { + value: number; + }): void; +} +export { HealthComponent }; diff --git a/packages/client/dist/health-component.js b/packages/quick-3d-mmo-client/dist/scripts/health-component.js similarity index 97% rename from packages/client/dist/health-component.js rename to packages/quick-3d-mmo-client/dist/scripts/health-component.js index 41a9265d..fbe82d2a 100644 --- a/packages/client/dist/health-component.js +++ b/packages/quick-3d-mmo-client/dist/scripts/health-component.js @@ -1,4 +1,4 @@ -import { Constants } from "shared"; +import { Constants } from '@quick-3d-mmo/shared'; import { Component } from "./entity"; const { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; class HealthComponent extends Component { @@ -87,3 +87,4 @@ class HealthComponent extends Component { } ; export { HealthComponent }; +//# sourceMappingURL=health-component.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/health-component.js.map b/packages/quick-3d-mmo-client/dist/scripts/health-component.js.map new file mode 100644 index 00000000..0d31df74 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/health-component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"health-component.js","sourceRoot":"","sources":["../../src/scripts/health-component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/index.d.ts b/packages/quick-3d-mmo-client/dist/scripts/index.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/client/dist/index.js b/packages/quick-3d-mmo-client/dist/scripts/index.js similarity index 99% rename from packages/client/dist/index.js rename to packages/quick-3d-mmo-client/dist/scripts/index.js index 3a218f22..8dee7b94 100644 --- a/packages/client/dist/index.js +++ b/packages/quick-3d-mmo-client/dist/scripts/index.js @@ -3,7 +3,7 @@ import * as THREE from 'three'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; import { io } from 'socket.io-client'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { EVENT_TYPES, STATE_TYPES } = Constants; const _CHARACTER_MODELS = { zombie: { @@ -935,3 +935,4 @@ let _APP = null; window.addEventListener('DOMContentLoaded', () => { _APP = new BasicMMODemo(); }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/index.js.map b/packages/quick-3d-mmo-client/dist/scripts/index.js.map new file mode 100644 index 00000000..ed71c416 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.d.ts new file mode 100644 index 00000000..d8a8f3fa --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.d.ts @@ -0,0 +1,36 @@ +import { Component } from './entity'; +declare class InventoryDatabaseController extends Component { + items_: {}; + constructor(); + AddItem(name: any, item: any): void; + Find(name: any): any; +} +declare class UIInventoryController extends Component { + inventory_: any; + constructor(params: any); + InitEntity(): void; + OnInventoryUpdated_(): void; + OnItemDropped_(oldElement: any, newElement: any): void; + GetItemDefinition_(name: any): any; + SetItemAtSlot_(slot: any, itemName: any): void; +} +declare class InventoryController extends Component { + inventory_: {}; + constructor(params?: any); + CreateEmpty_(): {}; + get Inventory(): {}; + InitComponent(): void; + OnNetworkUpdate_(msg: any): void; + CreatePacket(): {}; + GetItemDefinition_(name: any): any; + SetItemAtSlot_(slot: any, itemName: any): void; + GetItemByName(name: any): any; +} +declare class InventoryItem extends Component { + _params: any; + constructor(params: any); + InitComponent(): void; + get Params(): any; + get RenderParams(): any; +} +export { InventoryDatabaseController, UIInventoryController, InventoryController, InventoryItem }; diff --git a/packages/client/dist/inventory-controller.js b/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js similarity index 98% rename from packages/client/dist/inventory-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js index cde95af5..de3331dd 100644 --- a/packages/client/dist/inventory-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js @@ -1,4 +1,4 @@ -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; import { Component } from './entity'; const { EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES } = Constants; class InventoryDatabaseController extends Component { @@ -169,3 +169,4 @@ class InventoryItem extends Component { } ; export { InventoryDatabaseController, UIInventoryController, InventoryController, InventoryItem }; +//# sourceMappingURL=inventory-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js.map new file mode 100644 index 00000000..a9ea59e0 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inventory-controller.js","sourceRoot":"","sources":["../../src/scripts/inventory-controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/level-up-component.d.ts b/packages/quick-3d-mmo-client/dist/scripts/level-up-component.d.ts new file mode 100644 index 00000000..2dc70e9c --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/level-up-component.d.ts @@ -0,0 +1,14 @@ +import { Component, Entity } from "./entity"; +declare class LevelUpComponentSpawner extends Component { + _params: any; + constructor(params: any); + Spawn(pos: any): Entity; +} +declare class LevelUpComponent extends Component { + _params: any; + _particles: any; + constructor(params: any); + InitComponent(): void; + Update(timeElapsed: any): void; +} +export { LevelUpComponent, LevelUpComponentSpawner, }; diff --git a/packages/client/dist/level-up-component.js b/packages/quick-3d-mmo-client/dist/scripts/level-up-component.js similarity index 97% rename from packages/client/dist/level-up-component.js rename to packages/quick-3d-mmo-client/dist/scripts/level-up-component.js index cc80050b..1de7aae1 100644 --- a/packages/client/dist/level-up-component.js +++ b/packages/quick-3d-mmo-client/dist/scripts/level-up-component.js @@ -46,3 +46,4 @@ class LevelUpComponent extends Component { } } export { LevelUpComponent, LevelUpComponentSpawner, }; +//# sourceMappingURL=level-up-component.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/level-up-component.js.map b/packages/quick-3d-mmo-client/dist/scripts/level-up-component.js.map new file mode 100644 index 00000000..2be56bc5 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/level-up-component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"level-up-component.js","sourceRoot":"","sources":["../../src/scripts/level-up-component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,uBAAwB,SAAQ,SAAS;IAE7C,YAAY,MAAM;QAChB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,YAAY,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEpB,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAAA,CAAC;AAEF,MAAM,gBAAiB,SAAQ,SAAS;IAGtC,YAAY,MAAM;QAChB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC;YACnC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,KAAK;YACpB,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEvE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,aAAa;QACX,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC9B;IACH,CAAC;CACF;AAGD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/load-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/load-controller.d.ts new file mode 100644 index 00000000..d24b5bd8 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/load-controller.d.ts @@ -0,0 +1,10 @@ +import { Component } from "./entity"; +declare class LoadController extends Component { + textures_: {}; + models_: {}; + constructor(); + LoadTexture(path: any, name: any): any; + LoadFBX(path: any, name: any, onLoad: any): void; + LoadSkinnedGLB(path: any, name: any, onLoad: any): void; +} +export { LoadController }; diff --git a/packages/client/dist/load-controller.js b/packages/quick-3d-mmo-client/dist/scripts/load-controller.js similarity index 98% rename from packages/client/dist/load-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/load-controller.js index 038a8f33..597f8288 100644 --- a/packages/client/dist/load-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/load-controller.js @@ -82,3 +82,4 @@ class LoadController extends Component { } } export { LoadController }; +//# sourceMappingURL=load-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/load-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/load-controller.js.map new file mode 100644 index 00000000..44c5600e --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/load-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"load-controller.js","sourceRoot":"","sources":["../../src/scripts/load-controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/loading-manager.d.ts b/packages/quick-3d-mmo-client/dist/scripts/loading-manager.d.ts new file mode 100644 index 00000000..29f377a0 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/loading-manager.d.ts @@ -0,0 +1,8 @@ +declare class OurLoadingManager { + loader_: any; + files_: Set; + onLoad: () => void; + constructor(loader: any); + load(file: any, cb: any): void; +} +export { OurLoadingManager }; diff --git a/packages/client/dist/loading-manager.js b/packages/quick-3d-mmo-client/dist/scripts/loading-manager.js similarity index 93% rename from packages/client/dist/loading-manager.js rename to packages/quick-3d-mmo-client/dist/scripts/loading-manager.js index 314bef3d..a7f1d6c4 100644 --- a/packages/client/dist/loading-manager.js +++ b/packages/quick-3d-mmo-client/dist/scripts/loading-manager.js @@ -20,3 +20,4 @@ class OurLoadingManager { } ; export { OurLoadingManager }; +//# sourceMappingURL=loading-manager.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/loading-manager.js.map b/packages/quick-3d-mmo-client/dist/scripts/loading-manager.js.map new file mode 100644 index 00000000..45f735f8 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/loading-manager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"loading-manager.js","sourceRoot":"","sources":["../../src/scripts/loading-manager.ts"],"names":[],"mappings":"AACA,sEAAsE;AACtE,yDAAyD;AACzD,mBAAmB;AACnB,MAAM,iBAAiB;IAIrB,YAAY,MAAM;QAChB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,EAAE;QACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,EAAE,CAAC,MAAM,CAAC,CAAC;YAEX,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE;gBACzB,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAAA,CAAC;AAEF,OAAO,EACL,iBAAiB,EAClB,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/main.d.ts b/packages/quick-3d-mmo-client/dist/scripts/main.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/main.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/client/dist/main.js b/packages/quick-3d-mmo-client/dist/scripts/main.js similarity index 97% rename from packages/client/dist/main.js rename to packages/quick-3d-mmo-client/dist/scripts/main.js index d791787a..08db0995 100644 --- a/packages/client/dist/main.js +++ b/packages/quick-3d-mmo-client/dist/scripts/main.js @@ -1,4 +1,4 @@ -import { GUI } from 'shared'; +import { GUI } from '@quick-3d-mmo/shared'; import { Entity } from './entity'; import { UIController } from './ui-controller'; import { LevelUpComponentSpawner } from './level-up-component'; @@ -8,7 +8,7 @@ import { LoadController } from './load-controller'; import { PlayerSpawner, NetworkEntitySpawner } from './spawners'; import { TerrainChunkManager } from './terrain'; import { InventoryDatabaseController } from './inventory-controller'; -import { Constants, Defs, EntityManager as aEntityManager, SpatialHashGrid as aSpatialHashGrid } from 'shared'; +import { Constants, Defs, EntityManager as aEntityManager, SpatialHashGrid as aSpatialHashGrid } from '@quick-3d-mmo/shared'; import { ThreeJSController } from './threejs_component'; const { WEAPONS_DATA, DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, EntityManager, SpatialHashGrid } = Object.assign(Object.assign(Object.assign(Object.assign({}, Constants), Defs), aEntityManager), aSpatialHashGrid); class CrappyMMOAttempt { @@ -129,3 +129,4 @@ let _APP = null; window.addEventListener('DOMContentLoaded', () => { _APP = new CrappyMMOAttempt(); }); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/main.js.map b/packages/quick-3d-mmo-client/dist/scripts/main.js.map new file mode 100644 index 00000000..787a6f78 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/scripts/main.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/network-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/network-controller.d.ts new file mode 100644 index 00000000..c98d1647 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-controller.d.ts @@ -0,0 +1,15 @@ +import { Component } from './entity'; +declare class NetworkController extends Component { + playerID_: any; + socket_: any; + constructor(params?: any); + GenerateRandomName_(): string; + SetupSocket_(): void; + SendChat(txt: any): void; + SendTransformUpdate(transform: any): void; + SendActionAttack_(): void; + SendInventoryChange_(packet: any): void; + GetEntityID_(serverID: any): string; + OnMessage_(e: any, d: any): void; +} +export { NetworkController }; diff --git a/packages/client/dist/network-controller.js b/packages/quick-3d-mmo-client/dist/scripts/network-controller.js similarity index 98% rename from packages/client/dist/network-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/network-controller.js index 2f8ef7ac..8acd2222 100644 --- a/packages/client/dist/network-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/network-controller.js @@ -1,4 +1,4 @@ -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; import { io } from 'socket.io-client'; const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; import { Component } from './entity'; @@ -133,3 +133,4 @@ class NetworkController extends Component { } ; export { NetworkController }; +//# sourceMappingURL=network-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/network-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/network-controller.js.map new file mode 100644 index 00000000..b9ce9a9e --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"network-controller.js","sourceRoot":"","sources":["../../src/scripts/network-controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.d.ts new file mode 100644 index 00000000..687e89a0 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.d.ts @@ -0,0 +1,13 @@ +import { Component } from './entity'; +declare class NetworkEntityController extends Component { + transformUpdates_: any[]; + targetFrame_: any; + lastFrame_: any; + lastUpdate_: number; + constructor(params?: any); + InitComponent(): void; + SetTransform_(transform: any): void; + OnNetworkUpdate_(msg: any): void; + Update(timeElapsed: any): void; +} +export { NetworkEntityController }; diff --git a/packages/client/dist/network-entity-controller.js b/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js similarity index 96% rename from packages/client/dist/network-entity-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js index a7fed0e7..d6af6767 100644 --- a/packages/client/dist/network-entity-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js @@ -1,6 +1,6 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { EVENT_TYPES } = Constants; class NetworkEntityController extends Component { constructor(params) { @@ -88,3 +88,4 @@ class NetworkEntityController extends Component { } ; export { NetworkEntityController }; +//# sourceMappingURL=network-entity-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js.map new file mode 100644 index 00000000..74e9f2de --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"network-entity-controller.js","sourceRoot":"","sources":["../../src/scripts/network-entity-controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.d.ts new file mode 100644 index 00000000..e8809dbf --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.d.ts @@ -0,0 +1,16 @@ +import { Component } from './entity'; +declare class NetworkEntityController extends Component { + updateTimer_: number; + loaded_: boolean; + net_: any; + constructor(params?: any); + InitComponent(): void; + InitEntity(): void; + OnEquipChanged_(msg: any): void; + OnActionAttack_(msg: any): void; + OnUpdate_(msg: any): void; + OnLoaded_(_: any): void; + CreateTransformPacket(): any[]; + Update(timeElapsed: any): void; +} +export { NetworkEntityController }; diff --git a/packages/client/dist/network-player-controller.js b/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js similarity index 95% rename from packages/client/dist/network-player-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js index 7310102f..06ec282a 100644 --- a/packages/client/dist/network-player-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js @@ -1,6 +1,6 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; class NetworkEntityController extends Component { constructor(params) { @@ -66,3 +66,4 @@ class NetworkEntityController extends Component { } ; export { NetworkEntityController }; +//# sourceMappingURL=network-player-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js.map new file mode 100644 index 00000000..bda01d76 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"network-player-controller.js","sourceRoot":"","sources":["../../src/scripts/network-player-controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/npc-entity.d.ts b/packages/quick-3d-mmo-client/dist/scripts/npc-entity.d.ts new file mode 100644 index 00000000..3277a2f3 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/npc-entity.d.ts @@ -0,0 +1,24 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +declare class NPCController extends Component { + params_: any; + group_: any; + animations_: {}; + queuedState_: any; + stateMachine_: any; + target_: any; + bones_: {}; + mixer_: THREE.AnimationMixer; + constructor(params: any); + Destroy(): void; + InitEntity(): void; + _Init(): void; + InitComponent(): void; + SetState(s: any): void; + OnDeath_(msg: any): void; + OnPosition_(m: any): void; + OnRotation_(m: any): void; + LoadModels_(): void; + Update(timeInSeconds: any): void; +} +export { NPCController }; diff --git a/packages/client/dist/npc-entity.js b/packages/quick-3d-mmo-client/dist/scripts/npc-entity.js similarity index 98% rename from packages/client/dist/npc-entity.js rename to packages/quick-3d-mmo-client/dist/scripts/npc-entity.js index c38fddb9..611c2ebb 100644 --- a/packages/client/dist/npc-entity.js +++ b/packages/quick-3d-mmo-client/dist/scripts/npc-entity.js @@ -1,7 +1,7 @@ import * as THREE from 'three'; import { Component } from './entity'; import { CharacterFSM, BasicCharacterControllerProxy } from './player-entity'; -import { Constants, Defs } from 'shared'; +import { Constants, Defs } from '@quick-3d-mmo/shared'; const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, STATE_TYPES, CHARACTER_MODELS } = Object.assign(Object.assign({}, Constants), Defs); class NPCController extends Component { constructor(params) { @@ -136,3 +136,4 @@ class NPCController extends Component { } ; export { NPCController }; +//# sourceMappingURL=npc-entity.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/npc-entity.js.map b/packages/quick-3d-mmo-client/dist/scripts/npc-entity.js.map new file mode 100644 index 00000000..00dcef91 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/npc-entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"npc-entity.js","sourceRoot":"","sources":["../../src/scripts/npc-entity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/particle-system.d.ts b/packages/quick-3d-mmo-client/dist/scripts/particle-system.d.ts new file mode 100644 index 00000000..fcad9656 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/particle-system.d.ts @@ -0,0 +1,50 @@ +declare class LinearSpline { + points_: any[]; + _lerp: any; + constructor(lerp: any); + AddPoint(t: any, d: any): void; + Get(t: any): any; +} +declare class ParticleEmitter { + alphaSpline_: LinearSpline; + colourSpline_: LinearSpline; + sizeSpline_: LinearSpline; + emissionRate_: number; + emissionAccumulator_: number; + particles_: any[]; + emitterLife_: any; + constructor(); + UpdateParticles_(timeElapsed: any): void; + CreateParticle_(): { + position: any; + size: number; + colour: any; + alpha: number; + life: number; + maxLife: number; + rotation: number; + velocity: any; + blend: number; + }; + get IsAlive(): boolean; + SetLife(life: any): void; + SetEmissionRate(rate: any): void; + OnUpdate_(_: any): void; + Update(timeElapsed: any): void; +} +declare class ParticleSystem { + material_: any; + camera_: any; + particles_: any[]; + geometry_: any; + points_: any; + emitters_: any[]; + constructor(params: any); + Destroy(): void; + AddEmitter(e: any): void; + UpdateGeometry_(): void; + UpdateParticles_(timeElapsed: any): void; + UpdateEmitters_(timeElapsed: any): void; + Update(timeElapsed: any): void; +} +export { ParticleEmitter, ParticleSystem }; diff --git a/packages/client/dist/particle-system.js b/packages/quick-3d-mmo-client/dist/scripts/particle-system.js similarity index 99% rename from packages/client/dist/particle-system.js rename to packages/quick-3d-mmo-client/dist/scripts/particle-system.js index e08a9fb0..7152f4a2 100644 --- a/packages/client/dist/particle-system.js +++ b/packages/quick-3d-mmo-client/dist/scripts/particle-system.js @@ -254,3 +254,4 @@ class ParticleSystem { } ; export { ParticleEmitter, ParticleSystem }; +//# sourceMappingURL=particle-system.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/particle-system.js.map b/packages/quick-3d-mmo-client/dist/scripts/particle-system.js.map new file mode 100644 index 00000000..2767463f --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/particle-system.js.map @@ -0,0 +1 @@ +{"version":3,"file":"particle-system.js","sourceRoot":"","sources":["../../src/scripts/particle-system.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/player-entity.d.ts b/packages/quick-3d-mmo-client/dist/scripts/player-entity.d.ts new file mode 100644 index 00000000..b9a79b9e --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-entity.d.ts @@ -0,0 +1,36 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { FiniteStateMachine } from './finite-state-machine'; +declare class CharacterFSM extends FiniteStateMachine { + _proxy: any; + constructor(proxy: any); + Init_(): void; +} +declare class BasicCharacterControllerProxy { + animations_: any; + constructor(animations: any); + get animations(): any; +} +declare class BasicCharacterController extends Component { + params_: any; + decceleration_: THREE.Vector3; + acceleration_: THREE.Vector3; + velocity_: THREE.Vector3; + group_: THREE.Group; + animations_: {}; + stateMachine_: any; + target_: any; + bones_: {}; + _mixer: THREE.AnimationMixer; + constructor(params: any); + InitEntity(): void; + Init_(): void; + InitComponent(): void; + OnUpdatePosition_(msg: any): void; + OnUpdateRotation_(msg: any): void; + OnDeath_(msg: any): void; + LoadModels_(): void; + _FindIntersections(pos: any, oldPos: any): any[]; + Update(timeInSeconds: any): void; +} +export { CharacterFSM, BasicCharacterControllerProxy, BasicCharacterController, }; diff --git a/packages/client/dist/player-entity.js b/packages/quick-3d-mmo-client/dist/scripts/player-entity.js similarity index 98% rename from packages/client/dist/player-entity.js rename to packages/quick-3d-mmo-client/dist/scripts/player-entity.js index fcd4634f..6ecd0285 100644 --- a/packages/client/dist/player-entity.js +++ b/packages/quick-3d-mmo-client/dist/scripts/player-entity.js @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { Component } from './entity'; import { FiniteStateMachine } from './finite-state-machine'; import { IdleState, WalkState, RunState, AttackState, DanceState, DeathState } from './player-state'; -import { Constants, Defs } from 'shared'; +import { Constants, Defs } from '@quick-3d-mmo/shared'; const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, CHARACTER_MODELS } = Object.assign(Object.assign({}, Constants), Defs); class CharacterFSM extends FiniteStateMachine { constructor(proxy) { @@ -220,3 +220,4 @@ class BasicCharacterController extends Component { } ; export { CharacterFSM, BasicCharacterControllerProxy, BasicCharacterController, }; +//# sourceMappingURL=player-entity.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/player-entity.js.map b/packages/quick-3d-mmo-client/dist/scripts/player-entity.js.map new file mode 100644 index 00000000..cdc56367 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"player-entity.js","sourceRoot":"","sources":["../../src/scripts/player-entity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/player-input.d.ts b/packages/quick-3d-mmo-client/dist/scripts/player-input.d.ts new file mode 100644 index 00000000..598ebe19 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-input.d.ts @@ -0,0 +1,25 @@ +import * as THREE from 'three'; +import { Component } from "./entity"; +declare class PickableComponent extends Component { + constructor(); + InitComponent(): void; +} +declare class BasicCharacterControllerInput extends Component { + _params: any; + _keys: { + forward: boolean; + backward: boolean; + left: boolean; + right: boolean; + space: boolean; + shift: boolean; + backspace: boolean; + }; + _raycaster: THREE.Raycaster; + constructor(params: any); + _Init(): void; + _onMouseUp(event: any): void; + _onKeyDown(event: any): void; + _onKeyUp(event: any): void; +} +export { BasicCharacterControllerInput, PickableComponent, }; diff --git a/packages/client/dist/player-input.js b/packages/quick-3d-mmo-client/dist/scripts/player-input.js similarity index 97% rename from packages/client/dist/player-input.js rename to packages/quick-3d-mmo-client/dist/scripts/player-input.js index 3587f785..9b3ca581 100644 --- a/packages/client/dist/player-input.js +++ b/packages/quick-3d-mmo-client/dist/scripts/player-input.js @@ -1,5 +1,5 @@ import * as THREE from 'three'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; import { Component } from "./entity"; const { DOM_IDS, EVENT_TYPES } = Constants; class PickableComponent extends Component { @@ -120,3 +120,4 @@ class BasicCharacterControllerInput extends Component { } ; export { BasicCharacterControllerInput, PickableComponent, }; +//# sourceMappingURL=player-input.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/player-input.js.map b/packages/quick-3d-mmo-client/dist/scripts/player-input.js.map new file mode 100644 index 00000000..988cdcef --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-input.js.map @@ -0,0 +1 @@ +{"version":3,"file":"player-input.js","sourceRoot":"","sources":["../../src/scripts/player-input.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/player-state.d.ts b/packages/quick-3d-mmo-client/dist/scripts/player-state.d.ts new file mode 100644 index 00000000..d0d850a2 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-state.d.ts @@ -0,0 +1,57 @@ +import { Constants } from 'quick-3d-mmo-shared'; +declare class State { + _parent: any; + constructor(parent: any); +} +declare class DeathState extends State { + _action: any; + constructor(parent: any); + get Name(): Constants.STATE_TYPES; + Enter(prevState: any): void; + Exit(): void; + Update(arg0?: any, arg1?: any): void; +} +declare class DanceState extends State { + _action: any; + _FinishedCallback: () => void; + constructor(parent: any); + get Name(): Constants.STATE_TYPES; + Enter(prevState: any): void; + _Finished(): void; + _Cleanup(): void; + Exit(): void; + Update(): void; +} +declare class AttackState extends State { + _action: any; + _FinishedCallback: () => void; + constructor(parent: any); + get Name(): Constants.STATE_TYPES; + Enter(prevState: any): void; + _Finished(): void; + _Cleanup(): void; + Exit(): void; + Update(): void; +} +declare class WalkState extends State { + constructor(parent: any); + get Name(): Constants.STATE_TYPES; + Enter(prevState: any): void; + Exit(): void; + Update(timeElapsed: any, input: any): void; +} +declare class RunState extends State { + constructor(parent: any); + get Name(): Constants.STATE_TYPES; + Enter(prevState: any): void; + Exit(): void; + Update(timeElapsed: any, input: any): void; +} +declare class IdleState extends State { + constructor(parent: any); + get Name(): Constants.STATE_TYPES; + Enter(prevState: any): void; + Exit(): void; + Update(_: any, input: any): void; +} +export { State, DanceState, AttackState, IdleState, WalkState, RunState, DeathState, }; diff --git a/packages/client/dist/player-state.js b/packages/quick-3d-mmo-client/dist/scripts/player-state.js similarity index 98% rename from packages/client/dist/player-state.js rename to packages/quick-3d-mmo-client/dist/scripts/player-state.js index 89b52f74..99ba8bc0 100644 --- a/packages/client/dist/player-state.js +++ b/packages/quick-3d-mmo-client/dist/scripts/player-state.js @@ -1,5 +1,5 @@ import * as THREE from 'three'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { STATE_TYPES } = Constants; class State { constructor(parent) { @@ -250,3 +250,4 @@ class IdleState extends State { } ; export { State, DanceState, AttackState, IdleState, WalkState, RunState, DeathState, }; +//# sourceMappingURL=player-state.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/player-state.js.map b/packages/quick-3d-mmo-client/dist/scripts/player-state.js.map new file mode 100644 index 00000000..e19dfa13 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-state.js.map @@ -0,0 +1 @@ +{"version":3,"file":"player-state.js","sourceRoot":"","sources":["../../src/scripts/player-state.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/quadtree.d.ts b/packages/quick-3d-mmo-client/dist/scripts/quadtree.d.ts new file mode 100644 index 00000000..ba76cb6a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/quadtree.d.ts @@ -0,0 +1,31 @@ +import * as THREE from 'three'; +declare class CubeQuadTree { + _params: any; + _sides: any[]; + constructor(params: any); + GetChildren(): any[]; + Insert(pos: any): void; +} +declare class QuadTree { + _root: { + bounds: THREE.Box3; + children: any[]; + center: THREE.Vector3; + size: THREE.Vector3; + root: boolean; + }; + _params: any; + constructor(params: any); + GetChildren(): any[]; + _GetChildren(node: any, target: any): void; + Insert(pos: any): void; + _Insert(child: any, pos: any): void; + _DistanceToChild(child: any, pos: any): any; + _CreateChildren(child: any): { + bounds: any; + children: any[]; + center: any; + size: any; + }[]; +} +export { QuadTree, CubeQuadTree }; diff --git a/packages/client/dist/quadtree.js b/packages/quick-3d-mmo-client/dist/scripts/quadtree.js similarity index 99% rename from packages/client/dist/quadtree.js rename to packages/quick-3d-mmo-client/dist/scripts/quadtree.js index 6e7f4e73..510e9eb1 100644 --- a/packages/client/dist/quadtree.js +++ b/packages/quick-3d-mmo-client/dist/scripts/quadtree.js @@ -127,3 +127,4 @@ class QuadTree { } } export { QuadTree, CubeQuadTree }; +//# sourceMappingURL=quadtree.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/quadtree.js.map b/packages/quick-3d-mmo-client/dist/scripts/quadtree.js.map new file mode 100644 index 00000000..f665be76 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/quadtree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quadtree.js","sourceRoot":"","sources":["../../src/scripts/quadtree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/quest-component.d.ts b/packages/quick-3d-mmo-client/dist/scripts/quest-component.d.ts new file mode 100644 index 00000000..1ded1de8 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/quest-component.d.ts @@ -0,0 +1,8 @@ +import { Component } from "./entity"; +declare class QuestComponent extends Component { + constructor(); + InitComponent(): void; + _OnPicked(msg: any): void; + _AddQuestToJournal(quest: any): void; +} +export { QuestComponent }; diff --git a/packages/client/dist/quest-component.js b/packages/quick-3d-mmo-client/dist/scripts/quest-component.js similarity index 93% rename from packages/client/dist/quest-component.js rename to packages/quick-3d-mmo-client/dist/scripts/quest-component.js index 5659fdf9..a4e0d0aa 100644 --- a/packages/client/dist/quest-component.js +++ b/packages/quick-3d-mmo-client/dist/scripts/quest-component.js @@ -1,4 +1,4 @@ -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; import { Component } from "./entity"; const { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; const _TITLE = 'Welcome Adventurer!'; @@ -28,3 +28,4 @@ class QuestComponent extends Component { } ; export { QuestComponent }; +//# sourceMappingURL=quest-component.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/quest-component.js.map b/packages/quick-3d-mmo-client/dist/scripts/quest-component.js.map new file mode 100644 index 00000000..27e04ccb --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/quest-component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"quest-component.js","sourceRoot":"","sources":["../../src/scripts/quest-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,GAAG,qBAAqB,CAAC;AACrC,MAAM,KAAK,GAAG,+cAA+c,CAAC;AAE9d,MAAM,cAAe,SAAQ,SAAS;IACpC;QACE,KAAK,EAAE,CAAC;QAER,MAAM,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED,aAAa;QACX,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,SAAS,CAAC,GAAG;QACX,mBAAmB;QACnB,MAAM,KAAK,GAAG;YACZ,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,KAAK;SACZ,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,kBAAkB,CAAC,KAAK;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC3F,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;CACF;AAAA,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/render-component.d.ts b/packages/quick-3d-mmo-client/dist/scripts/render-component.d.ts new file mode 100644 index 00000000..a09450c1 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/render-component.d.ts @@ -0,0 +1,21 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +declare class RenderComponent extends Component { + group_: THREE.Group; + params_: any; + _target: any; + constructor(params: any); + Destroy(): void; + InitEntity(): void; + _Init(params: any): void; + InitComponent(): void; + _OnPosition(m: any): void; + _OnRotation(m: any): void; + _LoadModels(): void; + _OnLoaded(obj: any): void; + _LoadGLB(): void; + _LoadFBX(): void; + _LoadOBJ(): void; + Update(timeInSeconds: any): void; +} +export { RenderComponent }; diff --git a/packages/client/dist/render-component.js b/packages/quick-3d-mmo-client/dist/scripts/render-component.js similarity index 97% rename from packages/client/dist/render-component.js rename to packages/quick-3d-mmo-client/dist/scripts/render-component.js index 4be638c6..2e5ea490 100644 --- a/packages/client/dist/render-component.js +++ b/packages/quick-3d-mmo-client/dist/scripts/render-component.js @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { KNOWN_ENTITIES } = Object.assign({}, Constants); class RenderComponent extends Component { constructor(params) { @@ -133,3 +133,4 @@ class RenderComponent extends Component { } ; export { RenderComponent }; +//# sourceMappingURL=render-component.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/render-component.js.map b/packages/quick-3d-mmo-client/dist/scripts/render-component.js.map new file mode 100644 index 00000000..b2d80912 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/render-component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"render-component.js","sourceRoot":"","sources":["../../src/scripts/render-component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.d.ts new file mode 100644 index 00000000..f0b71f40 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.d.ts @@ -0,0 +1,16 @@ +import { Entity, Component } from './entity'; +import type { Noise as INoise } from 'quick-3d-mmo-shared'; +declare class SceneryController extends Component { + params_: any; + noise_: INoise.Noise; + center_: any; + crap_: any[]; + constructor(params: any); + InitEntity(): void; + SpawnClouds_(): void; + FindBiome_(terrain: any, pos: any): "forest" | "arid" | "desert"; + SpawnAt_(biome: any, spawnPos: any): Entity; + SpawnCrap_(): void; + Update(_: any): void; +} +export { SceneryController }; diff --git a/packages/client/dist/scenery-controller.js b/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js similarity index 92% rename from packages/client/dist/scenery-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js index 3b858780..41f00533 100644 --- a/packages/client/dist/scenery-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js @@ -1,14 +1,14 @@ import * as THREE from 'three'; import { Entity, Component } from './entity'; import { RenderComponent } from './render-component'; -import { SpatialGridController } from './spatial-grid-controller.js'; -import { Math as math, Noise as noise, Constants } from 'shared'; +import { SpatialGridController } from './spatial-grid-controller'; +import { Math as math, Noise as noise, Constants } from '@quick-3d-mmo/shared'; const { KNOWN_ENTITIES } = Constants; const { Noise } = noise; const _SCENERY = { birch1: { base: 'Birch_1.fbx', - resourcePath: './resources/trees/FBX/', + resourcePath: './trees/FBX/', names: { Bark: 'Birch_Bark.png', Leaves: 'Birch_Leaves_Yellow.png' @@ -19,7 +19,7 @@ const _SCENERY = { }, tree1: { base: 'Tree_1.fbx', - resourcePath: './resources/trees/FBX/', + resourcePath: './trees/FBX/', names: { Bark: 'Tree_Bark.jpg', Leaves: 'Leaves_Blue.png' @@ -30,35 +30,35 @@ const _SCENERY = { }, rock1: { base: 'Rock_1.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './nature/FBX/', names: {}, scale: 0.025, biomes: ['arid', 'desert'], }, rockMoss1: { base: 'Rock_Moss_1.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './nature/FBX/', names: {}, scale: 0.025, biomes: ['forest'], }, plant1: { base: 'Plant_1.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './nature/FBX/', names: {}, scale: 0.05, biomes: ['forest', 'arid'], }, grass1: { base: 'Grass_1.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './nature/FBX/', names: {}, scale: 0.05, biomes: ['forest', 'arid'], }, flowers1: { base: 'Flowers.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './nature/FBX/', names: {}, scale: 0.05, biomes: ['forest'], @@ -111,7 +111,7 @@ class SceneryController extends Component { const e = new Entity(); e.AddComponent(new RenderComponent({ scene: this.params_.scene, - resourcePath: './resources/nature2/GLTF/', + resourcePath: '../nature2/GLTF/', resourceName: 'Cloud' + index + '.glb', scale: Math.random() * 20 + 40, emissive: new THREE.Color(0x000000), @@ -154,7 +154,7 @@ class SceneryController extends Component { resourcePath: randomProp.resourcePath, resourceName: randomProp.base, textures: { - resourcePath: './resources/trees/Textures/', + resourcePath: './trees/Textures/', names: randomProp.names, wrap: true, }, @@ -224,3 +224,4 @@ class SceneryController extends Component { } ; export { SceneryController }; +//# sourceMappingURL=scenery-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js.map new file mode 100644 index 00000000..0cbb02cf --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scenery-controller.js","sourceRoot":"","sources":["../../src/scripts/scenery-controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.d.ts b/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.d.ts new file mode 100644 index 00000000..de70faab --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.d.ts @@ -0,0 +1,13 @@ +import { Component } from "./entity"; +declare class SorcerorEffect extends Component { + params_: any; + particles_: any; + _bones: any; + constructor(params: any); + Destroy(): void; + InitComponent(): void; + OnCharacterLoaded_(msg: any): void; + OnAttack_(m: any): void; + Update(timeElapsed: any): void; +} +export { SorcerorEffect }; diff --git a/packages/client/dist/sorceror-effect.js b/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js similarity index 97% rename from packages/client/dist/sorceror-effect.js rename to packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js index dac0fb64..821a0150 100644 --- a/packages/client/dist/sorceror-effect.js +++ b/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js @@ -1,7 +1,7 @@ import * as THREE from 'three'; import { ParticleEmitter, ParticleSystem } from "./particle-system"; import { Component } from "./entity"; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { EVENT_TYPES } = Constants; class SorcerorEffectEmitter extends ParticleEmitter { constructor(parent) { @@ -93,3 +93,4 @@ class SorcerorEffect extends Component { } } export { SorcerorEffect }; +//# sourceMappingURL=sorceror-effect.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js.map b/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js.map new file mode 100644 index 00000000..73344c7a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sorceror-effect.js","sourceRoot":"","sources":["../../src/scripts/sorceror-effect.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.d.ts new file mode 100644 index 00000000..17c40a4f --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.d.ts @@ -0,0 +1,11 @@ +import { Component } from './entity'; +declare class SpatialGridController extends Component { + grid_: any; + client_: any; + constructor(params: any); + Destroy(): void; + InitComponent(): void; + _OnPosition(msg: any): void; + FindNearbyEntities(range: any): any; +} +export { SpatialGridController }; diff --git a/packages/client/dist/spatial-grid-controller.js b/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js similarity index 95% rename from packages/client/dist/spatial-grid-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js index 8b163912..b12224d8 100644 --- a/packages/client/dist/spatial-grid-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js @@ -28,3 +28,4 @@ class SpatialGridController extends Component { } ; export { SpatialGridController }; +//# sourceMappingURL=spatial-grid-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js.map new file mode 100644 index 00000000..dff7afe5 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spatial-grid-controller.js","sourceRoot":"","sources":["../../src/scripts/spatial-grid-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,qBAAsB,SAAQ,SAAS;IAG3C,YAAY,MAAM;QAChB,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAGD,aAAa;QACX,MAAM,GAAG,GAAG;YACV,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SACzB,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,WAAW,CAAC,GAAG;QACb,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB,CAAC,KAAK;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAExE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;CACF;AAAA,CAAC;AAEF,OAAO,EACL,qBAAqB,EACtB,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/spawners.d.ts b/packages/quick-3d-mmo-client/dist/scripts/spawners.d.ts new file mode 100644 index 00000000..162a54d2 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/spawners.d.ts @@ -0,0 +1,12 @@ +import { Component, Entity } from './entity'; +declare class PlayerSpawner extends Component { + params_: any; + constructor(params: any); + Spawn(playerParams: any): Entity; +} +declare class NetworkEntitySpawner extends Component { + params_: any; + constructor(params: any); + Spawn(name: any, desc: any): Entity; +} +export { PlayerSpawner, NetworkEntitySpawner }; diff --git a/packages/client/dist/spawners.js b/packages/quick-3d-mmo-client/dist/scripts/spawners.js similarity index 93% rename from packages/client/dist/spawners.js rename to packages/quick-3d-mmo-client/dist/scripts/spawners.js index 8fc8c930..dd8687f4 100644 --- a/packages/client/dist/spawners.js +++ b/packages/quick-3d-mmo-client/dist/scripts/spawners.js @@ -5,7 +5,7 @@ import { HealthComponent } from './health-component'; import { BasicCharacterControllerInput } from './player-input'; import { SpatialGridController } from './spatial-grid-controller'; import { InventoryController, UIInventoryController } from './inventory-controller'; -import { equip_weapon_component } from './equip-weapon-component'; +import { EquipWeapon } from './equip-weapon-component'; import { AttackController } from './attacker-controller'; import { NPCController } from './npc-entity'; import { NetworkEntityController } from './network-entity-controller'; @@ -13,7 +13,7 @@ import { NetworkEntityController as NetworkPlayerController } from './network-pl import { FloatingName } from './floating-name'; import { SorcerorEffect } from './sorceror-effect'; import { BloodEffect } from './blood-effect'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { CLASS_TYPES_ENUM } = Constants; class PlayerSpawner extends Component { constructor(params) { @@ -30,7 +30,7 @@ class PlayerSpawner extends Component { player.Account = playerParams.account; player.AddComponent(new BasicCharacterControllerInput(params)); player.AddComponent(new BasicCharacterController(params)); - player.AddComponent(new equip_weapon_component.EquipWeapon({ desc: playerParams })); + player.AddComponent(new EquipWeapon({ desc: playerParams })); player.AddComponent(new UIInventoryController(params)); player.AddComponent(new InventoryController(params)); player.AddComponent(new HealthComponent({ @@ -96,7 +96,7 @@ class NetworkEntitySpawner extends Component { if (desc.account.name) { npc.AddComponent(new FloatingName({ desc: desc })); } - npc.AddComponent(new equip_weapon_component.EquipWeapon({ desc: desc })); + npc.AddComponent(new EquipWeapon({ desc: desc })); npc.AddComponent(new InventoryController()); npc.AddComponent(new BloodEffect({ camera: this.params_.camera, @@ -113,3 +113,4 @@ class NetworkEntitySpawner extends Component { } } export { PlayerSpawner, NetworkEntitySpawner }; +//# sourceMappingURL=spawners.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/spawners.js.map b/packages/quick-3d-mmo-client/dist/scripts/spawners.js.map new file mode 100644 index 00000000..8974b2e3 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/spawners.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spawners.js","sourceRoot":"","sources":["../../src/scripts/spawners.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.d.ts b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/client/dist/terrain-builder-threaded-worker.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js similarity index 98% rename from packages/client/dist/terrain-builder-threaded-worker.js rename to packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js index c543db8a..b9b9e7a6 100644 --- a/packages/client/dist/terrain-builder-threaded-worker.js +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js @@ -1,6 +1,6 @@ import * as THREE from 'three'; import { TextureSplatter } from './texture-splatter'; -import { TerrainHeight, Noise as aNoise, Math as math } from 'shared'; +import { TerrainHeight, Noise as aNoise, Math as math } from '@quick-3d-mmo/shared'; const { Noise, HeightGenerator } = Object.assign(Object.assign({}, TerrainHeight), aNoise); class _TerrainBuilderThreadedWorker { constructor() { @@ -264,3 +264,4 @@ self.onmessage = (msg) => { self.postMessage({ subject: 'build_chunk_result', data: rebuiltData }, null); } }; +//# sourceMappingURL=terrain-builder-threaded-worker.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js.map b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js.map new file mode 100644 index 00000000..156c5c45 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-builder-threaded-worker.js","sourceRoot":"","sources":["../../src/scripts/terrain-builder-threaded-worker.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.d.ts b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.d.ts new file mode 100644 index 00000000..4805106a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.d.ts @@ -0,0 +1,35 @@ +declare class WorkerThread { + _worker: Worker; + _resolve: any; + _id: number; + constructor(s: any); + _OnMessage(e: any): void; + get id(): number; + postMessage(s: any, resolve: any): void; +} +declare class WorkerThreadPool { + _workers: WorkerThread[]; + _free: any[]; + _busy: {}; + _queue: any[]; + constructor(sz: any, entry: any); + get length(): number; + get Busy(): boolean; + Enqueue(workItem: any, resolve: any): void; + _PumpQueue(): void; +} +declare class TerrainChunkRebuilder_Threaded { + _pool: {}; + _old: any[]; + _workerPool: WorkerThreadPool; + _params: any; + constructor(params: any); + _OnResult(chunk: any, msg: any): void; + AllocateChunk(params: any): any; + RetireChunks(chunks: any): void; + _RecycleChunks(chunks: any): void; + get Busy(): boolean; + Rebuild(chunks: any): void; + Update(): void; +} +export { TerrainChunkRebuilder_Threaded }; diff --git a/packages/client/dist/terrain-builder-threaded.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js similarity index 98% rename from packages/client/dist/terrain-builder-threaded.js rename to packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js index 66d268c3..5508b8ac 100644 --- a/packages/client/dist/terrain-builder-threaded.js +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js @@ -130,3 +130,4 @@ class TerrainChunkRebuilder_Threaded { } } export { TerrainChunkRebuilder_Threaded }; +//# sourceMappingURL=terrain-builder-threaded.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js.map b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js.map new file mode 100644 index 00000000..413ad677 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-builder-threaded.js","sourceRoot":"","sources":["../../src/scripts/terrain-builder-threaded.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.d.ts b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.d.ts new file mode 100644 index 00000000..1aceebb5 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.d.ts @@ -0,0 +1,17 @@ +declare class TerrainChunkRebuilder { + _pool: {}; + _params: any; + _queued: any; + _old: any; + _active: any; + _new: any[]; + constructor(params: any); + AllocateChunk(params: any): any; + RetireChunks(chunks: any): void; + _RecycleChunks(chunks: any): void; + _Reset(): void; + get Busy(): any; + Rebuild(chunks: any): void; + Update(): void; +} +export { TerrainChunkRebuilder }; diff --git a/packages/client/dist/terrain-builder.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js similarity index 97% rename from packages/client/dist/terrain-builder.js rename to packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js index 646ee8de..4762082f 100644 --- a/packages/client/dist/terrain-builder.js +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js @@ -77,3 +77,4 @@ class TerrainChunkRebuilder { } } export { TerrainChunkRebuilder }; +//# sourceMappingURL=terrain-builder.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js.map b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js.map new file mode 100644 index 00000000..128f1b3c --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-builder.js","sourceRoot":"","sources":["../../src/scripts/terrain-builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.d.ts b/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.d.ts new file mode 100644 index 00000000..58e22be5 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.d.ts @@ -0,0 +1,15 @@ +import * as THREE from 'three'; +declare class TerrainChunk { + _params: any; + _geometry: THREE.BufferGeometry; + _plane: THREE.Mesh; + constructor(params: any); + Destroy(): void; + Hide(): void; + Show(): void; + _Init(params: any): void; + Update(cameraPosition: any): void; + Reinit(params: any): void; + RebuildMeshFromData(data: any): void; +} +export { TerrainChunk }; diff --git a/packages/client/dist/terrain-chunk.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js similarity index 97% rename from packages/client/dist/terrain-chunk.js rename to packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js index ef0cb1e4..f0b2fd2f 100644 --- a/packages/client/dist/terrain-chunk.js +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js @@ -41,3 +41,4 @@ class TerrainChunk { } } export { TerrainChunk }; +//# sourceMappingURL=terrain-chunk.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js.map b/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js.map new file mode 100644 index 00000000..fa228959 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-chunk.js","sourceRoot":"","sources":["../../src/scripts/terrain-chunk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,YAAY;IAKhB,YAAY,MAAM;QAChB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAGD,IAAI;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,cAAc;QACnB,kDAAkD;QAClD,4CAA4C;IAC9C,CAAC;IAED,MAAM,CAAC,MAAM;QACX,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,mBAAmB,CAAC,IAAI;QACtB,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,UAAU,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,OAAO,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,QAAQ,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,QAAQ,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,UAAU,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,YAAY,CACzB,UAAU,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;IACtC,CAAC;CACF;AAED,OAAO,EACL,YAAY,EACb,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.d.ts b/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.d.ts new file mode 100644 index 00000000..794eaab9 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.d.ts @@ -0,0 +1,7 @@ +declare const VS1 = "\n\n// Triplanar Attributes\nin vec4 weights1;\nin vec4 weights2;\n\n// Outputs\nout vec3 vCoords;\nout vec4 vWeights1;\nout vec4 vWeights2;\n\n\n"; +declare const VS2 = "\n\nvCoords = transformed.xyz;\nvWeights1 = weights1;\nvWeights2 = weights2;\n\n"; +declare const VS = "\n\n// Attributes\nin vec3 coords;\nin vec3 color;\nin vec4 weights1;\nin vec4 weights2;\n\n// Outputs\nout vec2 vUV;\nout vec4 vColor;\nout vec3 vNormal;\nout vec3 vCoords;\nout vec4 vWeights1;\nout vec4 vWeights2;\n\nvoid main(){\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\n vUV = uv;\n vNormal = normal;\n\n vColor = vec4(color, 1);\n vCoords = position.xyz;\n vWeights1 = weights1;\n vWeights2 = weights2;\n}\n "; +declare const PS = "\n\nprecision highp float;\nprecision highp int;\nprecision highp sampler2DArray;\n\nuniform sampler2DArray TRIPLANAR_normalMap;\nuniform sampler2DArray TRIPLANAR_diffuseMap;\nuniform sampler2D TRIPLANAR_noiseMap;\n\nin vec3 vCoords;\nin vec4 vWeights1;\nin vec4 vWeights2;\n\n\nconst float _TRI_SCALE = 10.0;\n\nfloat sum( vec3 v ) { return v.x+v.y+v.z; }\n\nvec4 hash4( vec2 p ) {\n return fract(\n sin(vec4(1.0+dot(p,vec2(37.0,17.0)), \n 2.0+dot(p,vec2(11.0,47.0)),\n 3.0+dot(p,vec2(41.0,29.0)),\n 4.0+dot(p,vec2(23.0,31.0))))*103.0);\n}\n\nvec4 _TerrainBlend_4(vec4 samples[4]) {\n float depth = 0.2;\n float ma = max(\n samples[0].w,\n max(\n samples[1].w,\n max(samples[2].w, samples[3].w))) - depth;\n\n float b1 = max(samples[0].w - ma, 0.0);\n float b2 = max(samples[1].w - ma, 0.0);\n float b3 = max(samples[2].w - ma, 0.0);\n float b4 = max(samples[3].w - ma, 0.0);\n\n vec4 numer = (\n samples[0] * b1 + samples[1] * b2 +\n samples[2] * b3 + samples[3] * b4);\n float denom = (b1 + b2 + b3 + b4);\n return numer / denom;\n}\n\nvec4 _TerrainBlend_4_lerp(vec4 samples[4]) {\n return (\n samples[0] * samples[0].w + samples[1] * samples[1].w +\n samples[2] * samples[2].w + samples[3] * samples[3].w);\n}\n\n// Lifted from https://www.shadertoy.com/view/Xtl3zf\nvec4 texture_UV(in sampler2DArray srcTexture, in vec3 x) {\n float k = texture(TRIPLANAR_noiseMap, 0.0025*x.xy).x; // cheap (cache friendly) lookup\n float l = k*8.0;\n float f = fract(l);\n \n float ia = floor(l+0.5); // suslik's method (see comments)\n float ib = floor(l);\n f = min(f, 1.0-f)*2.0;\n\n vec2 offa = sin(vec2(3.0,7.0)*ia); // can replace with any other hash\n vec2 offb = sin(vec2(3.0,7.0)*ib); // can replace with any other hash\n\n vec4 cola = texture(srcTexture, vec3(x.xy + offa, x.z));\n vec4 colb = texture(srcTexture, vec3(x.xy + offb, x.z));\n\n return mix(cola, colb, smoothstep(0.2,0.8,f-0.1*sum(cola.xyz-colb.xyz)));\n}\n\nvec4 _Triplanar_UV(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) {\n vec4 dx = texture_UV(tex, vec3(pos.zy / _TRI_SCALE, texSlice));\n vec4 dy = texture_UV(tex, vec3(pos.xz / _TRI_SCALE, texSlice));\n vec4 dz = texture_UV(tex, vec3(pos.xy / _TRI_SCALE, texSlice));\n\n vec3 weights = abs(normal.xyz);\n weights = weights / (weights.x + weights.y + weights.z);\n\n return dx * weights.x + dy * weights.y + dz * weights.z;\n}\n\nvec4 _TriplanarN_UV(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) {\n // Tangent Reconstruction\n // Triplanar uvs\n vec2 uvX = pos.zy; // x facing plane\n vec2 uvY = pos.xz; // y facing plane\n vec2 uvZ = pos.xy; // z facing plane\n // Tangent space normal maps\n vec3 tx = texture_UV(tex, vec3(uvX / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n vec3 ty = texture_UV(tex, vec3(uvY / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n vec3 tz = texture_UV(tex, vec3(uvZ / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n\n vec3 weights = abs(normal.xyz);\n weights = weights / (weights.x + weights.y + weights.z);\n\n // Get the sign (-1 or 1) of the surface normal\n vec3 axis = sign(normal);\n // Construct tangent to world matrices for each axis\n vec3 tangentX = normalize(cross(normal, vec3(0.0, axis.x, 0.0)));\n vec3 bitangentX = normalize(cross(tangentX, normal)) * axis.x;\n mat3 tbnX = mat3(tangentX, bitangentX, normal);\n\n vec3 tangentY = normalize(cross(normal, vec3(0.0, 0.0, axis.y)));\n vec3 bitangentY = normalize(cross(tangentY, normal)) * axis.y;\n mat3 tbnY = mat3(tangentY, bitangentY, normal);\n\n vec3 tangentZ = normalize(cross(normal, vec3(0.0, -axis.z, 0.0)));\n vec3 bitangentZ = normalize(-cross(tangentZ, normal)) * axis.z;\n mat3 tbnZ = mat3(tangentZ, bitangentZ, normal);\n\n // Apply tangent to world matrix and triblend\n // Using clamp() because the cross products may be NANs\n vec3 worldNormal = normalize(\n clamp(tbnX * tx, -1.0, 1.0) * weights.x +\n clamp(tbnY * ty, -1.0, 1.0) * weights.y +\n clamp(tbnZ * tz, -1.0, 1.0) * weights.z\n );\n return vec4(worldNormal, 0.0);\n}\n\nvec4 _Triplanar(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) {\n vec4 dx = texture(tex, vec3(pos.zy / _TRI_SCALE, texSlice));\n vec4 dy = texture(tex, vec3(pos.xz / _TRI_SCALE, texSlice));\n vec4 dz = texture(tex, vec3(pos.xy / _TRI_SCALE, texSlice));\n\n vec3 weights = abs(normal.xyz);\n weights = weights / (weights.x + weights.y + weights.z);\n\n return dx * weights.x + dy * weights.y + dz * weights.z;\n}\n\nvec4 _TriplanarN(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) {\n vec2 uvx = pos.zy;\n vec2 uvy = pos.xz;\n vec2 uvz = pos.xy;\n vec3 tx = texture(tex, vec3(uvx / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n vec3 ty = texture(tex, vec3(uvy / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n vec3 tz = texture(tex, vec3(uvz / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n\n vec3 weights = abs(normal.xyz);\n weights *= weights;\n weights = weights / (weights.x + weights.y + weights.z);\n\n vec3 axis = sign(normal);\n vec3 tangentX = normalize(cross(normal, vec3(0.0, axis.x, 0.0)));\n vec3 bitangentX = normalize(cross(tangentX, normal)) * axis.x;\n mat3 tbnX = mat3(tangentX, bitangentX, normal);\n\n vec3 tangentY = normalize(cross(normal, vec3(0.0, 0.0, axis.y)));\n vec3 bitangentY = normalize(cross(tangentY, normal)) * axis.y;\n mat3 tbnY = mat3(tangentY, bitangentY, normal);\n\n vec3 tangentZ = normalize(cross(normal, vec3(0.0, -axis.z, 0.0)));\n vec3 bitangentZ = normalize(-cross(tangentZ, normal)) * axis.z;\n mat3 tbnZ = mat3(tangentZ, bitangentZ, normal);\n\n vec3 worldNormal = normalize(\n clamp(tbnX * tx, -1.0, 1.0) * weights.x +\n clamp(tbnY * ty, -1.0, 1.0) * weights.y +\n clamp(tbnZ * tz, -1.0, 1.0) * weights.z);\n return vec4(worldNormal, 0.0);\n}\n\nvoid main() {\n vec3 worldPosition = vCoords;\n\n float weightIndices[4] = float[4](vWeights1.x, vWeights1.y, vWeights1.z, vWeights1.w);\n float weightValues[4] = float[4](vWeights2.x, vWeights2.y, vWeights2.z, vWeights2.w);\n\n // TRIPLANAR SPLATTING w/ NORMALS & UVS\n vec3 worldSpaceNormal = normalize(vNormal);\n vec4 diffuseSamples[4];\n vec4 normalSamples[4];\n\n for (int i = 0; i < 4; ++i) {\n vec4 d = vec4(0.0);\n vec4 n = vec4(0.0);\n if (weightValues[i] > 0.0) {\n d = _Triplanar_UV(\n worldPosition, worldSpaceNormal, weightIndices[i], TRIPLANAR_diffuseMap);\n n = _TriplanarN_UV(\n worldPosition, worldSpaceNormal, weightIndices[i], TRIPLANAR_normalMap);\n\n d.w *= weightValues[i];\n n.w = d.w;\n }\n\n diffuseSamples[i] = d;\n normalSamples[i] = n;\n }\n\n vec4 diffuseBlended = _TerrainBlend_4(diffuseSamples);\n vec4 normalBlended = _TerrainBlend_4(normalSamples);\n vec3 diffuse = diffuseBlended.xyz;\n\n vec3 finalColour = diffuse;\n\n // finalColour = vec3(sin(worldPosition.x), sin(worldPosition.y), sin(worldPosition.z));\n\n gl_FragColor = vec4(finalColour, 1);\n}\n\n "; +declare const PS1 = "\n\nprecision mediump sampler2DArray;\n\nuniform sampler2DArray TRIPLANAR_normalMap;\nuniform sampler2DArray TRIPLANAR_diffuseMap;\nuniform sampler2D TRIPLANAR_noiseMap;\n\nin vec3 vCoords;\nin vec4 vWeights1;\nin vec4 vWeights2;\n\n\nconst float _TRI_SCALE = 10.0;\n\nfloat sum( vec3 v ) { return v.x+v.y+v.z; }\n\nvec4 hash4( vec2 p ) {\n return fract(\n sin(vec4(1.0+dot(p,vec2(37.0,17.0)), \n 2.0+dot(p,vec2(11.0,47.0)),\n 3.0+dot(p,vec2(41.0,29.0)),\n 4.0+dot(p,vec2(23.0,31.0))))*103.0);\n}\n\nvec4 _TerrainBlend_4(vec4 samples[4]) {\n float depth = 0.2;\n float ma = max(\n samples[0].w,\n max(\n samples[1].w,\n max(samples[2].w, samples[3].w))) - depth;\n\n float b1 = max(samples[0].w - ma, 0.0);\n float b2 = max(samples[1].w - ma, 0.0);\n float b3 = max(samples[2].w - ma, 0.0);\n float b4 = max(samples[3].w - ma, 0.0);\n\n vec4 numer = (\n samples[0] * b1 + samples[1] * b2 +\n samples[2] * b3 + samples[3] * b4);\n float denom = (b1 + b2 + b3 + b4);\n return numer / denom;\n}\n\nvec4 _TerrainBlend_4_lerp(vec4 samples[4]) {\n return (\n samples[0] * samples[0].w + samples[1] * samples[1].w +\n samples[2] * samples[2].w + samples[3] * samples[3].w);\n}\n\n// Lifted from https://www.shadertoy.com/view/Xtl3zf\nvec4 texture_UV(in sampler2DArray srcTexture, in vec3 x) {\n float k = texture(TRIPLANAR_noiseMap, 0.0025*x.xy).x; // cheap (cache friendly) lookup\n float l = k*8.0;\n float f = fract(l);\n \n float ia = floor(l+0.5); // suslik's method (see comments)\n float ib = floor(l);\n f = min(f, 1.0-f)*2.0;\n\n vec2 offa = sin(vec2(3.0,7.0)*ia); // can replace with any other hash\n vec2 offb = sin(vec2(3.0,7.0)*ib); // can replace with any other hash\n\n vec4 cola = texture(srcTexture, vec3(x.xy + offa, x.z));\n vec4 colb = texture(srcTexture, vec3(x.xy + offb, x.z));\n\n return mix(cola, colb, smoothstep(0.2,0.8,f-0.1*sum(cola.xyz-colb.xyz)));\n}\n\nvec4 _Triplanar_UV(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) {\n vec4 dx = texture_UV(tex, vec3(pos.zy / _TRI_SCALE, texSlice));\n vec4 dy = texture_UV(tex, vec3(pos.xz / _TRI_SCALE, texSlice));\n vec4 dz = texture_UV(tex, vec3(pos.xy / _TRI_SCALE, texSlice));\n\n vec3 weights = abs(normal.xyz);\n weights = weights / (weights.x + weights.y + weights.z);\n\n return dx * weights.x + dy * weights.y + dz * weights.z;\n}\n\nvec4 _TriplanarN_UV(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) {\n // Tangent Reconstruction\n // Triplanar uvs\n vec2 uvX = pos.zy; // x facing plane\n vec2 uvY = pos.xz; // y facing plane\n vec2 uvZ = pos.xy; // z facing plane\n // Tangent space normal maps\n vec3 tx = texture_UV(tex, vec3(uvX / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n vec3 ty = texture_UV(tex, vec3(uvY / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n vec3 tz = texture_UV(tex, vec3(uvZ / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n\n vec3 weights = abs(normal.xyz);\n weights = weights / (weights.x + weights.y + weights.z);\n\n // Get the sign (-1 or 1) of the surface normal\n vec3 axis = sign(normal);\n // Construct tangent to world matrices for each axis\n vec3 tangentX = normalize(cross(normal, vec3(0.0, axis.x, 0.0)));\n vec3 bitangentX = normalize(cross(tangentX, normal)) * axis.x;\n mat3 tbnX = mat3(tangentX, bitangentX, normal);\n\n vec3 tangentY = normalize(cross(normal, vec3(0.0, 0.0, axis.y)));\n vec3 bitangentY = normalize(cross(tangentY, normal)) * axis.y;\n mat3 tbnY = mat3(tangentY, bitangentY, normal);\n\n vec3 tangentZ = normalize(cross(normal, vec3(0.0, -axis.z, 0.0)));\n vec3 bitangentZ = normalize(-cross(tangentZ, normal)) * axis.z;\n mat3 tbnZ = mat3(tangentZ, bitangentZ, normal);\n\n // Apply tangent to world matrix and triblend\n // Using clamp() because the cross products may be NANs\n vec3 worldNormal = normalize(\n clamp(tbnX * tx, -1.0, 1.0) * weights.x +\n clamp(tbnY * ty, -1.0, 1.0) * weights.y +\n clamp(tbnZ * tz, -1.0, 1.0) * weights.z\n );\n return vec4(worldNormal, 0.0);\n}\n\nvec4 _Triplanar(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) {\n vec4 dx = texture(tex, vec3(pos.zy / _TRI_SCALE, texSlice));\n vec4 dy = texture(tex, vec3(pos.xz / _TRI_SCALE, texSlice));\n vec4 dz = texture(tex, vec3(pos.xy / _TRI_SCALE, texSlice));\n\n vec3 weights = abs(normal.xyz);\n weights = weights / (weights.x + weights.y + weights.z);\n\n return dx * weights.x + dy * weights.y + dz * weights.z;\n}\n\nvec4 _TriplanarN(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) {\n vec2 uvx = pos.zy;\n vec2 uvy = pos.xz;\n vec2 uvz = pos.xy;\n vec3 tx = texture(tex, vec3(uvx / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n vec3 ty = texture(tex, vec3(uvy / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n vec3 tz = texture(tex, vec3(uvz / _TRI_SCALE, texSlice)).xyz * vec3(2,2,2) - vec3(1,1,1);\n\n vec3 weights = abs(normal.xyz);\n weights *= weights;\n weights = weights / (weights.x + weights.y + weights.z);\n\n vec3 axis = sign(normal);\n vec3 tangentX = normalize(cross(normal, vec3(0.0, axis.x, 0.0)));\n vec3 bitangentX = normalize(cross(tangentX, normal)) * axis.x;\n mat3 tbnX = mat3(tangentX, bitangentX, normal);\n\n vec3 tangentY = normalize(cross(normal, vec3(0.0, 0.0, axis.y)));\n vec3 bitangentY = normalize(cross(tangentY, normal)) * axis.y;\n mat3 tbnY = mat3(tangentY, bitangentY, normal);\n\n vec3 tangentZ = normalize(cross(normal, vec3(0.0, -axis.z, 0.0)));\n vec3 bitangentZ = normalize(-cross(tangentZ, normal)) * axis.z;\n mat3 tbnZ = mat3(tangentZ, bitangentZ, normal);\n\n vec3 worldNormal = normalize(\n clamp(tbnX * tx, -1.0, 1.0) * weights.x +\n clamp(tbnY * ty, -1.0, 1.0) * weights.y +\n clamp(tbnZ * tz, -1.0, 1.0) * weights.z);\n return vec4(worldNormal, 0.0);\n}\n\n "; +declare const PS2 = "\n\n{\n vec3 worldPosition = vCoords;\n\n float weightIndices[4] = float[4](vWeights1.x, vWeights1.y, vWeights1.z, vWeights1.w);\n float weightValues[4] = float[4](vWeights2.x, vWeights2.y, vWeights2.z, vWeights2.w);\n \n // TRIPLANAR SPLATTING w/ NORMALS & UVS\n vec3 worldSpaceNormal = normalize(vNormal);\n vec4 diffuseSamples[4];\n // vec4 normalSamples[4];\n \n for (int i = 0; i < 4; ++i) {\n vec4 d = vec4(0.0);\n // vec4 n = vec4(0.0);\n if (weightValues[i] > 0.0) {\n d = _Triplanar_UV(\n worldPosition, worldSpaceNormal, weightIndices[i], TRIPLANAR_diffuseMap);\n // n = _TriplanarN_UV(\n // worldPosition, worldSpaceNormal, weightIndices[i], TRIPLANAR_normalMap);\n \n d.w *= weightValues[i];\n // n.w = d.w;\n }\n \n diffuseSamples[i] = d;\n // normalSamples[i] = n;\n }\n \n vec4 diffuseBlended = _TerrainBlend_4(diffuseSamples);\n // vec4 normalBlended = _TerrainBlend_4(normalSamples);\n diffuseColor = sRGBToLinear(diffuseBlended);\n // normal = normalBlended.xyz;\n}\n\n "; +export { VS, PS, VS1, VS2, PS1, PS2, }; diff --git a/packages/client/dist/terrain-shader.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js similarity index 99% rename from packages/client/dist/terrain-shader.js rename to packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js index 4cdd62f6..b1fc0d16 100644 --- a/packages/client/dist/terrain-shader.js +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js @@ -453,3 +453,4 @@ const PS2 = ` `; export { VS, PS, VS1, VS2, PS1, PS2, }; +//# sourceMappingURL=terrain-shader.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js.map b/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js.map new file mode 100644 index 00000000..d80d2311 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-shader.js","sourceRoot":"","sources":["../../src/scripts/terrain-shader.ts"],"names":[],"mappings":"AACA,MAAM,GAAG,GAAG;;;;;;;;;;;;CAYX,CAAC;AAGF,MAAM,GAAG,GAAG;;;;;;CAMX,CAAC;AAEF,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BR,CAAC;AAGJ,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4MR,CAAC;AAGJ,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmKT,CAAC;AAEJ,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoCP,CAAC;AAIN,OAAO,EACL,EAAE,EACF,EAAE,EACF,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,GACJ,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain.d.ts b/packages/quick-3d-mmo-client/dist/scripts/terrain.d.ts new file mode 100644 index 00000000..29b7f8af --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain.d.ts @@ -0,0 +1,35 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { TerrainChunkRebuilder_Threaded } from './terrain-builder-threaded'; +declare class TerrainChunkManager extends Component { + _params: any; + _material: THREE.MeshStandardMaterial; + _builder: TerrainChunkRebuilder_Threaded; + heightGenerator_: any; + _biomes: any; + _biomesParams: any; + _colourNoise: any; + _colourNoiseParams: { + octaves: number; + persistence: number; + lacunarity: number; + exponentiation: number; + scale: number; + noiseType: string; + seed: number; + height: number; + }; + _groups: THREE.Group[]; + _chunks: any; + constructor(params: any); + _Init(params: any): void; + _InitNoise(): void; + _InitBiomes(params: any): void; + _InitTerrain(params: any): void; + _CreateTerrainChunk(group: any, groupTransform: any, offset: any, width: any, resolution: any): any; + GetHeight(pos: any): any; + GetBiomeAt(pos: any): any; + Update(_: any): void; + _UpdateVisibleChunks_Quadtree(target: any): void; +} +export { TerrainChunkManager }; diff --git a/packages/client/dist/terrain.js b/packages/quick-3d-mmo-client/dist/scripts/terrain.js similarity index 99% rename from packages/client/dist/terrain.js rename to packages/quick-3d-mmo-client/dist/scripts/terrain.js index bb52c873..0def3a8a 100644 --- a/packages/client/dist/terrain.js +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain.js @@ -6,7 +6,7 @@ import { TerrainChunkRebuilder_Threaded } from './terrain-builder-threaded'; import { TextureSplatter } from './texture-splatter'; import { TextureAtlas } from './textures'; import { utils } from './utils'; -import { Noise as aNoise, TerrainHeight, TerrainConstants } from 'shared'; +import { Noise as aNoise, TerrainHeight, TerrainConstants } from '@quick-3d-mmo/shared'; const { QT_MIN_CELL_SIZE, QT_MIN_CELL_RESOLUTION, PLANET_RADIUS, NOISE_PARAMS, HeightGenerator, Noise, } = Object.assign(Object.assign(Object.assign({}, aNoise), TerrainHeight), TerrainConstants); class TerrainChunkManager extends Component { constructor(params) { @@ -224,3 +224,4 @@ class TerrainChunkManager extends Component { } } export { TerrainChunkManager }; +//# sourceMappingURL=terrain.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain.js.map b/packages/quick-3d-mmo-client/dist/scripts/terrain.js.map new file mode 100644 index 00000000..b1f760ea --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain.js","sourceRoot":"","sources":["../../src/scripts/terrain.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/terrain.worker.js b/packages/quick-3d-mmo-client/dist/scripts/terrain.worker.js new file mode 100644 index 00000000..6aa8690b --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain.worker.js @@ -0,0 +1,271 @@ +import * as THREE from 'three'; +import { TextureSplatter } from './texture-splatter'; +import { TerrainHeight, Noise as aNoise, Math as math } from '@quick-3d-mmo/shared'; +const { Noise, HeightGenerator } = Object.assign(Object.assign({}, TerrainHeight), aNoise); +class _TerrainBuilderThreadedWorker { + constructor() { + } + Init(params) { + this._params = params; + this._params.offset = new THREE.Vector3(params.offset[0], params.offset[1], params.offset[2]); + this._params.noise = new Noise(params.noiseParams); + this._params.heightGenerators = [new HeightGenerator()]; + this._params.biomeGenerator = new Noise(params.biomesParams); + this._params.colourNoise = new Noise(params.colourNoiseParams); + this._params.colourGenerator = new TextureSplatter({ + biomeGenerator: this._params.biomeGenerator, + colourNoise: this._params.colourNoise + }); + } + _GenerateHeight(v) { + return this._params.heightGenerators[0].Get(v.x, v.y, v.z)[0]; + } + Rebuild() { + var _a, _b, _c; + const _D = new THREE.Vector3(); + const _D1 = new THREE.Vector3(); + const _D2 = new THREE.Vector3(); + const _P = new THREE.Vector3(); + const _H = new THREE.Vector3(); + const _W = new THREE.Vector3(); + const _S = new THREE.Vector3(); + const _C = new THREE.Vector3(); + const _N = new THREE.Vector3(); + const _N1 = new THREE.Vector3(); + const _N2 = new THREE.Vector3(); + const _N3 = new THREE.Vector3(); + const positions = []; + const colors = []; + const up = []; + const coords = []; + const uvs = []; + const weights1 = []; + const weights2 = []; + const indices = []; + const wsPositions = []; + const resolution = this._params.resolution + 2; + const radius = this._params.radius; + const offset = this._params.offset; + const width = this._params.width; + const half = width / 2; + const effectiveResolution = resolution - 2; + for (let x = -1; x <= effectiveResolution + 1; x++) { + let xp = width * math.sat(x / effectiveResolution); + for (let y = -1; y <= effectiveResolution + 1; y++) { + let yp = width * math.sat(y / effectiveResolution); + // Compute position + _P.set(xp - half, 0.0, yp - half); + _P.add(offset); + _D.set(0, 1, 0); + // Keep the absolute world space position to sample noise + _W.copy(_P); + // Purturb height along z-vector + const height = this._GenerateHeight(_W); + _H.copy(_D); + _H.multiplyScalar(height); + _P.add(_H); + positions.push(_P.x, _P.y, _P.z); + _C.copy(_W); + _C.add(_H); + coords.push(_C.x, _C.y, _C.z); + _S.set(_W.x, _W.y, height); + const color = this._params.colourGenerator.GetColour(_S); + colors.push(color.r, color.g, color.b); + up.push(_D.x, _D.y, _D.z); + wsPositions.push(_W.x, _W.z, height); + // TODO GUI + uvs.push(_P.x / 200.0, _P.y / 200.0); + } + } + for (let i = 0; i < resolution; i++) { + for (let j = 0; j < resolution; j++) { + indices.push(i * (resolution + 1) + j, (i + 1) * (resolution + 1) + j + 1, i * (resolution + 1) + j + 1); + indices.push((i + 1) * (resolution + 1) + j, (i + 1) * (resolution + 1) + j + 1, i * (resolution + 1) + j); + } + } + const normals = new Array(up.length).fill(0.0); + for (let i = 0, n = indices.length; i < n; i += 3) { + const i1 = indices[i] * 3; + const i2 = indices[i + 1] * 3; + const i3 = indices[i + 2] * 3; + _N1.fromArray(positions, i1); + _N2.fromArray(positions, i2); + _N3.fromArray(positions, i3); + _D1.subVectors(_N3, _N2); + _D2.subVectors(_N1, _N2); + _D1.cross(_D2); + normals[i1] += _D1.x; + normals[i2] += _D1.x; + normals[i3] += _D1.x; + normals[i1 + 1] += _D1.y; + normals[i2 + 1] += _D1.y; + normals[i3 + 1] += _D1.y; + normals[i1 + 2] += _D1.z; + normals[i2 + 2] += _D1.z; + normals[i3 + 2] += _D1.z; + } + // Fix the skirt + const _ApplyFix = (x, y, xp, yp) => { + const skirtIndex = x * (resolution + 1) + y; + const proxyIndex = xp * (resolution + 1) + yp; + positions[skirtIndex * 3 + 1] -= 10; + // Normal will be fucked, copy it from proxy point + normals[skirtIndex * 3 + 0] = normals[proxyIndex * 3 + 0]; + normals[skirtIndex * 3 + 1] = normals[proxyIndex * 3 + 1]; + normals[skirtIndex * 3 + 2] = normals[proxyIndex * 3 + 2]; + }; + for (let y = 0; y <= resolution; ++y) { + _ApplyFix(0, y, 1, y); + } + for (let y = 0; y <= resolution; ++y) { + _ApplyFix(resolution, y, resolution - 1, y); + } + for (let x = 0; x <= resolution; ++x) { + _ApplyFix(x, 0, x, 1); + } + for (let x = 0; x <= resolution; ++x) { + _ApplyFix(x, resolution, x, resolution - 1); + } + for (let i = 0, n = normals.length; i < n; i += 3) { + _N.fromArray(normals, i); + _N.normalize(); + normals[i] = _N.x; + normals[i + 1] = _N.y; + normals[i + 2] = _N.z; + } + for (let i = 0, n = indices.length; i < n; i += 3) { + const splats = []; + const i1 = indices[i] * 3; + const i2 = indices[i + 1] * 3; + const i3 = indices[i + 2] * 3; + const indexes = [i1, i2, i3]; + for (let j = 0; j < 3; j++) { + const j1 = indexes[j]; + _P.fromArray(wsPositions, j1); + _N.fromArray(normals, j1); + _D.fromArray(up, j1); + const s = this._params.colourGenerator.GetSplat(_P, _N, _D); + splats.push(s); + } + const splatStrengths = {}; + for (let k in splats[0]) { + splatStrengths[k] = { key: k, strength: 0.0 }; + } + for (let curSplat of splats) { + for (let k in curSplat) { + splatStrengths[k].strength += curSplat[k].strength; + } + } + let typeValues = Object.values(splatStrengths); + typeValues.sort((a, b) => { + if (a.strength < b.strength) { + return 1; + } + if (a.strength > b.strength) { + return -1; + } + return 0; + }); + const w1 = indices[i] * 4; + const w2 = indices[i + 1] * 4; + const w3 = indices[i + 2] * 4; + for (let s = 0; s < 3; s++) { + let total = (((_c = (_a = splats === null || splats === void 0 ? void 0 : splats[s]) === null || _a === void 0 ? void 0 : _a[(_b = typeValues === null || typeValues === void 0 ? void 0 : typeValues[0]) === null || _b === void 0 ? void 0 : _b.key]) === null || _c === void 0 ? void 0 : _c.strength) + + splats[s][typeValues === null || typeValues === void 0 ? void 0 : typeValues[1].key].strength + + splats[s][typeValues[2].key].strength + + splats[s][typeValues[3].key].strength); + const normalization = 1.0 / total; + splats[s][typeValues[0].key].strength *= normalization; + splats[s][typeValues[1].key].strength *= normalization; + splats[s][typeValues[2].key].strength *= normalization; + splats[s][typeValues[3].key].strength *= normalization; + } + weights1.push(splats[0][typeValues[3].key].index); + weights1.push(splats[0][typeValues[2].key].index); + weights1.push(splats[0][typeValues[1].key].index); + weights1.push(splats[0][typeValues[0].key].index); + weights1.push(splats[1][typeValues[3].key].index); + weights1.push(splats[1][typeValues[2].key].index); + weights1.push(splats[1][typeValues[1].key].index); + weights1.push(splats[1][typeValues[0].key].index); + weights1.push(splats[2][typeValues[3].key].index); + weights1.push(splats[2][typeValues[2].key].index); + weights1.push(splats[2][typeValues[1].key].index); + weights1.push(splats[2][typeValues[0].key].index); + weights2.push(splats[0][typeValues[3].key].strength); + weights2.push(splats[0][typeValues[2].key].strength); + weights2.push(splats[0][typeValues[1].key].strength); + weights2.push(splats[0][typeValues[0].key].strength); + weights2.push(splats[1][typeValues[3].key].strength); + weights2.push(splats[1][typeValues[2].key].strength); + weights2.push(splats[1][typeValues[1].key].strength); + weights2.push(splats[1][typeValues[0].key].strength); + weights2.push(splats[2][typeValues[3].key].strength); + weights2.push(splats[2][typeValues[2].key].strength); + weights2.push(splats[2][typeValues[1].key].strength); + weights2.push(splats[2][typeValues[0].key].strength); + } + function _Unindex(src, stride) { + const dst = []; + for (let i = 0, n = indices.length; i < n; i += 3) { + const i1 = indices[i] * stride; + const i2 = indices[i + 1] * stride; + const i3 = indices[i + 2] * stride; + for (let j = 0; j < stride; j++) { + dst.push(src[i1 + j]); + } + for (let j = 0; j < stride; j++) { + dst.push(src[i2 + j]); + } + for (let j = 0; j < stride; j++) { + dst.push(src[i3 + j]); + } + } + return dst; + } + const uiPositions = _Unindex(positions, 3); + const uiColours = _Unindex(colors, 3); + const uiNormals = _Unindex(normals, 3); + const uiCoords = _Unindex(coords, 3); + const uiUVs = _Unindex(uvs, 2); + const uiWeights1 = weights1; + const uiWeights2 = weights2; + const bytesInFloat32 = 4; + const positionsArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiPositions.length)); + const coloursArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiColours.length)); + const normalsArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiNormals.length)); + const coordsArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiCoords.length)); + const uvsArray = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiUVs.length)); + const weights1Array = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); + const weights2Array = new Float32Array(new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); + positionsArray.set(uiPositions, 0); + coloursArray.set(uiColours, 0); + normalsArray.set(uiNormals, 0); + uvsArray.set(uiUVs, 0); + coordsArray.set(uiCoords, 0); + weights1Array.set(uiWeights1, 0); + weights2Array.set(uiWeights2, 0); + return { + positions: positionsArray, + colours: coloursArray, + uvs: uvsArray, + normals: normalsArray, + coords: coordsArray, + weights1: weights1Array, + weights2: weights2Array, + }; + } +} + +export default () => { + const _CHUNK = new _TerrainBuilderThreadedWorker(); + self.onmessage = (msg) => { + if (msg.data.subject == 'build_chunk') { + _CHUNK.Init(msg.data.params); + const rebuiltData = _CHUNK.Rebuild(); + self.postMessage({ subject: 'build_chunk_result', data: rebuiltData }, null); + } + }; +} + +//# sourceMappingURL=terrain-builder-threaded-worker.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/test.d.ts b/packages/quick-3d-mmo-client/dist/scripts/test.d.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/client/dist/test.js b/packages/quick-3d-mmo-client/dist/scripts/test.js similarity index 58% rename from packages/client/dist/test.js rename to packages/quick-3d-mmo-client/dist/scripts/test.js index ca273e18..7569a1d1 100644 --- a/packages/client/dist/test.js +++ b/packages/quick-3d-mmo-client/dist/scripts/test.js @@ -1,2 +1,3 @@ // We got nothing. // lol nope. from: Jeremy +//# sourceMappingURL=test.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/test.js.map b/packages/quick-3d-mmo-client/dist/scripts/test.js.map new file mode 100644 index 00000000..ba7b1469 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/scripts/test.ts"],"names":[],"mappings":"AAGA,kBAAkB;AAClB,yBAAyB"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.d.ts b/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.d.ts new file mode 100644 index 00000000..28f453c4 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.d.ts @@ -0,0 +1,78 @@ +declare class TextureSplatter { + _colourSpline: any[]; + _oceanSpline: any; + _params: any; + constructor(params: any); + _BaseColour(x: any, y: any, z: any): any; + _Colour(x: number, y: number, z: number): any; + _GetTextureWeights(p: any, n: any, up: any): { + dirt: { + index: number; + strength: number; + }; + grass: { + index: number; + strength: number; + }; + gravel: { + index: number; + strength: number; + }; + rock: { + index: number; + strength: number; + }; + snow: { + index: number; + strength: number; + }; + snowrock: { + index: number; + strength: number; + }; + cobble: { + index: number; + strength: number; + }; + sandyrock: { + index: number; + strength: number; + }; + }; + GetColour(position: any): any; + GetSplat(position: any, normal: any, up: any): { + dirt: { + index: number; + strength: number; + }; + grass: { + index: number; + strength: number; + }; + gravel: { + index: number; + strength: number; + }; + rock: { + index: number; + strength: number; + }; + snow: { + index: number; + strength: number; + }; + snowrock: { + index: number; + strength: number; + }; + cobble: { + index: number; + strength: number; + }; + sandyrock: { + index: number; + strength: number; + }; + }; +} +export { TextureSplatter }; diff --git a/packages/client/dist/texture-splatter.js b/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js similarity index 97% rename from packages/client/dist/texture-splatter.js rename to packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js index 1175e856..084af44c 100644 --- a/packages/client/dist/texture-splatter.js +++ b/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js @@ -1,5 +1,5 @@ import * as THREE from 'three'; -import { Spline, TerrainConstants, Math as math } from 'shared'; +import { Spline, TerrainConstants, Math as math } from '@quick-3d-mmo/shared'; const { LinearSpline, NOISE_HEIGHT } = Object.assign(Object.assign({}, Spline), TerrainConstants); const _HEIGHT_NORMALIZATION = NOISE_HEIGHT / 10.0; const _WHITE = new THREE.Color(0x808080); @@ -117,3 +117,4 @@ class TextureSplatter { } } export { TextureSplatter }; +//# sourceMappingURL=texture-splatter.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js.map b/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js.map new file mode 100644 index 00000000..a03570f2 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"texture-splatter.js","sourceRoot":"","sources":["../../src/scripts/texture-splatter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/textures.d.ts b/packages/quick-3d-mmo-client/dist/scripts/textures.d.ts new file mode 100644 index 00000000..3848948b --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/textures.d.ts @@ -0,0 +1,16 @@ +import * as THREE from 'three'; +declare class TextureAtlas { + onLoad: () => void; + _threejs: any; + _manager: THREE.LoadingManager; + _loader: THREE.TextureLoader; + _textures: {}; + constructor(params: any); + Load(atlas: any, names: any): void; + _Create(): void; + get Info(): {}; + _LoadTexture(n: any): any; + _OnLoad(): void; + _LoadAtlas(atlas: any, names: any): void; +} +export { TextureAtlas }; diff --git a/packages/client/dist/textures.js b/packages/quick-3d-mmo-client/dist/scripts/textures.js similarity index 98% rename from packages/client/dist/textures.js rename to packages/quick-3d-mmo-client/dist/scripts/textures.js index 42e1f8de..0072d72a 100644 --- a/packages/client/dist/textures.js +++ b/packages/quick-3d-mmo-client/dist/scripts/textures.js @@ -66,3 +66,4 @@ class TextureAtlas { } } export { TextureAtlas }; +//# sourceMappingURL=textures.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/textures.js.map b/packages/quick-3d-mmo-client/dist/scripts/textures.js.map new file mode 100644 index 00000000..e849a564 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/textures.js.map @@ -0,0 +1 @@ +{"version":3,"file":"textures.js","sourceRoot":"","sources":["../../src/scripts/textures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,2DAA2D;AAC3D,SAAS,aAAa,CAAC,KAAK;IAC1B,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE7B,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,YAAY;IAMhB,YAAY,MAAM;QAChB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,KAAK;QACf,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,CAAC;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;QAChC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO;QACL,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;YAErE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;gBAErC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aAChC;YAED,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtF,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC;YACtC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,wBAAwB,CAAC;YACnD,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;YACvC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC;YACrC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC;YACrC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAEtC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;YAEvB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;SACvB;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,KAAK,EAAE,KAAK;QACrB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;YACtB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9C,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;CACF;AAED,OAAO,EACL,YAAY,EACb,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.d.ts b/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.d.ts new file mode 100644 index 00000000..2a1e7ccb --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.d.ts @@ -0,0 +1,13 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +declare class ThirdPersonCamera extends Component { + _params: any; + _camera: any; + _currentPosition: THREE.Vector3; + _currentLookat: THREE.Vector3; + constructor(params: any); + _CalculateIdealOffset(): any; + _CalculateIdealLookat(): any; + Update(timeElapsed: any): void; +} +export { ThirdPersonCamera }; diff --git a/packages/client/dist/third-person-camera.js b/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js similarity index 94% rename from packages/client/dist/third-person-camera.js rename to packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js index b7f0c221..a42a590d 100644 --- a/packages/client/dist/third-person-camera.js +++ b/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js @@ -1,6 +1,6 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; const { KNOWN_ENTITIES } = Constants; class ThirdPersonCamera extends Component { constructor(params) { @@ -37,3 +37,4 @@ class ThirdPersonCamera extends Component { } } export { ThirdPersonCamera }; +//# sourceMappingURL=third-person-camera.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js.map b/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js.map new file mode 100644 index 00000000..d7dd76e5 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js.map @@ -0,0 +1 @@ +{"version":3,"file":"third-person-camera.js","sourceRoot":"","sources":["../../src/scripts/third-person-camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;AAErC,MAAM,iBAAkB,SAAQ,SAAS;IAKvC,YAAY,MAAM;QAChB,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,qBAAqB;QACnB,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QAC5F,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAEjF,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,qBAAqB;QACnB,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAEjD,kBAAkB;QAClB,+BAA+B;QAC/B,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,OAAO,EACL,iBAAiB,EAClB,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/threejs_component.d.ts b/packages/quick-3d-mmo-client/dist/scripts/threejs_component.d.ts new file mode 100644 index 00000000..803711bc --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/threejs_component.d.ts @@ -0,0 +1,14 @@ +import * as THREE from 'three'; +import { Component } from "./entity"; +declare class ThreeJSController extends Component { + threejs_: THREE.WebGLRenderer; + camera_: THREE.PerspectiveCamera; + scene_: THREE.Scene; + sun_: THREE.DirectionalLight; + constructor(); + InitEntity(): void; + _OnWindowResize(): void; + LoadSky_(): void; + Update(_: any): void; +} +export { ThreeJSController }; diff --git a/packages/client/dist/threejs_component.js b/packages/quick-3d-mmo-client/dist/scripts/threejs_component.js similarity index 98% rename from packages/client/dist/threejs_component.js rename to packages/quick-3d-mmo-client/dist/scripts/threejs_component.js index b07499b0..b6f180b1 100644 --- a/packages/client/dist/threejs_component.js +++ b/packages/quick-3d-mmo-client/dist/scripts/threejs_component.js @@ -1,5 +1,5 @@ import * as THREE from 'three'; -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; import { Component } from "./entity"; const { DOM_IDS } = Constants; const _VS = ` @@ -162,3 +162,4 @@ class ThreeJSController extends Component { } } export { ThreeJSController }; +//# sourceMappingURL=threejs_component.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/threejs_component.js.map b/packages/quick-3d-mmo-client/dist/scripts/threejs_component.js.map new file mode 100644 index 00000000..2cbc6744 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/threejs_component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"threejs_component.js","sourceRoot":"","sources":["../../src/scripts/threejs_component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/ui-controller.d.ts b/packages/quick-3d-mmo-client/dist/scripts/ui-controller.d.ts new file mode 100644 index 00000000..8431ede8 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/ui-controller.d.ts @@ -0,0 +1,30 @@ +import { Component } from './entity'; +declare class UIController extends Component { + _params: any; + _quests: {}; + iconBar_: { + stats: HTMLElement; + inventory: HTMLElement; + quests: HTMLElement; + }; + _ui: { + inventory: HTMLElement; + stats: HTMLElement; + quests: HTMLElement; + }; + chatElement_: HTMLInputElement; + constructor(params: any); + InitComponent(): void; + FadeoutLogin(): void; + OnChatKeyDown_(evt: any): void; + AddQuest(quest: any): void; + AddEventMessages(events: any): void; + AddChatMessage(msg: any): void; + OnQuestSelected_(id: any): void; + HideUI_(): void; + OnQuestsClicked_(msg: any): void; + OnStatsClicked_(msg: any): void; + OnInventoryClicked_(msg: any): void; + Update(timeInSeconds: any): void; +} +export { UIController }; diff --git a/packages/client/dist/ui-controller.js b/packages/quick-3d-mmo-client/dist/scripts/ui-controller.js similarity index 98% rename from packages/client/dist/ui-controller.js rename to packages/quick-3d-mmo-client/dist/scripts/ui-controller.js index 77de4aef..47e300a4 100644 --- a/packages/client/dist/ui-controller.js +++ b/packages/quick-3d-mmo-client/dist/scripts/ui-controller.js @@ -1,4 +1,4 @@ -import { Constants } from 'shared'; +import { Constants } from '@quick-3d-mmo/shared'; import { Component } from './entity'; const { DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES } = Constants; class UIController extends Component { @@ -129,3 +129,4 @@ class UIController extends Component { } ; export { UIController }; +//# sourceMappingURL=ui-controller.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/ui-controller.js.map b/packages/quick-3d-mmo-client/dist/scripts/ui-controller.js.map new file mode 100644 index 00000000..993d2157 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/ui-controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ui-controller.js","sourceRoot":"","sources":["../../src/scripts/ui-controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/utils.d.ts b/packages/quick-3d-mmo-client/dist/scripts/utils.d.ts new file mode 100644 index 00000000..04f3731d --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/utils.d.ts @@ -0,0 +1,4 @@ +export declare const utils: { + DictIntersection: (dictA: any, dictB: any) => {}; + DictDifference: (dictA: any, dictB: any) => any; +}; diff --git a/packages/client/dist/utils.js b/packages/quick-3d-mmo-client/dist/scripts/utils.js similarity index 94% rename from packages/client/dist/utils.js rename to packages/quick-3d-mmo-client/dist/scripts/utils.js index 22e38f6b..25322980 100644 --- a/packages/client/dist/utils.js +++ b/packages/quick-3d-mmo-client/dist/scripts/utils.js @@ -18,3 +18,4 @@ export const utils = (function () { } }; })(); +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/scripts/utils.js.map b/packages/quick-3d-mmo-client/dist/scripts/utils.js.map new file mode 100644 index 00000000..b678f324 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/scripts/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC;IACpB,OAAO;QACL,gBAAgB,EAAE,UAAS,KAAK,EAAE,KAAK;YACrC,MAAM,YAAY,GAAG,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;gBACnB,IAAI,CAAC,IAAI,KAAK,EAAE;oBACd,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC5B;aACF;YACD,OAAO,YAAY,CAAA;QACrB,CAAC;QAED,cAAc,EAAE,UAAS,KAAK,EAAE,KAAK;YACnC,MAAM,IAAI,qBAAO,KAAK,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;gBACnB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/dist/tsconfig.tsbuildinfo b/packages/quick-3d-mmo-client/dist/tsconfig.tsbuildinfo new file mode 100644 index 00000000..6b9ee171 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/tsconfig.tsbuildinfo @@ -0,0 +1,1833 @@ +{ + "program": { + "fileInfos": { + "../../../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "signature": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../../../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../../../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../../../node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../../../node_modules/typescript/lib/lib.es2019.d.ts": { + "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "affectsGlobalScope": false + }, + "../../../node_modules/typescript/lib/lib.es2020.d.ts": { + "version": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "signature": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "affectsGlobalScope": false + }, + "../../../node_modules/typescript/lib/lib.esnext.d.ts": { + "version": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "signature": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "affectsGlobalScope": false + }, + "../../../node_modules/typescript/lib/lib.dom.d.ts": { + "version": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "signature": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2019.array.d.ts": { + "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2019.object.d.ts": { + "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2019.string.d.ts": { + "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { + "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2020.promise.d.ts": { + "version": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "signature": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts": { + "version": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", + "signature": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2020.string.d.ts": { + "version": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "signature": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": { + "version": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "signature": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.es2020.intl.d.ts": { + "version": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", + "signature": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.esnext.string.d.ts": { + "version": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "signature": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.esnext.promise.d.ts": { + "version": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "signature": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "affectsGlobalScope": true + }, + "../../../node_modules/typescript/lib/lib.esnext.weakref.d.ts": { + "version": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", + "signature": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", + "affectsGlobalScope": true + }, + "../src/scripts/entity.ts": { + "version": "feb26e98e9385f26d2e65370974d6d29f898f6cbc55a4c08c80915618aad9e60", + "signature": "ebd2e0805e353ae4f46f7a57fbe3fa12e3a209229a3239f32093a2c1682606a6", + "affectsGlobalScope": false + }, + "../../shared/src/constants.ts": { + "version": "e4cfa8135f1bdd39755ab0d6e40ada0dc62d7b79ac688b9af1a85294a9a0692a", + "affectsGlobalScope": false + }, + "../../shared/src/defs.ts": { + "version": "f8347fc0a72850791eb98e99a993501fff2e86a45aa7e3f93dce50b016702867", + "affectsGlobalScope": false + }, + "../../shared/src/math.ts": { + "version": "3d8383c2056b4abbde276f415ce7da6be79a01c52bb3373642ff88521d23a0c4", + "affectsGlobalScope": false + }, + "../../shared/src/entity-manager.ts": { + "version": "e0e5715b91b5043c4f4c88a0466bc1f63d2db98efebd23d6cfc17c52da4304d5", + "affectsGlobalScope": false + }, + "../../shared/src/spatial-hash-grid.ts": { + "version": "145b52cfc588e9602b6957faf2719a3946029478c1c034adcd9be3d320d68bc2", + "affectsGlobalScope": false + }, + "../../shared/src/simplex-noise.ts": { + "version": "9d46fb7195fd47f74ceb2de8620b0e68edc598101c547265ce9270c380d826f2", + "affectsGlobalScope": false + }, + "../../shared/src/noise.ts": { + "version": "da104448d4e8980a224ce8eb50055f648a98e24406d6e01473eb5b858850738c", + "affectsGlobalScope": false + }, + "../../shared/src/terrain-constants.ts": { + "version": "7a715dfc01f25d93bc1b37d284455f5795d8ef68980377c04d86002fa5056e3d", + "affectsGlobalScope": false + }, + "../../shared/src/terrain-height.ts": { + "version": "b0272188f97de9f2072fae1d3fa3a89b3a8866d69934f2e97bfb6357b2222767", + "affectsGlobalScope": false + }, + "../../shared/src/spline.ts": { + "version": "32b2e5e577d4da4ac28058a9b6684e473dce3a9363648b54ca3d26586cf80e22", + "affectsGlobalScope": false + }, + "../../shared/src/dat.gui.module.ts": { + "version": "4f98e1c85c584893dbe04ce665eef4f804e7689497cb58398b78d17cba8b71c5", + "affectsGlobalScope": false + }, + "../../shared/src/globaltypes.ts": { + "version": "eb4c1f4c99e94e80a96c809bc6c34ca33faa72f2c44e72f1e886260a9fee1dc2", + "affectsGlobalScope": false + }, + "../../shared/src/index.ts": { + "version": "77381fe571194ecee7e299b96562fb892dae6e533678a5680c781f3a34a55fbf", + "affectsGlobalScope": false + }, + "../src/scripts/attacker-controller.ts": { + "version": "1727997033931ffbbb6b3c09099edfde2e81ba262db81602166389bde05ca147", + "signature": "3008b9d239ed1f5477ed3c901ea41185589bae8af131f09fc6ee483cd9a6920a", + "affectsGlobalScope": false + }, + "../src/scripts/particle-system.ts": { + "version": "cf1593c6c0da15ccc61189fb893de6ac3854c2d6c5734c6740d83974306b7d08", + "signature": "2a8d5d59927a24de9e1cced76cbcada9380c1c8aaee15d5a32742fe2d7aae711", + "affectsGlobalScope": false + }, + "../src/scripts/blood-effect.ts": { + "version": "c29b16dd30ef7befd5b5468c969610b3fed1b6abc6db0b13ab87d36508919629", + "signature": "3c4c7766906ead4ea77d8175d179e2ba685990f0c06d9d9d5e52af89f76615db", + "affectsGlobalScope": false + }, + "../src/scripts/equip-weapon-component.ts": { + "version": "4f4fb01c983e729511feb23397da0b683206b80d503822cb445b07b930c96d79", + "signature": "84ca5c323d5b872bf6beb59924663613269ab6d0da39ce60c75937a03d701d88", + "affectsGlobalScope": false + }, + "../src/scripts/finite-state-machine.ts": { + "version": "9dfaf55f08c9fe5907c1f94959906441d4273c23ba72151fcbd07a49bf657486", + "signature": "45c926521079c512410477f4b4e1d187439cb4dd049121f7cd13e787bc45e254", + "affectsGlobalScope": false + }, + "../src/scripts/floating-name.ts": { + "version": "9507cd5c828c0d4df55bdc2287d7ec9a06c3f2d3fcc7bfedc9b53813cd63558f", + "signature": "4d7dbcb07cd9912421c37949cb4a53702ac6575e6700f1dcfdf68ad5f99ffe75", + "affectsGlobalScope": false + }, + "../src/scripts/gltf-component.ts": { + "version": "6022feb5ded339e79ed8485ef427cd25e06a8d6ace46e590e1747defe7bbd5b1", + "signature": "9cf21b3554e383e0af6702f4bb86e6c447701af5a00693abc77acfec0e927041", + "affectsGlobalScope": false + }, + "../src/scripts/health-bar.ts": { + "version": "18412f90f975d5441d374f912563b2daaf1253cbc556daae38b6162590eea603", + "signature": "c4ea58878e3c3d0bc715863e80e19e9f0138ab06d0b1463c328c0610cf83a91f", + "affectsGlobalScope": false + }, + "../src/scripts/health-component.ts": { + "version": "faee6e9a9f0dbedc4a109759cc3e4be952c44441743c6767846376c0aecb277b", + "signature": "4d2c4dc167b15b41e787506127ed4c6c9039abda2fcb5e978032b260c429e821", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/component-emitter/index.d.ts": { + "version": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "signature": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "affectsGlobalScope": false + }, + "../../../node_modules/socket.io-parser/dist/index.d.ts": { + "version": "6ce9c4c7d976960a7f14dfe40e26c357bcab9405eb2eea38f79760ed4f323512", + "signature": "6ce9c4c7d976960a7f14dfe40e26c357bcab9405eb2eea38f79760ed4f323512", + "affectsGlobalScope": false + }, + "../../../node_modules/socket.io-client/build/typed-events.d.ts": { + "version": "f5ce15fe46e74c4cabdee08f22df1b4ae2c2bfd6978f101f95e6fcd5a2fec8ef", + "signature": "f5ce15fe46e74c4cabdee08f22df1b4ae2c2bfd6978f101f95e6fcd5a2fec8ef", + "affectsGlobalScope": false + }, + "../../../node_modules/socket.io-client/build/socket.d.ts": { + "version": "e2b6b0fa7b4255a2d76ec93678344908e72a36737eea79900dfddd3cf143458b", + "signature": "e2b6b0fa7b4255a2d76ec93678344908e72a36737eea79900dfddd3cf143458b", + "affectsGlobalScope": false + }, + "../../../node_modules/socket.io-client/build/manager.d.ts": { + "version": "cf4f61fa7851dbe8ad051d16d9f782da530e4f13793d3da266d91c4fb52941b3", + "signature": "cf4f61fa7851dbe8ad051d16d9f782da530e4f13793d3da266d91c4fb52941b3", + "affectsGlobalScope": false + }, + "../../../node_modules/socket.io-client/build/index.d.ts": { + "version": "e4f701ad984ce784f6d40c65955103a9341a694917915a5d32128e5b53a97019", + "signature": "e4f701ad984ce784f6d40c65955103a9341a694917915a5d32128e5b53a97019", + "affectsGlobalScope": false + }, + "../src/scripts/index.ts": { + "version": "5b9b9c131bd49b87c8a88898bdd44d1925752f62d1f7b37e851b5055bdb5a5c4", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "../src/scripts/inventory-controller.ts": { + "version": "8acd4c012a0cda987d4e2608f8b8f29fa9a0c1916783b39797992dcc655b650d", + "signature": "c06b8445e929246268fdfcba64b8ace80c7a0700a92c5c25230ae6c2c8aef7ca", + "affectsGlobalScope": false + }, + "../src/scripts/level-up-component.ts": { + "version": "a5cff58c740bc65d707b3afdaa6c73a774ea1ea846ca7214cf7d4faf41052b32", + "signature": "2c4b80a356eda6f06270fbef98f8b9ac3b2f06f6e0a758c16929425d00743d5e", + "affectsGlobalScope": false + }, + "../src/scripts/load-controller.ts": { + "version": "29d44026fdb298ee73b52a2c4223582262daeb8aa7ac9af3228c5961b5ec0281", + "signature": "e263cb36f66185c05eceb1604fddb947d5f0b5c7f42756bed9e21671f68e96e1", + "affectsGlobalScope": false + }, + "../src/scripts/loading-manager.ts": { + "version": "87693af4ad9f7abc91f4365297e6858ad9d89cce3054ae90905b8f0af53f6b6c", + "signature": "3991f641735f7997859be8c0142530c098f60a14868a34c1cd48ca9c53235f35", + "affectsGlobalScope": false + }, + "../src/scripts/ui-controller.ts": { + "version": "3c03ef8ac3f5f4ddf22ac55a63fa538cc64e93e177643d8919d08c14584e28ae", + "signature": "dce085d2e2fd9745962f6f254eb6597255419682869091b49c669f7f81c1fe8a", + "affectsGlobalScope": false + }, + "../src/scripts/network-controller.ts": { + "version": "a661ccc22d547b3c8ec731855117dcf548b9239b8709fb401450a44d02581333", + "signature": "604deb8ec847655e4f2bda945b06ef7a641f967d73fcd484b9c81eab82bede93", + "affectsGlobalScope": false + }, + "../src/scripts/render-component.ts": { + "version": "7fdd0c3e210bb786717633a3ff0eccfb1b447069c506db5f6a01e607be081798", + "signature": "9f724189af2e0a32446cca8d200bcbcdd1eb5d0f71531bcf1d61d948aeab3209", + "affectsGlobalScope": false + }, + "../src/scripts/spatial-grid-controller.ts": { + "version": "1926091e34fbb000130d37e6adfd364563033e31035e730dfa9f4cd5fbe7fa84", + "signature": "20c44268ce1df8309dde05b3c755cf4c1e6c3eb9547cfaac4f26fa8428ad2e27", + "affectsGlobalScope": false + }, + "../src/scripts/scenery-controller.ts": { + "version": "ae4716dc31f34887f6155d4d1c17b6ea5a6546b6d4a5eaabaa8f7b0474c6366a", + "signature": "f49b839c5cec310003f6726e04f69cb66aef57dc6856ff04654d23cf72733265", + "affectsGlobalScope": false + }, + "../src/scripts/third-person-camera.ts": { + "version": "e07e5414195514e1d682475edaaa9d47cb64139e4d996403c053e988c01e262e", + "signature": "cc7d0f8e5ce5f4bc0192ab12f822e125e2340399eb979d76714a0e9c0e18d389", + "affectsGlobalScope": false + }, + "../src/scripts/player-state.ts": { + "version": "bc5fad7b012373d3e393bd1b60a1a621ee78bb7922d200159557fd2b5a5524fa", + "signature": "7024931512df3beb919c3471dc0d2e7a3946891e73199c14a4e951c07f4abc69", + "affectsGlobalScope": false + }, + "../src/scripts/player-entity.ts": { + "version": "339ddf91dad62345300cfc34697406fad4d6d4571bd514868a8b81032b56b406", + "signature": "c970657dfe843fbccea57b35cdbadfc74fc4648281dd999028f7e6dd031cacb6", + "affectsGlobalScope": false + }, + "../src/scripts/player-input.ts": { + "version": "f731b272380506fc91bd81c1234a2407dcb03823af5bb4c94191be96ada3d860", + "signature": "e6d9b80ecb0288a061c568d32c9e1edb7b2d725f29c52fbcddd175196e67e44d", + "affectsGlobalScope": false + }, + "../src/scripts/npc-entity.ts": { + "version": "4a48cc65ee7815cfcd07dba0911c4ced7407d776e6ce1000d96311d31dcd955f", + "signature": "d1875d77566074d603e4e61252fe77c3194febac18f32b84cd8ac9546a29fb05", + "affectsGlobalScope": false + }, + "../src/scripts/network-entity-controller.ts": { + "version": "6343b645324e29db5f0242a387127cc2343b1567553634c0e1564e7e04317ef4", + "signature": "7453cbcd702ef09de43097d726c9d2fb906e5fb77dde0dd34581d07faa6d3c98", + "affectsGlobalScope": false + }, + "../src/scripts/network-player-controller.ts": { + "version": "f8b552fb4f80328dfbd514b1f68f127c92f6b01d5ac05feebb1e0ed82fc10b66", + "signature": "a9cbd39d1958921068e81058cef68b735d34bb58b30fd0a9f06a86c9d144971f", + "affectsGlobalScope": false + }, + "../src/scripts/sorceror-effect.ts": { + "version": "dd130f7e56e494129659a97894f42e599d4e8433a2c304ffd5760eca19a44a2f", + "signature": "cd40674b063bd90a8582e9b0e84e7d3a0832e7660961d1f652cf71a8558dd1a3", + "affectsGlobalScope": false + }, + "../src/scripts/spawners.ts": { + "version": "148204d77539445ae034323267a1fae614bbacebe3b7e5d2c32529feee9862fb", + "signature": "6df9fde6cee8966e81b0f9ebd9fa5ab8cea758516911c83bf62955c525fcc7f6", + "affectsGlobalScope": false + }, + "../src/scripts/quadtree.ts": { + "version": "72303a2de8621f5422f072e24ef22eb5fb2e9a62956947263ddcb147f903ac03", + "signature": "7277474dc5cce0f73faa6b61b8d782f7c8f91492e6f78540216f81bce677b7d1", + "affectsGlobalScope": false + }, + "../src/scripts/terrain-shader.ts": { + "version": "94eeb5db70a2383f010a5d2730bfbc9e3edeebaf48cb8dc5f564cf9f2b9c2dab", + "signature": "7ddde5052b7e9979338ef87062dc021615b4c9300e7499a016914e01302db2ba", + "affectsGlobalScope": false + }, + "../src/scripts/terrain-chunk.ts": { + "version": "e74e3213cc316b5c7f2c7f912e55ac86d6b7b2aa1c80db53facaed5fd3077fcf", + "signature": "36ee4f4a2222173611d29c85c85fb2f38a29d7a034dbb45841a72725c5b28fb6", + "affectsGlobalScope": false + }, + "../src/scripts/terrain-builder-threaded.ts": { + "version": "7269e14e945179a0214a9d0d818bdb44286b15097dcc10dd254030ee41a5e0be", + "signature": "4df168e08f898e056d6b80a3df949bf65f31a1bcf1aa155342885b18f8ecd939", + "affectsGlobalScope": false + }, + "../src/scripts/texture-splatter.ts": { + "version": "4c7bc3f5c6dc18ea4f92754d7b1db96b3e23317c1ae3ad29bc1703f530eda464", + "signature": "93e7ffc1c21e1d0fcb20b85afce8ead367d49090b93512bcbc6b85844b15d84d", + "affectsGlobalScope": false + }, + "../src/scripts/textures.ts": { + "version": "98bdfaf03fd17e3d935af7e0b137215db142c18f6ea46a13ce60aee309a022e6", + "signature": "5e27364db404e0b2ad3bee6125a9a2a15c023303a76496db3e5148e955801887", + "affectsGlobalScope": false + }, + "../src/scripts/utils.ts": { + "version": "b85ec48aa97b7755146660d6d7dae992eab8a84a237ad498265d8ecd3eadf9ba", + "signature": "72faae70aa639e63605180e56095c216687d40108a3997b88b05ab110b5d67b1", + "affectsGlobalScope": false + }, + "../src/scripts/terrain.ts": { + "version": "5289ec9983aea579bfa266b5b6758d5d232b181408b5e187d555e668e9600047", + "signature": "5bd5dddb648085563aa65db8ea99081ebc17776a1784ebafecb4b1fc060ab2f6", + "affectsGlobalScope": false + }, + "../src/scripts/threejs_component.ts": { + "version": "d6646cd2a8bd63e3f15c029d782696bc8b315ec14c51e2ef0086aad7a7159408", + "signature": "e55111d4d858243e943b780285203cbc56fe1b337f9435c24f57d306631d9cc6", + "affectsGlobalScope": false + }, + "../src/scripts/main.ts": { + "version": "dd2444acfe142ccfa18530ac4e82c53bf5dea9955488762295b47bc3e8593e07", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "../src/scripts/quest-component.ts": { + "version": "8e6473d6842e60c474b21e22f41f645827001a8d51007f54ca41e5c4dc174b72", + "signature": "fbb56a45784aa25173405258ae8843cc29e173bea0006f70a583e69eedd8d641", + "affectsGlobalScope": false + }, + "../src/scripts/terrain-builder-threaded-worker.ts": { + "version": "53d269343a6da8f59ab2f7104313cffc044b28467c28f9de52b26e00d7b3bddc", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "../src/scripts/terrain-builder.ts": { + "version": "9743fca94492506a91f7ea764e2ef239381dccb3e80afd7f6f34d9f0a14ceb29", + "signature": "5d2115ea335bcb5b094ce912ec290a96452e109480cb33886704b350ea6af46e", + "affectsGlobalScope": false + }, + "../src/scripts/test.ts": { + "version": "6702d16e432fee60416dc4748d3e226f109466bb2203ec5772555c4db5608c15", + "signature": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/cookie/index.d.ts": { + "version": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "signature": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/cors/index.d.ts": { + "version": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "signature": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/eslint/helpers.d.ts": { + "version": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46", + "signature": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46", + "affectsGlobalScope": true + }, + "../../../node_modules/@types/eslint/lib/rules/index.d.ts": { + "version": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0", + "signature": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/json-schema/index.d.ts": { + "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/estree/index.d.ts": { + "version": "f1e8ecd1d960d12e57316fd2889b0a57635f38f8c4c976d8deafa29650bbf320", + "signature": "f1e8ecd1d960d12e57316fd2889b0a57635f38f8c4c976d8deafa29650bbf320", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/eslint/index.d.ts": { + "version": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c", + "signature": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/eslint-scope/index.d.ts": { + "version": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed", + "signature": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/globals.d.ts": { + "version": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "signature": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "affectsGlobalScope": true + }, + "../../../node_modules/@types/node/async_hooks.d.ts": { + "version": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "signature": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/buffer.d.ts": { + "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/child_process.d.ts": { + "version": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "signature": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/cluster.d.ts": { + "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/console.d.ts": { + "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "affectsGlobalScope": true + }, + "../../../node_modules/@types/node/constants.d.ts": { + "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/crypto.d.ts": { + "version": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "signature": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/dgram.d.ts": { + "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/dns.d.ts": { + "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/domain.d.ts": { + "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "affectsGlobalScope": true + }, + "../../../node_modules/@types/node/events.d.ts": { + "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "affectsGlobalScope": true + }, + "../../../node_modules/@types/node/fs.d.ts": { + "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/fs/promises.d.ts": { + "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/http.d.ts": { + "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/http2.d.ts": { + "version": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "signature": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/https.d.ts": { + "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/inspector.d.ts": { + "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/module.d.ts": { + "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/net.d.ts": { + "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/os.d.ts": { + "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/path.d.ts": { + "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/perf_hooks.d.ts": { + "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/process.d.ts": { + "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "affectsGlobalScope": true + }, + "../../../node_modules/@types/node/punycode.d.ts": { + "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/querystring.d.ts": { + "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/readline.d.ts": { + "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/repl.d.ts": { + "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/stream.d.ts": { + "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/string_decoder.d.ts": { + "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/timers.d.ts": { + "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/tls.d.ts": { + "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/trace_events.d.ts": { + "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/tty.d.ts": { + "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/url.d.ts": { + "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/util.d.ts": { + "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/v8.d.ts": { + "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/vm.d.ts": { + "version": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "signature": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/worker_threads.d.ts": { + "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/zlib.d.ts": { + "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../../../node_modules/@types/node/wasi.d.ts": { + "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/ts3.6/base.d.ts": { + "version": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "signature": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/assert.d.ts": { + "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/base.d.ts": { + "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/node/index.d.ts": { + "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/minimatch/index.d.ts": { + "version": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "signature": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/glob/index.d.ts": { + "version": "393137c76bd922ba70a2f8bf1ade4f59a16171a02fb25918c168d48875b0cfb0", + "signature": "393137c76bd922ba70a2f8bf1ade4f59a16171a02fb25918c168d48875b0cfb0", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/html-minifier-terser/index.d.ts": { + "version": "6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d", + "signature": "6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/json5/index.d.ts": { + "version": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538", + "signature": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/minimist/index.d.ts": { + "version": "e437d83044ba17246a861aa9691aa14223ff4a9d6f338ab1269c41c758586a88", + "signature": "e437d83044ba17246a861aa9691aa14223ff4a9d6f338ab1269c41c758586a88", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/normalize-package-data/index.d.ts": { + "version": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", + "signature": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", + "affectsGlobalScope": false + }, + "../../../node_modules/@types/parse-json/index.d.ts": { + "version": "2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b", + "signature": "2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b", + "affectsGlobalScope": false + } + }, + "options": { + "target": 2, + "module": 99, + "lib": [ + "lib.esnext.d.ts", + "lib.dom.d.ts" + ], + "strict": false, + "moduleResolution": 2, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "outDir": "./", + "resolveJsonModule": true, + "composite": true, + "sourceMap": true, + "baseUrl": "..", + "configFilePath": "../tsconfig.json" + }, + "referencedMap": { + "../../../node_modules/@types/cors/index.d.ts": [ + "../../../node_modules/@types/node/http.d.ts" + ], + "../../../node_modules/@types/eslint-scope/index.d.ts": [ + "../../../node_modules/@types/eslint/index.d.ts", + "../../../node_modules/@types/estree/index.d.ts" + ], + "../../../node_modules/@types/eslint/index.d.ts": [ + "../../../node_modules/@types/eslint/helpers.d.ts", + "../../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../../node_modules/@types/estree/index.d.ts", + "../../../node_modules/@types/json-schema/index.d.ts" + ], + "../../../node_modules/@types/eslint/lib/rules/index.d.ts": [ + "../../../node_modules/@types/eslint/index.d.ts" + ], + "../../../node_modules/@types/glob/index.d.ts": [ + "../../../node_modules/@types/minimatch/index.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/index.d.ts" + ], + "../../../node_modules/@types/node/assert.d.ts": [ + "../../../node_modules/@types/node/assert.d.ts" + ], + "../../../node_modules/@types/node/async_hooks.d.ts": [ + "../../../node_modules/@types/node/async_hooks.d.ts" + ], + "../../../node_modules/@types/node/base.d.ts": [ + "../../../node_modules/@types/node/assert.d.ts", + "../../../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../../../node_modules/@types/node/buffer.d.ts": [ + "../../../node_modules/@types/node/buffer.d.ts" + ], + "../../../node_modules/@types/node/child_process.d.ts": [ + "../../../node_modules/@types/node/child_process.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/stream.d.ts" + ], + "../../../node_modules/@types/node/cluster.d.ts": [ + "../../../node_modules/@types/node/child_process.d.ts", + "../../../node_modules/@types/node/cluster.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/net.d.ts" + ], + "../../../node_modules/@types/node/console.d.ts": [ + "../../../node_modules/@types/node/util.d.ts" + ], + "../../../node_modules/@types/node/constants.d.ts": [ + "../../../node_modules/@types/node/constants.d.ts", + "../../../node_modules/@types/node/crypto.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/os.d.ts" + ], + "../../../node_modules/@types/node/crypto.d.ts": [ + "../../../node_modules/@types/node/crypto.d.ts", + "../../../node_modules/@types/node/stream.d.ts" + ], + "../../../node_modules/@types/node/dgram.d.ts": [ + "../../../node_modules/@types/node/dgram.d.ts", + "../../../node_modules/@types/node/dns.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/net.d.ts" + ], + "../../../node_modules/@types/node/dns.d.ts": [ + "../../../node_modules/@types/node/dns.d.ts" + ], + "../../../node_modules/@types/node/domain.d.ts": [ + "../../../node_modules/@types/node/domain.d.ts", + "../../../node_modules/@types/node/events.d.ts" + ], + "../../../node_modules/@types/node/events.d.ts": [ + "../../../node_modules/@types/node/events.d.ts" + ], + "../../../node_modules/@types/node/fs.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/fs/promises.d.ts": [ + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts" + ], + "../../../node_modules/@types/node/http.d.ts": [ + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/http2.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/http2.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/tls.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/https.d.ts": [ + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/https.d.ts", + "../../../node_modules/@types/node/tls.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/index.d.ts": [ + "../../../node_modules/@types/node/base.d.ts" + ], + "../../../node_modules/@types/node/inspector.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/inspector.d.ts" + ], + "../../../node_modules/@types/node/module.d.ts": [ + "../../../node_modules/@types/node/module.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/net.d.ts": [ + "../../../node_modules/@types/node/dns.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/stream.d.ts" + ], + "../../../node_modules/@types/node/os.d.ts": [ + "../../../node_modules/@types/node/os.d.ts" + ], + "../../../node_modules/@types/node/path.d.ts": [ + "../../../node_modules/@types/node/path.d.ts" + ], + "../../../node_modules/@types/node/perf_hooks.d.ts": [ + "../../../node_modules/@types/node/async_hooks.d.ts", + "../../../node_modules/@types/node/perf_hooks.d.ts" + ], + "../../../node_modules/@types/node/process.d.ts": [ + "../../../node_modules/@types/node/tty.d.ts" + ], + "../../../node_modules/@types/node/punycode.d.ts": [ + "../../../node_modules/@types/node/punycode.d.ts" + ], + "../../../node_modules/@types/node/querystring.d.ts": [ + "../../../node_modules/@types/node/querystring.d.ts" + ], + "../../../node_modules/@types/node/readline.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/readline.d.ts" + ], + "../../../node_modules/@types/node/repl.d.ts": [ + "../../../node_modules/@types/node/readline.d.ts", + "../../../node_modules/@types/node/repl.d.ts", + "../../../node_modules/@types/node/util.d.ts", + "../../../node_modules/@types/node/vm.d.ts" + ], + "../../../node_modules/@types/node/stream.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/stream.d.ts" + ], + "../../../node_modules/@types/node/string_decoder.d.ts": [ + "../../../node_modules/@types/node/string_decoder.d.ts" + ], + "../../../node_modules/@types/node/timers.d.ts": [ + "../../../node_modules/@types/node/timers.d.ts" + ], + "../../../node_modules/@types/node/tls.d.ts": [ + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/tls.d.ts" + ], + "../../../node_modules/@types/node/trace_events.d.ts": [ + "../../../node_modules/@types/node/trace_events.d.ts" + ], + "../../../node_modules/@types/node/ts3.6/base.d.ts": [ + "../../../node_modules/@types/node/async_hooks.d.ts", + "../../../node_modules/@types/node/buffer.d.ts", + "../../../node_modules/@types/node/child_process.d.ts", + "../../../node_modules/@types/node/cluster.d.ts", + "../../../node_modules/@types/node/console.d.ts", + "../../../node_modules/@types/node/constants.d.ts", + "../../../node_modules/@types/node/crypto.d.ts", + "../../../node_modules/@types/node/dgram.d.ts", + "../../../node_modules/@types/node/dns.d.ts", + "../../../node_modules/@types/node/domain.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts", + "../../../node_modules/@types/node/globals.d.ts", + "../../../node_modules/@types/node/globals.global.d.ts", + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/http2.d.ts", + "../../../node_modules/@types/node/https.d.ts", + "../../../node_modules/@types/node/inspector.d.ts", + "../../../node_modules/@types/node/module.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/os.d.ts", + "../../../node_modules/@types/node/path.d.ts", + "../../../node_modules/@types/node/perf_hooks.d.ts", + "../../../node_modules/@types/node/process.d.ts", + "../../../node_modules/@types/node/punycode.d.ts", + "../../../node_modules/@types/node/querystring.d.ts", + "../../../node_modules/@types/node/readline.d.ts", + "../../../node_modules/@types/node/repl.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/string_decoder.d.ts", + "../../../node_modules/@types/node/timers.d.ts", + "../../../node_modules/@types/node/tls.d.ts", + "../../../node_modules/@types/node/trace_events.d.ts", + "../../../node_modules/@types/node/tty.d.ts", + "../../../node_modules/@types/node/url.d.ts", + "../../../node_modules/@types/node/util.d.ts", + "../../../node_modules/@types/node/v8.d.ts", + "../../../node_modules/@types/node/vm.d.ts", + "../../../node_modules/@types/node/wasi.d.ts", + "../../../node_modules/@types/node/worker_threads.d.ts", + "../../../node_modules/@types/node/zlib.d.ts" + ], + "../../../node_modules/@types/node/tty.d.ts": [ + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/tty.d.ts" + ], + "../../../node_modules/@types/node/url.d.ts": [ + "../../../node_modules/@types/node/querystring.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/util.d.ts": [ + "../../../node_modules/@types/node/util.d.ts" + ], + "../../../node_modules/@types/node/v8.d.ts": [ + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/v8.d.ts" + ], + "../../../node_modules/@types/node/vm.d.ts": [ + "../../../node_modules/@types/node/vm.d.ts" + ], + "../../../node_modules/@types/node/wasi.d.ts": [ + "../../../node_modules/@types/node/wasi.d.ts" + ], + "../../../node_modules/@types/node/worker_threads.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/url.d.ts", + "../../../node_modules/@types/node/vm.d.ts", + "../../../node_modules/@types/node/worker_threads.d.ts" + ], + "../../../node_modules/@types/node/zlib.d.ts": [ + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/zlib.d.ts" + ], + "../../../node_modules/socket.io-client/build/index.d.ts": [ + "../../../node_modules/socket.io-client/build/manager.d.ts", + "../../../node_modules/socket.io-client/build/socket.d.ts", + "../../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../../node_modules/socket.io-client/build/manager.d.ts": [ + "../../../node_modules/socket.io-client/build/socket.d.ts", + "../../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../../node_modules/socket.io-client/build/socket.d.ts": [ + "../../../node_modules/socket.io-client/build/manager.d.ts", + "../../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../../node_modules/socket.io-client/build/typed-events.d.ts": [ + "../../../node_modules/@types/component-emitter/index.d.ts" + ], + "../../../node_modules/socket.io-parser/dist/index.d.ts": [ + "../../../node_modules/@types/component-emitter/index.d.ts" + ], + "../src/scripts/attacker-controller.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/blood-effect.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts", + "../src/scripts/particle-system.ts" + ], + "../src/scripts/equip-weapon-component.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/floating-name.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/gltf-component.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/health-bar.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/health-component.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/index.ts": [ + "../../../node_modules/socket.io-client/build/index.d.ts", + "../../shared/src/index.ts" + ], + "../src/scripts/inventory-controller.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/level-up-component.ts": [ + "../src/scripts/entity.ts", + "../src/scripts/particle-system.ts" + ], + "../src/scripts/load-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/main.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts", + "../src/scripts/inventory-controller.ts", + "../src/scripts/level-up-component.ts", + "../src/scripts/load-controller.ts", + "../src/scripts/network-controller.ts", + "../src/scripts/scenery-controller.ts", + "../src/scripts/spawners.ts", + "../src/scripts/terrain.ts", + "../src/scripts/threejs_component.ts", + "../src/scripts/ui-controller.ts" + ], + "../src/scripts/network-controller.ts": [ + "../../../node_modules/socket.io-client/build/index.d.ts", + "../../shared/src/index.ts", + "../src/scripts/entity.ts", + "../src/scripts/ui-controller.ts" + ], + "../src/scripts/network-entity-controller.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/network-player-controller.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/npc-entity.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts", + "../src/scripts/player-entity.ts" + ], + "../src/scripts/player-entity.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts", + "../src/scripts/finite-state-machine.ts", + "../src/scripts/player-state.ts" + ], + "../src/scripts/player-input.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/player-state.ts": [ + "../../shared/src/index.ts" + ], + "../src/scripts/quest-component.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/render-component.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/scenery-controller.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts", + "../src/scripts/render-component.ts", + "../src/scripts/spatial-grid-controller.ts" + ], + "../src/scripts/sorceror-effect.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts", + "../src/scripts/particle-system.ts" + ], + "../src/scripts/spatial-grid-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/spawners.ts": [ + "../../shared/src/index.ts", + "../src/scripts/attacker-controller.ts", + "../src/scripts/blood-effect.ts", + "../src/scripts/entity.ts", + "../src/scripts/equip-weapon-component.ts", + "../src/scripts/floating-name.ts", + "../src/scripts/health-component.ts", + "../src/scripts/inventory-controller.ts", + "../src/scripts/network-entity-controller.ts", + "../src/scripts/network-player-controller.ts", + "../src/scripts/npc-entity.ts", + "../src/scripts/player-entity.ts", + "../src/scripts/player-input.ts", + "../src/scripts/sorceror-effect.ts", + "../src/scripts/spatial-grid-controller.ts", + "../src/scripts/third-person-camera.ts" + ], + "../src/scripts/terrain-builder-threaded-worker.ts": [ + "../../shared/src/index.ts", + "../src/scripts/texture-splatter.ts" + ], + "../src/scripts/terrain-builder-threaded.ts": [ + "../src/scripts/terrain-chunk.ts" + ], + "../src/scripts/terrain-builder.ts": [ + "../src/scripts/terrain-chunk.ts" + ], + "../src/scripts/terrain.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts", + "../src/scripts/quadtree.ts", + "../src/scripts/terrain-builder-threaded.ts", + "../src/scripts/terrain-shader.ts", + "../src/scripts/texture-splatter.ts", + "../src/scripts/textures.ts", + "../src/scripts/utils.ts" + ], + "../src/scripts/texture-splatter.ts": [ + "../../shared/src/index.ts" + ], + "../src/scripts/third-person-camera.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/threejs_component.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/ui-controller.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../../shared/src/defs.ts": [ + "../../shared/src/constants.ts" + ], + "../../shared/src/globaltypes.ts": [ + "../../shared/src/constants.ts" + ], + "../../shared/src/index.ts": [ + "../../shared/src/constants.ts", + "../../shared/src/dat.gui.module.ts", + "../../shared/src/defs.ts", + "../../shared/src/entity-manager.ts", + "../../shared/src/globaltypes.ts", + "../../shared/src/math.ts", + "../../shared/src/noise.ts", + "../../shared/src/spatial-hash-grid.ts", + "../../shared/src/spline.ts", + "../../shared/src/terrain-constants.ts", + "../../shared/src/terrain-height.ts" + ], + "../../shared/src/noise.ts": [ + "../../shared/src/simplex-noise.ts" + ], + "../../shared/src/spatial-hash-grid.ts": [ + "../../shared/src/math.ts" + ], + "../../shared/src/terrain-height.ts": [ + "../../shared/src/noise.ts", + "../../shared/src/terrain-constants.ts" + ] + }, + "exportedModulesMap": { + "../../../node_modules/@types/cors/index.d.ts": [ + "../../../node_modules/@types/node/http.d.ts" + ], + "../../../node_modules/@types/eslint-scope/index.d.ts": [ + "../../../node_modules/@types/eslint/index.d.ts", + "../../../node_modules/@types/estree/index.d.ts" + ], + "../../../node_modules/@types/eslint/index.d.ts": [ + "../../../node_modules/@types/eslint/helpers.d.ts", + "../../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../../node_modules/@types/estree/index.d.ts", + "../../../node_modules/@types/json-schema/index.d.ts" + ], + "../../../node_modules/@types/eslint/lib/rules/index.d.ts": [ + "../../../node_modules/@types/eslint/index.d.ts" + ], + "../../../node_modules/@types/glob/index.d.ts": [ + "../../../node_modules/@types/minimatch/index.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/index.d.ts" + ], + "../../../node_modules/@types/node/assert.d.ts": [ + "../../../node_modules/@types/node/assert.d.ts" + ], + "../../../node_modules/@types/node/async_hooks.d.ts": [ + "../../../node_modules/@types/node/async_hooks.d.ts" + ], + "../../../node_modules/@types/node/base.d.ts": [ + "../../../node_modules/@types/node/assert.d.ts", + "../../../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../../../node_modules/@types/node/buffer.d.ts": [ + "../../../node_modules/@types/node/buffer.d.ts" + ], + "../../../node_modules/@types/node/child_process.d.ts": [ + "../../../node_modules/@types/node/child_process.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/stream.d.ts" + ], + "../../../node_modules/@types/node/cluster.d.ts": [ + "../../../node_modules/@types/node/child_process.d.ts", + "../../../node_modules/@types/node/cluster.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/net.d.ts" + ], + "../../../node_modules/@types/node/console.d.ts": [ + "../../../node_modules/@types/node/util.d.ts" + ], + "../../../node_modules/@types/node/constants.d.ts": [ + "../../../node_modules/@types/node/constants.d.ts", + "../../../node_modules/@types/node/crypto.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/os.d.ts" + ], + "../../../node_modules/@types/node/crypto.d.ts": [ + "../../../node_modules/@types/node/crypto.d.ts", + "../../../node_modules/@types/node/stream.d.ts" + ], + "../../../node_modules/@types/node/dgram.d.ts": [ + "../../../node_modules/@types/node/dgram.d.ts", + "../../../node_modules/@types/node/dns.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/net.d.ts" + ], + "../../../node_modules/@types/node/dns.d.ts": [ + "../../../node_modules/@types/node/dns.d.ts" + ], + "../../../node_modules/@types/node/domain.d.ts": [ + "../../../node_modules/@types/node/domain.d.ts", + "../../../node_modules/@types/node/events.d.ts" + ], + "../../../node_modules/@types/node/events.d.ts": [ + "../../../node_modules/@types/node/events.d.ts" + ], + "../../../node_modules/@types/node/fs.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/fs/promises.d.ts": [ + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts" + ], + "../../../node_modules/@types/node/http.d.ts": [ + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/http2.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/http2.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/tls.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/https.d.ts": [ + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/https.d.ts", + "../../../node_modules/@types/node/tls.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/index.d.ts": [ + "../../../node_modules/@types/node/base.d.ts" + ], + "../../../node_modules/@types/node/inspector.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/inspector.d.ts" + ], + "../../../node_modules/@types/node/module.d.ts": [ + "../../../node_modules/@types/node/module.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/net.d.ts": [ + "../../../node_modules/@types/node/dns.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/stream.d.ts" + ], + "../../../node_modules/@types/node/os.d.ts": [ + "../../../node_modules/@types/node/os.d.ts" + ], + "../../../node_modules/@types/node/path.d.ts": [ + "../../../node_modules/@types/node/path.d.ts" + ], + "../../../node_modules/@types/node/perf_hooks.d.ts": [ + "../../../node_modules/@types/node/async_hooks.d.ts", + "../../../node_modules/@types/node/perf_hooks.d.ts" + ], + "../../../node_modules/@types/node/process.d.ts": [ + "../../../node_modules/@types/node/tty.d.ts" + ], + "../../../node_modules/@types/node/punycode.d.ts": [ + "../../../node_modules/@types/node/punycode.d.ts" + ], + "../../../node_modules/@types/node/querystring.d.ts": [ + "../../../node_modules/@types/node/querystring.d.ts" + ], + "../../../node_modules/@types/node/readline.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/readline.d.ts" + ], + "../../../node_modules/@types/node/repl.d.ts": [ + "../../../node_modules/@types/node/readline.d.ts", + "../../../node_modules/@types/node/repl.d.ts", + "../../../node_modules/@types/node/util.d.ts", + "../../../node_modules/@types/node/vm.d.ts" + ], + "../../../node_modules/@types/node/stream.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/stream.d.ts" + ], + "../../../node_modules/@types/node/string_decoder.d.ts": [ + "../../../node_modules/@types/node/string_decoder.d.ts" + ], + "../../../node_modules/@types/node/timers.d.ts": [ + "../../../node_modules/@types/node/timers.d.ts" + ], + "../../../node_modules/@types/node/tls.d.ts": [ + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/tls.d.ts" + ], + "../../../node_modules/@types/node/trace_events.d.ts": [ + "../../../node_modules/@types/node/trace_events.d.ts" + ], + "../../../node_modules/@types/node/ts3.6/base.d.ts": [ + "../../../node_modules/@types/node/async_hooks.d.ts", + "../../../node_modules/@types/node/buffer.d.ts", + "../../../node_modules/@types/node/child_process.d.ts", + "../../../node_modules/@types/node/cluster.d.ts", + "../../../node_modules/@types/node/console.d.ts", + "../../../node_modules/@types/node/constants.d.ts", + "../../../node_modules/@types/node/crypto.d.ts", + "../../../node_modules/@types/node/dgram.d.ts", + "../../../node_modules/@types/node/dns.d.ts", + "../../../node_modules/@types/node/domain.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts", + "../../../node_modules/@types/node/globals.d.ts", + "../../../node_modules/@types/node/globals.global.d.ts", + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/http2.d.ts", + "../../../node_modules/@types/node/https.d.ts", + "../../../node_modules/@types/node/inspector.d.ts", + "../../../node_modules/@types/node/module.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/os.d.ts", + "../../../node_modules/@types/node/path.d.ts", + "../../../node_modules/@types/node/perf_hooks.d.ts", + "../../../node_modules/@types/node/process.d.ts", + "../../../node_modules/@types/node/punycode.d.ts", + "../../../node_modules/@types/node/querystring.d.ts", + "../../../node_modules/@types/node/readline.d.ts", + "../../../node_modules/@types/node/repl.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/string_decoder.d.ts", + "../../../node_modules/@types/node/timers.d.ts", + "../../../node_modules/@types/node/tls.d.ts", + "../../../node_modules/@types/node/trace_events.d.ts", + "../../../node_modules/@types/node/tty.d.ts", + "../../../node_modules/@types/node/url.d.ts", + "../../../node_modules/@types/node/util.d.ts", + "../../../node_modules/@types/node/v8.d.ts", + "../../../node_modules/@types/node/vm.d.ts", + "../../../node_modules/@types/node/wasi.d.ts", + "../../../node_modules/@types/node/worker_threads.d.ts", + "../../../node_modules/@types/node/zlib.d.ts" + ], + "../../../node_modules/@types/node/tty.d.ts": [ + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/tty.d.ts" + ], + "../../../node_modules/@types/node/url.d.ts": [ + "../../../node_modules/@types/node/querystring.d.ts", + "../../../node_modules/@types/node/url.d.ts" + ], + "../../../node_modules/@types/node/util.d.ts": [ + "../../../node_modules/@types/node/util.d.ts" + ], + "../../../node_modules/@types/node/v8.d.ts": [ + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/v8.d.ts" + ], + "../../../node_modules/@types/node/vm.d.ts": [ + "../../../node_modules/@types/node/vm.d.ts" + ], + "../../../node_modules/@types/node/wasi.d.ts": [ + "../../../node_modules/@types/node/wasi.d.ts" + ], + "../../../node_modules/@types/node/worker_threads.d.ts": [ + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/url.d.ts", + "../../../node_modules/@types/node/vm.d.ts", + "../../../node_modules/@types/node/worker_threads.d.ts" + ], + "../../../node_modules/@types/node/zlib.d.ts": [ + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/zlib.d.ts" + ], + "../../../node_modules/socket.io-client/build/index.d.ts": [ + "../../../node_modules/socket.io-client/build/manager.d.ts", + "../../../node_modules/socket.io-client/build/socket.d.ts", + "../../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../../node_modules/socket.io-client/build/manager.d.ts": [ + "../../../node_modules/socket.io-client/build/socket.d.ts", + "../../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../../node_modules/socket.io-client/build/socket.d.ts": [ + "../../../node_modules/socket.io-client/build/manager.d.ts", + "../../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../../node_modules/socket.io-client/build/typed-events.d.ts": [ + "../../../node_modules/@types/component-emitter/index.d.ts" + ], + "../../../node_modules/socket.io-parser/dist/index.d.ts": [ + "../../../node_modules/@types/component-emitter/index.d.ts" + ], + "../src/scripts/attacker-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/blood-effect.ts": [ + "../src/scripts/entity.ts", + "../src/scripts/particle-system.ts" + ], + "../src/scripts/equip-weapon-component.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/floating-name.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/gltf-component.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/health-bar.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/health-component.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/inventory-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/level-up-component.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/load-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/network-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/network-entity-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/network-player-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/npc-entity.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/player-entity.ts": [ + "../src/scripts/entity.ts", + "../src/scripts/finite-state-machine.ts" + ], + "../src/scripts/player-input.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/player-state.ts": [ + "../../shared/src/index.ts" + ], + "../src/scripts/quest-component.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/render-component.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/scenery-controller.ts": [ + "../../shared/src/index.ts", + "../src/scripts/entity.ts" + ], + "../src/scripts/sorceror-effect.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/spatial-grid-controller.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/spawners.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/terrain.ts": [ + "../src/scripts/entity.ts", + "../src/scripts/terrain-builder-threaded.ts" + ], + "../src/scripts/third-person-camera.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/threejs_component.ts": [ + "../src/scripts/entity.ts" + ], + "../src/scripts/ui-controller.ts": [ + "../src/scripts/entity.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../../../node_modules/@types/component-emitter/index.d.ts", + "../../../node_modules/@types/cookie/index.d.ts", + "../../../node_modules/@types/cors/index.d.ts", + "../../../node_modules/@types/eslint-scope/index.d.ts", + "../../../node_modules/@types/eslint/helpers.d.ts", + "../../../node_modules/@types/eslint/index.d.ts", + "../../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../../node_modules/@types/estree/index.d.ts", + "../../../node_modules/@types/glob/index.d.ts", + "../../../node_modules/@types/html-minifier-terser/index.d.ts", + "../../../node_modules/@types/json-schema/index.d.ts", + "../../../node_modules/@types/json5/index.d.ts", + "../../../node_modules/@types/minimatch/index.d.ts", + "../../../node_modules/@types/minimist/index.d.ts", + "../../../node_modules/@types/node/assert.d.ts", + "../../../node_modules/@types/node/async_hooks.d.ts", + "../../../node_modules/@types/node/base.d.ts", + "../../../node_modules/@types/node/buffer.d.ts", + "../../../node_modules/@types/node/child_process.d.ts", + "../../../node_modules/@types/node/cluster.d.ts", + "../../../node_modules/@types/node/console.d.ts", + "../../../node_modules/@types/node/constants.d.ts", + "../../../node_modules/@types/node/crypto.d.ts", + "../../../node_modules/@types/node/dgram.d.ts", + "../../../node_modules/@types/node/dns.d.ts", + "../../../node_modules/@types/node/domain.d.ts", + "../../../node_modules/@types/node/events.d.ts", + "../../../node_modules/@types/node/fs.d.ts", + "../../../node_modules/@types/node/fs/promises.d.ts", + "../../../node_modules/@types/node/globals.d.ts", + "../../../node_modules/@types/node/globals.global.d.ts", + "../../../node_modules/@types/node/http.d.ts", + "../../../node_modules/@types/node/http2.d.ts", + "../../../node_modules/@types/node/https.d.ts", + "../../../node_modules/@types/node/index.d.ts", + "../../../node_modules/@types/node/inspector.d.ts", + "../../../node_modules/@types/node/module.d.ts", + "../../../node_modules/@types/node/net.d.ts", + "../../../node_modules/@types/node/os.d.ts", + "../../../node_modules/@types/node/path.d.ts", + "../../../node_modules/@types/node/perf_hooks.d.ts", + "../../../node_modules/@types/node/process.d.ts", + "../../../node_modules/@types/node/punycode.d.ts", + "../../../node_modules/@types/node/querystring.d.ts", + "../../../node_modules/@types/node/readline.d.ts", + "../../../node_modules/@types/node/repl.d.ts", + "../../../node_modules/@types/node/stream.d.ts", + "../../../node_modules/@types/node/string_decoder.d.ts", + "../../../node_modules/@types/node/timers.d.ts", + "../../../node_modules/@types/node/tls.d.ts", + "../../../node_modules/@types/node/trace_events.d.ts", + "../../../node_modules/@types/node/ts3.6/base.d.ts", + "../../../node_modules/@types/node/tty.d.ts", + "../../../node_modules/@types/node/url.d.ts", + "../../../node_modules/@types/node/util.d.ts", + "../../../node_modules/@types/node/v8.d.ts", + "../../../node_modules/@types/node/vm.d.ts", + "../../../node_modules/@types/node/wasi.d.ts", + "../../../node_modules/@types/node/worker_threads.d.ts", + "../../../node_modules/@types/node/zlib.d.ts", + "../../../node_modules/@types/normalize-package-data/index.d.ts", + "../../../node_modules/@types/parse-json/index.d.ts", + "../../../node_modules/socket.io-client/build/index.d.ts", + "../../../node_modules/socket.io-client/build/manager.d.ts", + "../../../node_modules/socket.io-client/build/socket.d.ts", + "../../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../../node_modules/socket.io-parser/dist/index.d.ts", + "../../../node_modules/typescript/lib/lib.dom.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../../../node_modules/typescript/lib/lib.es2016.d.ts", + "../../../node_modules/typescript/lib/lib.es2017.d.ts", + "../../../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../../../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../../../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../../../node_modules/typescript/lib/lib.es2018.d.ts", + "../../../node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../../../node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../../../node_modules/typescript/lib/lib.es2019.array.d.ts", + "../../../node_modules/typescript/lib/lib.es2019.d.ts", + "../../../node_modules/typescript/lib/lib.es2019.object.d.ts", + "../../../node_modules/typescript/lib/lib.es2019.string.d.ts", + "../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts", + "../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../../../node_modules/typescript/lib/lib.es2020.d.ts", + "../../../node_modules/typescript/lib/lib.es2020.intl.d.ts", + "../../../node_modules/typescript/lib/lib.es2020.promise.d.ts", + "../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts", + "../../../node_modules/typescript/lib/lib.es2020.string.d.ts", + "../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts", + "../../../node_modules/typescript/lib/lib.es5.d.ts", + "../../../node_modules/typescript/lib/lib.esnext.d.ts", + "../../../node_modules/typescript/lib/lib.esnext.intl.d.ts", + "../../../node_modules/typescript/lib/lib.esnext.promise.d.ts", + "../../../node_modules/typescript/lib/lib.esnext.string.d.ts", + "../../../node_modules/typescript/lib/lib.esnext.weakref.d.ts", + "../src/scripts/attacker-controller.ts", + "../src/scripts/blood-effect.ts", + "../src/scripts/entity.ts", + "../src/scripts/equip-weapon-component.ts", + "../src/scripts/finite-state-machine.ts", + "../src/scripts/floating-name.ts", + "../src/scripts/gltf-component.ts", + "../src/scripts/health-bar.ts", + "../src/scripts/health-component.ts", + "../src/scripts/index.ts", + "../src/scripts/inventory-controller.ts", + "../src/scripts/level-up-component.ts", + "../src/scripts/load-controller.ts", + "../src/scripts/loading-manager.ts", + "../src/scripts/main.ts", + "../src/scripts/network-controller.ts", + "../src/scripts/network-entity-controller.ts", + "../src/scripts/network-player-controller.ts", + "../src/scripts/npc-entity.ts", + "../src/scripts/particle-system.ts", + "../src/scripts/player-entity.ts", + "../src/scripts/player-input.ts", + "../src/scripts/player-state.ts", + "../src/scripts/quadtree.ts", + "../src/scripts/quest-component.ts", + "../src/scripts/render-component.ts", + "../src/scripts/scenery-controller.ts", + "../src/scripts/sorceror-effect.ts", + "../src/scripts/spatial-grid-controller.ts", + "../src/scripts/spawners.ts", + "../src/scripts/terrain-builder-threaded-worker.ts", + "../src/scripts/terrain-builder-threaded.ts", + "../src/scripts/terrain-builder.ts", + "../src/scripts/terrain-chunk.ts", + "../src/scripts/terrain-shader.ts", + "../src/scripts/terrain.ts", + "../src/scripts/test.ts", + "../src/scripts/texture-splatter.ts", + "../src/scripts/textures.ts", + "../src/scripts/third-person-camera.ts", + "../src/scripts/threejs_component.ts", + "../src/scripts/ui-controller.ts", + "../src/scripts/utils.ts", + "../../shared/src/constants.ts", + "../../shared/src/dat.gui.module.ts", + "../../shared/src/defs.ts", + "../../shared/src/entity-manager.ts", + "../../shared/src/globaltypes.ts", + "../../shared/src/index.ts", + "../../shared/src/math.ts", + "../../shared/src/noise.ts", + "../../shared/src/simplex-noise.ts", + "../../shared/src/spatial-hash-grid.ts", + "../../shared/src/spline.ts", + "../../shared/src/terrain-constants.ts", + "../../shared/src/terrain-height.ts" + ] + }, + "version": "4.2.3" +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/package.json b/packages/quick-3d-mmo-client/package.json new file mode 100644 index 00000000..e5f22c25 --- /dev/null +++ b/packages/quick-3d-mmo-client/package.json @@ -0,0 +1,40 @@ +{ + "name": "quick-3d-mmo-client", + "version": "0.0.1", + "devDependencies": { + "@types/three": "^0.126.2", + "babel-core": "^7.0.0-beta.3", + "babel-loader": "^8.2.2", + "babel-preset-env": "^1.7.0", + "copy-webpack-plugin": "^8.1.0", + "cross-env": "^5.0.5", + "css-loader": "^5.2.0", + "expose-loader": "^2.0.0", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^5.3.1", + "http-server": "^0.12.3", + "nodemon": "^2.0.7", + "raw-loader": "^4.0.2", + "serviceworker-webpack-plugin": "^1.0.1", + "source-map-loader": "^2.0.1", + "style-loader": "^2.0.0", + "ts-loader": "^8.1.0", + "tsc-watch": "^4.2.9", + "tsconfig-paths-webpack-plugin": "^3.5.1", + "webpack": "^5.28.0", + "webpack-cli": "^4.6.0", + "webpack-dev-server": "^3.11.2", + "worker-loader": "^3.0.8" + }, + "dependencies": { + "@babel/core": "^7", + "babel": "^6.23.0", + "socket.io-client": "^4.0.0", + "three": "^0.127.0" + }, + "scripts": { + "build": "tsc --build", + "start:dev": "webpack serve --history-api-fallback --inline --progress", + "start": "webpack serve --history-api-fallback --inline --progress" + } +} diff --git a/packages/client/index.html b/packages/quick-3d-mmo-client/src/index.html similarity index 84% rename from packages/client/index.html rename to packages/quick-3d-mmo-client/src/index.html index 24fb0ad5..dbecf1a6 100644 --- a/packages/client/index.html +++ b/packages/quick-3d-mmo-client/src/index.html @@ -1,15 +1,16 @@ + SimonDev Crappy MMO - + + - +
-
-
-
+
+
+
@@ -44,13 +48,15 @@
Statistics
Strength -
How strong you are, affects how much damage you do. So blah blah if you're doing stuff then its stronger or whatever, the damage is up. This is text to show the tooltip.
+
How strong you are, affects how much damage you do. So blah blah if you're + doing stuff then its stronger or whatever, the damage is up. This is text to show the tooltip.
0
Wisdomness -
Wisdom is the guage of something to do with wisdom in the game because wisdom is important and wisdom is wise to wisdoming.
+
Wisdom is the guage of something to do with wisdom in the game because + wisdom is important and wisdom is wise to wisdoming.
0
@@ -62,13 +68,15 @@
Curl -
The ultimate expression of strength, this affects literally everything in your life.
+
The ultimate expression of strength, this affects literally everything in + your life.
0
XP -
How much xp you've accumulated by killing things for xp. Get enough and you'll gain a level or something.
+
How much xp you've accumulated by killing things for xp. Get enough and + you'll gain a level or something.
0
@@ -134,4 +142,5 @@
- + + \ No newline at end of file diff --git a/packages/client/resources/background-2.jpg b/packages/quick-3d-mmo-client/src/resources/background-2.jpg similarity index 100% rename from packages/client/resources/background-2.jpg rename to packages/quick-3d-mmo-client/src/resources/background-2.jpg diff --git a/packages/client/resources/background-3.png b/packages/quick-3d-mmo-client/src/resources/background-3.png similarity index 100% rename from packages/client/resources/background-3.png rename to packages/quick-3d-mmo-client/src/resources/background-3.png diff --git a/packages/client/resources/background.jpg b/packages/quick-3d-mmo-client/src/resources/background.jpg similarity index 100% rename from packages/client/resources/background.jpg rename to packages/quick-3d-mmo-client/src/resources/background.jpg diff --git a/packages/client/resources/characters/guard.glb b/packages/quick-3d-mmo-client/src/resources/characters/guard.glb similarity index 100% rename from packages/client/resources/characters/guard.glb rename to packages/quick-3d-mmo-client/src/resources/characters/guard.glb diff --git a/packages/client/resources/characters/paladin.glb b/packages/quick-3d-mmo-client/src/resources/characters/paladin.glb similarity index 100% rename from packages/client/resources/characters/paladin.glb rename to packages/quick-3d-mmo-client/src/resources/characters/paladin.glb diff --git a/packages/client/resources/characters/readme.txt b/packages/quick-3d-mmo-client/src/resources/characters/readme.txt similarity index 100% rename from packages/client/resources/characters/readme.txt rename to packages/quick-3d-mmo-client/src/resources/characters/readme.txt diff --git a/packages/client/resources/characters/sorceror.glb b/packages/quick-3d-mmo-client/src/resources/characters/sorceror.glb similarity index 100% rename from packages/client/resources/characters/sorceror.glb rename to packages/quick-3d-mmo-client/src/resources/characters/sorceror.glb diff --git a/packages/client/resources/characters/warrok.glb b/packages/quick-3d-mmo-client/src/resources/characters/warrok.glb similarity index 100% rename from packages/client/resources/characters/warrok.glb rename to packages/quick-3d-mmo-client/src/resources/characters/warrok.glb diff --git a/packages/client/resources/characters/zombie-guy.glb b/packages/quick-3d-mmo-client/src/resources/characters/zombie-guy.glb similarity index 100% rename from packages/client/resources/characters/zombie-guy.glb rename to packages/quick-3d-mmo-client/src/resources/characters/zombie-guy.glb diff --git a/packages/client/resources/characters/zombie.glb b/packages/quick-3d-mmo-client/src/resources/characters/zombie.glb similarity index 100% rename from packages/client/resources/characters/zombie.glb rename to packages/quick-3d-mmo-client/src/resources/characters/zombie.glb diff --git a/packages/client/resources/icons/readme.txt b/packages/quick-3d-mmo-client/src/resources/icons/readme.txt similarity index 100% rename from packages/client/resources/icons/readme.txt rename to packages/quick-3d-mmo-client/src/resources/icons/readme.txt diff --git a/packages/client/resources/icons/ui/backpack.png b/packages/quick-3d-mmo-client/src/resources/icons/ui/backpack.png similarity index 100% rename from packages/client/resources/icons/ui/backpack.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/backpack.png diff --git a/packages/client/resources/icons/ui/health-bar.png b/packages/quick-3d-mmo-client/src/resources/icons/ui/health-bar.png similarity index 100% rename from packages/client/resources/icons/ui/health-bar.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/health-bar.png diff --git a/packages/client/resources/icons/ui/inventory-character.png b/packages/quick-3d-mmo-client/src/resources/icons/ui/inventory-character.png similarity index 100% rename from packages/client/resources/icons/ui/inventory-character.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/inventory-character.png diff --git a/packages/client/resources/icons/ui/skills.png b/packages/quick-3d-mmo-client/src/resources/icons/ui/skills.png similarity index 100% rename from packages/client/resources/icons/ui/skills.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/skills.png diff --git a/packages/client/resources/icons/ui/tied-scroll.png b/packages/quick-3d-mmo-client/src/resources/icons/ui/tied-scroll.png similarity index 100% rename from packages/client/resources/icons/ui/tied-scroll.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/tied-scroll.png diff --git a/packages/client/resources/icons/weapons/hammer-64.png b/packages/quick-3d-mmo-client/src/resources/icons/weapons/hammer-64.png similarity index 100% rename from packages/client/resources/icons/weapons/hammer-64.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/hammer-64.png diff --git a/packages/client/resources/icons/weapons/pointy-sword-64.png b/packages/quick-3d-mmo-client/src/resources/icons/weapons/pointy-sword-64.png similarity index 100% rename from packages/client/resources/icons/weapons/pointy-sword-64.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/pointy-sword-64.png diff --git a/packages/client/resources/icons/weapons/pointy-sword.png b/packages/quick-3d-mmo-client/src/resources/icons/weapons/pointy-sword.png similarity index 100% rename from packages/client/resources/icons/weapons/pointy-sword.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/pointy-sword.png diff --git a/packages/client/resources/icons/weapons/thor-hammer.png b/packages/quick-3d-mmo-client/src/resources/icons/weapons/thor-hammer.png similarity index 100% rename from packages/client/resources/icons/weapons/thor-hammer.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/thor-hammer.png diff --git a/packages/client/resources/icons/weapons/war-axe-64.png b/packages/quick-3d-mmo-client/src/resources/icons/weapons/war-axe-64.png similarity index 100% rename from packages/client/resources/icons/weapons/war-axe-64.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/war-axe-64.png diff --git a/packages/client/resources/icons/weapons/war-axe.png b/packages/quick-3d-mmo-client/src/resources/icons/weapons/war-axe.png similarity index 100% rename from packages/client/resources/icons/weapons/war-axe.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/war-axe.png diff --git a/packages/client/resources/nature/Blends/BirchTree_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_1.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_2.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_3.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_4.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_5.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Autumn_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Autumn_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_1.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Autumn_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Autumn_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_2.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Autumn_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Autumn_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_3.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Autumn_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Autumn_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_4.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Autumn_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Autumn_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Autumn_5.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_1.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_2.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_3.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_4.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_5.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_Snow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_3.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_Snow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_4.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Dead_Snow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Dead_Snow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Dead_Snow_5.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Snow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Snow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_3.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Snow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Snow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_4.blend diff --git a/packages/client/resources/nature/Blends/BirchTree_Snow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/BirchTree_Snow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_Snow_5.blend diff --git a/packages/client/resources/nature/Blends/BushBerries_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BushBerries_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/BushBerries_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BushBerries_1.blend diff --git a/packages/client/resources/nature/Blends/BushBerries_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/BushBerries_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/BushBerries_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BushBerries_2.blend diff --git a/packages/client/resources/nature/Blends/Bush_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Bush_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_1.blend diff --git a/packages/client/resources/nature/Blends/Bush_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Bush_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_2.blend diff --git a/packages/client/resources/nature/Blends/Bush_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Bush_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/Bush_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Bush_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/CactusFlower_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlower_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/CactusFlower_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlower_1.blend diff --git a/packages/client/resources/nature/Blends/CactusFlowers_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/CactusFlowers_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_2.blend diff --git a/packages/client/resources/nature/Blends/CactusFlowers_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/CactusFlowers_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_3.blend diff --git a/packages/client/resources/nature/Blends/CactusFlowers_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/CactusFlowers_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_4.blend diff --git a/packages/client/resources/nature/Blends/CactusFlowers_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/CactusFlowers_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_5.blend diff --git a/packages/client/resources/nature/Blends/Cactus_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Cactus_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_1.blend diff --git a/packages/client/resources/nature/Blends/Cactus_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Cactus_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_2.blend diff --git a/packages/client/resources/nature/Blends/Cactus_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Cactus_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_3.blend diff --git a/packages/client/resources/nature/Blends/Cactus_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Cactus_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_4.blend diff --git a/packages/client/resources/nature/Blends/Cactus_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Cactus_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_5.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_1.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_2.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_3.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_4.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_5.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Autumn_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Autumn_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_1.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Autumn_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Autumn_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_2.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Autumn_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Autumn_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_3.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Autumn_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Autumn_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_4.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Autumn_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Autumn_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Autumn_5.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_1.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_2.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_3.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_4.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_5.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_Snow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_3.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_Snow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_4.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Dead_Snow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Dead_Snow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Dead_Snow_5.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Snow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Snow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_3.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Snow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Snow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_4.blend diff --git a/packages/client/resources/nature/Blends/CommonTree_Snow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/CommonTree_Snow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_Snow_5.blend diff --git a/packages/client/resources/nature/Blends/Corn_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Corn_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Corn_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Corn_1.blend diff --git a/packages/client/resources/nature/Blends/Corn_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Corn_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Corn_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Corn_2.blend diff --git a/packages/client/resources/nature/Blends/Flowers.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Flowers.blend similarity index 100% rename from packages/client/resources/nature/Blends/Flowers.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Flowers.blend diff --git a/packages/client/resources/nature/Blends/Grass.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass.blend similarity index 100% rename from packages/client/resources/nature/Blends/Grass.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass.blend diff --git a/packages/client/resources/nature/Blends/Grass_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Grass_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass_2.blend diff --git a/packages/client/resources/nature/Blends/Grass_Short.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass_Short.blend similarity index 100% rename from packages/client/resources/nature/Blends/Grass_Short.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass_Short.blend diff --git a/packages/client/resources/nature/Blends/Lilypad.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Lilypad.blend similarity index 100% rename from packages/client/resources/nature/Blends/Lilypad.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Lilypad.blend diff --git a/packages/client/resources/nature/Blends/PalmTree_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/PalmTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_1.blend diff --git a/packages/client/resources/nature/Blends/PalmTree_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/PalmTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_2.blend diff --git a/packages/client/resources/nature/Blends/PalmTree_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/PalmTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_3.blend diff --git a/packages/client/resources/nature/Blends/PalmTree_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/PalmTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_4.blend diff --git a/packages/client/resources/nature/Blends/PineTree_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_1.blend diff --git a/packages/client/resources/nature/Blends/PineTree_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_2.blend diff --git a/packages/client/resources/nature/Blends/PineTree_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_3.blend diff --git a/packages/client/resources/nature/Blends/PineTree_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_4.blend diff --git a/packages/client/resources/nature/Blends/PineTree_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_5.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Autumn_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Autumn_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_1.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Autumn_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Autumn_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_2.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Autumn_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Autumn_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_3.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Autumn_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Autumn_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_4.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Autumn_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Autumn_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Autumn_5.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Snow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Snow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_3.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Snow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Snow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_4.blend diff --git a/packages/client/resources/nature/Blends/PineTree_Snow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/PineTree_Snow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_Snow_5.blend diff --git a/packages/client/resources/nature/Blends/Plant_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Plant_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_1.blend diff --git a/packages/client/resources/nature/Blends/Plant_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Plant_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_2.blend diff --git a/packages/client/resources/nature/Blends/Plant_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Plant_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_3.blend diff --git a/packages/client/resources/nature/Blends/Plant_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Plant_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_4.blend diff --git a/packages/client/resources/nature/Blends/Plant_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Plant_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_5.blend diff --git a/packages/client/resources/nature/Blends/Rock_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_1.blend diff --git a/packages/client/resources/nature/Blends/Rock_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_2.blend diff --git a/packages/client/resources/nature/Blends/Rock_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_3.blend diff --git a/packages/client/resources/nature/Blends/Rock_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_4.blend diff --git a/packages/client/resources/nature/Blends/Rock_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_5.blend diff --git a/packages/client/resources/nature/Blends/Rock_6.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_6.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_6.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_6.blend diff --git a/packages/client/resources/nature/Blends/Rock_7.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_7.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_7.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_7.blend diff --git a/packages/client/resources/nature/Blends/Rock_Moss_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Moss_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_1.blend diff --git a/packages/client/resources/nature/Blends/Rock_Moss_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Moss_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_2.blend diff --git a/packages/client/resources/nature/Blends/Rock_Moss_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Moss_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_3.blend diff --git a/packages/client/resources/nature/Blends/Rock_Moss_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Moss_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_4.blend diff --git a/packages/client/resources/nature/Blends/Rock_Moss_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Moss_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_5.blend diff --git a/packages/client/resources/nature/Blends/Rock_Moss_6.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_6.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Moss_6.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_6.blend diff --git a/packages/client/resources/nature/Blends/Rock_Moss_7.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_7.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Moss_7.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Moss_7.blend diff --git a/packages/client/resources/nature/Blends/Rock_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/Rock_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/Rock_Snow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Snow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_3.blend diff --git a/packages/client/resources/nature/Blends/Rock_Snow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Snow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_4.blend diff --git a/packages/client/resources/nature/Blends/Rock_Snow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Snow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_5.blend diff --git a/packages/client/resources/nature/Blends/Rock_Snow_6.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_6.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Snow_6.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_6.blend diff --git a/packages/client/resources/nature/Blends/Rock_Snow_7.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_7.blend similarity index 100% rename from packages/client/resources/nature/Blends/Rock_Snow_7.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_Snow_7.blend diff --git a/packages/client/resources/nature/Blends/TreeStump.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump.blend similarity index 100% rename from packages/client/resources/nature/Blends/TreeStump.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump.blend diff --git a/packages/client/resources/nature/Blends/TreeStump_Moss.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump_Moss.blend similarity index 100% rename from packages/client/resources/nature/Blends/TreeStump_Moss.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump_Moss.blend diff --git a/packages/client/resources/nature/Blends/TreeStump_Snow.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump_Snow.blend similarity index 100% rename from packages/client/resources/nature/Blends/TreeStump_Snow.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump_Snow.blend diff --git a/packages/client/resources/nature/Blends/Wheat.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Wheat.blend similarity index 100% rename from packages/client/resources/nature/Blends/Wheat.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Wheat.blend diff --git a/packages/client/resources/nature/Blends/Willow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_1.blend diff --git a/packages/client/resources/nature/Blends/Willow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_2.blend diff --git a/packages/client/resources/nature/Blends/Willow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_3.blend diff --git a/packages/client/resources/nature/Blends/Willow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_4.blend diff --git a/packages/client/resources/nature/Blends/Willow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_5.blend diff --git a/packages/client/resources/nature/Blends/Willow_Autumn_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Autumn_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_1.blend diff --git a/packages/client/resources/nature/Blends/Willow_Autumn_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Autumn_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_2.blend diff --git a/packages/client/resources/nature/Blends/Willow_Autumn_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Autumn_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_3.blend diff --git a/packages/client/resources/nature/Blends/Willow_Autumn_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Autumn_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_4.blend diff --git a/packages/client/resources/nature/Blends/Willow_Autumn_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Autumn_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Autumn_5.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_1.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_2.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_3.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_4.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_5.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_Snow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_Snow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_3.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_Snow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_Snow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_4.blend diff --git a/packages/client/resources/nature/Blends/Willow_Dead_Snow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Dead_Snow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Dead_Snow_5.blend diff --git a/packages/client/resources/nature/Blends/Willow_Snow_1.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_1.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Snow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_1.blend diff --git a/packages/client/resources/nature/Blends/Willow_Snow_2.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_2.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Snow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_2.blend diff --git a/packages/client/resources/nature/Blends/Willow_Snow_3.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_3.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Snow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_3.blend diff --git a/packages/client/resources/nature/Blends/Willow_Snow_4.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_4.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Snow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_4.blend diff --git a/packages/client/resources/nature/Blends/Willow_Snow_5.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_5.blend similarity index 100% rename from packages/client/resources/nature/Blends/Willow_Snow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_Snow_5.blend diff --git a/packages/client/resources/nature/Blends/WoodLog.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog.blend similarity index 100% rename from packages/client/resources/nature/Blends/WoodLog.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog.blend diff --git a/packages/client/resources/nature/Blends/WoodLog_Moss.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog_Moss.blend similarity index 100% rename from packages/client/resources/nature/Blends/WoodLog_Moss.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog_Moss.blend diff --git a/packages/client/resources/nature/Blends/WoodLog_Snow.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog_Snow.blend similarity index 100% rename from packages/client/resources/nature/Blends/WoodLog_Snow.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog_Snow.blend diff --git a/packages/client/resources/nature/FBX/BirchTree_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_1.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_2.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_3.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_4.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_5.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Autumn_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Autumn_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_1.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Autumn_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Autumn_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_2.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Autumn_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Autumn_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_3.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Autumn_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Autumn_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_4.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Autumn_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Autumn_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Autumn_5.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_1.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_2.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_3.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_4.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_5.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_3.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_4.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Dead_Snow_5.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Snow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Snow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_3.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Snow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Snow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_4.fbx diff --git a/packages/client/resources/nature/FBX/BirchTree_Snow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BirchTree_Snow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_Snow_5.fbx diff --git a/packages/client/resources/nature/FBX/BushBerries_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BushBerries_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BushBerries_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BushBerries_1.fbx diff --git a/packages/client/resources/nature/FBX/BushBerries_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/BushBerries_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/BushBerries_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BushBerries_2.fbx diff --git a/packages/client/resources/nature/FBX/Bush_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Bush_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_1.fbx diff --git a/packages/client/resources/nature/FBX/Bush_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Bush_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_2.fbx diff --git a/packages/client/resources/nature/FBX/Bush_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Bush_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/Bush_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Bush_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/CactusFlower_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlower_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CactusFlower_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlower_1.fbx diff --git a/packages/client/resources/nature/FBX/CactusFlowers_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CactusFlowers_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_2.fbx diff --git a/packages/client/resources/nature/FBX/CactusFlowers_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CactusFlowers_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_3.fbx diff --git a/packages/client/resources/nature/FBX/CactusFlowers_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CactusFlowers_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_4.fbx diff --git a/packages/client/resources/nature/FBX/CactusFlowers_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CactusFlowers_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_5.fbx diff --git a/packages/client/resources/nature/FBX/Cactus_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Cactus_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_1.fbx diff --git a/packages/client/resources/nature/FBX/Cactus_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Cactus_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_2.fbx diff --git a/packages/client/resources/nature/FBX/Cactus_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Cactus_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_3.fbx diff --git a/packages/client/resources/nature/FBX/Cactus_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Cactus_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_4.fbx diff --git a/packages/client/resources/nature/FBX/Cactus_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Cactus_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_5.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_1.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_2.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_3.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_4.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_5.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Autumn_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Autumn_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_1.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Autumn_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Autumn_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_2.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Autumn_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Autumn_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_3.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Autumn_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Autumn_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_4.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Autumn_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Autumn_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Autumn_5.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_1.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_2.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_3.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_4.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_5.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_3.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_4.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Dead_Snow_5.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Snow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Snow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_3.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Snow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Snow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_4.fbx diff --git a/packages/client/resources/nature/FBX/CommonTree_Snow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/CommonTree_Snow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_Snow_5.fbx diff --git a/packages/client/resources/nature/FBX/Corn_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Corn_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Corn_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Corn_1.fbx diff --git a/packages/client/resources/nature/FBX/Corn_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Corn_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Corn_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Corn_2.fbx diff --git a/packages/client/resources/nature/FBX/Flowers.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Flowers.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Flowers.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Flowers.fbx diff --git a/packages/client/resources/nature/FBX/Grass_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Grass_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_1.fbx diff --git a/packages/client/resources/nature/FBX/Grass_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Grass_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_2.fbx diff --git a/packages/client/resources/nature/FBX/Grass_Short.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_Short.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Grass_Short.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_Short.fbx diff --git a/packages/client/resources/nature/FBX/Lilypad.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Lilypad.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Lilypad.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Lilypad.fbx diff --git a/packages/client/resources/nature/FBX/PalmTree_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PalmTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_1.fbx diff --git a/packages/client/resources/nature/FBX/PalmTree_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PalmTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_2.fbx diff --git a/packages/client/resources/nature/FBX/PalmTree_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PalmTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_3.fbx diff --git a/packages/client/resources/nature/FBX/PalmTree_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PalmTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_4.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_1.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_2.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_3.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_4.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_5.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Autumn_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Autumn_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_1.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Autumn_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Autumn_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_2.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Autumn_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Autumn_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_3.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Autumn_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Autumn_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_4.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Autumn_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Autumn_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Autumn_5.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Snow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Snow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_3.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Snow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Snow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_4.fbx diff --git a/packages/client/resources/nature/FBX/PineTree_Snow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/PineTree_Snow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_Snow_5.fbx diff --git a/packages/client/resources/nature/FBX/Plant_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Plant_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_1.fbx diff --git a/packages/client/resources/nature/FBX/Plant_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Plant_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_2.fbx diff --git a/packages/client/resources/nature/FBX/Plant_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Plant_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_3.fbx diff --git a/packages/client/resources/nature/FBX/Plant_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Plant_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_4.fbx diff --git a/packages/client/resources/nature/FBX/Plant_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Plant_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_5.fbx diff --git a/packages/client/resources/nature/FBX/Rock_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_1.fbx diff --git a/packages/client/resources/nature/FBX/Rock_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_2.fbx diff --git a/packages/client/resources/nature/FBX/Rock_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_3.fbx diff --git a/packages/client/resources/nature/FBX/Rock_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_4.fbx diff --git a/packages/client/resources/nature/FBX/Rock_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_5.fbx diff --git a/packages/client/resources/nature/FBX/Rock_6.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_6.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_6.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_6.fbx diff --git a/packages/client/resources/nature/FBX/Rock_7.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_7.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_7.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_7.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Moss_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Moss_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_1.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Moss_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Moss_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_2.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Moss_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Moss_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_3.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Moss_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Moss_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_4.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Moss_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Moss_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_5.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Moss_6.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_6.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Moss_6.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_6.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Moss_7.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_7.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Moss_7.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Moss_7.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Snow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Snow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_3.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Snow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Snow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_4.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Snow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Snow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_5.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Snow_6.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_6.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Snow_6.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_6.fbx diff --git a/packages/client/resources/nature/FBX/Rock_Snow_7.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_7.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Rock_Snow_7.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_Snow_7.fbx diff --git a/packages/client/resources/nature/FBX/TreeStump.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump.fbx similarity index 100% rename from packages/client/resources/nature/FBX/TreeStump.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump.fbx diff --git a/packages/client/resources/nature/FBX/TreeStump_Moss.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump_Moss.fbx similarity index 100% rename from packages/client/resources/nature/FBX/TreeStump_Moss.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump_Moss.fbx diff --git a/packages/client/resources/nature/FBX/TreeStump_Snow.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump_Snow.fbx similarity index 100% rename from packages/client/resources/nature/FBX/TreeStump_Snow.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump_Snow.fbx diff --git a/packages/client/resources/nature/FBX/Wheat.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Wheat.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Wheat.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Wheat.fbx diff --git a/packages/client/resources/nature/FBX/Willow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_1.fbx diff --git a/packages/client/resources/nature/FBX/Willow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_2.fbx diff --git a/packages/client/resources/nature/FBX/Willow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_3.fbx diff --git a/packages/client/resources/nature/FBX/Willow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_4.fbx diff --git a/packages/client/resources/nature/FBX/Willow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_5.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Autumn_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Autumn_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_1.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Autumn_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Autumn_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_2.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Autumn_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Autumn_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_3.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Autumn_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Autumn_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_4.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Autumn_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Autumn_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Autumn_5.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_1.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_2.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_3.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_4.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_5.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_Snow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_Snow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_3.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_Snow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_Snow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_4.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Dead_Snow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Dead_Snow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Dead_Snow_5.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Snow_1.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_1.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Snow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_1.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Snow_2.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_2.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Snow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_2.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Snow_3.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_3.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Snow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_3.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Snow_4.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_4.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Snow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_4.fbx diff --git a/packages/client/resources/nature/FBX/Willow_Snow_5.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_5.fbx similarity index 100% rename from packages/client/resources/nature/FBX/Willow_Snow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_Snow_5.fbx diff --git a/packages/client/resources/nature/FBX/WoodLog.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog.fbx similarity index 100% rename from packages/client/resources/nature/FBX/WoodLog.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog.fbx diff --git a/packages/client/resources/nature/FBX/WoodLog_Moss.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog_Moss.fbx similarity index 100% rename from packages/client/resources/nature/FBX/WoodLog_Moss.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog_Moss.fbx diff --git a/packages/client/resources/nature/FBX/WoodLog_Snow.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog_Snow.fbx similarity index 100% rename from packages/client/resources/nature/FBX/WoodLog_Snow.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog_Snow.fbx diff --git a/packages/client/resources/nature/License.txt b/packages/quick-3d-mmo-client/src/resources/nature/License.txt similarity index 100% rename from packages/client/resources/nature/License.txt rename to packages/quick-3d-mmo-client/src/resources/nature/License.txt diff --git a/packages/client/resources/nature/OBJ/BirchTree_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_1.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_1.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_2.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_2.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_3.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_3.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_4.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_4.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_5.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_5.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_1.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_1.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_2.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_2.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_3.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_3.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_4.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_4.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_5.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Autumn_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Autumn_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Autumn_5.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_1.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_1.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_2.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_2.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_3.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_3.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_4.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_4.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_5.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_5.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_3.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_3.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_4.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_4.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_5.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Dead_Snow_5.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_3.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_3.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_4.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_4.obj diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_5.mtl diff --git a/packages/client/resources/nature/OBJ/BirchTree_Snow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BirchTree_Snow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_Snow_5.obj diff --git a/packages/client/resources/nature/OBJ/BushBerries_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BushBerries_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_1.mtl diff --git a/packages/client/resources/nature/OBJ/BushBerries_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BushBerries_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_1.obj diff --git a/packages/client/resources/nature/OBJ/BushBerries_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/BushBerries_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_2.mtl diff --git a/packages/client/resources/nature/OBJ/BushBerries_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/BushBerries_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_2.obj diff --git a/packages/client/resources/nature/OBJ/Bush_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Bush_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_1.mtl diff --git a/packages/client/resources/nature/OBJ/Bush_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Bush_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_1.obj diff --git a/packages/client/resources/nature/OBJ/Bush_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Bush_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_2.mtl diff --git a/packages/client/resources/nature/OBJ/Bush_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Bush_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_2.obj diff --git a/packages/client/resources/nature/OBJ/Bush_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Bush_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/Bush_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Bush_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/Bush_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Bush_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/Bush_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Bush_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/CactusFlower_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlower_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlower_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlower_1.mtl diff --git a/packages/client/resources/nature/OBJ/CactusFlower_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlower_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlower_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlower_1.obj diff --git a/packages/client/resources/nature/OBJ/CactusFlowers_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlowers_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_2.mtl diff --git a/packages/client/resources/nature/OBJ/CactusFlowers_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlowers_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_2.obj diff --git a/packages/client/resources/nature/OBJ/CactusFlowers_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlowers_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_3.mtl diff --git a/packages/client/resources/nature/OBJ/CactusFlowers_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlowers_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_3.obj diff --git a/packages/client/resources/nature/OBJ/CactusFlowers_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlowers_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_4.mtl diff --git a/packages/client/resources/nature/OBJ/CactusFlowers_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlowers_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_4.obj diff --git a/packages/client/resources/nature/OBJ/CactusFlowers_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlowers_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_5.mtl diff --git a/packages/client/resources/nature/OBJ/CactusFlowers_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CactusFlowers_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_5.obj diff --git a/packages/client/resources/nature/OBJ/Cactus_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_1.mtl diff --git a/packages/client/resources/nature/OBJ/Cactus_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_1.obj diff --git a/packages/client/resources/nature/OBJ/Cactus_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_2.mtl diff --git a/packages/client/resources/nature/OBJ/Cactus_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_2.obj diff --git a/packages/client/resources/nature/OBJ/Cactus_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_3.mtl diff --git a/packages/client/resources/nature/OBJ/Cactus_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_3.obj diff --git a/packages/client/resources/nature/OBJ/Cactus_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_4.mtl diff --git a/packages/client/resources/nature/OBJ/Cactus_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_4.obj diff --git a/packages/client/resources/nature/OBJ/Cactus_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_5.mtl diff --git a/packages/client/resources/nature/OBJ/Cactus_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Cactus_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_5.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_1.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_1.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_2.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_2.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_3.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_3.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_4.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_4.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_5.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_5.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_1.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_1.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_2.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_2.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_3.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_3.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_4.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_4.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_5.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Autumn_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Autumn_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Autumn_5.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_1.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_1.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_2.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_2.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_3.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_3.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_4.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_4.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_5.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_5.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_3.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_3.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_4.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_4.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_5.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Dead_Snow_5.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_3.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_3.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_4.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_4.obj diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_5.mtl diff --git a/packages/client/resources/nature/OBJ/CommonTree_Snow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/CommonTree_Snow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_Snow_5.obj diff --git a/packages/client/resources/nature/OBJ/Corn_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Corn_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_1.mtl diff --git a/packages/client/resources/nature/OBJ/Corn_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Corn_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_1.obj diff --git a/packages/client/resources/nature/OBJ/Corn_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Corn_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_2.mtl diff --git a/packages/client/resources/nature/OBJ/Corn_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Corn_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_2.obj diff --git a/packages/client/resources/nature/OBJ/Flowers.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Flowers.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Flowers.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Flowers.mtl diff --git a/packages/client/resources/nature/OBJ/Flowers.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Flowers.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Flowers.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Flowers.obj diff --git a/packages/client/resources/nature/OBJ/Grass.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Grass.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass.mtl diff --git a/packages/client/resources/nature/OBJ/Grass.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Grass.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass.obj diff --git a/packages/client/resources/nature/OBJ/Grass_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Grass_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_2.mtl diff --git a/packages/client/resources/nature/OBJ/Grass_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Grass_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_2.obj diff --git a/packages/client/resources/nature/OBJ/Grass_Short.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_Short.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Grass_Short.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_Short.mtl diff --git a/packages/client/resources/nature/OBJ/Grass_Short.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_Short.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Grass_Short.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_Short.obj diff --git a/packages/client/resources/nature/OBJ/Lilypad.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Lilypad.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Lilypad.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Lilypad.mtl diff --git a/packages/client/resources/nature/OBJ/Lilypad.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Lilypad.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Lilypad.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Lilypad.obj diff --git a/packages/client/resources/nature/OBJ/PalmTree_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PalmTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_1.mtl diff --git a/packages/client/resources/nature/OBJ/PalmTree_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PalmTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_1.obj diff --git a/packages/client/resources/nature/OBJ/PalmTree_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PalmTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_2.mtl diff --git a/packages/client/resources/nature/OBJ/PalmTree_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PalmTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_2.obj diff --git a/packages/client/resources/nature/OBJ/PalmTree_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PalmTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_3.mtl diff --git a/packages/client/resources/nature/OBJ/PalmTree_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PalmTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_3.obj diff --git a/packages/client/resources/nature/OBJ/PalmTree_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PalmTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_4.mtl diff --git a/packages/client/resources/nature/OBJ/PalmTree_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PalmTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_4.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_1.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_1.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_2.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_2.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_3.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_3.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_4.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_4.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_5.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_5.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_1.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_1.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_2.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_2.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_3.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_3.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_4.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_4.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_5.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Autumn_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Autumn_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Autumn_5.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_3.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_3.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_4.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_4.obj diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_5.mtl diff --git a/packages/client/resources/nature/OBJ/PineTree_Snow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/PineTree_Snow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_Snow_5.obj diff --git a/packages/client/resources/nature/OBJ/Plant_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_1.mtl diff --git a/packages/client/resources/nature/OBJ/Plant_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_1.obj diff --git a/packages/client/resources/nature/OBJ/Plant_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_2.mtl diff --git a/packages/client/resources/nature/OBJ/Plant_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_2.obj diff --git a/packages/client/resources/nature/OBJ/Plant_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_3.mtl diff --git a/packages/client/resources/nature/OBJ/Plant_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_3.obj diff --git a/packages/client/resources/nature/OBJ/Plant_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_4.mtl diff --git a/packages/client/resources/nature/OBJ/Plant_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_4.obj diff --git a/packages/client/resources/nature/OBJ/Plant_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_5.mtl diff --git a/packages/client/resources/nature/OBJ/Plant_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Plant_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_5.obj diff --git a/packages/client/resources/nature/OBJ/Rock_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_1.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_1.obj diff --git a/packages/client/resources/nature/OBJ/Rock_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_2.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_2.obj diff --git a/packages/client/resources/nature/OBJ/Rock_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_3.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_3.obj diff --git a/packages/client/resources/nature/OBJ/Rock_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_4.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_4.obj diff --git a/packages/client/resources/nature/OBJ/Rock_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_5.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_5.obj diff --git a/packages/client/resources/nature/OBJ/Rock_6.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_6.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_6.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_6.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_6.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_6.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_6.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_6.obj diff --git a/packages/client/resources/nature/OBJ/Rock_7.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_7.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_7.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_7.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_7.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_7.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_7.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_7.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_1.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_1.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_2.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_2.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_3.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_3.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_4.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_4.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_5.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_5.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_6.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_6.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_6.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_6.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_6.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_6.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_6.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_6.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_7.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_7.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_7.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_7.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Moss_7.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_7.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Moss_7.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Moss_7.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_3.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_3.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_4.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_4.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_5.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_5.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_6.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_6.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_6.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_6.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_6.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_6.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_6.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_6.obj diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_7.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_7.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_7.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_7.mtl diff --git a/packages/client/resources/nature/OBJ/Rock_Snow_7.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_7.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Rock_Snow_7.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_Snow_7.obj diff --git a/packages/client/resources/nature/OBJ/TreeStump.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/TreeStump.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump.mtl diff --git a/packages/client/resources/nature/OBJ/TreeStump.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump.obj similarity index 100% rename from packages/client/resources/nature/OBJ/TreeStump.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump.obj diff --git a/packages/client/resources/nature/OBJ/TreeStump_Moss.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Moss.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/TreeStump_Moss.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Moss.mtl diff --git a/packages/client/resources/nature/OBJ/TreeStump_Moss.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Moss.obj similarity index 100% rename from packages/client/resources/nature/OBJ/TreeStump_Moss.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Moss.obj diff --git a/packages/client/resources/nature/OBJ/TreeStump_Snow.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Snow.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/TreeStump_Snow.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Snow.mtl diff --git a/packages/client/resources/nature/OBJ/TreeStump_Snow.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Snow.obj similarity index 100% rename from packages/client/resources/nature/OBJ/TreeStump_Snow.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Snow.obj diff --git a/packages/client/resources/nature/OBJ/Wheat.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Wheat.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Wheat.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Wheat.mtl diff --git a/packages/client/resources/nature/OBJ/Wheat.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Wheat.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Wheat.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Wheat.obj diff --git a/packages/client/resources/nature/OBJ/Willow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_1.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_1.obj diff --git a/packages/client/resources/nature/OBJ/Willow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_2.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_2.obj diff --git a/packages/client/resources/nature/OBJ/Willow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_3.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_3.obj diff --git a/packages/client/resources/nature/OBJ/Willow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_4.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_4.obj diff --git a/packages/client/resources/nature/OBJ/Willow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_5.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_5.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_1.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_1.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_2.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_2.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_3.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_3.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_4.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_4.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_5.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Autumn_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Autumn_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Autumn_5.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_1.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_1.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_2.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_2.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_3.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_3.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_4.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_4.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_5.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_5.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_3.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_3.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_4.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_4.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_5.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Dead_Snow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Dead_Snow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Dead_Snow_5.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_1.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_1.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_1.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_1.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_1.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_1.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_2.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_2.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_2.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_2.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_2.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_2.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_3.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_3.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_3.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_3.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_3.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_3.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_4.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_4.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_4.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_4.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_4.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_4.obj diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_5.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_5.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_5.mtl diff --git a/packages/client/resources/nature/OBJ/Willow_Snow_5.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_5.obj similarity index 100% rename from packages/client/resources/nature/OBJ/Willow_Snow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_Snow_5.obj diff --git a/packages/client/resources/nature/OBJ/WoodLog.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/WoodLog.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog.mtl diff --git a/packages/client/resources/nature/OBJ/WoodLog.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog.obj similarity index 100% rename from packages/client/resources/nature/OBJ/WoodLog.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog.obj diff --git a/packages/client/resources/nature/OBJ/WoodLog_Moss.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Moss.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/WoodLog_Moss.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Moss.mtl diff --git a/packages/client/resources/nature/OBJ/WoodLog_Moss.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Moss.obj similarity index 100% rename from packages/client/resources/nature/OBJ/WoodLog_Moss.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Moss.obj diff --git a/packages/client/resources/nature/OBJ/WoodLog_Snow.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Snow.mtl similarity index 100% rename from packages/client/resources/nature/OBJ/WoodLog_Snow.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Snow.mtl diff --git a/packages/client/resources/nature/OBJ/WoodLog_Snow.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Snow.obj similarity index 100% rename from packages/client/resources/nature/OBJ/WoodLog_Snow.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Snow.obj diff --git a/packages/client/resources/nature/Preview.jpg b/packages/quick-3d-mmo-client/src/resources/nature/Preview.jpg similarity index 100% rename from packages/client/resources/nature/Preview.jpg rename to packages/quick-3d-mmo-client/src/resources/nature/Preview.jpg diff --git a/packages/client/resources/nature2/Blends/BigBush.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/BigBush.blend similarity index 100% rename from packages/client/resources/nature2/Blends/BigBush.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/BigBush.blend diff --git a/packages/client/resources/nature2/Blends/BigTreeWithLeaves.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/BigTreeWithLeaves.blend similarity index 100% rename from packages/client/resources/nature2/Blends/BigTreeWithLeaves.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/BigTreeWithLeaves.blend diff --git a/packages/client/resources/nature2/Blends/BushTexture.png b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/BushTexture.png similarity index 100% rename from packages/client/resources/nature2/Blends/BushTexture.png rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/BushTexture.png diff --git a/packages/client/resources/nature2/Blends/Cloud1.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud1.blend similarity index 100% rename from packages/client/resources/nature2/Blends/Cloud1.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud1.blend diff --git a/packages/client/resources/nature2/Blends/Cloud1.blend1 b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud1.blend1 similarity index 100% rename from packages/client/resources/nature2/Blends/Cloud1.blend1 rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud1.blend1 diff --git a/packages/client/resources/nature2/Blends/Cloud2.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud2.blend similarity index 100% rename from packages/client/resources/nature2/Blends/Cloud2.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud2.blend diff --git a/packages/client/resources/nature2/Blends/Cloud3.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud3.blend similarity index 100% rename from packages/client/resources/nature2/Blends/Cloud3.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud3.blend diff --git a/packages/client/resources/nature2/Blends/EveryModel.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/EveryModel.blend similarity index 100% rename from packages/client/resources/nature2/Blends/EveryModel.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/EveryModel.blend diff --git a/packages/client/resources/nature2/Blends/MoreNature.blend1 b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/MoreNature.blend1 similarity index 100% rename from packages/client/resources/nature2/Blends/MoreNature.blend1 rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/MoreNature.blend1 diff --git a/packages/client/resources/nature2/Blends/SmallBush.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/SmallBush.blend similarity index 100% rename from packages/client/resources/nature2/Blends/SmallBush.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/SmallBush.blend diff --git a/packages/client/resources/nature2/Blends/SmallTreeWithLeave.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/SmallTreeWithLeave.blend similarity index 100% rename from packages/client/resources/nature2/Blends/SmallTreeWithLeave.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/SmallTreeWithLeave.blend diff --git a/packages/client/resources/nature2/Blends/TreeNoLeavesBig.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesBig.blend similarity index 100% rename from packages/client/resources/nature2/Blends/TreeNoLeavesBig.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesBig.blend diff --git a/packages/client/resources/nature2/Blends/TreeNoLeavesBig.blend1 b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesBig.blend1 similarity index 100% rename from packages/client/resources/nature2/Blends/TreeNoLeavesBig.blend1 rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesBig.blend1 diff --git a/packages/client/resources/nature2/Blends/TreeNoLeavesSmall.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesSmall.blend similarity index 100% rename from packages/client/resources/nature2/Blends/TreeNoLeavesSmall.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesSmall.blend diff --git a/packages/client/resources/nature2/Blends/TreeNoLeavesSmall.blend1 b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesSmall.blend1 similarity index 100% rename from packages/client/resources/nature2/Blends/TreeNoLeavesSmall.blend1 rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesSmall.blend1 diff --git a/packages/client/resources/nature2/Blends/TreeTexture.png b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeTexture.png similarity index 100% rename from packages/client/resources/nature2/Blends/TreeTexture.png rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeTexture.png diff --git a/packages/client/resources/nature2/GLTF/Cloud1.glb b/packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud1.glb similarity index 100% rename from packages/client/resources/nature2/GLTF/Cloud1.glb rename to packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud1.glb diff --git a/packages/client/resources/nature2/GLTF/Cloud2.glb b/packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud2.glb similarity index 100% rename from packages/client/resources/nature2/GLTF/Cloud2.glb rename to packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud2.glb diff --git a/packages/client/resources/nature2/GLTF/Cloud3.glb b/packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud3.glb similarity index 100% rename from packages/client/resources/nature2/GLTF/Cloud3.glb rename to packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud3.glb diff --git a/packages/client/resources/nature2/License.txt b/packages/quick-3d-mmo-client/src/resources/nature2/License.txt similarity index 100% rename from packages/client/resources/nature2/License.txt rename to packages/quick-3d-mmo-client/src/resources/nature2/License.txt diff --git a/packages/client/resources/nature2/OBJ/BigBush.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigBush.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/BigBush.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigBush.mtl diff --git a/packages/client/resources/nature2/OBJ/BigBush.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigBush.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/BigBush.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigBush.obj diff --git a/packages/client/resources/nature2/OBJ/BigTreeWithLeaves.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigTreeWithLeaves.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/BigTreeWithLeaves.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigTreeWithLeaves.mtl diff --git a/packages/client/resources/nature2/OBJ/BigTreeWithLeaves.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigTreeWithLeaves.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/BigTreeWithLeaves.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigTreeWithLeaves.obj diff --git a/packages/client/resources/nature2/OBJ/Cloud1.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud1.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/Cloud1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud1.mtl diff --git a/packages/client/resources/nature2/OBJ/Cloud1.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud1.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/Cloud1.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud1.obj diff --git a/packages/client/resources/nature2/OBJ/Cloud2.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud2.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/Cloud2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud2.mtl diff --git a/packages/client/resources/nature2/OBJ/Cloud2.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud2.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/Cloud2.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud2.obj diff --git a/packages/client/resources/nature2/OBJ/Cloud3.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud3.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/Cloud3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud3.mtl diff --git a/packages/client/resources/nature2/OBJ/Cloud3.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud3.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/Cloud3.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud3.obj diff --git a/packages/client/resources/nature2/OBJ/EveryModel.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/EveryModel.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/EveryModel.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/EveryModel.mtl diff --git a/packages/client/resources/nature2/OBJ/EveryModel.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/EveryModel.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/EveryModel.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/EveryModel.obj diff --git a/packages/client/resources/nature2/OBJ/SmallBush.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallBush.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/SmallBush.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallBush.mtl diff --git a/packages/client/resources/nature2/OBJ/SmallBush.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallBush.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/SmallBush.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallBush.obj diff --git a/packages/client/resources/nature2/OBJ/SmallTreeWithLeave.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallTreeWithLeave.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/SmallTreeWithLeave.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallTreeWithLeave.mtl diff --git a/packages/client/resources/nature2/OBJ/SmallTreeWithLeave.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallTreeWithLeave.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/SmallTreeWithLeave.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallTreeWithLeave.obj diff --git a/packages/client/resources/nature2/OBJ/TreeNoLeavesBig.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesBig.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/TreeNoLeavesBig.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesBig.mtl diff --git a/packages/client/resources/nature2/OBJ/TreeNoLeavesBig.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesBig.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/TreeNoLeavesBig.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesBig.obj diff --git a/packages/client/resources/nature2/OBJ/TreeNoLeavesSmall.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesSmall.mtl similarity index 100% rename from packages/client/resources/nature2/OBJ/TreeNoLeavesSmall.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesSmall.mtl diff --git a/packages/client/resources/nature2/OBJ/TreeNoLeavesSmall.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesSmall.obj similarity index 100% rename from packages/client/resources/nature2/OBJ/TreeNoLeavesSmall.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesSmall.obj diff --git a/packages/client/resources/terrain/README.txt b/packages/quick-3d-mmo-client/src/resources/terrain/README.txt similarity index 100% rename from packages/client/resources/terrain/README.txt rename to packages/quick-3d-mmo-client/src/resources/terrain/README.txt diff --git a/packages/client/resources/terrain/bark1-albedo.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/bark1-albedo.jpg similarity index 100% rename from packages/client/resources/terrain/bark1-albedo.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/bark1-albedo.jpg diff --git a/packages/client/resources/terrain/bark1-albedo.png b/packages/quick-3d-mmo-client/src/resources/terrain/bark1-albedo.png similarity index 100% rename from packages/client/resources/terrain/bark1-albedo.png rename to packages/quick-3d-mmo-client/src/resources/terrain/bark1-albedo.png diff --git a/packages/client/resources/terrain/bark1-normal3.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/bark1-normal3.jpg similarity index 100% rename from packages/client/resources/terrain/bark1-normal3.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/bark1-normal3.jpg diff --git a/packages/client/resources/terrain/bark1-normal3.png b/packages/quick-3d-mmo-client/src/resources/terrain/bark1-normal3.png similarity index 100% rename from packages/client/resources/terrain/bark1-normal3.png rename to packages/quick-3d-mmo-client/src/resources/terrain/bark1-normal3.png diff --git a/packages/client/resources/terrain/dirt_01_diffuse-1024.png b/packages/quick-3d-mmo-client/src/resources/terrain/dirt_01_diffuse-1024.png similarity index 100% rename from packages/client/resources/terrain/dirt_01_diffuse-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/dirt_01_diffuse-1024.png diff --git a/packages/client/resources/terrain/dirt_01_normal-1024.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/dirt_01_normal-1024.jpg similarity index 100% rename from packages/client/resources/terrain/dirt_01_normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/dirt_01_normal-1024.jpg diff --git a/packages/client/resources/terrain/grass1-albedo-512.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/grass1-albedo-512.jpg similarity index 100% rename from packages/client/resources/terrain/grass1-albedo-512.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/grass1-albedo-512.jpg diff --git a/packages/client/resources/terrain/grass1-albedo3-1024.png b/packages/quick-3d-mmo-client/src/resources/terrain/grass1-albedo3-1024.png similarity index 100% rename from packages/client/resources/terrain/grass1-albedo3-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/grass1-albedo3-1024.png diff --git a/packages/client/resources/terrain/grass1-normal-1024.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/grass1-normal-1024.jpg similarity index 100% rename from packages/client/resources/terrain/grass1-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/grass1-normal-1024.jpg diff --git a/packages/client/resources/terrain/rock-snow-ice-albedo-1024.png b/packages/quick-3d-mmo-client/src/resources/terrain/rock-snow-ice-albedo-1024.png similarity index 100% rename from packages/client/resources/terrain/rock-snow-ice-albedo-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/rock-snow-ice-albedo-1024.png diff --git a/packages/client/resources/terrain/rock-snow-ice-normal-1024.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/rock-snow-ice-normal-1024.jpg similarity index 100% rename from packages/client/resources/terrain/rock-snow-ice-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/rock-snow-ice-normal-1024.jpg diff --git a/packages/client/resources/terrain/rough-wet-cobble-albedo-1024.png b/packages/quick-3d-mmo-client/src/resources/terrain/rough-wet-cobble-albedo-1024.png similarity index 100% rename from packages/client/resources/terrain/rough-wet-cobble-albedo-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/rough-wet-cobble-albedo-1024.png diff --git a/packages/client/resources/terrain/rough-wet-cobble-normal-1024.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/rough-wet-cobble-normal-1024.jpg similarity index 100% rename from packages/client/resources/terrain/rough-wet-cobble-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/rough-wet-cobble-normal-1024.jpg diff --git a/packages/client/resources/terrain/sandy-rocks1-albedo-1024.png b/packages/quick-3d-mmo-client/src/resources/terrain/sandy-rocks1-albedo-1024.png similarity index 100% rename from packages/client/resources/terrain/sandy-rocks1-albedo-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/sandy-rocks1-albedo-1024.png diff --git a/packages/client/resources/terrain/sandy-rocks1-normal-1024.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/sandy-rocks1-normal-1024.jpg similarity index 100% rename from packages/client/resources/terrain/sandy-rocks1-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/sandy-rocks1-normal-1024.jpg diff --git a/packages/client/resources/terrain/sandyground-albedo-1024.png b/packages/quick-3d-mmo-client/src/resources/terrain/sandyground-albedo-1024.png similarity index 100% rename from packages/client/resources/terrain/sandyground-albedo-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/sandyground-albedo-1024.png diff --git a/packages/client/resources/terrain/sandyground-normal-1024.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/sandyground-normal-1024.jpg similarity index 100% rename from packages/client/resources/terrain/sandyground-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/sandyground-normal-1024.jpg diff --git a/packages/client/resources/terrain/simplex-noise.png b/packages/quick-3d-mmo-client/src/resources/terrain/simplex-noise.png similarity index 100% rename from packages/client/resources/terrain/simplex-noise.png rename to packages/quick-3d-mmo-client/src/resources/terrain/simplex-noise.png diff --git a/packages/client/resources/terrain/snow-packed-albedo-1024.png b/packages/quick-3d-mmo-client/src/resources/terrain/snow-packed-albedo-1024.png similarity index 100% rename from packages/client/resources/terrain/snow-packed-albedo-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/snow-packed-albedo-1024.png diff --git a/packages/client/resources/terrain/snow-packed-normal-1024.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/snow-packed-normal-1024.jpg similarity index 100% rename from packages/client/resources/terrain/snow-packed-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/snow-packed-normal-1024.jpg diff --git a/packages/client/resources/terrain/space-negx.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-negx.jpg similarity index 100% rename from packages/client/resources/terrain/space-negx.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-negx.jpg diff --git a/packages/client/resources/terrain/space-negy.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-negy.jpg similarity index 100% rename from packages/client/resources/terrain/space-negy.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-negy.jpg diff --git a/packages/client/resources/terrain/space-negz.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-negz.jpg similarity index 100% rename from packages/client/resources/terrain/space-negz.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-negz.jpg diff --git a/packages/client/resources/terrain/space-posx.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-posx.jpg similarity index 100% rename from packages/client/resources/terrain/space-posx.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-posx.jpg diff --git a/packages/client/resources/terrain/space-posy.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-posy.jpg similarity index 100% rename from packages/client/resources/terrain/space-posy.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-posy.jpg diff --git a/packages/client/resources/terrain/space-posz.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-posz.jpg similarity index 100% rename from packages/client/resources/terrain/space-posz.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-posz.jpg diff --git a/packages/client/resources/terrain/worn-bumpy-rock-albedo-1024.png b/packages/quick-3d-mmo-client/src/resources/terrain/worn-bumpy-rock-albedo-1024.png similarity index 100% rename from packages/client/resources/terrain/worn-bumpy-rock-albedo-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/worn-bumpy-rock-albedo-1024.png diff --git a/packages/client/resources/terrain/worn-bumpy-rock-albedo-512.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/worn-bumpy-rock-albedo-512.jpg similarity index 100% rename from packages/client/resources/terrain/worn-bumpy-rock-albedo-512.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/worn-bumpy-rock-albedo-512.jpg diff --git a/packages/client/resources/terrain/worn-bumpy-rock-normal-1024.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/worn-bumpy-rock-normal-1024.jpg similarity index 100% rename from packages/client/resources/terrain/worn-bumpy-rock-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/worn-bumpy-rock-normal-1024.jpg diff --git a/packages/client/resources/textures/ball.png b/packages/quick-3d-mmo-client/src/resources/textures/ball.png similarity index 100% rename from packages/client/resources/textures/ball.png rename to packages/quick-3d-mmo-client/src/resources/textures/ball.png diff --git a/packages/client/resources/textures/fire.png b/packages/quick-3d-mmo-client/src/resources/textures/fire.png similarity index 100% rename from packages/client/resources/textures/fire.png rename to packages/quick-3d-mmo-client/src/resources/textures/fire.png diff --git a/packages/client/resources/textures/whitePuff14.png b/packages/quick-3d-mmo-client/src/resources/textures/whitePuff14.png similarity index 100% rename from packages/client/resources/textures/whitePuff14.png rename to packages/quick-3d-mmo-client/src/resources/textures/whitePuff14.png diff --git a/packages/client/resources/trees/Blends/Birch_1.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_1.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_1.blend diff --git a/packages/client/resources/trees/Blends/Birch_10.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_10.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_10.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_10.blend diff --git a/packages/client/resources/trees/Blends/Birch_2.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_2.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_2.blend diff --git a/packages/client/resources/trees/Blends/Birch_3.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_3.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_3.blend diff --git a/packages/client/resources/trees/Blends/Birch_4.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_4.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_4.blend diff --git a/packages/client/resources/trees/Blends/Birch_5.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_5.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_5.blend diff --git a/packages/client/resources/trees/Blends/Birch_6.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_6.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_6.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_6.blend diff --git a/packages/client/resources/trees/Blends/Birch_7.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_7.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_7.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_7.blend diff --git a/packages/client/resources/trees/Blends/Birch_8.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_8.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_8.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_8.blend diff --git a/packages/client/resources/trees/Blends/Birch_9.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_9.blend similarity index 100% rename from packages/client/resources/trees/Blends/Birch_9.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_9.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_1.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_1.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_1.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_10.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_10.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_10.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_10.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_2.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_2.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_2.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_3.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_3.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_3.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_4.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_4.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_4.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_5.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_5.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_5.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_6.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_6.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_6.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_6.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_7.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_7.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_7.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_7.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_8.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_8.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_8.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_8.blend diff --git a/packages/client/resources/trees/Blends/DeadBirch_9.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_9.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadBirch_9.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_9.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_1.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_1.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_1.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_10.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_10.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_10.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_10.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_2.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_2.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_2.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_3.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_3.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_3.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_4.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_4.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_4.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_5.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_5.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_5.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_6.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_6.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_6.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_6.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_7.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_7.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_7.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_7.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_8.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_8.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_8.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_8.blend diff --git a/packages/client/resources/trees/Blends/DeadTree_9.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_9.blend similarity index 100% rename from packages/client/resources/trees/Blends/DeadTree_9.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_9.blend diff --git a/packages/client/resources/trees/Blends/Pine_1.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_1.blend similarity index 100% rename from packages/client/resources/trees/Blends/Pine_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_1.blend diff --git a/packages/client/resources/trees/Blends/Pine_2.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_2.blend similarity index 100% rename from packages/client/resources/trees/Blends/Pine_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_2.blend diff --git a/packages/client/resources/trees/Blends/Pine_3.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_3.blend similarity index 100% rename from packages/client/resources/trees/Blends/Pine_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_3.blend diff --git a/packages/client/resources/trees/Blends/Pine_4.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_4.blend similarity index 100% rename from packages/client/resources/trees/Blends/Pine_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_4.blend diff --git a/packages/client/resources/trees/Blends/Pine_5.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_5.blend similarity index 100% rename from packages/client/resources/trees/Blends/Pine_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_5.blend diff --git a/packages/client/resources/trees/Blends/Tree_1.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_1.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_1.blend diff --git a/packages/client/resources/trees/Blends/Tree_10.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_10.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_10.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_10.blend diff --git a/packages/client/resources/trees/Blends/Tree_2.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_2.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_2.blend diff --git a/packages/client/resources/trees/Blends/Tree_3.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_3.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_3.blend diff --git a/packages/client/resources/trees/Blends/Tree_4.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_4.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_4.blend diff --git a/packages/client/resources/trees/Blends/Tree_5.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_5.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_5.blend diff --git a/packages/client/resources/trees/Blends/Tree_6.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_6.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_6.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_6.blend diff --git a/packages/client/resources/trees/Blends/Tree_7.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_7.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_7.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_7.blend diff --git a/packages/client/resources/trees/Blends/Tree_8.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_8.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_8.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_8.blend diff --git a/packages/client/resources/trees/Blends/Tree_9.blend b/packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_9.blend similarity index 100% rename from packages/client/resources/trees/Blends/Tree_9.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_9.blend diff --git a/packages/client/resources/trees/FBX/Birch_1.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_1.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_1.fbx diff --git a/packages/client/resources/trees/FBX/Birch_10.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_10.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_10.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_10.fbx diff --git a/packages/client/resources/trees/FBX/Birch_2.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_2.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_2.fbx diff --git a/packages/client/resources/trees/FBX/Birch_3.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_3.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_3.fbx diff --git a/packages/client/resources/trees/FBX/Birch_4.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_4.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_4.fbx diff --git a/packages/client/resources/trees/FBX/Birch_5.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_5.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_5.fbx diff --git a/packages/client/resources/trees/FBX/Birch_6.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_6.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_6.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_6.fbx diff --git a/packages/client/resources/trees/FBX/Birch_7.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_7.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_7.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_7.fbx diff --git a/packages/client/resources/trees/FBX/Birch_8.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_8.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_8.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_8.fbx diff --git a/packages/client/resources/trees/FBX/Birch_9.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_9.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Birch_9.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_9.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_1.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_1.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_1.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_10.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_10.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_10.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_10.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_2.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_2.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_2.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_3.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_3.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_3.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_4.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_4.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_4.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_5.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_5.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_5.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_6.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_6.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_6.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_6.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_7.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_7.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_7.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_7.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_8.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_8.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_8.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_8.fbx diff --git a/packages/client/resources/trees/FBX/DeadBirch_9.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_9.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadBirch_9.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_9.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_1.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_1.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_1.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_10.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_10.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_10.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_10.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_2.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_2.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_2.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_3.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_3.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_3.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_4.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_4.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_4.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_5.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_5.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_5.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_6.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_6.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_6.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_6.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_7.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_7.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_7.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_7.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_8.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_8.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_8.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_8.fbx diff --git a/packages/client/resources/trees/FBX/DeadTree_9.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_9.fbx similarity index 100% rename from packages/client/resources/trees/FBX/DeadTree_9.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_9.fbx diff --git a/packages/client/resources/trees/FBX/Pine_1.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_1.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Pine_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_1.fbx diff --git a/packages/client/resources/trees/FBX/Pine_2.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_2.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Pine_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_2.fbx diff --git a/packages/client/resources/trees/FBX/Pine_3.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_3.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Pine_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_3.fbx diff --git a/packages/client/resources/trees/FBX/Pine_4.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_4.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Pine_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_4.fbx diff --git a/packages/client/resources/trees/FBX/Pine_5.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_5.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Pine_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_5.fbx diff --git a/packages/client/resources/trees/FBX/Tree_1.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_1.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_1.fbx diff --git a/packages/client/resources/trees/FBX/Tree_10.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_10.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_10.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_10.fbx diff --git a/packages/client/resources/trees/FBX/Tree_2.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_2.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_2.fbx diff --git a/packages/client/resources/trees/FBX/Tree_3.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_3.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_3.fbx diff --git a/packages/client/resources/trees/FBX/Tree_4.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_4.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_4.fbx diff --git a/packages/client/resources/trees/FBX/Tree_5.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_5.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_5.fbx diff --git a/packages/client/resources/trees/FBX/Tree_6.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_6.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_6.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_6.fbx diff --git a/packages/client/resources/trees/FBX/Tree_7.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_7.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_7.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_7.fbx diff --git a/packages/client/resources/trees/FBX/Tree_8.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_8.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_8.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_8.fbx diff --git a/packages/client/resources/trees/FBX/Tree_9.fbx b/packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_9.fbx similarity index 100% rename from packages/client/resources/trees/FBX/Tree_9.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_9.fbx diff --git a/packages/client/resources/trees/License.txt b/packages/quick-3d-mmo-client/src/resources/trees/License.txt similarity index 100% rename from packages/client/resources/trees/License.txt rename to packages/quick-3d-mmo-client/src/resources/trees/License.txt diff --git a/packages/client/resources/trees/OBJ/Birch_1.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_1.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_1.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_1.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_1.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_1.obj diff --git a/packages/client/resources/trees/OBJ/Birch_10.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_10.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_10.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_10.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_10.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_10.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_10.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_10.obj diff --git a/packages/client/resources/trees/OBJ/Birch_2.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_2.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_2.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_2.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_2.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_2.obj diff --git a/packages/client/resources/trees/OBJ/Birch_3.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_3.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_3.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_3.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_3.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_3.obj diff --git a/packages/client/resources/trees/OBJ/Birch_4.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_4.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_4.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_4.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_4.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_4.obj diff --git a/packages/client/resources/trees/OBJ/Birch_5.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_5.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_5.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_5.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_5.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_5.obj diff --git a/packages/client/resources/trees/OBJ/Birch_6.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_6.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_6.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_6.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_6.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_6.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_6.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_6.obj diff --git a/packages/client/resources/trees/OBJ/Birch_7.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_7.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_7.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_7.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_7.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_7.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_7.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_7.obj diff --git a/packages/client/resources/trees/OBJ/Birch_8.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_8.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_8.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_8.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_8.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_8.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_8.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_8.obj diff --git a/packages/client/resources/trees/OBJ/Birch_9.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_9.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_9.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_9.mtl diff --git a/packages/client/resources/trees/OBJ/Birch_9.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_9.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Birch_9.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_9.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_1.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_1.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_1.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_1.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_1.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_1.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_10.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_10.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_10.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_10.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_10.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_10.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_10.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_10.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_2.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_2.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_2.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_2.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_2.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_2.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_3.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_3.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_3.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_3.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_3.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_3.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_4.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_4.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_4.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_4.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_4.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_4.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_5.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_5.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_5.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_5.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_5.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_5.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_6.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_6.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_6.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_6.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_6.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_6.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_6.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_6.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_7.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_7.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_7.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_7.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_7.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_7.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_7.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_7.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_8.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_8.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_8.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_8.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_8.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_8.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_8.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_8.obj diff --git a/packages/client/resources/trees/OBJ/DeadBirch_9.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_9.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_9.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_9.mtl diff --git a/packages/client/resources/trees/OBJ/DeadBirch_9.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_9.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadBirch_9.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_9.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_1.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_1.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_1.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_1.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_1.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_1.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_10.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_10.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_10.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_10.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_10.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_10.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_10.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_10.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_2.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_2.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_2.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_2.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_2.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_2.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_3.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_3.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_3.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_3.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_3.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_3.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_4.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_4.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_4.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_4.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_4.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_4.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_5.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_5.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_5.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_5.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_5.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_5.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_6.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_6.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_6.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_6.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_6.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_6.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_6.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_6.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_7.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_7.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_7.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_7.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_7.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_7.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_7.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_7.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_8.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_8.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_8.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_8.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_8.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_8.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_8.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_8.obj diff --git a/packages/client/resources/trees/OBJ/DeadTree_9.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_9.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_9.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_9.mtl diff --git a/packages/client/resources/trees/OBJ/DeadTree_9.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_9.obj similarity index 100% rename from packages/client/resources/trees/OBJ/DeadTree_9.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_9.obj diff --git a/packages/client/resources/trees/OBJ/Pine_1.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_1.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_1.mtl diff --git a/packages/client/resources/trees/OBJ/Pine_1.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_1.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_1.obj diff --git a/packages/client/resources/trees/OBJ/Pine_2.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_2.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_2.mtl diff --git a/packages/client/resources/trees/OBJ/Pine_2.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_2.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_2.obj diff --git a/packages/client/resources/trees/OBJ/Pine_3.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_3.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_3.mtl diff --git a/packages/client/resources/trees/OBJ/Pine_3.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_3.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_3.obj diff --git a/packages/client/resources/trees/OBJ/Pine_4.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_4.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_4.mtl diff --git a/packages/client/resources/trees/OBJ/Pine_4.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_4.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_4.obj diff --git a/packages/client/resources/trees/OBJ/Pine_5.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_5.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_5.mtl diff --git a/packages/client/resources/trees/OBJ/Pine_5.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_5.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Pine_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_5.obj diff --git a/packages/client/resources/trees/OBJ/Tree_1.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_1.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_1.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_1.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_1.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_1.obj diff --git a/packages/client/resources/trees/OBJ/Tree_10.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_10.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_10.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_10.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_10.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_10.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_10.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_10.obj diff --git a/packages/client/resources/trees/OBJ/Tree_2.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_2.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_2.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_2.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_2.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_2.obj diff --git a/packages/client/resources/trees/OBJ/Tree_3.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_3.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_3.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_3.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_3.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_3.obj diff --git a/packages/client/resources/trees/OBJ/Tree_4.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_4.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_4.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_4.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_4.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_4.obj diff --git a/packages/client/resources/trees/OBJ/Tree_5.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_5.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_5.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_5.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_5.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_5.obj diff --git a/packages/client/resources/trees/OBJ/Tree_6.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_6.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_6.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_6.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_6.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_6.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_6.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_6.obj diff --git a/packages/client/resources/trees/OBJ/Tree_7.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_7.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_7.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_7.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_7.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_7.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_7.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_7.obj diff --git a/packages/client/resources/trees/OBJ/Tree_8.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_8.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_8.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_8.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_8.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_8.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_8.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_8.obj diff --git a/packages/client/resources/trees/OBJ/Tree_9.mtl b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_9.mtl similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_9.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_9.mtl diff --git a/packages/client/resources/trees/OBJ/Tree_9.obj b/packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_9.obj similarity index 100% rename from packages/client/resources/trees/OBJ/Tree_9.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_9.obj diff --git a/packages/client/resources/trees/Preview.jpg b/packages/quick-3d-mmo-client/src/resources/trees/Preview.jpg similarity index 100% rename from packages/client/resources/trees/Preview.jpg rename to packages/quick-3d-mmo-client/src/resources/trees/Preview.jpg diff --git a/packages/client/resources/trees/Textures/Birch_Bark.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Birch_Bark.png similarity index 100% rename from packages/client/resources/trees/Textures/Birch_Bark.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Birch_Bark.png diff --git a/packages/client/resources/trees/Textures/Birch_Leaves_Green.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Birch_Leaves_Green.png similarity index 100% rename from packages/client/resources/trees/Textures/Birch_Leaves_Green.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Birch_Leaves_Green.png diff --git a/packages/client/resources/trees/Textures/Birch_Leaves_Yellow.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Birch_Leaves_Yellow.png similarity index 100% rename from packages/client/resources/trees/Textures/Birch_Leaves_Yellow.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Birch_Leaves_Yellow.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Bark_Dead.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Bark_Dead.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Bark_Dead.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Bark_Dead.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Birch_Bark_Dead.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Leaves_Cyan.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Cyan.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Leaves_Cyan.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Cyan.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Leaves_DarkRed.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_DarkRed.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Leaves_DarkRed.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_DarkRed.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Leaves_Light.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Light.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Leaves_Light.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Light.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Leaves_Orange.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Orange.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Leaves_Orange.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Orange.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Leaves_Pink.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Pink.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Leaves_Pink.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Pink.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Leaves_Purple.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Purple.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Leaves_Purple.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Purple.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Leaves_Red.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Red.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Leaves_Red.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Leaves_Red.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Pine_Leaves_Light.png diff --git a/packages/client/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png similarity index 100% rename from packages/client/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Color Variations/Pine_Leaves_Red.png diff --git a/packages/client/resources/trees/Textures/Leaves_Blue.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Leaves_Blue.png similarity index 100% rename from packages/client/resources/trees/Textures/Leaves_Blue.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Leaves_Blue.png diff --git a/packages/client/resources/trees/Textures/Pine_Leaves.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Pine_Leaves.png similarity index 100% rename from packages/client/resources/trees/Textures/Pine_Leaves.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Pine_Leaves.png diff --git a/packages/client/resources/trees/Textures/Tree_Bark.jpg b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Tree_Bark.jpg similarity index 100% rename from packages/client/resources/trees/Textures/Tree_Bark.jpg rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Tree_Bark.jpg diff --git a/packages/client/resources/trees/Textures/Tree_Leaves.png b/packages/quick-3d-mmo-client/src/resources/trees/Textures/Tree_Leaves.png similarity index 100% rename from packages/client/resources/trees/Textures/Tree_Leaves.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Tree_Leaves.png diff --git a/packages/client/resources/weapons/Blends/Arrow.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Arrow.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Arrow.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Arrow.blend diff --git a/packages/client/resources/weapons/Blends/Axe.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Axe.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe.blend diff --git a/packages/client/resources/weapons/Blends/Axe_Double.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe_Double.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Axe_Double.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe_Double.blend diff --git a/packages/client/resources/weapons/Blends/Axe_Small.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe_Small.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Axe_Small.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe_Small.blend diff --git a/packages/client/resources/weapons/Blends/Bow_Evil.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Evil.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Bow_Evil.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Evil.blend diff --git a/packages/client/resources/weapons/Blends/Bow_Golden.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Golden.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Bow_Golden.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Golden.blend diff --git a/packages/client/resources/weapons/Blends/Bow_Wooden.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Wooden.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Bow_Wooden.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Wooden.blend diff --git a/packages/client/resources/weapons/Blends/Bow_Wooden2.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Wooden2.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Bow_Wooden2.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Wooden2.blend diff --git a/packages/client/resources/weapons/Blends/Claymore.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Claymore.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Claymore.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Claymore.blend diff --git a/packages/client/resources/weapons/Blends/Dagger.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Dagger.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Dagger.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Dagger.blend diff --git a/packages/client/resources/weapons/Blends/Dagger_2.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Dagger_2.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Dagger_2.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Dagger_2.blend diff --git a/packages/client/resources/weapons/Blends/Hammer_Double.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Hammer_Double.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Hammer_Double.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Hammer_Double.blend diff --git a/packages/client/resources/weapons/Blends/Hammer_Small.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Hammer_Small.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Hammer_Small.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Hammer_Small.blend diff --git a/packages/client/resources/weapons/Blends/Scythe.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Scythe.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Scythe.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Scythe.blend diff --git a/packages/client/resources/weapons/Blends/Shield_Celtic_Golden.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Celtic_Golden.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Shield_Celtic_Golden.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Celtic_Golden.blend diff --git a/packages/client/resources/weapons/Blends/Shield_Heater.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Heater.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Shield_Heater.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Heater.blend diff --git a/packages/client/resources/weapons/Blends/Shield_Heater_2.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Heater_2.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Shield_Heater_2.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Heater_2.blend diff --git a/packages/client/resources/weapons/Blends/Shield_Round.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Round.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Shield_Round.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Round.blend diff --git a/packages/client/resources/weapons/Blends/Shield_Round_2.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Round_2.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Shield_Round_2.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Round_2.blend diff --git a/packages/client/resources/weapons/Blends/Spear.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Spear.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Spear.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Spear.blend diff --git a/packages/client/resources/weapons/Blends/Sword.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Sword.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword.blend diff --git a/packages/client/resources/weapons/Blends/Sword_2.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_2.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Sword_2.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_2.blend diff --git a/packages/client/resources/weapons/Blends/Sword_Big.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_Big.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Sword_Big.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_Big.blend diff --git a/packages/client/resources/weapons/Blends/Sword_Golden.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_Golden.blend similarity index 100% rename from packages/client/resources/weapons/Blends/Sword_Golden.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_Golden.blend diff --git a/packages/client/resources/weapons/FBX/Arrow.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Arrow.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Arrow.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Arrow.fbx diff --git a/packages/client/resources/weapons/FBX/Axe.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Axe.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe.fbx diff --git a/packages/client/resources/weapons/FBX/Axe_Double.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe_Double.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Axe_Double.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe_Double.fbx diff --git a/packages/client/resources/weapons/FBX/Axe_Small.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe_Small.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Axe_Small.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe_Small.fbx diff --git a/packages/client/resources/weapons/FBX/Bow_Evil.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Evil.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Bow_Evil.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Evil.fbx diff --git a/packages/client/resources/weapons/FBX/Bow_Golden.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Golden.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Bow_Golden.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Golden.fbx diff --git a/packages/client/resources/weapons/FBX/Bow_Wooden.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Wooden.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Bow_Wooden.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Wooden.fbx diff --git a/packages/client/resources/weapons/FBX/Bow_Wooden2.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Wooden2.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Bow_Wooden2.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Wooden2.fbx diff --git a/packages/client/resources/weapons/FBX/Claymore.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Claymore.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Claymore.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Claymore.fbx diff --git a/packages/client/resources/weapons/FBX/Dagger.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Dagger.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Dagger.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Dagger.fbx diff --git a/packages/client/resources/weapons/FBX/Dagger_2.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Dagger_2.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Dagger_2.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Dagger_2.fbx diff --git a/packages/client/resources/weapons/FBX/Hammer_Double.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Hammer_Double.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Hammer_Double.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Hammer_Double.fbx diff --git a/packages/client/resources/weapons/FBX/Hammer_Small.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Hammer_Small.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Hammer_Small.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Hammer_Small.fbx diff --git a/packages/client/resources/weapons/FBX/Scythe.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Scythe.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Scythe.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Scythe.fbx diff --git a/packages/client/resources/weapons/FBX/Shield_Celtic_Golden.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Celtic_Golden.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Shield_Celtic_Golden.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Celtic_Golden.fbx diff --git a/packages/client/resources/weapons/FBX/Shield_Heater.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Heater.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Shield_Heater.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Heater.fbx diff --git a/packages/client/resources/weapons/FBX/Shield_Heater_2.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Heater_2.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Shield_Heater_2.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Heater_2.fbx diff --git a/packages/client/resources/weapons/FBX/Shield_Round.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Round.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Shield_Round.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Round.fbx diff --git a/packages/client/resources/weapons/FBX/Shield_Round_2.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Round_2.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Shield_Round_2.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Round_2.fbx diff --git a/packages/client/resources/weapons/FBX/Spear.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Spear.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Spear.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Spear.fbx diff --git a/packages/client/resources/weapons/FBX/Sword.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Sword.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword.fbx diff --git a/packages/client/resources/weapons/FBX/Sword_2.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_2.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Sword_2.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_2.fbx diff --git a/packages/client/resources/weapons/FBX/Sword_Big.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_Big.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Sword_Big.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_Big.fbx diff --git a/packages/client/resources/weapons/FBX/Sword_Golden.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_Golden.fbx similarity index 100% rename from packages/client/resources/weapons/FBX/Sword_Golden.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_Golden.fbx diff --git a/packages/client/resources/weapons/License.txt b/packages/quick-3d-mmo-client/src/resources/weapons/License.txt similarity index 100% rename from packages/client/resources/weapons/License.txt rename to packages/quick-3d-mmo-client/src/resources/weapons/License.txt diff --git a/packages/client/resources/weapons/OBJ/Arrow.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Arrow.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Arrow.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Arrow.mtl diff --git a/packages/client/resources/weapons/OBJ/Arrow.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Arrow.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Arrow.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Arrow.obj diff --git a/packages/client/resources/weapons/OBJ/Axe.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Axe.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe.mtl diff --git a/packages/client/resources/weapons/OBJ/Axe.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Axe.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe.obj diff --git a/packages/client/resources/weapons/OBJ/Axe_Double.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Double.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Axe_Double.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Double.mtl diff --git a/packages/client/resources/weapons/OBJ/Axe_Double.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Double.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Axe_Double.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Double.obj diff --git a/packages/client/resources/weapons/OBJ/Axe_Small.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Small.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Axe_Small.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Small.mtl diff --git a/packages/client/resources/weapons/OBJ/Axe_Small.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Small.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Axe_Small.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Small.obj diff --git a/packages/client/resources/weapons/OBJ/Bow_Evil.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Evil.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Bow_Evil.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Evil.mtl diff --git a/packages/client/resources/weapons/OBJ/Bow_Evil.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Evil.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Bow_Evil.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Evil.obj diff --git a/packages/client/resources/weapons/OBJ/Bow_Golden.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Golden.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Bow_Golden.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Golden.mtl diff --git a/packages/client/resources/weapons/OBJ/Bow_Golden.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Golden.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Bow_Golden.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Golden.obj diff --git a/packages/client/resources/weapons/OBJ/Bow_Wooden.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Bow_Wooden.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden.mtl diff --git a/packages/client/resources/weapons/OBJ/Bow_Wooden.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Bow_Wooden.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden.obj diff --git a/packages/client/resources/weapons/OBJ/Bow_Wooden2.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden2.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Bow_Wooden2.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden2.mtl diff --git a/packages/client/resources/weapons/OBJ/Bow_Wooden2.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden2.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Bow_Wooden2.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden2.obj diff --git a/packages/client/resources/weapons/OBJ/Claymore.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Claymore.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Claymore.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Claymore.mtl diff --git a/packages/client/resources/weapons/OBJ/Claymore.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Claymore.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Claymore.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Claymore.obj diff --git a/packages/client/resources/weapons/OBJ/Dagger.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Dagger.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger.mtl diff --git a/packages/client/resources/weapons/OBJ/Dagger.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Dagger.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger.obj diff --git a/packages/client/resources/weapons/OBJ/Dagger_2.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger_2.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Dagger_2.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger_2.mtl diff --git a/packages/client/resources/weapons/OBJ/Dagger_2.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger_2.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Dagger_2.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger_2.obj diff --git a/packages/client/resources/weapons/OBJ/Hammer_Double.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Double.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Hammer_Double.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Double.mtl diff --git a/packages/client/resources/weapons/OBJ/Hammer_Double.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Double.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Hammer_Double.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Double.obj diff --git a/packages/client/resources/weapons/OBJ/Hammer_Small.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Small.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Hammer_Small.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Small.mtl diff --git a/packages/client/resources/weapons/OBJ/Hammer_Small.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Small.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Hammer_Small.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Small.obj diff --git a/packages/client/resources/weapons/OBJ/Scythe.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Scythe.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Scythe.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Scythe.mtl diff --git a/packages/client/resources/weapons/OBJ/Scythe.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Scythe.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Scythe.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Scythe.obj diff --git a/packages/client/resources/weapons/OBJ/Shield_Celtic_Golden.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Celtic_Golden.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Celtic_Golden.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Celtic_Golden.mtl diff --git a/packages/client/resources/weapons/OBJ/Shield_Celtic_Golden.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Celtic_Golden.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Celtic_Golden.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Celtic_Golden.obj diff --git a/packages/client/resources/weapons/OBJ/Shield_Heater.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Heater.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater.mtl diff --git a/packages/client/resources/weapons/OBJ/Shield_Heater.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Heater.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater.obj diff --git a/packages/client/resources/weapons/OBJ/Shield_Heater_2.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater_2.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Heater_2.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater_2.mtl diff --git a/packages/client/resources/weapons/OBJ/Shield_Heater_2.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater_2.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Heater_2.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater_2.obj diff --git a/packages/client/resources/weapons/OBJ/Shield_Round.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Round.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round.mtl diff --git a/packages/client/resources/weapons/OBJ/Shield_Round.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Round.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round.obj diff --git a/packages/client/resources/weapons/OBJ/Shield_Round_2.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round_2.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Round_2.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round_2.mtl diff --git a/packages/client/resources/weapons/OBJ/Shield_Round_2.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round_2.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Shield_Round_2.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round_2.obj diff --git a/packages/client/resources/weapons/OBJ/Spear.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Spear.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Spear.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Spear.mtl diff --git a/packages/client/resources/weapons/OBJ/Spear.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Spear.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Spear.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Spear.obj diff --git a/packages/client/resources/weapons/OBJ/Sword.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Sword.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword.mtl diff --git a/packages/client/resources/weapons/OBJ/Sword.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Sword.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword.obj diff --git a/packages/client/resources/weapons/OBJ/Sword_2.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_2.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Sword_2.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_2.mtl diff --git a/packages/client/resources/weapons/OBJ/Sword_2.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_2.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Sword_2.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_2.obj diff --git a/packages/client/resources/weapons/OBJ/Sword_Big.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Big.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Sword_Big.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Big.mtl diff --git a/packages/client/resources/weapons/OBJ/Sword_Big.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Big.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Sword_Big.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Big.obj diff --git a/packages/client/resources/weapons/OBJ/Sword_Golden.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Golden.mtl similarity index 100% rename from packages/client/resources/weapons/OBJ/Sword_Golden.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Golden.mtl diff --git a/packages/client/resources/weapons/OBJ/Sword_Golden.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Golden.obj similarity index 100% rename from packages/client/resources/weapons/OBJ/Sword_Golden.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Golden.obj diff --git a/packages/client/resources/weapons/Preview.png b/packages/quick-3d-mmo-client/src/resources/weapons/Preview.png similarity index 100% rename from packages/client/resources/weapons/Preview.png rename to packages/quick-3d-mmo-client/src/resources/weapons/Preview.png diff --git a/packages/client/src/attacker-controller.ts b/packages/quick-3d-mmo-client/src/scripts/attacker-controller.ts similarity index 89% rename from packages/client/src/attacker-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/attacker-controller.ts index f18ac8e4..c7df262b 100644 --- a/packages/client/src/attacker-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/attacker-controller.ts @@ -1,7 +1,7 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants } from 'shared' +import { Constants } from 'quick-3d-mmo-shared' const { EVENT_TYPES } = { ...Constants }; class AttackController extends Component { diff --git a/packages/client/src/blood-effect.ts b/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts similarity index 94% rename from packages/client/src/blood-effect.ts rename to packages/quick-3d-mmo-client/src/scripts/blood-effect.ts index 4a95cf1f..5b0d62e7 100644 --- a/packages/client/src/blood-effect.ts +++ b/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { ParticleEmitter, ParticleSystem } from "./particle-system"; import { Component } from "./entity"; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; const { CLASS_TYPES_ENUM, EVENT_TYPES, STATE_TYPES } = Constants; @@ -124,12 +124,12 @@ class BloodEffect extends Component { this.bloodFX_ = new ParticleSystem({ camera: params.camera, parent: params.scene, - texture: './resources/textures/whitePuff14.png', + texture: './src/resources/textures/whitePuff14.png', }); this.fireFX_ = new ParticleSystem({ camera: params.camera, parent: params.scene, - texture: './resources/textures/fire.png', + texture: './src/resources/textures/fire.png', }); } @@ -153,13 +153,15 @@ class BloodEffect extends Component { } for (let e of msg.value) { - if (e.type != STATE_TYPES.ATTACK) { + if (e.type != STATE_TYPES.ATTACK || !e?.attacker) { continue; } // Another hack - const hc = e.attacker.GetComponent('HealthComponent'); - + const hc = e?.attacker?.GetComponent('HealthComponent'); + if(!hc) { + return; + } if (hc.stats_.desc.character.class != CLASS_TYPES_ENUM.SORCEROR) { this.EmitBloodFX_(); } else { diff --git a/packages/client/src/entity.ts b/packages/quick-3d-mmo-client/src/scripts/entity.ts similarity index 93% rename from packages/client/src/entity.ts rename to packages/quick-3d-mmo-client/src/scripts/entity.ts index 7f500605..4091ed45 100644 --- a/packages/client/src/entity.ts +++ b/packages/quick-3d-mmo-client/src/scripts/entity.ts @@ -8,7 +8,7 @@ class Entity { _handlers: {}; parent_: any; dead_: boolean; - Account: any; + Account: any; constructor() { this._name = null; diff --git a/packages/quick-3d-mmo-client/src/scripts/equip-weapon-component.ts b/packages/quick-3d-mmo-client/src/scripts/equip-weapon-component.ts new file mode 100644 index 00000000..13f89c68 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/equip-weapon-component.ts @@ -0,0 +1,133 @@ +import * as THREE from 'three'; + +import { Component } from './entity'; +import { Defs, Constants } from 'quick-3d-mmo-shared'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; + +const { CHARACTER_MODELS } = Defs; +const { EVENT_TYPES, KNOWN_ENTITIES } = Constants; + +class EquipWeapon extends Component { + params_: any; + target_: any; + name_: any; + anchor_: any; + _bones: any; + + constructor(params) { + super(); + this.params_ = params; + this.target_ = null; + this.name_ = null; + if(!this.params_?.desc) { + return; + } + const classType = this.params_.desc.character.class; + const modelData = CHARACTER_MODELS[classType]; + this.anchor_ = modelData.anchors.rightHand; + } + + InitComponent() { + this._RegisterHandler(EVENT_TYPES.LOAD_CHARACTER, (m) => this._OnCharacterLoaded(m)); + this._RegisterHandler(EVENT_TYPES.INVENTORY_EQUIP, (m) => this._OnEquip(m)); + } + + _OnCharacterLoaded(msg) { + this._bones = msg.bones; + this._AttachTarget(); + } + + _AttachTarget() { + if (this._bones && this.target_) { + this._bones[this.anchor_].add(this.target_); + } + } + + GetItemDefinition_(name) { + const database = this.FindEntity(KNOWN_ENTITIES.DATABASE).GetComponent( + KNOWN_ENTITIES.INVENTORY_DATABASE_CONTROLLER); + return database.Find(name); + } + + _OnEquip(msg) { + if (msg.value == this.name_) { + return; + } + + if (this.target_) { + this._UnloadModels(); + } + const inventory = this.GetComponent(KNOWN_ENTITIES.INVENTORY_CONTROLLER); + const item = this.GetItemDefinition_(msg.value); + + this.name_ = msg.value; + + if (item) { + this._LoadModels(item, () => { + this._AttachTarget(); + }); + } + } + + _UnloadModels() { + if (this.target_) { + this.target_.parent.remove(this.target_); + // Probably need to free the memory properly, whatever + this.target_ = null; + } + } + + _LoadModels(item, cb) { + const loader = new FBXLoader(); + loader.setPath('./src/resources/weapons/FBX/'); + loader.load(item.renderParams.name + '.fbx', (fbx) => { + this.target_ = fbx; + this.target_.scale.setScalar(item.renderParams.scale); + // this.target_.rotateY(Math.PI); + this.target_.rotateX(Math.PI / 2); + // this.target_.rotateY(-1); + + this.target_.traverse(c => { + c.castShadow = true; + c.receiveShadow = true; + + // Do this instead of something smart like re-exporting. + let materials = c.material; + let newMaterials = []; + if (!(c.material instanceof Array)) { + materials = [c.material]; + } + + for (let m of materials) { + if (m) { + const c = new THREE.Color().copy(m.color); + c.multiplyScalar(0.75); + newMaterials.push(new THREE.MeshStandardMaterial({ + color: c, + name: m.name, + metalness: 1.0, + })); + } + } + + if (!(c.material instanceof Array)) { + c.material = newMaterials[0]; + } else { + c.material = newMaterials; + } + + }); + + cb(); + + this.Broadcast({ + topic: EVENT_TYPES.LOAD_WEAPON, + model: this.target_, + bones: this._bones, + }); + }); + } +}; +export { + EquipWeapon +} \ No newline at end of file diff --git a/packages/client/src/finite-state-machine.ts b/packages/quick-3d-mmo-client/src/scripts/finite-state-machine.ts similarity index 100% rename from packages/client/src/finite-state-machine.ts rename to packages/quick-3d-mmo-client/src/scripts/finite-state-machine.ts diff --git a/packages/client/src/floating-name.ts b/packages/quick-3d-mmo-client/src/scripts/floating-name.ts similarity index 97% rename from packages/client/src/floating-name.ts rename to packages/quick-3d-mmo-client/src/scripts/floating-name.ts index 6f25400b..e8841c8a 100644 --- a/packages/client/src/floating-name.ts +++ b/packages/quick-3d-mmo-client/src/scripts/floating-name.ts @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants, Defs } from 'shared'; +import { Constants, Defs } from 'quick-3d-mmo-shared'; const { EVENT_TYPES, CHARACTER_MODELS } = {...Constants, ...Defs}; diff --git a/packages/client/src/gltf-component.ts b/packages/quick-3d-mmo-client/src/scripts/gltf-component.ts similarity index 95% rename from packages/client/src/gltf-component.ts rename to packages/quick-3d-mmo-client/src/scripts/gltf-component.ts index 14b11a54..5d9131df 100644 --- a/packages/client/src/gltf-component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/gltf-component.ts @@ -4,7 +4,7 @@ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; const { EVENT_TYPES } = Constants; diff --git a/packages/client/src/health-bar.ts b/packages/quick-3d-mmo-client/src/scripts/health-bar.ts similarity index 94% rename from packages/client/src/health-bar.ts rename to packages/quick-3d-mmo-client/src/scripts/health-bar.ts index 60155a99..adc09732 100644 --- a/packages/client/src/health-bar.ts +++ b/packages/quick-3d-mmo-client/src/scripts/health-bar.ts @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Math as math } from 'shared'; +import { Math as math } from 'quick-3d-mmo-shared'; const _VS = ` varying vec2 vUV; diff --git a/packages/client/src/health-component.ts b/packages/quick-3d-mmo-client/src/scripts/health-component.ts similarity index 94% rename from packages/client/src/health-component.ts rename to packages/quick-3d-mmo-client/src/scripts/health-component.ts index 23050bdd..724603be 100644 --- a/packages/client/src/health-component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/health-component.ts @@ -1,4 +1,4 @@ -import { Constants } from "shared"; +import { Constants } from 'quick-3d-mmo-shared'; import { Component } from "./entity"; const { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; diff --git a/packages/client/src/inventory-controller.ts b/packages/quick-3d-mmo-client/src/scripts/inventory-controller.ts similarity index 93% rename from packages/client/src/inventory-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/inventory-controller.ts index a7cc2e29..627928a4 100644 --- a/packages/client/src/inventory-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/inventory-controller.ts @@ -1,4 +1,4 @@ -import {Constants} from 'shared'; +import {Constants} from 'quick-3d-mmo-shared'; import { Component } from './entity'; const { EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES } = Constants; @@ -84,7 +84,7 @@ class UIInventoryController extends Component { const div = document.getElementById(slot); const item = this.GetItemDefinition_(itemName); if (item?.renderParams?.icon) { - const path = './resources/icons/weapons/' + item.renderParams.icon; + const path = './src/resources/icons/weapons/' + item.renderParams.icon; div.style.backgroundImage = "url('" + path + "')"; } else { div.style.backgroundImage = ''; diff --git a/packages/client/src/level-up-component.ts b/packages/quick-3d-mmo-client/src/scripts/level-up-component.ts similarity index 93% rename from packages/client/src/level-up-component.ts rename to packages/quick-3d-mmo-client/src/scripts/level-up-component.ts index f0cecfbf..e0e97311 100644 --- a/packages/client/src/level-up-component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/level-up-component.ts @@ -30,7 +30,7 @@ class LevelUpComponent extends Component { this._particles = new ParticleSystem({ camera: params.camera, parent: params.scene, - texture: './resources/textures/ball.png', + texture: './textures/ball.png', }); this._particles._alphaSpline.AddPoint(0.0, 0.0); this._particles._alphaSpline.AddPoint(0.1, 1.0); diff --git a/packages/client/src/load-controller.ts b/packages/quick-3d-mmo-client/src/scripts/load-controller.ts similarity index 100% rename from packages/client/src/load-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/load-controller.ts diff --git a/packages/client/src/loading-manager.ts b/packages/quick-3d-mmo-client/src/scripts/loading-manager.ts similarity index 100% rename from packages/client/src/loading-manager.ts rename to packages/quick-3d-mmo-client/src/scripts/loading-manager.ts diff --git a/packages/client/src/main.ts b/packages/quick-3d-mmo-client/src/scripts/main.ts similarity index 86% rename from packages/client/src/main.ts rename to packages/quick-3d-mmo-client/src/scripts/main.ts index c9b2bec6..4c3648cd 100644 --- a/packages/client/src/main.ts +++ b/packages/quick-3d-mmo-client/src/scripts/main.ts @@ -1,5 +1,3 @@ -import { GUI } from 'shared'; - import { Entity } from './entity'; import { UIController } from './ui-controller'; import { LevelUpComponentSpawner } from './level-up-component'; @@ -9,7 +7,7 @@ import { LoadController } from './load-controller'; import { PlayerSpawner, NetworkEntitySpawner } from './spawners'; import { TerrainChunkManager } from './terrain'; import { InventoryDatabaseController } from './inventory-controller'; -import { Constants, Defs, EntityManager as aEntityManager, SpatialHashGrid as aSpatialHashGrid } from 'shared'; +import { Constants, Defs, EntityManager as aEntityManager, SpatialHashGrid as aSpatialHashGrid } from 'quick-3d-mmo-shared'; import { ThreeJSController } from './threejs_component'; const { WEAPONS_DATA, DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, EntityManager, SpatialHashGrid } = { ...Constants, ...Defs, ...aEntityManager, ...aSpatialHashGrid }; @@ -18,18 +16,27 @@ class CrappyMMOAttempt { entityManager_: any; grid_: any; previousRAF_: any; - _guiParams: { general: {}; }; + _guiParams = {general: {}, biomes: { + octaves: 2, + persistence: 0.5, + lacunarity: 2.0, + scale: 1024.0, + noiseType: 'simplex', + seed: 2, + exponentiation: 2, + height: 1.0 + }}; _gui: any; scene_: any; camera_: any; threejs_: any; - constructor() { + constructor(params?) { + console.log("main new CrappyMMOAttempt", params) this._Initialize(); } _Initialize() { this.entityManager_ = new EntityManager(); - document.getElementById(DOM_IDS.LOGIN_UI).style.visibility = 'visible'; document.getElementById(DOM_IDS.LOGIN_BUTTON).onclick = () => { this.OnGameStarted_(); @@ -37,8 +44,7 @@ class CrappyMMOAttempt { } OnGameStarted_() { - this.CreateGUI_(); - + // this.CreateGUI_(); this.grid_ = new SpatialHashGrid( [[-1000, -1000], [1000, 1000]], [100, 100]); @@ -49,27 +55,17 @@ class CrappyMMOAttempt { this.RAF_(); } - CreateGUI_() { - this._guiParams = { - general: { - }, - }; - this._gui = new GUI.GUI(null); - - const generalRollup = this._gui.addFolder('General'); - this._gui.close(); - } LoadControllers_() { + console.log("LoadControllers_()") const threejs = new Entity(); threejs.AddComponent(new ThreeJSController()); this.entityManager_.Add(threejs, null); // Hack - this.scene_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).scene_; - this.camera_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).camera_; - this.threejs_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER).threejs_; - + this.scene_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER)?.scene_; + this.camera_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER)?.camera_; + this.threejs_ = threejs.GetComponent(NAMED_COMPONENTS.THREEJS_CONTROLLER)?.threejs_; const ui = new Entity(); ui.AddComponent(new UIController(null)); this.entityManager_.Add(ui, KNOWN_ENTITIES.UI); @@ -81,8 +77,7 @@ class CrappyMMOAttempt { const t = new Entity(); t.AddComponent(new TerrainChunkManager({ scene: this.scene_, - target: 'player', - gui: this._gui, + target: KNOWN_ENTITIES.PLAYER, guiParams: this._guiParams, threejs: this.threejs_, })); @@ -146,6 +141,7 @@ class CrappyMMOAttempt { RAF_() { requestAnimationFrame((t) => { + // console.log("RAF_()") if (this.previousRAF_ === null) { this.previousRAF_ = t; } @@ -172,4 +168,5 @@ let _APP = null; window.addEventListener('DOMContentLoaded', () => { _APP = new CrappyMMOAttempt(); + }); diff --git a/packages/client/src/network-controller.ts b/packages/quick-3d-mmo-client/src/scripts/network-controller.ts similarity index 95% rename from packages/client/src/network-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/network-controller.ts index 0605c1f3..4ed332bd 100644 --- a/packages/client/src/network-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/network-controller.ts @@ -1,4 +1,4 @@ -import {Constants} from 'shared'; +import {Constants} from 'quick-3d-mmo-shared'; import { io } from 'socket.io-client'; const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; @@ -36,13 +36,12 @@ class NetworkController extends Component { SetupSocket_() { this.socket_ = io('ws://localhost:3000', { - reconnection: false, + reconnection: true, transports: ['websocket'], timeout: 10000, }); this.socket_.on(EVENT_TYPES.CONNECT, () => { - console.log(this.socket_.id); const randomName = this.GenerateRandomName_(); // Input validation is for losers this.socket_.emit( @@ -76,7 +75,7 @@ class NetworkController extends Component { GetEntityID_(serverID) { if (serverID == this.playerID_) { - return 'player'; + return KNOWN_ENTITIES.PLAYER; } else { return '__npc__' + serverID; } @@ -95,7 +94,7 @@ class NetworkController extends Component { player.Broadcast({ topic: EVENT_TYPES.NETWORK_INVENTORY, - inventory: d.desc.character.inventory, + inventory: d?.desc?.character?.inventory, }); console.log('entering world: ' + d.id); @@ -117,7 +116,7 @@ class NetworkController extends Component { npc.Broadcast({ topic: EVENT_TYPES.NETWORK_INVENTORY, - inventory: u.desc.character.inventory, + inventory: u?.desc?.character?.inventory, }); } else { npc = this.FindEntity(id); diff --git a/packages/client/src/network-entity-controller.ts b/packages/quick-3d-mmo-client/src/scripts/network-entity-controller.ts similarity index 98% rename from packages/client/src/network-entity-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/network-entity-controller.ts index 3e45efa2..034909a5 100644 --- a/packages/client/src/network-entity-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/network-entity-controller.ts @@ -1,7 +1,7 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; const { EVENT_TYPES } = Constants; diff --git a/packages/client/src/network-player-controller.ts b/packages/quick-3d-mmo-client/src/scripts/network-player-controller.ts similarity index 97% rename from packages/client/src/network-player-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/network-player-controller.ts index 4278aaf4..1e340aa1 100644 --- a/packages/client/src/network-player-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/network-player-controller.ts @@ -1,7 +1,7 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; diff --git a/packages/client/src/npc-entity.ts b/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts similarity index 92% rename from packages/client/src/npc-entity.ts rename to packages/quick-3d-mmo-client/src/scripts/npc-entity.ts index 1c682ae1..3ea3f2d2 100644 --- a/packages/client/src/npc-entity.ts +++ b/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { Component } from './entity'; import { CharacterFSM, BasicCharacterControllerProxy } from './player-entity' -import { Constants, Defs } from 'shared'; +import { Constants, Defs } from 'quick-3d-mmo-shared'; const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, STATE_TYPES, CHARACTER_MODELS } = { ...Constants, ...Defs }; @@ -89,7 +89,10 @@ class NPCController extends Component { } LoadModels_() { - const classType = this.params_.desc.character.class; + if(!this?.params_?.desc?.character?.class) { + return; + } + const classType = this.params_?.desc?.character?.class; const modelData = CHARACTER_MODELS[classType]; const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); diff --git a/packages/client/src/particle-system.ts b/packages/quick-3d-mmo-client/src/scripts/particle-system.ts similarity index 100% rename from packages/client/src/particle-system.ts rename to packages/quick-3d-mmo-client/src/scripts/particle-system.ts diff --git a/packages/client/src/player-entity.ts b/packages/quick-3d-mmo-client/src/scripts/player-entity.ts similarity index 97% rename from packages/client/src/player-entity.ts rename to packages/quick-3d-mmo-client/src/scripts/player-entity.ts index 8d98ae95..e7475d2f 100644 --- a/packages/client/src/player-entity.ts +++ b/packages/quick-3d-mmo-client/src/scripts/player-entity.ts @@ -3,7 +3,7 @@ import * as THREE from 'three'; import { Component } from './entity'; import { FiniteStateMachine } from './finite-state-machine'; import { IdleState, WalkState, RunState, AttackState, DanceState, DeathState } from './player-state'; -import { Constants, Defs } from 'shared'; +import { Constants, Defs } from 'quick-3d-mmo-shared'; const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, CHARACTER_MODELS } = {...Constants, ...Defs}; @@ -86,7 +86,10 @@ class BasicCharacterController extends Component { } OnDeath_(msg) { - this.stateMachine_.SetState(STATE_TYPES.DEATH); + if(!this.stateMachine_) { + console.log("Couldn't find state machine"); + } + this.stateMachine_?.SetState?.(STATE_TYPES.DEATH); } LoadModels_() { @@ -95,6 +98,7 @@ class BasicCharacterController extends Component { const loader = this.FindEntity(KNOWN_ENTITIES.LOADER).GetComponent('LoadController'); loader.LoadSkinnedGLB(modelData.path, modelData.base, (glb) => { + this.target_ = glb.scene; this.target_.scale.setScalar(modelData.scale); this.target_.visible = false; diff --git a/packages/client/src/player-input.ts b/packages/quick-3d-mmo-client/src/scripts/player-input.ts similarity index 98% rename from packages/client/src/player-input.ts rename to packages/quick-3d-mmo-client/src/scripts/player-input.ts index 09b8de10..8362ed41 100644 --- a/packages/client/src/player-input.ts +++ b/packages/quick-3d-mmo-client/src/scripts/player-input.ts @@ -1,6 +1,6 @@ import * as THREE from 'three'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; import { Component } from "./entity"; const { DOM_IDS, EVENT_TYPES } = Constants; diff --git a/packages/client/src/player-state.ts b/packages/quick-3d-mmo-client/src/scripts/player-state.ts similarity index 99% rename from packages/client/src/player-state.ts rename to packages/quick-3d-mmo-client/src/scripts/player-state.ts index 1f9c8f2a..a529e885 100644 --- a/packages/client/src/player-state.ts +++ b/packages/quick-3d-mmo-client/src/scripts/player-state.ts @@ -1,6 +1,6 @@ import * as THREE from 'three'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; const { STATE_TYPES } = Constants; diff --git a/packages/client/src/quadtree.ts b/packages/quick-3d-mmo-client/src/scripts/quadtree.ts similarity index 100% rename from packages/client/src/quadtree.ts rename to packages/quick-3d-mmo-client/src/scripts/quadtree.ts diff --git a/packages/client/src/quest-component.ts b/packages/quick-3d-mmo-client/src/scripts/quest-component.ts similarity index 93% rename from packages/client/src/quest-component.ts rename to packages/quick-3d-mmo-client/src/scripts/quest-component.ts index 8f387965..75f99b1a 100644 --- a/packages/client/src/quest-component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/quest-component.ts @@ -1,4 +1,4 @@ -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; import { Component } from "./entity"; const { DOM_IDS, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; diff --git a/packages/client/src/render-component.ts b/packages/quick-3d-mmo-client/src/scripts/render-component.ts similarity index 98% rename from packages/client/src/render-component.ts rename to packages/quick-3d-mmo-client/src/scripts/render-component.ts index 6c6dc740..4f78f355 100644 --- a/packages/client/src/render-component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/render-component.ts @@ -3,7 +3,7 @@ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; const { KNOWN_ENTITIES } = { ...Constants }; diff --git a/packages/client/src/scenery-controller.ts b/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts similarity index 90% rename from packages/client/src/scenery-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts index 0dacf28b..84c84775 100644 --- a/packages/client/src/scenery-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts @@ -2,10 +2,10 @@ import * as THREE from 'three'; import { Entity, Component } from './entity'; import { RenderComponent } from './render-component'; -import { SpatialGridController } from './spatial-grid-controller.js'; +import { SpatialGridController } from './spatial-grid-controller'; -import { Math as math, Noise as noise, Constants } from 'shared'; -import type {Noise as INoise} from 'shared'; +import { Math as math, Noise as noise, Constants } from 'quick-3d-mmo-shared'; +import type {Noise as INoise} from 'quick-3d-mmo-shared'; const {KNOWN_ENTITIES} = Constants; const {Noise} = noise; @@ -13,7 +13,7 @@ const {Noise} = noise; const _SCENERY = { birch1: { base: 'Birch_1.fbx', - resourcePath: './resources/trees/FBX/', + resourcePath: './src/resources/trees/FBX/', names: { Bark: 'Birch_Bark.png', Leaves: 'Birch_Leaves_Yellow.png' @@ -24,7 +24,7 @@ const _SCENERY = { }, tree1: { base: 'Tree_1.fbx', - resourcePath: './resources/trees/FBX/', + resourcePath: './src/resources/trees/FBX/', names: { Bark: 'Tree_Bark.jpg', Leaves: 'Leaves_Blue.png' @@ -35,35 +35,35 @@ const _SCENERY = { }, rock1: { base: 'Rock_1.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './src/resources/nature/FBX/', names: {}, scale: 0.025, biomes: ['arid', 'desert'], }, rockMoss1: { base: 'Rock_Moss_1.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './src/resources/nature/FBX/', names: {}, scale: 0.025, biomes: ['forest'], }, plant1: { base: 'Plant_1.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './src/resources/nature/FBX/', names: {}, scale: 0.05, biomes: ['forest', 'arid'], }, grass1: { base: 'Grass_1.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './src/resources/nature/FBX/', names: {}, scale: 0.05, biomes: ['forest', 'arid'], }, flowers1: { base: 'Flowers.fbx', - resourcePath: './resources/nature/FBX/', + resourcePath: './src/resources/nature/FBX/', names: {}, scale: 0.05, biomes: ['forest'], @@ -132,7 +132,7 @@ class SceneryController extends Component { const e = new Entity(); e.AddComponent(new RenderComponent({ scene: this.params_.scene, - resourcePath: './resources/nature2/GLTF/', + resourcePath: 'src/resources/nature2/GLTF/', resourceName: 'Cloud' + index + '.glb', scale: Math.random() * 20 + 40, emissive: new THREE.Color(0x000000), @@ -183,7 +183,7 @@ class SceneryController extends Component { resourcePath: randomProp.resourcePath, resourceName: randomProp.base, textures: { - resourcePath: './resources/trees/Textures/', + resourcePath: 'src/resources/trees/Textures/', names: randomProp.names, wrap: true, }, @@ -212,7 +212,7 @@ class SceneryController extends Component { } SpawnCrap_() { - const player = this.FindEntity('player'); + const player = this.FindEntity(KNOWN_ENTITIES.PLAYER); if (!player) { return; } diff --git a/packages/client/src/sorceror-effect.ts b/packages/quick-3d-mmo-client/src/scripts/sorceror-effect.ts similarity index 96% rename from packages/client/src/sorceror-effect.ts rename to packages/quick-3d-mmo-client/src/scripts/sorceror-effect.ts index e3837aa8..f9550c95 100644 --- a/packages/client/src/sorceror-effect.ts +++ b/packages/quick-3d-mmo-client/src/scripts/sorceror-effect.ts @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { ParticleEmitter, ParticleSystem } from "./particle-system"; import { Component } from "./entity"; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; const { EVENT_TYPES } = Constants; @@ -64,7 +64,7 @@ class SorcerorEffect extends Component { this.particles_ = new ParticleSystem({ camera: params.camera, parent: params.scene, - texture: './resources/textures/fire.png', + texture: './src/resources/textures/fire.png', }); } diff --git a/packages/client/src/spatial-grid-controller.ts b/packages/quick-3d-mmo-client/src/scripts/spatial-grid-controller.ts similarity index 100% rename from packages/client/src/spatial-grid-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/spatial-grid-controller.ts diff --git a/packages/client/src/spawners.ts b/packages/quick-3d-mmo-client/src/scripts/spawners.ts similarity index 88% rename from packages/client/src/spawners.ts rename to packages/quick-3d-mmo-client/src/scripts/spawners.ts index 519ebb05..14241fff 100644 --- a/packages/client/src/spawners.ts +++ b/packages/quick-3d-mmo-client/src/scripts/spawners.ts @@ -5,7 +5,7 @@ import { HealthComponent } from './health-component'; import { BasicCharacterControllerInput } from './player-input'; import { SpatialGridController } from './spatial-grid-controller'; import { InventoryController, UIInventoryController } from './inventory-controller'; -import { equip_weapon_component } from './equip-weapon-component'; +import { EquipWeapon } from './equip-weapon-component'; import { AttackController } from './attacker-controller'; import { NPCController } from './npc-entity'; import { NetworkEntityController } from './network-entity-controller'; @@ -13,7 +13,8 @@ import { NetworkEntityController as NetworkPlayerController } from './network-pl import { FloatingName } from './floating-name'; import { SorcerorEffect } from './sorceror-effect'; import { BloodEffect } from './blood-effect'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; +import { KNOWN_ENTITIES } from 'quick-3d-mmo-shared/src/constants'; const { CLASS_TYPES_ENUM } = Constants; @@ -30,13 +31,13 @@ class PlayerSpawner extends Component { scene: this.params_.scene, desc: playerParams, }; - + // debugger; const player = new Entity(); player.Account = playerParams.account; player.AddComponent(new BasicCharacterControllerInput(params)); player.AddComponent(new BasicCharacterController(params)); player.AddComponent( - new equip_weapon_component.EquipWeapon({ desc: playerParams })); + new EquipWeapon({ desc: playerParams })); player.AddComponent(new UIInventoryController(params)); player.AddComponent(new InventoryController(params)); player.AddComponent(new HealthComponent({ @@ -74,7 +75,7 @@ class PlayerSpawner extends Component { player.AddComponent( new SorcerorEffect(params)); } - this.Manager.Add(player, 'player'); + this.Manager.Add(player, KNOWN_ENTITIES.PLAYER); return player; } @@ -89,7 +90,7 @@ class NetworkEntitySpawner extends Component { Spawn(name, desc) { const npc = new Entity(); - npc.Account = desc.account; + npc.Account = desc?.account; npc.AddComponent(new NPCController({ camera: this.params_.camera, scene: this.params_.scene, @@ -112,18 +113,18 @@ class NetworkEntitySpawner extends Component { { grid: this.params_.grid })); npc.AddComponent( new NetworkEntityController()); - if (desc.account.name) { + if (desc?.account?.name ?? "Undefined desc.account.name") { npc.AddComponent( new FloatingName({ desc: desc })); } npc.AddComponent( - new equip_weapon_component.EquipWeapon({ desc: desc })); + new EquipWeapon({ desc: desc })); npc.AddComponent(new InventoryController()); npc.AddComponent(new BloodEffect({ camera: this.params_.camera, scene: this.params_.scene, })); - if (desc.character.class == CLASS_TYPES_ENUM.SORCEROR) { + if (desc?.character?.class == CLASS_TYPES_ENUM.SORCEROR) { npc.AddComponent( new SorcerorEffect({ camera: this.params_.camera, diff --git a/packages/client/src/terrain-builder-threaded-worker.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded-worker.ts similarity index 99% rename from packages/client/src/terrain-builder-threaded-worker.ts rename to packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded-worker.ts index a67bc014..6a63dca9 100644 --- a/packages/client/src/terrain-builder-threaded-worker.ts +++ b/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded-worker.ts @@ -2,7 +2,7 @@ import * as THREE from 'three'; import { TextureSplatter } from './texture-splatter'; -import { TerrainHeight, Noise as aNoise, Math as math } from 'shared'; +import { TerrainHeight, Noise as aNoise, Math as math } from 'quick-3d-mmo-shared'; const { Noise, HeightGenerator } = { ...TerrainHeight, ...aNoise }; diff --git a/packages/client/src/terrain-builder-threaded.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded.ts similarity index 91% rename from packages/client/src/terrain-builder-threaded.ts rename to packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded.ts index 6fff9a18..634993ca 100644 --- a/packages/client/src/terrain-builder-threaded.ts +++ b/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded.ts @@ -1,4 +1,5 @@ import { TerrainChunk } from './terrain-chunk'; +import TerrainWorker from "worker-loader!./worker"; const _NUM_WORKERS = 4; @@ -11,10 +12,15 @@ class WorkerThread { _id: number; constructor(s) { - this._worker = new Worker(s, { type: 'module' }); + this._worker = new TerrainWorker(); + // test. Look for enqueue below + // this._worker.postMessage("build_chunk") this._worker.onmessage = (e) => { this._OnMessage(e); }; + this._worker.onerror = (event) => { + console.error(event) + } this._resolve = null; this._id = _IDs++; } @@ -85,10 +91,10 @@ class TerrainChunkRebuilder_Threaded { constructor(params) { this._pool = {}; this._old = []; - this._workerPool = new WorkerThreadPool( - _NUM_WORKERS, 'src/terrain-builder-threaded-worker.js'); + _NUM_WORKERS, './terrain-builder-threaded-worker.js'); + this._params = params; } diff --git a/packages/client/src/terrain-builder.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-builder.ts similarity index 100% rename from packages/client/src/terrain-builder.ts rename to packages/quick-3d-mmo-client/src/scripts/terrain-builder.ts diff --git a/packages/client/src/terrain-chunk.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-chunk.ts similarity index 100% rename from packages/client/src/terrain-chunk.ts rename to packages/quick-3d-mmo-client/src/scripts/terrain-chunk.ts diff --git a/packages/client/src/terrain-shader.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-shader.ts similarity index 100% rename from packages/client/src/terrain-shader.ts rename to packages/quick-3d-mmo-client/src/scripts/terrain-shader.ts diff --git a/packages/client/src/terrain.ts b/packages/quick-3d-mmo-client/src/scripts/terrain.ts similarity index 73% rename from packages/client/src/terrain.ts rename to packages/quick-3d-mmo-client/src/scripts/terrain.ts index 84fd9258..756c93de 100644 --- a/packages/client/src/terrain.ts +++ b/packages/quick-3d-mmo-client/src/scripts/terrain.ts @@ -7,7 +7,7 @@ import { TerrainChunkRebuilder_Threaded } from './terrain-builder-threaded'; import { TextureSplatter } from './texture-splatter'; import { TextureAtlas } from './textures'; import { utils } from './utils'; -import { Noise as aNoise, TerrainHeight, TerrainConstants } from 'shared'; +import { Noise as aNoise, TerrainHeight, TerrainConstants } from 'quick-3d-mmo-shared'; const { QT_MIN_CELL_SIZE, @@ -40,35 +40,34 @@ class TerrainChunkManager extends Component { const loader = new THREE.TextureLoader(); - const noiseTexture = loader.load('./resources/terrain/simplex-png'); + const noiseTexture = loader.load('src/resources/terrain/simplex-png'); noiseTexture.wrapS = THREE.RepeatWrapping; noiseTexture.wrapT = THREE.RepeatWrapping; - const diffuse = new TextureAtlas(params); diffuse.Load('diffuse', [ - './resources/terrain/dirt_01_diffuse-1024.png', - './resources/terrain/grass1-albedo3-1024.png', - './resources/terrain/sandyground-albedo-1024.png', - './resources/terrain/worn-bumpy-rock-albedo-1024.png', - './resources/terrain/rock-snow-ice-albedo-1024.png', - './resources/terrain/snow-packed-albedo-1024.png', - './resources/terrain/rough-wet-cobble-albedo-1024.png', - // './resources/terrain/sandy-rocks1-albedo-1024.png', - './resources/terrain/bark1-albedo.jpg', + 'src/resources/terrain/dirt_01_diffuse-1024.png', + 'src/resources/terrain/grass1-albedo3-1024.png', + 'src/resources/terrain/sandyground-albedo-1024.png', + 'src/resources/terrain/worn-bumpy-rock-albedo-1024.png', + 'src/resources/terrain/rock-snow-ice-albedo-1024.png', + 'src/resources/terrain/snow-packed-albedo-1024.png', + 'src/resources/terrain/rough-wet-cobble-albedo-1024.png', + // 'resources/terrain/sandy-rocks1-albedo-1024.png', + 'src/resources/terrain/bark1-albedo.jpg', ]); const normal = new TextureAtlas(params); normal.Load('normal', [ - './resources/terrain/dirt_01_normal-1024.jpg', - './resources/terrain/grass1-normal-1024.jpg', - './resources/terrain/sandyground-normal-1024.jpg', - './resources/terrain/worn-bumpy-rock-normal-1024.jpg', - './resources/terrain/rock-snow-ice-normal-1024.jpg', - './resources/terrain/snow-packed-normal-1024.jpg', - './resources/terrain/rough-wet-cobble-normal-1024.jpg', - // './resources/terrain/sandy-rocks1-normal-1024.jpg', - './resources/terrain/bark1-normal3.jpg', + 'src/resources/terrain/dirt_01_normal-1024.jpg', + 'src/resources/terrain/grass1-normal-1024.jpg', + 'src/resources/terrain/sandyground-normal-1024.jpg', + 'src/resources/terrain/worn-bumpy-rock-normal-1024.jpg', + 'src/resources/terrain/rock-snow-ice-normal-1024.jpg', + 'src/resources/terrain/snow-packed-normal-1024.jpg', + 'src/resources/terrain/rough-wet-cobble-normal-1024.jpg', + // 'src/resources/terrain/sandy-rocks1-normal-1024.jpg', + 'src/resources/terrain/bark1-normal3.jpg', ]); this._material = new THREE.MeshStandardMaterial({ @@ -88,8 +87,8 @@ class TerrainChunkManager extends Component { const fi1 = s.fragmentShader.search('#include '); s.fragmentShader = [s.fragmentShader.slice(0, fi1) + PS2 + s.fragmentShader.slice(fi1)].join(''); - s.uniforms.TRIPLANAR_normalMap = { value: normal.Info['normal'].atlas }; - s.uniforms.TRIPLANAR_diffuseMap = { value: diffuse.Info['diffuse'].atlas }; + s.uniforms.TRIPLANAR_normalMap = { value: normal.Info['normal']?.atlas }; + s.uniforms.TRIPLANAR_diffuseMap = { value: diffuse.Info['diffuse']?.atlas }; s.uniforms.TRIPLANAR_noiseMap = { value: noiseTexture }; diffuse.onLoad = () => { @@ -106,6 +105,10 @@ class TerrainChunkManager extends Component { // this._builder = new terrain_builder.TerrainChunkRebuilder(); this._InitNoise(); + // if(!params?.guiParams) { + // console.log("GUIParams undefined") + // return; + // } this._InitBiomes(params); this._InitTerrain(params); } @@ -115,6 +118,9 @@ class TerrainChunkManager extends Component { } _InitBiomes(params) { + if (!params?.guiParams) { + console.error("terrainManager guiParamsMissing") + } params.guiParams.biomes = { octaves: 2, persistence: 0.5, @@ -130,17 +136,17 @@ class TerrainChunkManager extends Component { this._builder.Rebuild(this._chunks); }; - const noiseRollup = params.gui.addFolder('Terrain.Biomes'); - noiseRollup.add(params.guiParams.biomes, "scale", 64.0, 4096.0).onChange( - onNoiseChanged); - noiseRollup.add(params.guiParams.biomes, "octaves", 1, 20, 1).onChange( - onNoiseChanged); - noiseRollup.add(params.guiParams.biomes, "persistence", 0.01, 1.0).onChange( - onNoiseChanged); - noiseRollup.add(params.guiParams.biomes, "lacunarity", 0.01, 4.0).onChange( - onNoiseChanged); - noiseRollup.add(params.guiParams.biomes, "exponentiation", 0.1, 10.0).onChange( - onNoiseChanged); + // const noiseRollup = params.gui.addFolder('resources/Terrain.Biomes'); + // noiseRollup.add(params.guiParams.biomes, "scale", 64.0, 4096.0).onChange( + // onNoiseChanged); + // noiseRollup.add(params.guiParams.biomes, "octaves", 1, 20, 1).onChange( + // onNoiseChanged); + // noiseRollup.add(params.guiParams.biomes, "persistence", 0.01, 1.0).onChange( + // onNoiseChanged); + // noiseRollup.add(params.guiParams.biomes, "lacunarity", 0.01, 4.0).onChange( + // onNoiseChanged); + // noiseRollup.add(params.guiParams.biomes, "exponentiation", 0.1, 10.0).onChange( + // onNoiseChanged); this._biomes = new Noise(params.guiParams.biomes); this._biomesParams = params.guiParams.biomes; @@ -160,19 +166,20 @@ class TerrainChunkManager extends Component { } _InitTerrain(params) { - params.guiParams.terrain = { - wireframe: false, - }; + if (!params?.guiParams) + params.guiParams.terrain = { + wireframe: false, + }; this._groups = [...new Array(6)].map(_ => new THREE.Group()); params.scene.add(...this._groups); - const terrainRollup = params.gui.addFolder('Terrain'); - terrainRollup.add(params.guiParams.terrain, "wireframe").onChange(() => { - for (let k in this._chunks) { - this._chunks[k].chunk._plane.material.wireframe = params.guiParams.terrain.wireframe; - } - }); + // const terrainRollup = params.gui.addFolder('resources/Terrain'); + // terrainRollup.add(params.guiParams.terrain, "wireframe").onChange(() => { + // for (let k in this._chunks) { + // this._chunks[k].chunk._plane.material.wireframe = params.guiParams.terrain.wireframe; + // } + // }); this._chunks = {}; this._params = params; @@ -217,8 +224,10 @@ class TerrainChunkManager extends Component { } Update(_) { + // console.log("TerrainChunkManager.Update()", this._params) const target = this.FindEntity(this._params.target); if (!target) { + console.warn("TerrainChunkManager.Update Cannot find Target Entity: ", this._params.target) return; } @@ -239,6 +248,7 @@ class TerrainChunkManager extends Component { } _UpdateVisibleChunks_Quadtree(target) { + // console.log("TerrainChunkManager._UpdateVisibleChunks_Quadtree()", target) function _Key(c) { return c.position[0] + '/' + c.position[2] + ' [' + c.size + ']'; } diff --git a/packages/client/src/test.ts b/packages/quick-3d-mmo-client/src/scripts/test.ts similarity index 100% rename from packages/client/src/test.ts rename to packages/quick-3d-mmo-client/src/scripts/test.ts diff --git a/packages/client/src/texture-splatter.ts b/packages/quick-3d-mmo-client/src/scripts/texture-splatter.ts similarity index 95% rename from packages/client/src/texture-splatter.ts rename to packages/quick-3d-mmo-client/src/scripts/texture-splatter.ts index b8b27aae..c81da134 100644 --- a/packages/client/src/texture-splatter.ts +++ b/packages/quick-3d-mmo-client/src/scripts/texture-splatter.ts @@ -1,6 +1,6 @@ import * as THREE from 'three'; -import { Spline, TerrainConstants, Math as math } from 'shared'; +import { Spline, TerrainConstants, Math as math } from 'quick-3d-mmo-shared'; const { LinearSpline, NOISE_HEIGHT } = { ...Spline, ...TerrainConstants }; @@ -20,8 +20,8 @@ const _BLACK = new THREE.Color(0x000000); class TextureSplatter { - _colourSpline: InstanceType[]; - _oceanSpline: InstanceType; + _colourSpline: any[]; + _oceanSpline: any; _params: any; constructor(params) { const _colourLerp = (t, p0, p1) => { diff --git a/packages/client/src/textures.ts b/packages/quick-3d-mmo-client/src/scripts/textures.ts similarity index 78% rename from packages/client/src/textures.ts rename to packages/quick-3d-mmo-client/src/scripts/textures.ts index b69d89ed..6fcba29a 100644 --- a/packages/client/src/textures.ts +++ b/packages/quick-3d-mmo-client/src/scripts/textures.ts @@ -4,8 +4,8 @@ import * as THREE from 'three'; // Taken from https://github.com/mrdoob/three.js/issues/758 function _GetImageData(image) { var canvas = document.createElement('canvas'); - canvas.width = image.width; - canvas.height = image.height; + canvas.width = image?.width ?? 600; + canvas.height = image?.height ?? 600; var context = canvas.getContext('2d'); context.drawImage(image, 0, 0); @@ -43,10 +43,19 @@ class TextureAtlas { return this._textures; } - _LoadTexture(n) { - const t = this._loader.load(n); - t.encoding = THREE.sRGBEncoding; - return t; + async _LoadTexture(n) { + return new Promise((res, rej) => { + this._loader.load(n, (response) => { + let t = response; + t.encoding = THREE.sRGBEncoding; + res(t); + // console.log("load cb called: ", res) + }, null, (err) => { + console.error("loader.load error: ", err) + rej(err) + }); + + }) } _OnLoad() { @@ -82,9 +91,9 @@ class TextureAtlas { this.onLoad(); } - _LoadAtlas(atlas, names) { + async _LoadAtlas(atlas, names) { this._textures[atlas] = { - textures: names.map(n => this._LoadTexture(n)), + textures: await Promise.allSettled(names.map( n => this._LoadTexture(n))), atlas: null, }; } diff --git a/packages/client/src/third-person-camera.ts b/packages/quick-3d-mmo-client/src/scripts/third-person-camera.ts similarity index 96% rename from packages/client/src/third-person-camera.ts rename to packages/quick-3d-mmo-client/src/scripts/third-person-camera.ts index e88839e8..db4ef941 100644 --- a/packages/client/src/third-person-camera.ts +++ b/packages/quick-3d-mmo-client/src/scripts/third-person-camera.ts @@ -1,6 +1,6 @@ import * as THREE from 'three'; import { Component } from './entity'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; const { KNOWN_ENTITIES } = Constants; diff --git a/packages/client/src/threejs_component.ts b/packages/quick-3d-mmo-client/src/scripts/threejs_component.ts similarity index 91% rename from packages/client/src/threejs_component.ts rename to packages/quick-3d-mmo-client/src/scripts/threejs_component.ts index f7b830aa..b881c6e3 100644 --- a/packages/client/src/threejs_component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/threejs_component.ts @@ -1,7 +1,8 @@ import * as THREE from 'three'; -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; import { Component } from "./entity"; +import { KNOWN_ENTITIES } from 'quick-3d-mmo-shared/src/constants'; const { DOM_IDS } = Constants; @@ -43,6 +44,8 @@ class ThreeJSController extends Component { camera_: THREE.PerspectiveCamera; scene_: THREE.Scene; sun_: THREE.DirectionalLight; + _onWindowResize: any; + constructor() { super(); } @@ -101,7 +104,7 @@ class ThreeJSController extends Component { document.getElementById('container').appendChild(this.threejs_.domElement); window.addEventListener('resize', () => { - this._OnWindowResize(); + this._onWindowResize(); }, false); const fov = 60; @@ -133,9 +136,6 @@ class ThreeJSController extends Component { this.LoadSky_(); } - _OnWindowResize() { - throw new Error('Method not implemented.'); - } LoadSky_() { const hemiLight = new THREE.HemisphereLight(0x424a75, 0x6a88b5, 0.7); @@ -146,12 +146,12 @@ class ThreeJSController extends Component { const loader = new THREE.CubeTextureLoader(); const texture = loader.load([ - './resources/terrain/space-posx.jpg', - './resources/terrain/space-negx.jpg', - './resources/terrain/space-posy.jpg', - './resources/terrain/space-negy.jpg', - './resources/terrain/space-posz.jpg', - './resources/terrain/space-negz.jpg', + 'src/resources/terrain/space-posx.jpg', + 'src/resources/terrain/space-negx.jpg', + 'src/resources/terrain/space-posy.jpg', + 'src/resources/terrain/space-negy.jpg', + 'src/resources/terrain/space-posz.jpg', + 'src/resources/terrain/space-negz.jpg', ]); texture.encoding = THREE.sRGBEncoding; @@ -180,7 +180,7 @@ class ThreeJSController extends Component { } Update(_) { - const player = this.FindEntity('player'); + const player = this.FindEntity(KNOWN_ENTITIES.PLAYER); if (!player) { return; } diff --git a/packages/quick-3d-mmo-client/src/scripts/types.d.ts b/packages/quick-3d-mmo-client/src/scripts/types.d.ts new file mode 100644 index 00000000..845bac8a --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/types.d.ts @@ -0,0 +1,7 @@ +declare module "worker-loader!*" { + class WebpackWorker extends Worker { + constructor(); + } + + export default WebpackWorker; +} \ No newline at end of file diff --git a/packages/client/src/ui-controller.ts b/packages/quick-3d-mmo-client/src/scripts/ui-controller.ts similarity index 84% rename from packages/client/src/ui-controller.ts rename to packages/quick-3d-mmo-client/src/scripts/ui-controller.ts index 7b6a53f7..e771f6f2 100644 --- a/packages/client/src/ui-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/ui-controller.ts @@ -1,4 +1,4 @@ -import { Constants } from 'shared'; +import { Constants } from 'quick-3d-mmo-shared'; import { Component } from './entity'; const { DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES } = Constants; @@ -85,16 +85,28 @@ class UIController extends Component { } AddEventMessages(events) { + let attackerName = "Undefined Attacker"; + let targetName = "Undefined Target"; + for (let e of events) { - if (e.type != STATE_TYPES.ATTACK) { + if(e?.attacker) { + return; + } + + if (e?.type != STATE_TYPES.ATTACK) { continue; } - if (e.attacker.Name != 'player' && e.target.Name != 'player') { + if (e?.attacker?.Name != KNOWN_ENTITIES.PLAYER && e.target.Name != KNOWN_ENTITIES.PLAYER) { continue; } - - const attackerName = e.attacker.Name == 'player' ? 'You' : e.attacker.Account.name; - const targetName = e.target.Name == 'player' ? 'you' : e.target.Account.name; + if(e?.attacker) { + attackerName = e?.attacker?.Name == KNOWN_ENTITIES.PLAYER ? 'You' : e.attacker.Account.name; + } + if(e?.target) { + targetName = e.target.Name == KNOWN_ENTITIES.PLAYER ? 'you' : e.target.Account.name; + } + + this.AddChatMessage({ name: '', diff --git a/packages/client/src/utils.ts b/packages/quick-3d-mmo-client/src/scripts/utils.ts similarity index 100% rename from packages/client/src/utils.ts rename to packages/quick-3d-mmo-client/src/scripts/utils.ts diff --git a/packages/quick-3d-mmo-client/src/scripts/worker.ts b/packages/quick-3d-mmo-client/src/scripts/worker.ts new file mode 100644 index 00000000..21430fcb --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/worker.ts @@ -0,0 +1,340 @@ +// @ts-nocheck +/// +import * as THREE from 'three'; + +import { TextureSplatter } from './texture-splatter'; + +import { TerrainHeight, Noise as aNoise, Math as math } from 'quick-3d-mmo-shared'; + +const { Noise, HeightGenerator } = { ...TerrainHeight, ...aNoise }; + + +class _TerrainBuilderThreadedWorker { + _params: any; + constructor() { + } + + Init(params) { + this._params = params; + this._params.offset = new THREE.Vector3( + params.offset[0], params.offset[1], params.offset[2]); + this._params.noise = new Noise(params.noiseParams); + this._params.heightGenerators = [new HeightGenerator()]; + + this._params.biomeGenerator = new Noise(params.biomesParams); + this._params.colourNoise = new Noise(params.colourNoiseParams); + this._params.colourGenerator = new TextureSplatter( + { + biomeGenerator: this._params.biomeGenerator, + colourNoise: this._params.colourNoise + }); + } + + _GenerateHeight(v) { + return this._params.heightGenerators[0].Get(v.x, v.y, v.z)[0]; + } + + Rebuild() { + const _D = new THREE.Vector3(); + const _D1 = new THREE.Vector3(); + const _D2 = new THREE.Vector3(); + const _P = new THREE.Vector3(); + const _H = new THREE.Vector3(); + const _W = new THREE.Vector3(); + const _S = new THREE.Vector3(); + const _C = new THREE.Vector3(); + + const _N = new THREE.Vector3(); + const _N1 = new THREE.Vector3(); + const _N2 = new THREE.Vector3(); + const _N3 = new THREE.Vector3(); + + const positions = []; + const colors = []; + const up = []; + const coords = []; + const uvs = []; + const weights1 = []; + const weights2 = []; + const indices = []; + const wsPositions = []; + + const resolution = this._params.resolution + 2; + const radius = this._params.radius; + const offset = this._params.offset; + const width = this._params.width; + const half = width / 2; + + const effectiveResolution = resolution - 2; + for (let x = -1; x <= effectiveResolution + 1; x++) { + let xp = width * math.sat(x / effectiveResolution); + + for (let y = -1; y <= effectiveResolution + 1; y++) { + let yp = width * math.sat(y / effectiveResolution); + + // Compute position + _P.set(xp - half, 0.0, yp - half); + _P.add(offset); + + _D.set(0, 1, 0); + + // Keep the absolute world space position to sample noise + _W.copy(_P); + + // Purturb height along z-vector + const height = this._GenerateHeight(_W); + _H.copy(_D); + _H.multiplyScalar(height); + _P.add(_H); + + positions.push(_P.x, _P.y, _P.z); + + _C.copy(_W); + _C.add(_H); + coords.push(_C.x, _C.y, _C.z); + + _S.set(_W.x, _W.y, height); + + const color = this._params.colourGenerator.GetColour(_S); + colors.push(color.r, color.g, color.b); + up.push(_D.x, _D.y, _D.z); + wsPositions.push(_W.x, _W.z, height); + // TODO GUI + uvs.push(_P.x / 200.0, _P.y / 200.0); + } + } + + for (let i = 0; i < resolution; i++) { + for (let j = 0; j < resolution; j++) { + indices.push( + i * (resolution + 1) + j, + (i + 1) * (resolution + 1) + j + 1, + i * (resolution + 1) + j + 1); + indices.push( + (i + 1) * (resolution + 1) + j, + (i + 1) * (resolution + 1) + j + 1, + i * (resolution + 1) + j); + } + } + + const normals = new Array(up.length).fill(0.0); + + for (let i = 0, n = indices.length; i < n; i += 3) { + const i1 = indices[i] * 3; + const i2 = indices[i + 1] * 3; + const i3 = indices[i + 2] * 3; + + _N1.fromArray(positions, i1); + _N2.fromArray(positions, i2); + _N3.fromArray(positions, i3); + + _D1.subVectors(_N3, _N2); + _D2.subVectors(_N1, _N2); + _D1.cross(_D2); + + normals[i1] += _D1.x; + normals[i2] += _D1.x; + normals[i3] += _D1.x; + + normals[i1 + 1] += _D1.y; + normals[i2 + 1] += _D1.y; + normals[i3 + 1] += _D1.y; + + normals[i1 + 2] += _D1.z; + normals[i2 + 2] += _D1.z; + normals[i3 + 2] += _D1.z; + } + + // Fix the skirt + const _ApplyFix = (x, y, xp, yp) => { + const skirtIndex = x * (resolution + 1) + y; + const proxyIndex = xp * (resolution + 1) + yp; + positions[skirtIndex * 3 + 1] -= 10; + + // Normal will be fucked, copy it from proxy point + normals[skirtIndex * 3 + 0] = normals[proxyIndex * 3 + 0]; + normals[skirtIndex * 3 + 1] = normals[proxyIndex * 3 + 1]; + normals[skirtIndex * 3 + 2] = normals[proxyIndex * 3 + 2]; + }; + + for (let y = 0; y <= resolution; ++y) { + _ApplyFix(0, y, 1, y); + } + for (let y = 0; y <= resolution; ++y) { + _ApplyFix(resolution, y, resolution - 1, y); + } + for (let x = 0; x <= resolution; ++x) { + _ApplyFix(x, 0, x, 1); + } + for (let x = 0; x <= resolution; ++x) { + _ApplyFix(x, resolution, x, resolution - 1); + } + + for (let i = 0, n = normals.length; i < n; i += 3) { + _N.fromArray(normals, i); + _N.normalize(); + normals[i] = _N.x; + normals[i + 1] = _N.y; + normals[i + 2] = _N.z; + } + + for (let i = 0, n = indices.length; i < n; i += 3) { + const splats: object[] = []; + const i1 = indices[i] * 3; + const i2 = indices[i + 1] * 3; + const i3 = indices[i + 2] * 3; + const indexes = [i1, i2, i3]; + for (let j = 0; j < 3; j++) { + const j1 = indexes[j]; + _P.fromArray(wsPositions, j1); + _N.fromArray(normals, j1); + _D.fromArray(up, j1); + const s = this._params.colourGenerator.GetSplat(_P, _N, _D); + splats.push(s); + } + + const splatStrengths = {}; + for (let k in splats[0]) { + splatStrengths[k] = { key: k, strength: 0.0 }; + } + for (let curSplat of splats) { + for (let k in curSplat) { + splatStrengths[k].strength += curSplat[k].strength; + } + } + + let typeValues: any = Object.values(splatStrengths) as {}[]; + typeValues.sort((a: any, b: any) => { + if (a.strength < b.strength) { + return 1; + } + if (a.strength > b.strength) { + return -1; + } + return 0; + }); + + const w1 = indices[i] * 4; + const w2 = indices[i + 1] * 4; + const w3 = indices[i + 2] * 4; + + for (let s = 0; s < 3; s++) { + let total = ( + splats?.[s]?.[typeValues?.[0]?.key]?.strength + + splats[s][typeValues?.[1].key].strength + + splats[s][typeValues[2].key].strength + + splats[s][typeValues[3].key].strength); + const normalization = 1.0 / total; + + splats[s][typeValues[0].key].strength *= normalization; + splats[s][typeValues[1].key].strength *= normalization; + splats[s][typeValues[2].key].strength *= normalization; + splats[s][typeValues[3].key].strength *= normalization; + } + + weights1.push(splats[0][typeValues[3].key].index); + weights1.push(splats[0][typeValues[2].key].index); + weights1.push(splats[0][typeValues[1].key].index); + weights1.push(splats[0][typeValues[0].key].index); + + weights1.push(splats[1][typeValues[3].key].index); + weights1.push(splats[1][typeValues[2].key].index); + weights1.push(splats[1][typeValues[1].key].index); + weights1.push(splats[1][typeValues[0].key].index); + + weights1.push(splats[2][typeValues[3].key].index); + weights1.push(splats[2][typeValues[2].key].index); + weights1.push(splats[2][typeValues[1].key].index); + weights1.push(splats[2][typeValues[0].key].index); + + weights2.push(splats[0][typeValues[3].key].strength); + weights2.push(splats[0][typeValues[2].key].strength); + weights2.push(splats[0][typeValues[1].key].strength); + weights2.push(splats[0][typeValues[0].key].strength); + + weights2.push(splats[1][typeValues[3].key].strength); + weights2.push(splats[1][typeValues[2].key].strength); + weights2.push(splats[1][typeValues[1].key].strength); + weights2.push(splats[1][typeValues[0].key].strength); + + weights2.push(splats[2][typeValues[3].key].strength); + weights2.push(splats[2][typeValues[2].key].strength); + weights2.push(splats[2][typeValues[1].key].strength); + weights2.push(splats[2][typeValues[0].key].strength); + } + + function _Unindex(src, stride) { + const dst = []; + for (let i = 0, n = indices.length; i < n; i += 3) { + const i1 = indices[i] * stride; + const i2 = indices[i + 1] * stride; + const i3 = indices[i + 2] * stride; + + for (let j = 0; j < stride; j++) { + dst.push(src[i1 + j]); + } + for (let j = 0; j < stride; j++) { + dst.push(src[i2 + j]); + } + for (let j = 0; j < stride; j++) { + dst.push(src[i3 + j]); + } + } + return dst; + } + + const uiPositions = _Unindex(positions, 3); + const uiColours = _Unindex(colors, 3); + const uiNormals = _Unindex(normals, 3); + const uiCoords = _Unindex(coords, 3); + const uiUVs = _Unindex(uvs, 2); + const uiWeights1 = weights1; + const uiWeights2 = weights2; + + const bytesInFloat32 = 4; + const positionsArray = new Float32Array( + new SharedArrayBuffer(bytesInFloat32 * uiPositions.length)); + const coloursArray = new Float32Array( + new SharedArrayBuffer(bytesInFloat32 * uiColours.length)); + const normalsArray = new Float32Array( + new SharedArrayBuffer(bytesInFloat32 * uiNormals.length)); + const coordsArray = new Float32Array( + new SharedArrayBuffer(bytesInFloat32 * uiCoords.length)); + const uvsArray = new Float32Array( + new SharedArrayBuffer(bytesInFloat32 * uiUVs.length)); + const weights1Array = new Float32Array( + new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); + const weights2Array = new Float32Array( + new SharedArrayBuffer(bytesInFloat32 * uiWeights2.length)); + + positionsArray.set(uiPositions, 0); + coloursArray.set(uiColours, 0); + normalsArray.set(uiNormals, 0); + uvsArray.set(uiUVs, 0); + coordsArray.set(uiCoords, 0); + weights1Array.set(uiWeights1, 0); + weights2Array.set(uiWeights2, 0); + + return { + positions: positionsArray, + colours: coloursArray, + uvs: uvsArray, + normals: normalsArray, + coords: coordsArray, + weights1: weights1Array, + weights2: weights2Array, + }; + } +} + +const _CHUNK = new _TerrainBuilderThreadedWorker(); + +self.onmessage = (msg) => { + if (msg.data.subject == 'build_chunk') { + _CHUNK.Init(msg.data.params); + const rebuiltData = _CHUNK.Rebuild(); + self.postMessage({ subject: 'build_chunk_result', data: rebuiltData }, null); + + // console.log("buildChunk: ", {msg, rebuiltData}) + } +} \ No newline at end of file diff --git a/packages/client/styles/base.css b/packages/quick-3d-mmo-client/src/styles/base.css similarity index 90% rename from packages/client/styles/base.css rename to packages/quick-3d-mmo-client/src/styles/base.css index 24a4cd61..e24ea164 100644 --- a/packages/client/styles/base.css +++ b/packages/quick-3d-mmo-client/src/styles/base.css @@ -38,7 +38,7 @@ body { top: 0; left: 0; font-family: 'IM Fell French Canon', serif; - background-image: url('./resources/background-3.png'); + background-image: url('../resources/background-3.png'); background-size: cover; } @@ -229,7 +229,7 @@ body { position: absolute; top: 0px; left: 0px; - background-image: url('./resources/icons/ui/health-bar.png'); + background-image: url('../resources/icons/ui/health-bar.png'); width: 500px; height: 300px; z-index: 1; @@ -348,7 +348,7 @@ body { } .inventory-character { - background-image: url('./resources/icons/ui/inventory-character.png'); + background-image: url('../resources/icons/ui/inventory-character.png'); background-size: cover; width: 200px; height: 350px; diff --git a/packages/quick-3d-mmo-client/tsconfig.json b/packages/quick-3d-mmo-client/tsconfig.json new file mode 100644 index 00000000..40fbcb96 --- /dev/null +++ b/packages/quick-3d-mmo-client/tsconfig.json @@ -0,0 +1,33 @@ +{ + "extends": "../../tsconfig.packages.json", + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "target": "ES5", + "lib": [ + "ESNext", + "dom", + "webworker" + ], + "preserveConstEnums": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "sourceMap": true, + "baseUrl": "." + }, + "references": [ + { + "path": "../quick-3d-mmo-shared" + } + ], + "include": [ + "./src/scripts/*.ts", + "src/scripts/attacker-controller.ts", + "src/index.ts" + ], + "exclude": [ + "./dist", + "node_modules" + ] +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/tsconfig.tsbuildinfo b/packages/quick-3d-mmo-client/tsconfig.tsbuildinfo new file mode 100644 index 00000000..70003c44 --- /dev/null +++ b/packages/quick-3d-mmo-client/tsconfig.tsbuildinfo @@ -0,0 +1,1834 @@ +{ + "program": { + "fileInfos": { + "../../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "signature": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2019.d.ts": { + "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2020.d.ts": { + "version": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "signature": "e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.esnext.d.ts": { + "version": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "signature": "fc7a21dd3ee27fd0a9ff1c46534efcd9c3cec51a445b479bb326d871c0aa8302", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.dom.d.ts": { + "version": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "signature": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2019.array.d.ts": { + "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2019.object.d.ts": { + "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2019.string.d.ts": { + "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { + "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.promise.d.ts": { + "version": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "signature": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts": { + "version": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", + "signature": "e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.string.d.ts": { + "version": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "signature": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": { + "version": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "signature": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.intl.d.ts": { + "version": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", + "signature": "e79ca55569f09a5dc3354be04dba4ae85865b1dce98bf46738ffe231c669621f", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.esnext.string.d.ts": { + "version": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "signature": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.esnext.promise.d.ts": { + "version": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "signature": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.esnext.weakref.d.ts": { + "version": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", + "signature": "1e61418f41d404e744b6536af9f8c6f6674dd4d54c12335cd0c4f7eded69cf3f", + "affectsGlobalScope": true + }, + "./src/scripts/entity.ts": { + "version": "feb26e98e9385f26d2e65370974d6d29f898f6cbc55a4c08c80915618aad9e60", + "signature": "ebd2e0805e353ae4f46f7a57fbe3fa12e3a209229a3239f32093a2c1682606a6", + "affectsGlobalScope": false + }, + "../shared/src/constants.ts": { + "version": "e4cfa8135f1bdd39755ab0d6e40ada0dc62d7b79ac688b9af1a85294a9a0692a", + "affectsGlobalScope": false + }, + "../shared/src/defs.ts": { + "version": "f8347fc0a72850791eb98e99a993501fff2e86a45aa7e3f93dce50b016702867", + "affectsGlobalScope": false + }, + "../shared/src/math.ts": { + "version": "3d8383c2056b4abbde276f415ce7da6be79a01c52bb3373642ff88521d23a0c4", + "affectsGlobalScope": false + }, + "../shared/src/entity-manager.ts": { + "version": "e0e5715b91b5043c4f4c88a0466bc1f63d2db98efebd23d6cfc17c52da4304d5", + "affectsGlobalScope": false + }, + "../shared/src/spatial-hash-grid.ts": { + "version": "145b52cfc588e9602b6957faf2719a3946029478c1c034adcd9be3d320d68bc2", + "affectsGlobalScope": false + }, + "../shared/src/simplex-noise.ts": { + "version": "9d46fb7195fd47f74ceb2de8620b0e68edc598101c547265ce9270c380d826f2", + "affectsGlobalScope": false + }, + "../shared/src/noise.ts": { + "version": "da104448d4e8980a224ce8eb50055f648a98e24406d6e01473eb5b858850738c", + "affectsGlobalScope": false + }, + "../shared/src/terrain-constants.ts": { + "version": "7a715dfc01f25d93bc1b37d284455f5795d8ef68980377c04d86002fa5056e3d", + "affectsGlobalScope": false + }, + "../shared/src/terrain-height.ts": { + "version": "b0272188f97de9f2072fae1d3fa3a89b3a8866d69934f2e97bfb6357b2222767", + "affectsGlobalScope": false + }, + "../shared/src/spline.ts": { + "version": "32b2e5e577d4da4ac28058a9b6684e473dce3a9363648b54ca3d26586cf80e22", + "affectsGlobalScope": false + }, + "../shared/src/dat.gui.module.ts": { + "version": "4f98e1c85c584893dbe04ce665eef4f804e7689497cb58398b78d17cba8b71c5", + "affectsGlobalScope": false + }, + "../shared/src/globaltypes.ts": { + "version": "eb4c1f4c99e94e80a96c809bc6c34ca33faa72f2c44e72f1e886260a9fee1dc2", + "affectsGlobalScope": false + }, + "../shared/src/index.ts": { + "version": "77381fe571194ecee7e299b96562fb892dae6e533678a5680c781f3a34a55fbf", + "affectsGlobalScope": false + }, + "./src/scripts/attacker-controller.ts": { + "version": "1727997033931ffbbb6b3c09099edfde2e81ba262db81602166389bde05ca147", + "signature": "3008b9d239ed1f5477ed3c901ea41185589bae8af131f09fc6ee483cd9a6920a", + "affectsGlobalScope": false + }, + "./src/scripts/particle-system.ts": { + "version": "cf1593c6c0da15ccc61189fb893de6ac3854c2d6c5734c6740d83974306b7d08", + "signature": "2a8d5d59927a24de9e1cced76cbcada9380c1c8aaee15d5a32742fe2d7aae711", + "affectsGlobalScope": false + }, + "./src/scripts/blood-effect.ts": { + "version": "c29b16dd30ef7befd5b5468c969610b3fed1b6abc6db0b13ab87d36508919629", + "signature": "3c4c7766906ead4ea77d8175d179e2ba685990f0c06d9d9d5e52af89f76615db", + "affectsGlobalScope": false + }, + "./src/scripts/equip-weapon-component.ts": { + "version": "4f4fb01c983e729511feb23397da0b683206b80d503822cb445b07b930c96d79", + "signature": "84ca5c323d5b872bf6beb59924663613269ab6d0da39ce60c75937a03d701d88", + "affectsGlobalScope": false + }, + "./src/scripts/finite-state-machine.ts": { + "version": "9dfaf55f08c9fe5907c1f94959906441d4273c23ba72151fcbd07a49bf657486", + "signature": "45c926521079c512410477f4b4e1d187439cb4dd049121f7cd13e787bc45e254", + "affectsGlobalScope": false + }, + "./src/scripts/floating-name.ts": { + "version": "9507cd5c828c0d4df55bdc2287d7ec9a06c3f2d3fcc7bfedc9b53813cd63558f", + "signature": "4d7dbcb07cd9912421c37949cb4a53702ac6575e6700f1dcfdf68ad5f99ffe75", + "affectsGlobalScope": false + }, + "./src/scripts/gltf-component.ts": { + "version": "6022feb5ded339e79ed8485ef427cd25e06a8d6ace46e590e1747defe7bbd5b1", + "signature": "9cf21b3554e383e0af6702f4bb86e6c447701af5a00693abc77acfec0e927041", + "affectsGlobalScope": false + }, + "./src/scripts/health-bar.ts": { + "version": "18412f90f975d5441d374f912563b2daaf1253cbc556daae38b6162590eea603", + "signature": "c4ea58878e3c3d0bc715863e80e19e9f0138ab06d0b1463c328c0610cf83a91f", + "affectsGlobalScope": false + }, + "./src/scripts/health-component.ts": { + "version": "faee6e9a9f0dbedc4a109759cc3e4be952c44441743c6767846376c0aecb277b", + "signature": "4d2c4dc167b15b41e787506127ed4c6c9039abda2fcb5e978032b260c429e821", + "affectsGlobalScope": false + }, + "../../node_modules/@types/component-emitter/index.d.ts": { + "version": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "signature": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "affectsGlobalScope": false + }, + "../../node_modules/socket.io-parser/dist/index.d.ts": { + "version": "6ce9c4c7d976960a7f14dfe40e26c357bcab9405eb2eea38f79760ed4f323512", + "signature": "6ce9c4c7d976960a7f14dfe40e26c357bcab9405eb2eea38f79760ed4f323512", + "affectsGlobalScope": false + }, + "../../node_modules/socket.io-client/build/typed-events.d.ts": { + "version": "f5ce15fe46e74c4cabdee08f22df1b4ae2c2bfd6978f101f95e6fcd5a2fec8ef", + "signature": "f5ce15fe46e74c4cabdee08f22df1b4ae2c2bfd6978f101f95e6fcd5a2fec8ef", + "affectsGlobalScope": false + }, + "../../node_modules/socket.io-client/build/socket.d.ts": { + "version": "e2b6b0fa7b4255a2d76ec93678344908e72a36737eea79900dfddd3cf143458b", + "signature": "e2b6b0fa7b4255a2d76ec93678344908e72a36737eea79900dfddd3cf143458b", + "affectsGlobalScope": false + }, + "../../node_modules/socket.io-client/build/manager.d.ts": { + "version": "cf4f61fa7851dbe8ad051d16d9f782da530e4f13793d3da266d91c4fb52941b3", + "signature": "cf4f61fa7851dbe8ad051d16d9f782da530e4f13793d3da266d91c4fb52941b3", + "affectsGlobalScope": false + }, + "../../node_modules/socket.io-client/build/index.d.ts": { + "version": "e4f701ad984ce784f6d40c65955103a9341a694917915a5d32128e5b53a97019", + "signature": "e4f701ad984ce784f6d40c65955103a9341a694917915a5d32128e5b53a97019", + "affectsGlobalScope": false + }, + "./src/scripts/index.ts": { + "version": "5b9b9c131bd49b87c8a88898bdd44d1925752f62d1f7b37e851b5055bdb5a5c4", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "./src/scripts/inventory-controller.ts": { + "version": "8acd4c012a0cda987d4e2608f8b8f29fa9a0c1916783b39797992dcc655b650d", + "signature": "c06b8445e929246268fdfcba64b8ace80c7a0700a92c5c25230ae6c2c8aef7ca", + "affectsGlobalScope": false + }, + "./src/scripts/level-up-component.ts": { + "version": "a5cff58c740bc65d707b3afdaa6c73a774ea1ea846ca7214cf7d4faf41052b32", + "signature": "2c4b80a356eda6f06270fbef98f8b9ac3b2f06f6e0a758c16929425d00743d5e", + "affectsGlobalScope": false + }, + "./src/scripts/load-controller.ts": { + "version": "29d44026fdb298ee73b52a2c4223582262daeb8aa7ac9af3228c5961b5ec0281", + "signature": "e263cb36f66185c05eceb1604fddb947d5f0b5c7f42756bed9e21671f68e96e1", + "affectsGlobalScope": false + }, + "./src/scripts/loading-manager.ts": { + "version": "87693af4ad9f7abc91f4365297e6858ad9d89cce3054ae90905b8f0af53f6b6c", + "signature": "3991f641735f7997859be8c0142530c098f60a14868a34c1cd48ca9c53235f35", + "affectsGlobalScope": false + }, + "./src/scripts/ui-controller.ts": { + "version": "3c03ef8ac3f5f4ddf22ac55a63fa538cc64e93e177643d8919d08c14584e28ae", + "signature": "dce085d2e2fd9745962f6f254eb6597255419682869091b49c669f7f81c1fe8a", + "affectsGlobalScope": false + }, + "./src/scripts/network-controller.ts": { + "version": "a661ccc22d547b3c8ec731855117dcf548b9239b8709fb401450a44d02581333", + "signature": "604deb8ec847655e4f2bda945b06ef7a641f967d73fcd484b9c81eab82bede93", + "affectsGlobalScope": false + }, + "./src/scripts/render-component.ts": { + "version": "7fdd0c3e210bb786717633a3ff0eccfb1b447069c506db5f6a01e607be081798", + "signature": "9f724189af2e0a32446cca8d200bcbcdd1eb5d0f71531bcf1d61d948aeab3209", + "affectsGlobalScope": false + }, + "./src/scripts/spatial-grid-controller.ts": { + "version": "1926091e34fbb000130d37e6adfd364563033e31035e730dfa9f4cd5fbe7fa84", + "signature": "20c44268ce1df8309dde05b3c755cf4c1e6c3eb9547cfaac4f26fa8428ad2e27", + "affectsGlobalScope": false + }, + "./src/scripts/scenery-controller.ts": { + "version": "ae4716dc31f34887f6155d4d1c17b6ea5a6546b6d4a5eaabaa8f7b0474c6366a", + "signature": "f49b839c5cec310003f6726e04f69cb66aef57dc6856ff04654d23cf72733265", + "affectsGlobalScope": false + }, + "./src/scripts/third-person-camera.ts": { + "version": "e07e5414195514e1d682475edaaa9d47cb64139e4d996403c053e988c01e262e", + "signature": "cc7d0f8e5ce5f4bc0192ab12f822e125e2340399eb979d76714a0e9c0e18d389", + "affectsGlobalScope": false + }, + "./src/scripts/player-state.ts": { + "version": "bc5fad7b012373d3e393bd1b60a1a621ee78bb7922d200159557fd2b5a5524fa", + "signature": "7024931512df3beb919c3471dc0d2e7a3946891e73199c14a4e951c07f4abc69", + "affectsGlobalScope": false + }, + "./src/scripts/player-entity.ts": { + "version": "339ddf91dad62345300cfc34697406fad4d6d4571bd514868a8b81032b56b406", + "signature": "c970657dfe843fbccea57b35cdbadfc74fc4648281dd999028f7e6dd031cacb6", + "affectsGlobalScope": false + }, + "./src/scripts/player-input.ts": { + "version": "f731b272380506fc91bd81c1234a2407dcb03823af5bb4c94191be96ada3d860", + "signature": "e6d9b80ecb0288a061c568d32c9e1edb7b2d725f29c52fbcddd175196e67e44d", + "affectsGlobalScope": false + }, + "./src/scripts/npc-entity.ts": { + "version": "4a48cc65ee7815cfcd07dba0911c4ced7407d776e6ce1000d96311d31dcd955f", + "signature": "d1875d77566074d603e4e61252fe77c3194febac18f32b84cd8ac9546a29fb05", + "affectsGlobalScope": false + }, + "./src/scripts/network-entity-controller.ts": { + "version": "6343b645324e29db5f0242a387127cc2343b1567553634c0e1564e7e04317ef4", + "signature": "7453cbcd702ef09de43097d726c9d2fb906e5fb77dde0dd34581d07faa6d3c98", + "affectsGlobalScope": false + }, + "./src/scripts/network-player-controller.ts": { + "version": "f8b552fb4f80328dfbd514b1f68f127c92f6b01d5ac05feebb1e0ed82fc10b66", + "signature": "a9cbd39d1958921068e81058cef68b735d34bb58b30fd0a9f06a86c9d144971f", + "affectsGlobalScope": false + }, + "./src/scripts/sorceror-effect.ts": { + "version": "dd130f7e56e494129659a97894f42e599d4e8433a2c304ffd5760eca19a44a2f", + "signature": "cd40674b063bd90a8582e9b0e84e7d3a0832e7660961d1f652cf71a8558dd1a3", + "affectsGlobalScope": false + }, + "./src/scripts/spawners.ts": { + "version": "148204d77539445ae034323267a1fae614bbacebe3b7e5d2c32529feee9862fb", + "signature": "6df9fde6cee8966e81b0f9ebd9fa5ab8cea758516911c83bf62955c525fcc7f6", + "affectsGlobalScope": false + }, + "./src/scripts/quadtree.ts": { + "version": "72303a2de8621f5422f072e24ef22eb5fb2e9a62956947263ddcb147f903ac03", + "signature": "7277474dc5cce0f73faa6b61b8d782f7c8f91492e6f78540216f81bce677b7d1", + "affectsGlobalScope": false + }, + "./src/scripts/terrain-shader.ts": { + "version": "94eeb5db70a2383f010a5d2730bfbc9e3edeebaf48cb8dc5f564cf9f2b9c2dab", + "signature": "7ddde5052b7e9979338ef87062dc021615b4c9300e7499a016914e01302db2ba", + "affectsGlobalScope": false + }, + "./src/scripts/terrain-chunk.ts": { + "version": "e74e3213cc316b5c7f2c7f912e55ac86d6b7b2aa1c80db53facaed5fd3077fcf", + "signature": "36ee4f4a2222173611d29c85c85fb2f38a29d7a034dbb45841a72725c5b28fb6", + "affectsGlobalScope": false + }, + "./src/scripts/terrain-builder-threaded.ts": { + "version": "7269e14e945179a0214a9d0d818bdb44286b15097dcc10dd254030ee41a5e0be", + "signature": "4df168e08f898e056d6b80a3df949bf65f31a1bcf1aa155342885b18f8ecd939", + "affectsGlobalScope": false + }, + "./src/scripts/texture-splatter.ts": { + "version": "4c7bc3f5c6dc18ea4f92754d7b1db96b3e23317c1ae3ad29bc1703f530eda464", + "signature": "93e7ffc1c21e1d0fcb20b85afce8ead367d49090b93512bcbc6b85844b15d84d", + "affectsGlobalScope": false + }, + "./src/scripts/textures.ts": { + "version": "98bdfaf03fd17e3d935af7e0b137215db142c18f6ea46a13ce60aee309a022e6", + "signature": "5e27364db404e0b2ad3bee6125a9a2a15c023303a76496db3e5148e955801887", + "affectsGlobalScope": false + }, + "./src/scripts/utils.ts": { + "version": "b85ec48aa97b7755146660d6d7dae992eab8a84a237ad498265d8ecd3eadf9ba", + "signature": "72faae70aa639e63605180e56095c216687d40108a3997b88b05ab110b5d67b1", + "affectsGlobalScope": false + }, + "./src/scripts/terrain.ts": { + "version": "5289ec9983aea579bfa266b5b6758d5d232b181408b5e187d555e668e9600047", + "signature": "5bd5dddb648085563aa65db8ea99081ebc17776a1784ebafecb4b1fc060ab2f6", + "affectsGlobalScope": false + }, + "./src/scripts/threejs_component.ts": { + "version": "d6646cd2a8bd63e3f15c029d782696bc8b315ec14c51e2ef0086aad7a7159408", + "signature": "e55111d4d858243e943b780285203cbc56fe1b337f9435c24f57d306631d9cc6", + "affectsGlobalScope": false + }, + "./src/scripts/main.ts": { + "version": "dd2444acfe142ccfa18530ac4e82c53bf5dea9955488762295b47bc3e8593e07", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "./src/scripts/quest-component.ts": { + "version": "8e6473d6842e60c474b21e22f41f645827001a8d51007f54ca41e5c4dc174b72", + "signature": "fbb56a45784aa25173405258ae8843cc29e173bea0006f70a583e69eedd8d641", + "affectsGlobalScope": false + }, + "./src/scripts/terrain-builder-threaded-worker.ts": { + "version": "53d269343a6da8f59ab2f7104313cffc044b28467c28f9de52b26e00d7b3bddc", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "./src/scripts/terrain-builder.ts": { + "version": "9743fca94492506a91f7ea764e2ef239381dccb3e80afd7f6f34d9f0a14ceb29", + "signature": "5d2115ea335bcb5b094ce912ec290a96452e109480cb33886704b350ea6af46e", + "affectsGlobalScope": false + }, + "./src/scripts/test.ts": { + "version": "6702d16e432fee60416dc4748d3e226f109466bb2203ec5772555c4db5608c15", + "signature": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "affectsGlobalScope": false + }, + "../../node_modules/@types/cookie/index.d.ts": { + "version": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "signature": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "affectsGlobalScope": false + }, + "../../node_modules/@types/cors/index.d.ts": { + "version": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "signature": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "affectsGlobalScope": false + }, + "../../node_modules/@types/eslint/helpers.d.ts": { + "version": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46", + "signature": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46", + "affectsGlobalScope": true + }, + "../../node_modules/@types/eslint/lib/rules/index.d.ts": { + "version": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0", + "signature": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/json-schema/index.d.ts": { + "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "affectsGlobalScope": false + }, + "../../node_modules/@types/estree/index.d.ts": { + "version": "f1e8ecd1d960d12e57316fd2889b0a57635f38f8c4c976d8deafa29650bbf320", + "signature": "f1e8ecd1d960d12e57316fd2889b0a57635f38f8c4c976d8deafa29650bbf320", + "affectsGlobalScope": false + }, + "../../node_modules/@types/eslint/index.d.ts": { + "version": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c", + "signature": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/eslint-scope/index.d.ts": { + "version": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed", + "signature": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/globals.d.ts": { + "version": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "signature": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/async_hooks.d.ts": { + "version": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "signature": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/buffer.d.ts": { + "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/child_process.d.ts": { + "version": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "signature": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/cluster.d.ts": { + "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/console.d.ts": { + "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/constants.d.ts": { + "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/crypto.d.ts": { + "version": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "signature": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/dgram.d.ts": { + "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/dns.d.ts": { + "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/domain.d.ts": { + "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/events.d.ts": { + "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/fs.d.ts": { + "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/fs/promises.d.ts": { + "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/http.d.ts": { + "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/http2.d.ts": { + "version": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "signature": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/https.d.ts": { + "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/inspector.d.ts": { + "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/module.d.ts": { + "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/net.d.ts": { + "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/os.d.ts": { + "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/path.d.ts": { + "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/perf_hooks.d.ts": { + "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/process.d.ts": { + "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/punycode.d.ts": { + "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/querystring.d.ts": { + "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/readline.d.ts": { + "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/repl.d.ts": { + "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/stream.d.ts": { + "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/string_decoder.d.ts": { + "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/timers.d.ts": { + "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/tls.d.ts": { + "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/trace_events.d.ts": { + "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/tty.d.ts": { + "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/url.d.ts": { + "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/util.d.ts": { + "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/v8.d.ts": { + "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/vm.d.ts": { + "version": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "signature": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/worker_threads.d.ts": { + "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/zlib.d.ts": { + "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/wasi.d.ts": { + "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.6/base.d.ts": { + "version": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "signature": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/assert.d.ts": { + "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/base.d.ts": { + "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/index.d.ts": { + "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/minimatch/index.d.ts": { + "version": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "signature": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "affectsGlobalScope": false + }, + "../../node_modules/@types/glob/index.d.ts": { + "version": "393137c76bd922ba70a2f8bf1ade4f59a16171a02fb25918c168d48875b0cfb0", + "signature": "393137c76bd922ba70a2f8bf1ade4f59a16171a02fb25918c168d48875b0cfb0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/html-minifier-terser/index.d.ts": { + "version": "6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d", + "signature": "6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/json5/index.d.ts": { + "version": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538", + "signature": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538", + "affectsGlobalScope": false + }, + "../../node_modules/@types/minimist/index.d.ts": { + "version": "e437d83044ba17246a861aa9691aa14223ff4a9d6f338ab1269c41c758586a88", + "signature": "e437d83044ba17246a861aa9691aa14223ff4a9d6f338ab1269c41c758586a88", + "affectsGlobalScope": false + }, + "../../node_modules/@types/normalize-package-data/index.d.ts": { + "version": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", + "signature": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", + "affectsGlobalScope": false + }, + "../../node_modules/@types/parse-json/index.d.ts": { + "version": "2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b", + "signature": "2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b", + "affectsGlobalScope": false + } + }, + "options": { + "target": 2, + "module": 99, + "lib": [ + "lib.esnext.d.ts", + "lib.dom.d.ts" + ], + "strict": false, + "moduleResolution": 2, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "rootDir": "./src", + "outDir": "./dist", + "resolveJsonModule": true, + "composite": true, + "sourceMap": true, + "baseUrl": "./", + "configFilePath": "./tsconfig.json" + }, + "referencedMap": { + "../../node_modules/@types/cors/index.d.ts": [ + "../../node_modules/@types/node/http.d.ts" + ], + "../../node_modules/@types/eslint-scope/index.d.ts": [ + "../../node_modules/@types/eslint/index.d.ts", + "../../node_modules/@types/estree/index.d.ts" + ], + "../../node_modules/@types/eslint/index.d.ts": [ + "../../node_modules/@types/eslint/helpers.d.ts", + "../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../node_modules/@types/estree/index.d.ts", + "../../node_modules/@types/json-schema/index.d.ts" + ], + "../../node_modules/@types/eslint/lib/rules/index.d.ts": [ + "../../node_modules/@types/eslint/index.d.ts" + ], + "../../node_modules/@types/glob/index.d.ts": [ + "../../node_modules/@types/minimatch/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/index.d.ts" + ], + "../../node_modules/@types/node/assert.d.ts": [ + "../../node_modules/@types/node/assert.d.ts" + ], + "../../node_modules/@types/node/async_hooks.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts" + ], + "../../node_modules/@types/node/base.d.ts": [ + "../../node_modules/@types/node/assert.d.ts", + "../../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../../node_modules/@types/node/buffer.d.ts": [ + "../../node_modules/@types/node/buffer.d.ts" + ], + "../../node_modules/@types/node/child_process.d.ts": [ + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/cluster.d.ts": [ + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts" + ], + "../../node_modules/@types/node/console.d.ts": [ + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/constants.d.ts": [ + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/os.d.ts" + ], + "../../node_modules/@types/node/crypto.d.ts": [ + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/dgram.d.ts": [ + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts" + ], + "../../node_modules/@types/node/dns.d.ts": [ + "../../node_modules/@types/node/dns.d.ts" + ], + "../../node_modules/@types/node/domain.d.ts": [ + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts" + ], + "../../node_modules/@types/node/events.d.ts": [ + "../../node_modules/@types/node/events.d.ts" + ], + "../../node_modules/@types/node/fs.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/fs/promises.d.ts": [ + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts" + ], + "../../node_modules/@types/node/http.d.ts": [ + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/http2.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/https.d.ts": [ + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/index.d.ts": [ + "../../node_modules/@types/node/base.d.ts" + ], + "../../node_modules/@types/node/inspector.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/inspector.d.ts" + ], + "../../node_modules/@types/node/module.d.ts": [ + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/net.d.ts": [ + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/os.d.ts": [ + "../../node_modules/@types/node/os.d.ts" + ], + "../../node_modules/@types/node/path.d.ts": [ + "../../node_modules/@types/node/path.d.ts" + ], + "../../node_modules/@types/node/perf_hooks.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts" + ], + "../../node_modules/@types/node/process.d.ts": [ + "../../node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/@types/node/punycode.d.ts": [ + "../../node_modules/@types/node/punycode.d.ts" + ], + "../../node_modules/@types/node/querystring.d.ts": [ + "../../node_modules/@types/node/querystring.d.ts" + ], + "../../node_modules/@types/node/readline.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/readline.d.ts" + ], + "../../node_modules/@types/node/repl.d.ts": [ + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/stream.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/string_decoder.d.ts": [ + "../../node_modules/@types/node/string_decoder.d.ts" + ], + "../../node_modules/@types/node/timers.d.ts": [ + "../../node_modules/@types/node/timers.d.ts" + ], + "../../node_modules/@types/node/tls.d.ts": [ + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/tls.d.ts" + ], + "../../node_modules/@types/node/trace_events.d.ts": [ + "../../node_modules/@types/node/trace_events.d.ts" + ], + "../../node_modules/@types/node/ts3.6/base.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/globals.global.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/wasi.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/@types/node/tty.d.ts": [ + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/@types/node/url.d.ts": [ + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/util.d.ts": [ + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/v8.d.ts": [ + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/v8.d.ts" + ], + "../../node_modules/@types/node/vm.d.ts": [ + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/wasi.d.ts": [ + "../../node_modules/@types/node/wasi.d.ts" + ], + "../../node_modules/@types/node/worker_threads.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts" + ], + "../../node_modules/@types/node/zlib.d.ts": [ + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/socket.io-client/build/index.d.ts": [ + "../../node_modules/socket.io-client/build/manager.d.ts", + "../../node_modules/socket.io-client/build/socket.d.ts", + "../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../node_modules/socket.io-client/build/manager.d.ts": [ + "../../node_modules/socket.io-client/build/socket.d.ts", + "../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../node_modules/socket.io-client/build/socket.d.ts": [ + "../../node_modules/socket.io-client/build/manager.d.ts", + "../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../node_modules/socket.io-client/build/typed-events.d.ts": [ + "../../node_modules/@types/component-emitter/index.d.ts" + ], + "../../node_modules/socket.io-parser/dist/index.d.ts": [ + "../../node_modules/@types/component-emitter/index.d.ts" + ], + "./src/scripts/attacker-controller.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/blood-effect.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts", + "./src/scripts/particle-system.ts" + ], + "./src/scripts/equip-weapon-component.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/floating-name.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/gltf-component.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/health-bar.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/health-component.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/index.ts": [ + "../../node_modules/socket.io-client/build/index.d.ts", + "../shared/src/index.ts" + ], + "./src/scripts/inventory-controller.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/level-up-component.ts": [ + "./src/scripts/entity.ts", + "./src/scripts/particle-system.ts" + ], + "./src/scripts/load-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/main.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts", + "./src/scripts/inventory-controller.ts", + "./src/scripts/level-up-component.ts", + "./src/scripts/load-controller.ts", + "./src/scripts/network-controller.ts", + "./src/scripts/scenery-controller.ts", + "./src/scripts/spawners.ts", + "./src/scripts/terrain.ts", + "./src/scripts/threejs_component.ts", + "./src/scripts/ui-controller.ts" + ], + "./src/scripts/network-controller.ts": [ + "../../node_modules/socket.io-client/build/index.d.ts", + "../shared/src/index.ts", + "./src/scripts/entity.ts", + "./src/scripts/ui-controller.ts" + ], + "./src/scripts/network-entity-controller.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/network-player-controller.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/npc-entity.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts", + "./src/scripts/player-entity.ts" + ], + "./src/scripts/player-entity.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts", + "./src/scripts/finite-state-machine.ts", + "./src/scripts/player-state.ts" + ], + "./src/scripts/player-input.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/player-state.ts": [ + "../shared/src/index.ts" + ], + "./src/scripts/quest-component.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/render-component.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/scenery-controller.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts", + "./src/scripts/render-component.ts", + "./src/scripts/spatial-grid-controller.ts" + ], + "./src/scripts/sorceror-effect.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts", + "./src/scripts/particle-system.ts" + ], + "./src/scripts/spatial-grid-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/spawners.ts": [ + "../shared/src/index.ts", + "./src/scripts/attacker-controller.ts", + "./src/scripts/blood-effect.ts", + "./src/scripts/entity.ts", + "./src/scripts/equip-weapon-component.ts", + "./src/scripts/floating-name.ts", + "./src/scripts/health-component.ts", + "./src/scripts/inventory-controller.ts", + "./src/scripts/network-entity-controller.ts", + "./src/scripts/network-player-controller.ts", + "./src/scripts/npc-entity.ts", + "./src/scripts/player-entity.ts", + "./src/scripts/player-input.ts", + "./src/scripts/sorceror-effect.ts", + "./src/scripts/spatial-grid-controller.ts", + "./src/scripts/third-person-camera.ts" + ], + "./src/scripts/terrain-builder-threaded-worker.ts": [ + "../shared/src/index.ts", + "./src/scripts/texture-splatter.ts" + ], + "./src/scripts/terrain-builder-threaded.ts": [ + "./src/scripts/terrain-chunk.ts" + ], + "./src/scripts/terrain-builder.ts": [ + "./src/scripts/terrain-chunk.ts" + ], + "./src/scripts/terrain.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts", + "./src/scripts/quadtree.ts", + "./src/scripts/terrain-builder-threaded.ts", + "./src/scripts/terrain-shader.ts", + "./src/scripts/texture-splatter.ts", + "./src/scripts/textures.ts", + "./src/scripts/utils.ts" + ], + "./src/scripts/texture-splatter.ts": [ + "../shared/src/index.ts" + ], + "./src/scripts/third-person-camera.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/threejs_component.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/ui-controller.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "../shared/src/defs.ts": [ + "../shared/src/constants.ts" + ], + "../shared/src/globaltypes.ts": [ + "../shared/src/constants.ts" + ], + "../shared/src/index.ts": [ + "../shared/src/constants.ts", + "../shared/src/dat.gui.module.ts", + "../shared/src/defs.ts", + "../shared/src/entity-manager.ts", + "../shared/src/globaltypes.ts", + "../shared/src/math.ts", + "../shared/src/noise.ts", + "../shared/src/spatial-hash-grid.ts", + "../shared/src/spline.ts", + "../shared/src/terrain-constants.ts", + "../shared/src/terrain-height.ts" + ], + "../shared/src/noise.ts": [ + "../shared/src/simplex-noise.ts" + ], + "../shared/src/spatial-hash-grid.ts": [ + "../shared/src/math.ts" + ], + "../shared/src/terrain-height.ts": [ + "../shared/src/noise.ts", + "../shared/src/terrain-constants.ts" + ] + }, + "exportedModulesMap": { + "../../node_modules/@types/cors/index.d.ts": [ + "../../node_modules/@types/node/http.d.ts" + ], + "../../node_modules/@types/eslint-scope/index.d.ts": [ + "../../node_modules/@types/eslint/index.d.ts", + "../../node_modules/@types/estree/index.d.ts" + ], + "../../node_modules/@types/eslint/index.d.ts": [ + "../../node_modules/@types/eslint/helpers.d.ts", + "../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../node_modules/@types/estree/index.d.ts", + "../../node_modules/@types/json-schema/index.d.ts" + ], + "../../node_modules/@types/eslint/lib/rules/index.d.ts": [ + "../../node_modules/@types/eslint/index.d.ts" + ], + "../../node_modules/@types/glob/index.d.ts": [ + "../../node_modules/@types/minimatch/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/index.d.ts" + ], + "../../node_modules/@types/node/assert.d.ts": [ + "../../node_modules/@types/node/assert.d.ts" + ], + "../../node_modules/@types/node/async_hooks.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts" + ], + "../../node_modules/@types/node/base.d.ts": [ + "../../node_modules/@types/node/assert.d.ts", + "../../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../../node_modules/@types/node/buffer.d.ts": [ + "../../node_modules/@types/node/buffer.d.ts" + ], + "../../node_modules/@types/node/child_process.d.ts": [ + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/cluster.d.ts": [ + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts" + ], + "../../node_modules/@types/node/console.d.ts": [ + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/constants.d.ts": [ + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/os.d.ts" + ], + "../../node_modules/@types/node/crypto.d.ts": [ + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/dgram.d.ts": [ + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts" + ], + "../../node_modules/@types/node/dns.d.ts": [ + "../../node_modules/@types/node/dns.d.ts" + ], + "../../node_modules/@types/node/domain.d.ts": [ + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts" + ], + "../../node_modules/@types/node/events.d.ts": [ + "../../node_modules/@types/node/events.d.ts" + ], + "../../node_modules/@types/node/fs.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/fs/promises.d.ts": [ + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts" + ], + "../../node_modules/@types/node/http.d.ts": [ + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/http2.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/https.d.ts": [ + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/index.d.ts": [ + "../../node_modules/@types/node/base.d.ts" + ], + "../../node_modules/@types/node/inspector.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/inspector.d.ts" + ], + "../../node_modules/@types/node/module.d.ts": [ + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/net.d.ts": [ + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/os.d.ts": [ + "../../node_modules/@types/node/os.d.ts" + ], + "../../node_modules/@types/node/path.d.ts": [ + "../../node_modules/@types/node/path.d.ts" + ], + "../../node_modules/@types/node/perf_hooks.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts" + ], + "../../node_modules/@types/node/process.d.ts": [ + "../../node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/@types/node/punycode.d.ts": [ + "../../node_modules/@types/node/punycode.d.ts" + ], + "../../node_modules/@types/node/querystring.d.ts": [ + "../../node_modules/@types/node/querystring.d.ts" + ], + "../../node_modules/@types/node/readline.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/readline.d.ts" + ], + "../../node_modules/@types/node/repl.d.ts": [ + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/stream.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/string_decoder.d.ts": [ + "../../node_modules/@types/node/string_decoder.d.ts" + ], + "../../node_modules/@types/node/timers.d.ts": [ + "../../node_modules/@types/node/timers.d.ts" + ], + "../../node_modules/@types/node/tls.d.ts": [ + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/tls.d.ts" + ], + "../../node_modules/@types/node/trace_events.d.ts": [ + "../../node_modules/@types/node/trace_events.d.ts" + ], + "../../node_modules/@types/node/ts3.6/base.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/globals.global.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/wasi.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/@types/node/tty.d.ts": [ + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/@types/node/url.d.ts": [ + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/util.d.ts": [ + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/v8.d.ts": [ + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/v8.d.ts" + ], + "../../node_modules/@types/node/vm.d.ts": [ + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/wasi.d.ts": [ + "../../node_modules/@types/node/wasi.d.ts" + ], + "../../node_modules/@types/node/worker_threads.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts" + ], + "../../node_modules/@types/node/zlib.d.ts": [ + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/socket.io-client/build/index.d.ts": [ + "../../node_modules/socket.io-client/build/manager.d.ts", + "../../node_modules/socket.io-client/build/socket.d.ts", + "../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../node_modules/socket.io-client/build/manager.d.ts": [ + "../../node_modules/socket.io-client/build/socket.d.ts", + "../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../node_modules/socket.io-client/build/socket.d.ts": [ + "../../node_modules/socket.io-client/build/manager.d.ts", + "../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../node_modules/socket.io-parser/dist/index.d.ts" + ], + "../../node_modules/socket.io-client/build/typed-events.d.ts": [ + "../../node_modules/@types/component-emitter/index.d.ts" + ], + "../../node_modules/socket.io-parser/dist/index.d.ts": [ + "../../node_modules/@types/component-emitter/index.d.ts" + ], + "./src/scripts/attacker-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/blood-effect.ts": [ + "./src/scripts/entity.ts", + "./src/scripts/particle-system.ts" + ], + "./src/scripts/equip-weapon-component.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/floating-name.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/gltf-component.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/health-bar.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/health-component.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/inventory-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/level-up-component.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/load-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/network-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/network-entity-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/network-player-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/npc-entity.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/player-entity.ts": [ + "./src/scripts/entity.ts", + "./src/scripts/finite-state-machine.ts" + ], + "./src/scripts/player-input.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/player-state.ts": [ + "../shared/src/index.ts" + ], + "./src/scripts/quest-component.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/render-component.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/scenery-controller.ts": [ + "../shared/src/index.ts", + "./src/scripts/entity.ts" + ], + "./src/scripts/sorceror-effect.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/spatial-grid-controller.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/spawners.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/terrain.ts": [ + "./src/scripts/entity.ts", + "./src/scripts/terrain-builder-threaded.ts" + ], + "./src/scripts/third-person-camera.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/threejs_component.ts": [ + "./src/scripts/entity.ts" + ], + "./src/scripts/ui-controller.ts": [ + "./src/scripts/entity.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../../node_modules/@types/component-emitter/index.d.ts", + "../../node_modules/@types/cookie/index.d.ts", + "../../node_modules/@types/cors/index.d.ts", + "../../node_modules/@types/eslint-scope/index.d.ts", + "../../node_modules/@types/eslint/helpers.d.ts", + "../../node_modules/@types/eslint/index.d.ts", + "../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../node_modules/@types/estree/index.d.ts", + "../../node_modules/@types/glob/index.d.ts", + "../../node_modules/@types/html-minifier-terser/index.d.ts", + "../../node_modules/@types/json-schema/index.d.ts", + "../../node_modules/@types/json5/index.d.ts", + "../../node_modules/@types/minimatch/index.d.ts", + "../../node_modules/@types/minimist/index.d.ts", + "../../node_modules/@types/node/assert.d.ts", + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/base.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/globals.global.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/index.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/ts3.6/base.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/wasi.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts", + "../../node_modules/@types/normalize-package-data/index.d.ts", + "../../node_modules/@types/parse-json/index.d.ts", + "../../node_modules/socket.io-client/build/index.d.ts", + "../../node_modules/socket.io-client/build/manager.d.ts", + "../../node_modules/socket.io-client/build/socket.d.ts", + "../../node_modules/socket.io-client/build/typed-events.d.ts", + "../../node_modules/socket.io-parser/dist/index.d.ts", + "../../node_modules/typescript/lib/lib.dom.d.ts", + "../../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../../node_modules/typescript/lib/lib.es2015.d.ts", + "../../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../../node_modules/typescript/lib/lib.es2016.d.ts", + "../../node_modules/typescript/lib/lib.es2017.d.ts", + "../../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../../node_modules/typescript/lib/lib.es2018.d.ts", + "../../node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../../node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../../node_modules/typescript/lib/lib.es2019.array.d.ts", + "../../node_modules/typescript/lib/lib.es2019.d.ts", + "../../node_modules/typescript/lib/lib.es2019.object.d.ts", + "../../node_modules/typescript/lib/lib.es2019.string.d.ts", + "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts", + "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../../node_modules/typescript/lib/lib.es2020.d.ts", + "../../node_modules/typescript/lib/lib.es2020.intl.d.ts", + "../../node_modules/typescript/lib/lib.es2020.promise.d.ts", + "../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts", + "../../node_modules/typescript/lib/lib.es2020.string.d.ts", + "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts", + "../../node_modules/typescript/lib/lib.es5.d.ts", + "../../node_modules/typescript/lib/lib.esnext.d.ts", + "../../node_modules/typescript/lib/lib.esnext.intl.d.ts", + "../../node_modules/typescript/lib/lib.esnext.promise.d.ts", + "../../node_modules/typescript/lib/lib.esnext.string.d.ts", + "../../node_modules/typescript/lib/lib.esnext.weakref.d.ts", + "./src/scripts/attacker-controller.ts", + "./src/scripts/blood-effect.ts", + "./src/scripts/entity.ts", + "./src/scripts/equip-weapon-component.ts", + "./src/scripts/finite-state-machine.ts", + "./src/scripts/floating-name.ts", + "./src/scripts/gltf-component.ts", + "./src/scripts/health-bar.ts", + "./src/scripts/health-component.ts", + "./src/scripts/index.ts", + "./src/scripts/inventory-controller.ts", + "./src/scripts/level-up-component.ts", + "./src/scripts/load-controller.ts", + "./src/scripts/loading-manager.ts", + "./src/scripts/main.ts", + "./src/scripts/network-controller.ts", + "./src/scripts/network-entity-controller.ts", + "./src/scripts/network-player-controller.ts", + "./src/scripts/npc-entity.ts", + "./src/scripts/particle-system.ts", + "./src/scripts/player-entity.ts", + "./src/scripts/player-input.ts", + "./src/scripts/player-state.ts", + "./src/scripts/quadtree.ts", + "./src/scripts/quest-component.ts", + "./src/scripts/render-component.ts", + "./src/scripts/scenery-controller.ts", + "./src/scripts/sorceror-effect.ts", + "./src/scripts/spatial-grid-controller.ts", + "./src/scripts/spawners.ts", + "./src/scripts/terrain-builder-threaded-worker.ts", + "./src/scripts/terrain-builder-threaded.ts", + "./src/scripts/terrain-builder.ts", + "./src/scripts/terrain-chunk.ts", + "./src/scripts/terrain-shader.ts", + "./src/scripts/terrain.ts", + "./src/scripts/test.ts", + "./src/scripts/texture-splatter.ts", + "./src/scripts/textures.ts", + "./src/scripts/third-person-camera.ts", + "./src/scripts/threejs_component.ts", + "./src/scripts/ui-controller.ts", + "./src/scripts/utils.ts", + "../shared/src/constants.ts", + "../shared/src/dat.gui.module.ts", + "../shared/src/defs.ts", + "../shared/src/entity-manager.ts", + "../shared/src/globaltypes.ts", + "../shared/src/index.ts", + "../shared/src/math.ts", + "../shared/src/noise.ts", + "../shared/src/simplex-noise.ts", + "../shared/src/spatial-hash-grid.ts", + "../shared/src/spline.ts", + "../shared/src/terrain-constants.ts", + "../shared/src/terrain-height.ts" + ] + }, + "version": "4.2.3" +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/webpack.config.js b/packages/quick-3d-mmo-client/webpack.config.js new file mode 100644 index 00000000..f754ea97 --- /dev/null +++ b/packages/quick-3d-mmo-client/webpack.config.js @@ -0,0 +1,71 @@ +const HtmlWebpackPlugin = require('html-webpack-plugin'); // Require html-webpack-plugin plugin +const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); +const ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin'); +const path = require('path'); + +module.exports = { + entry: __dirname + "/src/scripts/main.ts", // webpack entry point. Module to start building dependency graph + output: { + path: '/public', // Folder to store generated bundle + filename: 'bundle.js', // Name of generated bundle after build + publicPath: '/' // public URL of the output directory when referenced in a browser + }, + mode: 'development', + devtool: 'inline-source-map', + stats: { + children: true + }, + resolve: { + // Add `.ts` and `.tsx` as a resolvable extension. + extensions: [".ts", ".js"], + plugins: [ + new TsconfigPathsPlugin() + ], + modules: [path.resolve(__dirname, 'node_modules'), 'node_modules'] + }, + module: { // where we defined file patterns and their loaders + rules: [ + { + test: /\.js$/, + use: 'babel-loader', + exclude: [ + /node_modules/ + ] + }, + { + test: /\.html/, + loader: 'raw-loader' + }, + { + test: /\.tsx?$/, loader: "ts-loader", + enforce: "pre", + }, + { + test: /\.js$/, + enforce: "pre", + use: ["source-map-loader"], + }, + { + test: /\.(png|jpe?g|jpg|gif|fbx|glb)$/i, + type: 'asset/resource' + }, + { + test: /\.css$/i, + use: ['style-loader', 'css-loader'], + }, + { + test: /\.worker\.js$/, + use: { loader: "worker-loader" }, + }, + ] + }, + plugins: [ // Array of plugins to apply to build chunk + new HtmlWebpackPlugin({ + template: __dirname + "/src/index.html", + inject: 'body' + }) + ], + devServer: { // configuration for webpack-dev-server + port: 7700, // port to run dev-server + } +}; \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/index.d.ts b/packages/quick-3d-mmo-server/dist/index.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/quick-3d-mmo-server/dist/index.js b/packages/quick-3d-mmo-server/dist/index.js new file mode 100644 index 00000000..3b365afa --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/index.js @@ -0,0 +1,21 @@ +import * as http from 'http'; +import * as socket_io from 'socket.io'; +import { WorldServer } from './scripts/world-server.js'; +import { WorldNetworkClient, WorldAIClient } from './scripts/world-client.js'; +console.log("asdf"); +function Main() { + const port = process.env.PORT || 3000; + const server = http.createServer(); + const io = new socket_io.Server(server, { + cors: { + origin: '*' + } + }); + server.listen(port, () => { + console.log(`listening on: ${port}`); + }); + const _WORLD = new WorldServer(io, WorldNetworkClient); + _WORLD.Run(WorldAIClient); +} +Main(); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/index.js.map b/packages/quick-3d-mmo-server/dist/index.js.map new file mode 100644 index 00000000..b0c782dd --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAC,MAAM,2BAA2B,CAAC;AAC5E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpB,SAAS,IAAI;IACX,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;IAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE;QACpC,IAAI,EAAE;YACF,MAAM,EAAE,GAAG;SACd;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC5B,CAAC;AAGD,IAAI,EAAE,CAAC"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/login-queue.d.ts b/packages/quick-3d-mmo-server/dist/scripts/login-queue.d.ts new file mode 100644 index 00000000..64906a38 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/login-queue.d.ts @@ -0,0 +1,10 @@ +interface IClient { + ID: string; +} +declare class LoginQueue { + #private; + constructor(onLogin: any); + Add(client: IClient): void; + OnLogin(client: IClient, params: any): Generator; +} +export { LoginQueue }; diff --git a/packages/server/dist/scripts/login-queue.js b/packages/quick-3d-mmo-server/dist/scripts/login-queue.js similarity index 82% rename from packages/server/dist/scripts/login-queue.js rename to packages/quick-3d-mmo-server/dist/scripts/login-queue.js index 84634f35..73c5e94d 100644 --- a/packages/server/dist/scripts/login-queue.js +++ b/packages/quick-3d-mmo-server/dist/scripts/login-queue.js @@ -11,8 +11,9 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function ( privateMap.set(receiver, value); return value; }; -var _parent, _onLogin, _fsm, _clients, _onLogin_1; -import { EVENT_TYPES } from "shared/src/constants"; +var _parent, _onLogin, _fsm; +import { Constants } from 'quick-3d-mmo-shared'; +const { EVENT_TYPES, STATE_TYPES } = Constants; class FiniteStateMachine { constructor(onEvent) { this._currentState = new State({}); @@ -73,6 +74,7 @@ class Login_Await extends State { super(params); } OnMessage(evt, data) { + // console.log("Login_Await.OnMessage: ", {evt, data}) if (evt != EVENT_TYPES.LOGIN_COMMIT) { return false; } @@ -88,7 +90,7 @@ class Login_Confirm extends State { this.setParams(Object.assign({}, params)); } OnEnter() { - console.log('login confirmed: ' + this.getParams().accountName); + // console.log('login confirmed: ' + this.getParams().accountName); this.Broadcast({ topic: EVENT_TYPES.LOGIN_COMMIT, params: this.getParams() }); } OnMessage() { @@ -101,6 +103,7 @@ class LoginClient { _onLogin.set(this, void 0); _fsm.set(this, void 0); __classPrivateFieldSet(this, _onLogin, onLogin); + // console.log("Server: new LoginClient(): "); client.onMessage = (e, d) => this.OnMessage_(e, d); __classPrivateFieldSet(this, _fsm, new FiniteStateMachine((e) => { this.OnEvent(e); })); __classPrivateFieldGet(this, _fsm).SetState(new Login_Await({})); @@ -118,19 +121,18 @@ _onLogin = new WeakMap(), _fsm = new WeakMap(); // onLogin, OnLogin is confusing. Rename once I know the purpose. class LoginQueue { constructor(onLogin) { - _clients.set(this, void 0); - _onLogin_1.set(this, void 0); - __classPrivateFieldSet(this, _clients, {}); - __classPrivateFieldSet(this, _onLogin_1, onLogin); + this.clients = {}; + this.onLogin = onLogin; } Add(client) { - __classPrivateFieldGet(this, _clients)[client.ID] = new LoginClient(client, (e) => { this.OnLogin(client, e); }); + // console.log + this.clients[client.ID] = new LoginClient(client, (e) => { this.OnLogin(client, e); }); } - *OnLogin(client, params) { - delete __classPrivateFieldGet(this, _clients)[client.ID]; - __classPrivateFieldGet(this, _onLogin_1).call(this, client, params); + OnLogin(client, params) { + delete this.clients[client.ID]; + this.onLogin(client, params); } } -_clients = new WeakMap(), _onLogin_1 = new WeakMap(); ; export { LoginQueue }; +//# sourceMappingURL=login-queue.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/login-queue.js.map b/packages/quick-3d-mmo-server/dist/scripts/login-queue.js.map new file mode 100644 index 00000000..fcf93ae3 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/login-queue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login-queue.js","sourceRoot":"","sources":["../../src/scripts/login-queue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-client.d.ts b/packages/quick-3d-mmo-server/dist/scripts/world-client.d.ts new file mode 100644 index 00000000..51c47f7c --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-client.d.ts @@ -0,0 +1,42 @@ +import type { WorldEntity } from './world-entity'; +import { SocketWrapper } from './world-server'; +declare class WorldClient { + #private; + entity: WorldEntity; + client: SocketWrapper; + entityCache: any; + terrain_: any; + onDeath_: any; + fsm_: any; + deathTimer_: number; + timeout_: number; + constructor(client: SocketWrapper, entity: WorldEntity); + Destroy(): void; + OnDeath(): void; + OnEntityEvent_(t: any, d: any): void; + OnMessage_(evt: string, data: any): boolean; + OnDamageEvent_(_: any): void; + OnInventoryChanged_(inventory: []): void; + OnChatMessage_(message: any): void; + BroadcastChat(chatMessage: any): void; + get IsDead(): boolean; + OnUpdate_(timeElapsed: any): void; + OnUpdateClientState_(): void; + UpdateClientState_(): void; + Update(timeElapsed: any): void; +} +declare class WorldNetworkClient extends WorldClient { + entity: any; + entityCache: any; + constructor(client: any, entity: any); + OnUpdate_(timeElapsed: any): void; + OnUpdateClientState_(): void; +} +declare class WorldAIClient extends WorldClient { + constructor(entity: WorldEntity, terrain: any, onDeath: any); + get IsDead(): boolean; + OnDeath(): void; + OnUpdateClientState_(): void; + OnUpdate_(timeElapsed: number): void; +} +export { WorldNetworkClient, WorldAIClient, WorldClient, }; diff --git a/packages/server/dist/scripts/world-client.js b/packages/quick-3d-mmo-server/dist/scripts/world-client.js similarity index 95% rename from packages/server/dist/scripts/world-client.js rename to packages/quick-3d-mmo-server/dist/scripts/world-client.js index 075e2e1e..aa402f54 100644 --- a/packages/server/dist/scripts/world-client.js +++ b/packages/quick-3d-mmo-server/dist/scripts/world-client.js @@ -13,8 +13,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( }; var _timeout; import { quat, vec3 } from 'gl-matrix'; -import { _TIMEOUT, EVENT_TYPES } from 'shared/src/constants'; -import { SocketWrapper } from './world-server'; +import { SocketWrapper } from './world-server.js'; +import { Constants, EntityManager as aEntityManager } from 'quick-3d-mmo-shared'; +const { _TIMEOUT, EVENT_TYPES, EntityManager, STATE_TYPES } = Object.assign(Object.assign({}, Constants), aEntityManager); class WorldClient { constructor(client, entity) { _timeout.set(this, void 0); @@ -26,6 +27,7 @@ class WorldClient { this.client.onMessage = (e, d) => this.OnMessage_(e, d); this.client.Send(EVENT_TYPES.WORLD_PLAYER, this.entity.CreatePlayerPacket_()); this.client.Send(EVENT_TYPES.WORLD_STATS, this.entity.CreateStatsPacket_()); + // console.log("Sent world.player, world.stats") __classPrivateFieldSet(this, _timeout, _TIMEOUT); this.entityCache = {}; // Hack @@ -251,7 +253,7 @@ class AIState_WaitAttackDone extends AIState { ; class FakeClient extends SocketWrapper { constructor() { - super(null); + super({ socket: null }); } Send(msg, data) { } Disconnect() { } @@ -288,3 +290,4 @@ class WorldAIClient extends WorldClient { } ; export { WorldNetworkClient, WorldAIClient, WorldClient, }; +//# sourceMappingURL=world-client.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-client.js.map b/packages/quick-3d-mmo-server/dist/scripts/world-client.js.map new file mode 100644 index 00000000..01791e9c --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-client.js.map @@ -0,0 +1 @@ +{"version":3,"file":"world-client.js","sourceRoot":"","sources":["../../src/scripts/world-client.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-entity.d.ts b/packages/quick-3d-mmo-server/dist/scripts/world-entity.d.ts new file mode 100644 index 00000000..f29d6156 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-entity.d.ts @@ -0,0 +1,57 @@ +import { quat, vec3 } from 'gl-matrix'; +import type { WorldClient } from "./world-client.js"; +declare class Action_Attack { + #private; + constructor(time: number, cooldown: number, onAction: () => void); + get Finished(): boolean; + Update(timeElapsed: number): void; +} +declare class WorldEntity { + id_: any; + state_: any; + position_: any; + rotation_: any; + accountInfo_: any; + characterDefinition_: any; + characterInfo_: any; + stats_: any; + events_: any; + grid_: any; + gridClient_: any; + updateTimer_: any; + action_: any; + parent_: WorldClient; + isAI: boolean; + constructor(params: any); + Destroy(): void; + get ID(): any; + get Valid(): boolean; + get Health(): any; + GetDescription(): { + account: any; + character: any; + }; + CreatePlayerPacket_(): { + id: any; + desc: { + account: any; + character: any; + }; + transform: any[]; + }; + CreateStatsPacket_(): any[]; + CreateEventsPacket_(): any; + CreateTransformPacket_(): any[]; + UpdateTransform(transformData: [string, vec3, quat]): void; + UpdateGridClient_(): void; + UpdateInventory(inventory: []): void; + OnActionAttack(): void; + OnActionAttack_Fired(): void; + onEvent_(eventType: string, data: any): void; + OnDamage(attacker: WorldEntity, damage: number): void; + SetState(s: string): void; + FindNear(radius: number, includeSelf?: boolean): any; + Update(timeElapsed: number): void; + UpdateActions_(timeElapsed: number): void; +} +export { WorldEntity, Action_Attack }; diff --git a/packages/server/dist/scripts/world-entity.js b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js similarity index 78% rename from packages/server/dist/scripts/world-entity.js rename to packages/quick-3d-mmo-server/dist/scripts/world-entity.js index 3dbe207c..c53cc44e 100644 --- a/packages/server/dist/scripts/world-entity.js +++ b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js @@ -13,8 +13,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( }; var _onAction, _time, _cooldown, _timeElapsed; import { quat, vec3 } from 'gl-matrix'; -import { WEAPONS_DATA } from 'shared/src/defs'; -import { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES } from 'shared/src/constants'; +import { Constants, Defs } from 'quick-3d-mmo-shared'; +const { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, WEAPONS_DATA } = Object.assign(Object.assign({}, Constants), Defs); class Action_Attack { constructor(time, cooldown, onAction) { _onAction.set(this, void 0); @@ -152,8 +152,8 @@ class WorldEntity { return dist <= this.characterDefinition_.attack.range; }; const attackable = nearby.filter(_Filter); - for (let a of attackable) { - const target = a; + if(attackable?.[0]) { + const target = attackable[0]; const dirToTarget = vec3.create(); vec3.sub(dirToTarget, target.position_, this.position_); vec3.normalize(dirToTarget, dirToTarget); @@ -162,11 +162,11 @@ class WorldEntity { vec3.normalize(forward, forward); const dot = vec3.dot(forward, dirToTarget); if (dot < 0.9 || dot > 1.1) { - continue; + return; } // Calculate damage, use equipped weapon + whatever, this will be bad. let damage = 0; - console.log('attacking: ' + target.accountInfo_.name); + console.log(this?.accountInfo_?.name, 'attacking: ' + target.accountInfo_.name); if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { damage = (this.stats_.strength / 5.0); // TS hack. Should move this definition up. @@ -187,6 +187,45 @@ class WorldEntity { target.OnDamage(this, damage); this.onEvent_(EVENT_TYPES.ATTACK_DAMAGE, { target: target, damage: damage }); } + + /** + * This would attack multiple targets at once for every character. Replace this with a targeting system. + */ + // for (let a of attackable) { + // const target = a; + // const dirToTarget = vec3.create(); + // vec3.sub(dirToTarget, target.position_, this.position_); + // vec3.normalize(dirToTarget, dirToTarget); + // const forward = vec3.fromValues(0, 0, 1); + // vec3.transformQuat(forward, forward, this.rotation_); + // vec3.normalize(forward, forward); + // const dot = vec3.dot(forward, dirToTarget); + // if (dot < 0.9 || dot > 1.1) { + // continue; + // } + // // Calculate damage, use equipped weapon + whatever, this will be bad. + // let damage = 0; + // console.log(this?.accountInfo_?.name, 'attacking: ' + target.accountInfo_.name); + // if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { + // damage = (this.stats_.strength / 5.0); + // // TS hack. Should move this definition up. + // const equipped = this.characterInfo_.inventory['inventory-equip-1']; + // const weaponsData = WEAPONS_DATA; + // if (equipped) { + // console.log(' equipped: ' + equipped); + // const weapon = weaponsData[equipped]; + // if (weapon) { + // damage *= weapon.damage * 10; + // } + // } + // } + // else { + // damage = (this.stats_.wisdomness / 10.0); + // } + // console.log(' damage: ' + damage); + // target.OnDamage(this, damage); + // this.onEvent_(EVENT_TYPES.ATTACK_DAMAGE, { target: target, damage: damage }); + // } } onEvent_(eventType, data) { console.error("This is the fake error Jeremy put in to see if this undefined onEvent_ function was ever called."); @@ -240,3 +279,4 @@ class WorldEntity { } ; export { WorldEntity, Action_Attack }; +//# sourceMappingURL=world-entity.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-entity.js.map b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js.map new file mode 100644 index 00000000..86992b1d --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"world-entity.js","sourceRoot":"","sources":["../../src/scripts/world-entity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-manager.d.ts b/packages/quick-3d-mmo-server/dist/scripts/world-manager.d.ts new file mode 100644 index 00000000..c90dc8b8 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-manager.d.ts @@ -0,0 +1,16 @@ +declare class WorldManager { + ids_: number; + entities_: any[]; + grid_: any; + terrain_: any; + spawners_: any[]; + tickTimer_: number; + constructor(params: any); + AddMonster(e: any): void; + Add(client: any, params: any): void; + Update(timeElapsed: any): void; + TickClientState_(timeElapsed: any): void; + UpdateSpawners_(timeElapsed: any): void; + UpdateEntities_(timeElapsed: any): void; +} +export { WorldManager }; diff --git a/packages/server/dist/scripts/world-manager.js b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js similarity index 74% rename from packages/server/dist/scripts/world-manager.js rename to packages/quick-3d-mmo-server/dist/scripts/world-manager.js index 818019ba..ebf4bb9e 100644 --- a/packages/server/dist/scripts/world-manager.js +++ b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js @@ -1,9 +1,8 @@ import { quat, vec3 } from 'gl-matrix'; -import { WorldAIClient, WorldNetworkClient } from './world-client'; -import { WorldEntity } from './world-entity'; -import { SpatialHashGrid } from 'shared/src/spatial-hash-grid'; -import { HeightGenerator } from 'shared/src/terrain-height'; -import { CHARACTER_MODELS } from 'shared/src/defs'; +// import { WorldAIClient, WorldNetworkClient } from './world-client.js'; +import { WorldEntity } from './world-entity.js'; +import { SpatialHashGrid as aSpatialHashGrid, Constants, Defs, TerrainHeight } from 'quick-3d-mmo-shared'; +const { HeightGenerator, CHARACTER_MODELS, CLASS_TYPES, SpatialHashGrid } = Object.assign(Object.assign(Object.assign(Object.assign({}, aSpatialHashGrid), Constants), Defs), TerrainHeight); class MonsterSpawner { constructor(params) { this.parent_ = params.parent; @@ -13,7 +12,7 @@ class MonsterSpawner { this.pos_[1] = this.terrain_.Get(...params.pos)[0]; this.params_ = params; } - Spawn_() { + Spawn_(WorldAIClient) { // Hack const e = new WorldEntity({ id: this.parent_.ids_++, @@ -26,6 +25,7 @@ class MonsterSpawner { }, account: { accountName: CHARACTER_MODELS[this.params_.class].name }, }); + // console.log("WorldAIClient: ", WorldAIClient) const wc = new WorldAIClient(e, this.terrain_, () => { this.entity_ = null; console.log('entity gone, spawner making now one soon'); @@ -33,9 +33,9 @@ class MonsterSpawner { this.parent_.AddMonster(wc); this.entity_ = wc; } - Update(timeElapsed) { + Update(timeElapsed, WorldAIClient) { if (!this.entity_) { - this.Spawn_(); + this.Spawn_(WorldAIClient); } } } @@ -71,9 +71,10 @@ class WorldManager { AddMonster(e) { this.entities_.push(e); } - Add(client, params) { - const models = [CLASS_TYPES_ENUM.SORCEROR, 'paladin']; + Add(client, params, WorldNetworkClient) { + const models = CLASS_TYPES; const randomClass = models[Math.floor(Math.random() * models.length)]; + console.log("WorldManager.Add(): ", "SocketIOClient", params, "WorldNetworkClient"); // Hack const e = new WorldEntity({ id: this.ids_++, @@ -89,17 +90,21 @@ class WorldManager { const wc = new WorldNetworkClient(client, e); this.entities_.push(wc); wc.BroadcastChat({ - name: '', + name: 'Server:', server: true, text: '[' + params.accountName + ' has entered the game]' }); } - Update(timeElapsed) { + Update(timeElapsed, WorldAIClient) { + if (false) { + console.log("WorldManager.Update(): ", { timeElapsed, WorldAIClient }); + } this.TickClientState_(timeElapsed); this.UpdateEntities_(timeElapsed); - this.UpdateSpawners_(timeElapsed); + this.UpdateSpawners_(timeElapsed, WorldAIClient); } TickClientState_(timeElapsed) { + var _a, _b; this.tickTimer_ += timeElapsed; if (this.tickTimer_ < _TICK_RATE) { return; @@ -109,12 +114,14 @@ class WorldManager { this.entities_[i].UpdateClientState_(); } for (let i = 0; i < this.entities_.length; ++i) { - this.entities_[i].entity_.events_ = []; + if ((_b = (_a = this.entities_) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.entity_) { + this.entities_[i].entity_.events_ = []; + } } } - UpdateSpawners_(timeElapsed) { + UpdateSpawners_(timeElapsed, WorldAIClient) { for (let i = 0; i < this.spawners_.length; ++i) { - this.spawners_[i].Update(timeElapsed); + this.spawners_[i].Update(timeElapsed, WorldAIClient); } } UpdateEntities_(timeElapsed) { @@ -140,3 +147,4 @@ class WorldManager { } ; export { WorldManager }; +//# sourceMappingURL=world-manager.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-manager.js.map b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js.map new file mode 100644 index 00000000..76157c7d --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"world-manager.js","sourceRoot":"","sources":["../../src/scripts/world-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-server.d.ts b/packages/quick-3d-mmo-server/dist/scripts/world-server.d.ts new file mode 100644 index 00000000..9403a08d --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-server.d.ts @@ -0,0 +1,24 @@ +import { WorldManager } from './world-manager.js'; +import { LoginQueue } from './login-queue.js'; +declare class SocketWrapper { + socket_: any; + dead_: boolean; + constructor(params: any); + get ID(): any; + get IsAlive(): boolean; + SetupSocket_(): void; + Disconnect(): void; + Send(msg: any, data: any): void; + onMessage(e: any, d: any): boolean; +} +declare class WorldServer { + loginQueue_: LoginQueue; + worldMgr_: WorldManager; + constructor(io: any); + SetupIO_(io: any): void; + OnLogin_(client: any, params: any): void; + Run(): void; + Schedule_(t1: any): void; + Update_(timeElapsed: any): void; +} +export { WorldServer, SocketWrapper }; diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-server.js b/packages/quick-3d-mmo-server/dist/scripts/world-server.js new file mode 100644 index 00000000..1d599716 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-server.js @@ -0,0 +1,86 @@ +import { performance } from 'perf_hooks'; +import { Constants } from 'quick-3d-mmo-shared'; +import { WorldManager } from './world-manager.js'; +import { LoginQueue } from './login-queue.js'; +// import { WorldAIClient, WorldNetworkClient } from './world-client.js'; +const { EVENT_TYPES } = Constants; +class SocketWrapper { + constructor(params) { + // console.log("params: ", params) + this.socket_ = params === null || params === void 0 ? void 0 : params.socket; + this.onMessage = null; + this.dead_ = false; + this.SetupSocket_(); + } + get ID() { + return this.socket_.id; + } + get IsAlive() { + return !this.dead_; + } + SetupSocket_() { + var _a, _b, _c, _d, _e, _f; + (_b = (_a = this === null || this === void 0 ? void 0 : this.socket_) === null || _a === void 0 ? void 0 : _a.on) === null || _b === void 0 ? void 0 : _b.call(_a, 'user-connected', () => { + console.log('socket.id: ' + this.socket_.id); + }); + (_d = (_c = this === null || this === void 0 ? void 0 : this.socket_) === null || _c === void 0 ? void 0 : _c.on) === null || _d === void 0 ? void 0 : _d.call(_c, 'disconnect', () => { + console.log('Client disconnected.'); + this.dead_ = true; + }); + (_f = (_e = this.socket_) === null || _e === void 0 ? void 0 : _e.onAny) === null || _f === void 0 ? void 0 : _f.call(_e, (e, d) => { + try { + if (!this.onMessage(e, d)) { + console.log('Unknown command (' + e + '), disconnected.'); + this.Disconnect(); + } + } + catch (err) { + console.error(err); + this.Disconnect(); + } + }); + } + Disconnect() { + this.socket_.disconnect(true); + } + Send(msg, data) { + this.socket_.emit(msg, data); + } + onMessage(e, d) { return false; } +} +; +class WorldServer { + constructor(io, WorldNetworkClient) { + console.log("new WorldServer"); + this.loginQueue_ = new LoginQueue((c, p) => { this.OnLogin_(c, p, WorldNetworkClient); }); + this.worldMgr_ = new WorldManager({ parent: this }); + this.SetupIO_(io); + } + SetupIO_(io) { + io.on('connection', socket => { + console.log("WorldServer: user connected"); + this.loginQueue_.Add(new SocketWrapper({ socket: socket })); + }); + } + OnLogin_(client, params, WorldNetworkClient) { + console.log("WorldServer.OnLogin_"); + this.worldMgr_.Add(client, params, WorldNetworkClient); + } + Run(WorldAIClient) { + let t1 = performance.now(); + this.Schedule_(t1, WorldAIClient); + } + Schedule_(t1, WorldAIClient) { + setTimeout(() => { + let t2 = performance.now(); + this.Update_((t2 - t1) * 0.001, WorldAIClient); + this.Schedule_(t2, WorldAIClient); + }); + } + Update_(timeElapsed, WorldAIClient) { + this.worldMgr_.Update(timeElapsed, WorldAIClient); + } +} +; +export { WorldServer, SocketWrapper }; +//# sourceMappingURL=world-server.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-server.js.map b/packages/quick-3d-mmo-server/dist/scripts/world-server.js.map new file mode 100644 index 00000000..6275bbe4 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-server.js.map @@ -0,0 +1 @@ +{"version":3,"file":"world-server.js","sourceRoot":"","sources":["../../src/scripts/world-server.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/server/package-lock.json b/packages/quick-3d-mmo-server/package-lock.json similarity index 100% rename from packages/server/package-lock.json rename to packages/quick-3d-mmo-server/package-lock.json diff --git a/packages/quick-3d-mmo-server/package.json b/packages/quick-3d-mmo-server/package.json new file mode 100644 index 00000000..b6be5180 --- /dev/null +++ b/packages/quick-3d-mmo-server/package.json @@ -0,0 +1,22 @@ +{ + "name": "quick-3d-mmo-server", + "version": "0.0.1", + "main": "index.js", + "type": "module", + "license": "MIT", + "scripts": { + "build": "tsc --build", + "build:watch": "tsc --build --watch", + "start": "yarn build && node dist/index.js", + "debug": "concurrently 'yarn build:watch' 'nodemon --inspect-brk dist/index.js'" + }, + "dependencies": { + "gl-matrix": "^3.3.0", + "http": "^0.0.1-security", + "perf_hooks": "^0.0.1", + "socket.io": "^4.0.1" + }, + "devDependencies": { + "@types/three": "^0.126.2" + } +} diff --git a/packages/server/src/index.ts b/packages/quick-3d-mmo-server/src/index.ts similarity index 50% rename from packages/server/src/index.ts rename to packages/quick-3d-mmo-server/src/index.ts index 91290ad4..76d0e810 100644 --- a/packages/server/src/index.ts +++ b/packages/quick-3d-mmo-server/src/index.ts @@ -1,10 +1,10 @@ -import {test} from 'shared'; + import * as http from 'http'; import * as socket_io from 'socket.io'; -import {WorldServer} from './scripts/world-server'; - - +import {WorldServer} from './scripts/world-server.js'; +import {WorldNetworkClient, WorldAIClient} from './scripts/world-client.js'; +console.log("asdf"); function Main() { const port = process.env.PORT || 3000; @@ -16,11 +16,11 @@ function Main() { }); server.listen(port, () => { - console.log(`listening on: ${port} : ${test}`); + console.log(`listening on: ${port}`); }); - const _WORLD = new WorldServer(io); - _WORLD.Run(); + const _WORLD = new WorldServer(io, WorldNetworkClient); + _WORLD.Run(WorldAIClient); } diff --git a/packages/server/src/scripts/login-queue.ts b/packages/quick-3d-mmo-server/src/scripts/login-queue.ts similarity index 85% rename from packages/server/src/scripts/login-queue.ts rename to packages/quick-3d-mmo-server/src/scripts/login-queue.ts index 97ac4caa..da7cb939 100644 --- a/packages/server/src/scripts/login-queue.ts +++ b/packages/quick-3d-mmo-server/src/scripts/login-queue.ts @@ -1,5 +1,5 @@ -import {Constants} from 'shared'; -import type {GlobalTypes} from "shared"; +import {Constants} from 'quick-3d-mmo-shared'; +import type {GlobalTypes} from 'quick-3d-mmo-shared'; const { EVENT_TYPES, STATE_TYPES } = Constants; interface IState {} @@ -100,6 +100,7 @@ interface IFiniteStateMachine { } OnMessage(evt: string, data: any) { + // console.log("Login_Await.OnMessage: ", {evt, data}) if (evt != EVENT_TYPES.LOGIN_COMMIT) { return false; } @@ -119,7 +120,7 @@ interface IFiniteStateMachine { } OnEnter() { - console.log('login confirmed: ' + this.getParams().accountName); + // console.log('login confirmed: ' + this.getParams().accountName); this.Broadcast({topic: EVENT_TYPES.LOGIN_COMMIT, params: this.getParams()}); } @@ -134,7 +135,7 @@ interface IFiniteStateMachine { constructor(client: any, onLogin: (evt: string, data: any) => any) { this.#onLogin = onLogin; - + // console.log("Server: new LoginClient(): "); client.onMessage = (e: string, d: any) => this.OnMessage_(e, d); this.#fsm = new FiniteStateMachine((e: any) => { this.OnEvent(e); }); @@ -155,23 +156,24 @@ interface IFiniteStateMachine { } // onLogin, OnLogin is confusing. Rename once I know the purpose. class LoginQueue { - #clients: any; - #onLogin: any; + clients: any; + onLogin: any; constructor(onLogin: any) { - this.#clients = {}; - this.#onLogin = onLogin; + this.clients = {}; + this.onLogin = onLogin; } Add(client: IClient) { - this.#clients[client.ID] = new LoginClient( + // console.log + this.clients[client.ID] = new LoginClient( client, (e) => { this.OnLogin(client, e); }); } - *OnLogin(client: IClient, params: any) { - delete this.#clients[client.ID]; + OnLogin(client: IClient, params: any) { + delete this.clients[client.ID]; - this.#onLogin(client, params); + this.onLogin(client, params); } }; diff --git a/packages/server/src/scripts/world-client.ts b/packages/quick-3d-mmo-server/src/scripts/world-client.ts similarity index 96% rename from packages/server/src/scripts/world-client.ts rename to packages/quick-3d-mmo-server/src/scripts/world-client.ts index 4b932514..d5895120 100644 --- a/packages/server/src/scripts/world-client.ts +++ b/packages/quick-3d-mmo-server/src/scripts/world-client.ts @@ -1,9 +1,9 @@ import { quat, vec3 } from 'gl-matrix'; -import type { WorldEntity } from './world-entity'; -import { SocketWrapper } from './world-server'; +import type { WorldEntity } from './world-entity.js'; +import { SocketWrapper } from './world-server.js'; -import { Constants, EntityManager as aEntityManager } from 'shared'; +import { Constants, EntityManager as aEntityManager } from 'quick-3d-mmo-shared'; const { _TIMEOUT, EVENT_TYPES, EntityManager, STATE_TYPES } = { ...Constants, ...aEntityManager }; @@ -28,7 +28,7 @@ class WorldClient { this.client.onMessage = (e: any, d: any) => this.OnMessage_(e, d); this.client.Send(EVENT_TYPES.WORLD_PLAYER, this.entity.CreatePlayerPacket_()); this.client.Send(EVENT_TYPES.WORLD_STATS, this.entity.CreateStatsPacket_()); - + // console.log("Sent world.player, world.stats") this.#timeout = _TIMEOUT; this.entityCache = {}; @@ -325,7 +325,7 @@ class AIState_WaitAttackDone extends AIState { class FakeClient extends SocketWrapper { constructor() { - super(null) + super({socket: null}) } Send(msg, data) { } @@ -334,7 +334,7 @@ class FakeClient extends SocketWrapper { }; class WorldAIClient extends WorldClient { - constructor(entity: WorldEntity, terrain: InstanceType, onDeath) { + constructor(entity: WorldEntity, terrain: any, onDeath) { super(new FakeClient(), entity); this.terrain_ = terrain; this.onDeath_ = onDeath; diff --git a/packages/server/src/scripts/world-entity.ts b/packages/quick-3d-mmo-server/src/scripts/world-entity.ts similarity index 98% rename from packages/server/src/scripts/world-entity.ts rename to packages/quick-3d-mmo-server/src/scripts/world-entity.ts index df54f5b7..0090253d 100644 --- a/packages/server/src/scripts/world-entity.ts +++ b/packages/quick-3d-mmo-server/src/scripts/world-entity.ts @@ -1,8 +1,8 @@ import { quat, vec3 } from 'gl-matrix'; -import { Constants, Defs } from 'shared'; +import { Constants, Defs } from 'quick-3d-mmo-shared'; // import { IWorldEntity } from 'shared/src/globaltypes'; -import type { WorldClient } from "./world-client"; +import type { WorldClient } from "./world-client.js"; const { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, WEAPONS_DATA } = { ...Constants, ...Defs }; diff --git a/packages/server/src/scripts/world-manager.ts b/packages/quick-3d-mmo-server/src/scripts/world-manager.ts similarity index 77% rename from packages/server/src/scripts/world-manager.ts rename to packages/quick-3d-mmo-server/src/scripts/world-manager.ts index 46723024..871ad2e5 100644 --- a/packages/server/src/scripts/world-manager.ts +++ b/packages/quick-3d-mmo-server/src/scripts/world-manager.ts @@ -1,12 +1,17 @@ import { quat, vec3 } from 'gl-matrix'; -import { WorldAIClient, WorldNetworkClient } from './world-client'; -import { WorldEntity } from './world-entity'; +// import { WorldAIClient, WorldNetworkClient } from './world-client.js'; +import { WorldEntity } from './world-entity.js'; -import { SpatialHashGrid } from 'shared/src/spatial-hash-grid'; -import { HeightGenerator } from 'shared'; -import { CHARACTER_MODELS } from 'shared'; -import {CLASS_TYPES} from 'shared' +import { SpatialHashGrid as aSpatialHashGrid, Constants, Defs, TerrainHeight } from 'quick-3d-mmo-shared'; + + +const { HeightGenerator, CHARACTER_MODELS, CLASS_TYPES, SpatialHashGrid } = { + ...aSpatialHashGrid, + ...Constants, + ...Defs, + ...TerrainHeight, +} class MonsterSpawner { parent_: any; @@ -25,7 +30,7 @@ class MonsterSpawner { this.params_ = params; } - Spawn_() { + Spawn_(WorldAIClient) { // Hack const e = new WorldEntity({ id: this.parent_.ids_++, @@ -39,6 +44,8 @@ class MonsterSpawner { account: { accountName: CHARACTER_MODELS[this.params_.class].name }, }); + // console.log("WorldAIClient: ", WorldAIClient) + const wc = new WorldAIClient(e, this.terrain_, () => { this.entity_ = null; console.log('entity gone, spawner making now one soon'); @@ -49,9 +56,9 @@ class MonsterSpawner { this.entity_ = wc; } - Update(timeElapsed) { + Update(timeElapsed, WorldAIClient) { if (!this.entity_) { - this.Spawn_(); + this.Spawn_(WorldAIClient); } } }; @@ -101,11 +108,11 @@ class WorldManager { this.entities_.push(e); } - Add(client, params) { + Add(client, params, WorldNetworkClient) { const models = CLASS_TYPES; const randomClass = models[ Math.floor(Math.random() * models.length)]; - + console.log("WorldManager.Add(): ", "SocketIOClient", params, "WorldNetworkClient") // Hack const e = new WorldEntity({ id: this.ids_++, @@ -127,16 +134,20 @@ class WorldManager { this.entities_.push(wc); wc.BroadcastChat({ - name: '', + name: 'Server:', server: true, text: '[' + params.accountName + ' has entered the game]' }); } - Update(timeElapsed) { + Update(timeElapsed, WorldAIClient) { + if(false) { + + console.log("WorldManager.Update(): ", {timeElapsed, WorldAIClient}) + } this.TickClientState_(timeElapsed); this.UpdateEntities_(timeElapsed); - this.UpdateSpawners_(timeElapsed); + this.UpdateSpawners_(timeElapsed, WorldAIClient); } TickClientState_(timeElapsed) { @@ -151,13 +162,15 @@ class WorldManager { this.entities_[i].UpdateClientState_(); } for (let i = 0; i < this.entities_.length; ++i) { - this.entities_[i].entity_.events_ = []; + if (this.entities_?.[i]?.entity_) { + this.entities_[i].entity_.events_ = []; + } } } - UpdateSpawners_(timeElapsed) { + UpdateSpawners_(timeElapsed, WorldAIClient) { for (let i = 0; i < this.spawners_.length; ++i) { - this.spawners_[i].Update(timeElapsed); + this.spawners_[i].Update(timeElapsed, WorldAIClient); } } diff --git a/packages/server/src/scripts/world-server.ts b/packages/quick-3d-mmo-server/src/scripts/world-server.ts similarity index 51% rename from packages/server/src/scripts/world-server.ts rename to packages/quick-3d-mmo-server/src/scripts/world-server.ts index 882d385d..5525767d 100644 --- a/packages/server/src/scripts/world-server.ts +++ b/packages/quick-3d-mmo-server/src/scripts/world-server.ts @@ -1,14 +1,17 @@ import { performance } from 'perf_hooks'; -import {EVENT_TYPES} from 'shared' -import { WorldManager } from './world-manager'; -import { LoginQueue } from './login-queue'; +import {Constants} from 'quick-3d-mmo-shared' +import { WorldManager } from './world-manager.js'; +import { LoginQueue } from './login-queue.js'; +// import { WorldAIClient, WorldNetworkClient } from './world-client.js'; +const {EVENT_TYPES} = Constants; class SocketWrapper { socket_: any; dead_: boolean; - constructor(params) { - this.socket_ = params.socket; + constructor(params: {socket: any}) { + // console.log("params: ", params) + this.socket_ = params?.socket; this.onMessage = null; this.dead_ = false; this.SetupSocket_(); @@ -23,14 +26,14 @@ class SocketWrapper { } SetupSocket_() { - this.socket_.on('user-connected', () => { + this?.socket_?.on?.('user-connected', () => { console.log('socket.id: ' + this.socket_.id); }); - this.socket_.on('disconnect', () => { + this?.socket_?.on?.('disconnect', () => { console.log('Client disconnected.'); this.dead_ = true; }); - this.socket_.onAny((e: EVENT_TYPES, d: any) => { + this.socket_?.onAny?.((e: any, d: any) => { try { if (!this.onMessage(e, d)) { console.log('Unknown command (' + e + '), disconnected.'); @@ -47,10 +50,10 @@ class SocketWrapper { this.socket_.disconnect(true); } - Send(msg: EVENT_TYPES, data) { + Send(msg: any, data) { this.socket_.emit(msg, data); } - onMessage(e: EVENT_TYPES, d: any) {return false} + onMessage(e: any, d: any) {return false} }; @@ -58,9 +61,10 @@ class WorldServer { loginQueue_: LoginQueue; worldMgr_: WorldManager; - constructor(io) { + constructor(io, WorldNetworkClient) { + console.log("new WorldServer") this.loginQueue_ = new LoginQueue( - (c, p) => { this.OnLogin_(c, p); }); + (c, p) => { this.OnLogin_(c, p, WorldNetworkClient); }); this.worldMgr_ = new WorldManager({ parent: this }); this.SetupIO_(io); @@ -68,29 +72,31 @@ class WorldServer { SetupIO_(io) { io.on('connection', socket => { + console.log("WorldServer: user connected") this.loginQueue_.Add(new SocketWrapper({ socket: socket })); }); } - OnLogin_(client, params) { - this.worldMgr_.Add(client, params); + OnLogin_(client, params, WorldNetworkClient) { + console.log("WorldServer.OnLogin_") + this.worldMgr_.Add(client, params, WorldNetworkClient); } - Run() { + Run(WorldAIClient) { let t1 = performance.now(); - this.Schedule_(t1); + this.Schedule_(t1, WorldAIClient); } - Schedule_(t1) { + Schedule_(t1, WorldAIClient) { setTimeout(() => { let t2 = performance.now(); - this.Update_((t2 - t1) * 0.001); - this.Schedule_(t2); + this.Update_((t2 - t1) * 0.001, WorldAIClient); + this.Schedule_(t2, WorldAIClient); }); } - Update_(timeElapsed) { - this.worldMgr_.Update(timeElapsed); + Update_(timeElapsed, WorldAIClient) { + this.worldMgr_.Update(timeElapsed, WorldAIClient); } }; diff --git a/packages/quick-3d-mmo-server/tsconfig.json b/packages/quick-3d-mmo-server/tsconfig.json new file mode 100644 index 00000000..16a8a53c --- /dev/null +++ b/packages/quick-3d-mmo-server/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "sourceMap": true, + "target": "ES6", + "moduleResolution": "Node" + }, + "include": ["src"], + "exclude": ["dist/*","dat.gui.module.*"], + "references": [ + { + "path": "../quick-3d-mmo-shared" + } + ] +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/OrbitControls.d.ts b/packages/quick-3d-mmo-shared/dist/OrbitControls.d.ts new file mode 100644 index 00000000..a32f3200 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/OrbitControls.d.ts @@ -0,0 +1,4 @@ +declare var OrbitControls: (object: any, domElement: any) => void; +declare var MapControls: (object: any, domElement: any) => void; +export { OrbitControls, MapControls }; +//# sourceMappingURL=OrbitControls.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/OrbitControls.d.ts.map b/packages/quick-3d-mmo-shared/dist/OrbitControls.d.ts.map new file mode 100644 index 00000000..789423dc --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/OrbitControls.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"OrbitControls.d.ts","sourceRoot":"","sources":["../src/OrbitControls.ts"],"names":[],"mappings":"AAiBA,QAAA,IAAI,aAAa,wCAkpChB,CAAC;AAcF,QAAA,IAAI,WAAW,wCAYd,CAAC;AAKF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/OrbitControls.js b/packages/quick-3d-mmo-shared/dist/OrbitControls.js new file mode 100644 index 00000000..1160fefa --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/OrbitControls.js @@ -0,0 +1,755 @@ +"use strict"; +exports.__esModule = true; +exports.MapControls = exports.OrbitControls = void 0; +var three_1 = require("three"); +// This set of controls performs orbiting, dollying (zooming), and panning. +// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). +// +// Orbit - left mouse / touch: one-finger move +// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish +// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move +var OrbitControls = function (object, domElement) { + if (domElement === undefined) + console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.'); + if (domElement === document) + console.error('THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'); + this.object = object; + this.domElement = domElement; + // Set to false to disable this control + this.enabled = true; + // "target" sets the location of focus, where the object orbits around + this.target = new three_1.Vector3(); + // How far you can dolly in and out ( PerspectiveCamera only ) + this.minDistance = 0; + this.maxDistance = Infinity; + // How far you can zoom in and out ( OrthographicCamera only ) + this.minZoom = 0; + this.maxZoom = Infinity; + // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI; // radians + // How far you can orbit horizontally, upper and lower limits. + // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI ) + this.minAzimuthAngle = -Infinity; // radians + this.maxAzimuthAngle = Infinity; // radians + // Set to true to enable damping (inertia) + // If damping is enabled, you must call controls.update() in your animation loop + this.enableDamping = false; + this.dampingFactor = 0.05; + // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. + // Set to false to disable zooming + this.enableZoom = true; + this.zoomSpeed = 1.0; + // Set to false to disable rotating + this.enableRotate = true; + this.rotateSpeed = 1.0; + // Set to false to disable panning + this.enablePan = true; + this.panSpeed = 1.0; + this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up + this.keyPanSpeed = 7.0; // pixels moved per arrow key push + // Set to true to automatically rotate around the target + // If auto-rotate is enabled, you must call controls.update() in your animation loop + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + // Set to false to disable use of the keys + this.enableKeys = true; + // The four arrow keys + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + // Mouse buttons + this.mouseButtons = { LEFT: three_1.MOUSE.ROTATE, MIDDLE: three_1.MOUSE.DOLLY, RIGHT: three_1.MOUSE.PAN }; + // Touch fingers + this.touches = { ONE: three_1.TOUCH.ROTATE, TWO: three_1.TOUCH.DOLLY_PAN }; + // for reset + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + // + // public methods + // + this.getPolarAngle = function () { + return spherical.phi; + }; + this.getAzimuthalAngle = function () { + return spherical.theta; + }; + this.saveState = function () { + scope.target0.copy(scope.target); + scope.position0.copy(scope.object.position); + scope.zoom0 = scope.object.zoom; + }; + this.reset = function () { + scope.target.copy(scope.target0); + scope.object.position.copy(scope.position0); + scope.object.zoom = scope.zoom0; + scope.object.updateProjectionMatrix(); + scope.dispatchEvent(changeEvent); + scope.update(); + state = STATE.NONE; + }; + // this method is exposed, but perhaps it would be better if we can make it private... + this.update = function () { + var offset = new three_1.Vector3(); + // so camera.up is the orbit axis + var quat = new three_1.Quaternion().setFromUnitVectors(object.up, new three_1.Vector3(0, 1, 0)); + var quatInverse = quat.clone().invert(); + var lastPosition = new three_1.Vector3(); + var lastQuaternion = new three_1.Quaternion(); + var twoPI = 2 * Math.PI; + return function update() { + var position = scope.object.position; + offset.copy(position).sub(scope.target); + // rotate offset to "y-axis-is-up" space + offset.applyQuaternion(quat); + // angle from z-axis around y-axis + spherical.setFromVector3(offset); + if (scope.autoRotate && state === STATE.NONE) { + rotateLeft(getAutoRotationAngle()); + } + if (scope.enableDamping) { + spherical.theta += sphericalDelta.theta * scope.dampingFactor; + spherical.phi += sphericalDelta.phi * scope.dampingFactor; + } + else { + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + } + // restrict theta to be between desired limits + var min = scope.minAzimuthAngle; + var max = scope.maxAzimuthAngle; + if (isFinite(min) && isFinite(max)) { + if (min < -Math.PI) + min += twoPI; + else if (min > Math.PI) + min -= twoPI; + if (max < -Math.PI) + max += twoPI; + else if (max > Math.PI) + max -= twoPI; + if (min <= max) { + spherical.theta = Math.max(min, Math.min(max, spherical.theta)); + } + else { + spherical.theta = (spherical.theta > (min + max) / 2) ? + Math.max(min, spherical.theta) : + Math.min(max, spherical.theta); + } + } + // restrict phi to be between desired limits + spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); + spherical.makeSafe(); + spherical.radius *= scale; + // restrict radius to be between desired limits + spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius)); + // move target to panned location + if (scope.enableDamping === true) { + scope.target.addScaledVector(panOffset, scope.dampingFactor); + } + else { + scope.target.add(panOffset); + } + offset.setFromSpherical(spherical); + // rotate offset back to "camera-up-vector-is-up" space + offset.applyQuaternion(quatInverse); + position.copy(scope.target).add(offset); + scope.object.lookAt(scope.target); + if (scope.enableDamping === true) { + sphericalDelta.theta *= (1 - scope.dampingFactor); + sphericalDelta.phi *= (1 - scope.dampingFactor); + panOffset.multiplyScalar(1 - scope.dampingFactor); + } + else { + sphericalDelta.set(0, 0, 0); + panOffset.set(0, 0, 0); + } + scale = 1; + // update condition is: + // min(camera displacement, camera rotation in radians)^2 > EPS + // using small-angle approximation cos(x/2) = 1 - x^2 / 8 + if (zoomChanged || + lastPosition.distanceToSquared(scope.object.position) > EPS || + 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) { + scope.dispatchEvent(changeEvent); + lastPosition.copy(scope.object.position); + lastQuaternion.copy(scope.object.quaternion); + zoomChanged = false; + return true; + } + return false; + }; + }(); + this.dispose = function () { + scope.domElement.removeEventListener('contextmenu', onContextMenu, false); + scope.domElement.removeEventListener('pointerdown', onPointerDown, false); + scope.domElement.removeEventListener('wheel', onMouseWheel, false); + scope.domElement.removeEventListener('touchstart', onTouchStart, false); + scope.domElement.removeEventListener('touchend', onTouchEnd, false); + scope.domElement.removeEventListener('touchmove', onTouchMove, false); + scope.domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, false); + scope.domElement.ownerDocument.removeEventListener('pointerup', onPointerUp, false); + scope.domElement.removeEventListener('keydown', onKeyDown, false); + //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? + }; + // + // internals + // + var scope = this; + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; + var STATE = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + var state = STATE.NONE; + var EPS = 0.000001; + // current position in spherical coordinates + var spherical = new three_1.Spherical(); + var sphericalDelta = new three_1.Spherical(); + var scale = 1; + var panOffset = new three_1.Vector3(); + var zoomChanged = false; + var rotateStart = new three_1.Vector2(); + var rotateEnd = new three_1.Vector2(); + var rotateDelta = new three_1.Vector2(); + var panStart = new three_1.Vector2(); + var panEnd = new three_1.Vector2(); + var panDelta = new three_1.Vector2(); + var dollyStart = new three_1.Vector2(); + var dollyEnd = new three_1.Vector2(); + var dollyDelta = new three_1.Vector2(); + function getAutoRotationAngle() { + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + } + function getZoomScale() { + return Math.pow(0.95, scope.zoomSpeed); + } + function rotateLeft(angle) { + sphericalDelta.theta -= angle; + } + function rotateUp(angle) { + sphericalDelta.phi -= angle; + } + var panLeft = function () { + var v = new three_1.Vector3(); + return function panLeft(distance, objectMatrix) { + v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix + v.multiplyScalar(-distance); + panOffset.add(v); + }; + }(); + var panUp = function () { + var v = new three_1.Vector3(); + return function panUp(distance, objectMatrix) { + if (scope.screenSpacePanning === true) { + v.setFromMatrixColumn(objectMatrix, 1); + } + else { + v.setFromMatrixColumn(objectMatrix, 0); + v.crossVectors(scope.object.up, v); + } + v.multiplyScalar(distance); + panOffset.add(v); + }; + }(); + // deltaX and deltaY are in pixels; right and down are positive + var pan = function () { + var offset = new three_1.Vector3(); + return function pan(deltaX, deltaY) { + var element = scope.domElement; + if (scope.object.isPerspectiveCamera) { + // perspective + var position = scope.object.position; + offset.copy(position).sub(scope.target); + var targetDistance = offset.length(); + // half of the fov is center to top of screen + targetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0); + // we use only clientHeight here so aspect ratio does not distort speed + panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); + panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); + } + else if (scope.object.isOrthographicCamera) { + // orthographic + panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); + panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); + } + else { + // camera neither orthographic nor perspective + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.'); + scope.enablePan = false; + } + }; + }(); + function dollyOut(dollyScale) { + if (scope.object.isPerspectiveCamera) { + scale /= dollyScale; + } + else if (scope.object.isOrthographicCamera) { + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale)); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } + else { + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); + scope.enableZoom = false; + } + } + function dollyIn(dollyScale) { + if (scope.object.isPerspectiveCamera) { + scale *= dollyScale; + } + else if (scope.object.isOrthographicCamera) { + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale)); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } + else { + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); + scope.enableZoom = false; + } + } + // + // event callbacks - update the object state + // + function handleMouseDownRotate(event) { + rotateStart.set(event.clientX, event.clientY); + } + function handleMouseDownDolly(event) { + dollyStart.set(event.clientX, event.clientY); + } + function handleMouseDownPan(event) { + panStart.set(event.clientX, event.clientY); + } + function handleMouseMoveRotate(event) { + rotateEnd.set(event.clientX, event.clientY); + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + var element = scope.domElement; + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateStart.copy(rotateEnd); + scope.update(); + } + function handleMouseMoveDolly(event) { + dollyEnd.set(event.clientX, event.clientY); + dollyDelta.subVectors(dollyEnd, dollyStart); + if (dollyDelta.y > 0) { + dollyOut(getZoomScale()); + } + else if (dollyDelta.y < 0) { + dollyIn(getZoomScale()); + } + dollyStart.copy(dollyEnd); + scope.update(); + } + function handleMouseMovePan(event) { + panEnd.set(event.clientX, event.clientY); + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + scope.update(); + } + function handleMouseUp(e) { + // no-op + } + function handleMouseWheel(event) { + if (event.deltaY < 0) { + dollyIn(getZoomScale()); + } + else if (event.deltaY > 0) { + dollyOut(getZoomScale()); + } + scope.update(); + } + function handleKeyDown(event) { + var needsUpdate = false; + switch (event.keyCode) { + case scope.keys.UP: + pan(0, scope.keyPanSpeed); + needsUpdate = true; + break; + case scope.keys.BOTTOM: + pan(0, -scope.keyPanSpeed); + needsUpdate = true; + break; + case scope.keys.LEFT: + pan(scope.keyPanSpeed, 0); + needsUpdate = true; + break; + case scope.keys.RIGHT: + pan(-scope.keyPanSpeed, 0); + needsUpdate = true; + break; + } + if (needsUpdate) { + // prevent the browser from scrolling on cursor keys + event.preventDefault(); + scope.update(); + } + } + function handleTouchStartRotate(event) { + if (event.touches.length == 1) { + rotateStart.set(event.touches[0].pageX, event.touches[0].pageY); + } + else { + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + rotateStart.set(x, y); + } + } + function handleTouchStartPan(event) { + if (event.touches.length == 1) { + panStart.set(event.touches[0].pageX, event.touches[0].pageY); + } + else { + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + panStart.set(x, y); + } + } + function handleTouchStartDolly(event) { + var dx = event.touches[0].pageX - event.touches[1].pageX; + var dy = event.touches[0].pageY - event.touches[1].pageY; + var distance = Math.sqrt(dx * dx + dy * dy); + dollyStart.set(0, distance); + } + function handleTouchStartDollyPan(event) { + if (scope.enableZoom) + handleTouchStartDolly(event); + if (scope.enablePan) + handleTouchStartPan(event); + } + function handleTouchStartDollyRotate(event) { + if (scope.enableZoom) + handleTouchStartDolly(event); + if (scope.enableRotate) + handleTouchStartRotate(event); + } + function handleTouchMoveRotate(event) { + if (event.touches.length == 1) { + rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY); + } + else { + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + rotateEnd.set(x, y); + } + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + var element = scope.domElement; + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateStart.copy(rotateEnd); + } + function handleTouchMovePan(event) { + if (event.touches.length == 1) { + panEnd.set(event.touches[0].pageX, event.touches[0].pageY); + } + else { + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + panEnd.set(x, y); + } + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + } + function handleTouchMoveDolly(event) { + var dx = event.touches[0].pageX - event.touches[1].pageX; + var dy = event.touches[0].pageY - event.touches[1].pageY; + var distance = Math.sqrt(dx * dx + dy * dy); + dollyEnd.set(0, distance); + dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); + dollyOut(dollyDelta.y); + dollyStart.copy(dollyEnd); + } + function handleTouchMoveDollyPan(event) { + if (scope.enableZoom) + handleTouchMoveDolly(event); + if (scope.enablePan) + handleTouchMovePan(event); + } + function handleTouchMoveDollyRotate(event) { + if (scope.enableZoom) + handleTouchMoveDolly(event); + if (scope.enableRotate) + handleTouchMoveRotate(event); + } + function handleTouchEnd(e) { + // no-op + } + // + // event handlers - FSM: listen for events and reset state + // + function onPointerDown(event) { + if (scope.enabled === false) + return; + switch (event.pointerType) { + case 'mouse': + case 'pen': + onMouseDown(event); + break; + // TODO touch + } + } + function onPointerMove(event) { + if (scope.enabled === false) + return; + switch (event.pointerType) { + case 'mouse': + case 'pen': + onMouseMove(event); + break; + // TODO touch + } + } + function onPointerUp(event) { + switch (event.pointerType) { + case 'mouse': + case 'pen': + onMouseUp(event); + break; + // TODO touch + } + } + function onMouseDown(event) { + // Prevent the browser from scrolling. + event.preventDefault(); + // Manually set the focus since calling preventDefault above + // prevents the browser from setting it automatically. + scope.domElement.focus ? scope.domElement.focus() : window.focus(); + var mouseAction; + switch (event.button) { + case 0: + mouseAction = scope.mouseButtons.LEFT; + break; + case 1: + mouseAction = scope.mouseButtons.MIDDLE; + break; + case 2: + mouseAction = scope.mouseButtons.RIGHT; + break; + default: + mouseAction = -1; + } + switch (mouseAction) { + case three_1.MOUSE.DOLLY: + if (scope.enableZoom === false) + return; + handleMouseDownDolly(event); + state = STATE.DOLLY; + break; + case three_1.MOUSE.ROTATE: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enablePan === false) + return; + handleMouseDownPan(event); + state = STATE.PAN; + } + else { + if (scope.enableRotate === false) + return; + handleMouseDownRotate(event); + state = STATE.ROTATE; + } + break; + case three_1.MOUSE.PAN: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enableRotate === false) + return; + handleMouseDownRotate(event); + state = STATE.ROTATE; + } + else { + if (scope.enablePan === false) + return; + handleMouseDownPan(event); + state = STATE.PAN; + } + break; + default: + state = STATE.NONE; + } + if (state !== STATE.NONE) { + scope.domElement.ownerDocument.addEventListener('pointermove', onPointerMove, false); + scope.domElement.ownerDocument.addEventListener('pointerup', onPointerUp, false); + scope.dispatchEvent(startEvent); + } + } + function onMouseMove(event) { + if (scope.enabled === false) + return; + event.preventDefault(); + switch (state) { + case STATE.ROTATE: + if (scope.enableRotate === false) + return; + handleMouseMoveRotate(event); + break; + case STATE.DOLLY: + if (scope.enableZoom === false) + return; + handleMouseMoveDolly(event); + break; + case STATE.PAN: + if (scope.enablePan === false) + return; + handleMouseMovePan(event); + break; + } + } + function onMouseUp(event) { + scope.domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, false); + scope.domElement.ownerDocument.removeEventListener('pointerup', onPointerUp, false); + if (scope.enabled === false) + return; + handleMouseUp(event); + scope.dispatchEvent(endEvent); + state = STATE.NONE; + } + function onMouseWheel(event) { + if (scope.enabled === false || scope.enableZoom === false || (state !== STATE.NONE && state !== STATE.ROTATE)) + return; + event.preventDefault(); + event.stopPropagation(); + scope.dispatchEvent(startEvent); + handleMouseWheel(event); + scope.dispatchEvent(endEvent); + } + function onKeyDown(event) { + if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) + return; + handleKeyDown(event); + } + function onTouchStart(event) { + if (scope.enabled === false) + return; + event.preventDefault(); // prevent scrolling + switch (event.touches.length) { + case 1: + switch (scope.touches.ONE) { + case three_1.TOUCH.ROTATE: + if (scope.enableRotate === false) + return; + handleTouchStartRotate(event); + state = STATE.TOUCH_ROTATE; + break; + case three_1.TOUCH.PAN: + if (scope.enablePan === false) + return; + handleTouchStartPan(event); + state = STATE.TOUCH_PAN; + break; + default: + state = STATE.NONE; + } + break; + case 2: + switch (scope.touches.TWO) { + case three_1.TOUCH.DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) + return; + handleTouchStartDollyPan(event); + state = STATE.TOUCH_DOLLY_PAN; + break; + case three_1.TOUCH.DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) + return; + handleTouchStartDollyRotate(event); + state = STATE.TOUCH_DOLLY_ROTATE; + break; + default: + state = STATE.NONE; + } + break; + default: + state = STATE.NONE; + } + if (state !== STATE.NONE) { + scope.dispatchEvent(startEvent); + } + } + function onTouchMove(event) { + if (scope.enabled === false) + return; + event.preventDefault(); // prevent scrolling + event.stopPropagation(); + switch (state) { + case STATE.TOUCH_ROTATE: + if (scope.enableRotate === false) + return; + handleTouchMoveRotate(event); + scope.update(); + break; + case STATE.TOUCH_PAN: + if (scope.enablePan === false) + return; + handleTouchMovePan(event); + scope.update(); + break; + case STATE.TOUCH_DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) + return; + handleTouchMoveDollyPan(event); + scope.update(); + break; + case STATE.TOUCH_DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) + return; + handleTouchMoveDollyRotate(event); + scope.update(); + break; + default: + state = STATE.NONE; + } + } + function onTouchEnd(event) { + if (scope.enabled === false) + return; + handleTouchEnd(event); + scope.dispatchEvent(endEvent); + state = STATE.NONE; + } + function onContextMenu(event) { + if (scope.enabled === false) + return; + event.preventDefault(); + } + // + scope.domElement.addEventListener('contextmenu', onContextMenu, false); + scope.domElement.addEventListener('pointerdown', onPointerDown, false); + scope.domElement.addEventListener('wheel', onMouseWheel, false); + scope.domElement.addEventListener('touchstart', onTouchStart, false); + scope.domElement.addEventListener('touchend', onTouchEnd, false); + scope.domElement.addEventListener('touchmove', onTouchMove, false); + scope.domElement.addEventListener('keydown', onKeyDown, false); + // force an update at start + this.update(); +}; +exports.OrbitControls = OrbitControls; +OrbitControls.prototype = Object.create(three_1.EventDispatcher.prototype); +OrbitControls.prototype.constructor = OrbitControls; +// This set of controls performs orbiting, dollying (zooming), and panning. +// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). +// This is very similar to OrbitControls, another set of touch behavior +// +// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate +// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish +// Pan - left mouse, or arrow keys / touch: one-finger move +var MapControls = function (object, domElement) { + OrbitControls.call(this, object, domElement); + this.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up + this.mouseButtons.LEFT = three_1.MOUSE.PAN; + this.mouseButtons.RIGHT = three_1.MOUSE.ROTATE; + this.touches.ONE = three_1.TOUCH.PAN; + this.touches.TWO = three_1.TOUCH.DOLLY_ROTATE; +}; +exports.MapControls = MapControls; +MapControls.prototype = Object.create(three_1.EventDispatcher.prototype); +MapControls.prototype.constructor = MapControls; +//# sourceMappingURL=OrbitControls.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/OrbitControls.js.map b/packages/quick-3d-mmo-shared/dist/OrbitControls.js.map new file mode 100644 index 00000000..81a32bd9 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/OrbitControls.js.map @@ -0,0 +1 @@ +{"version":3,"file":"OrbitControls.js","sourceRoot":"","sources":["../src/OrbitControls.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/constants.d.ts b/packages/quick-3d-mmo-shared/dist/constants.d.ts new file mode 100644 index 00000000..7493fa09 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/constants.d.ts @@ -0,0 +1,102 @@ +declare enum STATE_TYPES { + ATTACK = "attack", + DANCE = "dance", + DEATH = "death", + IDLE = "idle", + RUN = "run", + WALK = "walk" +} +declare enum ANIM_TYPES { + ATTACK = "Attack", + DANCE = "Dance", + DEATH = "Death", + IDLE = "Idle", + RUN = "Run", + WALK = "Walk" +} +declare enum EVENT_TYPES { + ACTION_ATTACK = "action.attack", + ATTACK = "attack", + ATTACK_DAMAGE = "attack.damage", + CHAT_MESSAGE = "chat.message", + CHAT_MSG = "chat.msg", + HEALTH_ADD_EXPERIENCE = "health.add-experience", + HEALTH_DAMAGE = "health.damage", + HEALTH_DEATH = "health.death", + HEALTH_LEVEL = "health.level", + HEALTH_UPDATE = "health.update", + INVENTORY_EQUIP = "inventory.equip", + INVENTORY_UPDATED = "inventory.updated", + LOAD_CHARACTER = "load.character", + LOAD_WEAPON = "load.weapon", + LOGIN_COMMIT = "login.commit", + NETWORK_INVENTORY = "network.inventory", + PLAYER_ACTION = "player.action", + STATS_NETWORK = "stats.network", + WORLD_INVENTORY = "world.inventory", + WORLD_PLAYER = "world.player", + WORLD_STATS = "world.stats", + WORLD_UPDATE = "world.update", + CONNECT = "connect", + NETWORK_UPDATE = "network.update", + EVENTS_NETWORK = "events.network", + INPUT_PICKED = "input.picked" +} +declare type IEVENT_TYPES = Record; +declare enum KNOWN_ENTITIES { + DATABASE = "database", + INVENTORY_CONTROLLER = "InventoryController", + INVENTORY_DATABASE_CONTROLLER = "InventoryDatabaseController", + LEVEL_UP_SPAWNER = "level-up-spawner", + SPAWNERS = "spawners", + LOADER = "loader", + SCENERY = "scenery", + TERRAIN = "terrain", + UI = "ui", + NETWORK = "network", + PLAYER = "player" +} +declare enum NAMED_COMPONENTS { + LEVEL_UP_SPAWNER = "LevelUpComponentSpawner", + PLAYER_SPAWNER = "PlayerSpawner", + NETWORK_ENTITY_SPAWNER = "NetworkEntitySpawner", + UI_CONTROLLER = "UIController", + THREEJS_CONTROLLER = "ThreeJSController", + NETWORK_CONTROLLER = "NetworkController" +} +declare enum INVENTORY_TYPES { + DEFAULT_PREFIX = "inventory-", + EQUIP_PREFIX = "inventory-equip-" +} +declare enum CLASS_TYPES_ENUM { + PALADIN = "paladin", + SORCEROR = "sorceror", + WARROK = "warrok", + ZOMBIE = "zombie" +} +declare enum WEAPON_TYPES_ENUM { + AXE = "weapon.axe1", + HAMMER = "weapon.hammer1", + SWORD = "weapon.sword1" +} +declare const CLASS_TYPES: CLASS_TYPES_ENUM[]; +declare enum ATTACK_TYPES { + MELEE = "melee" +} +declare const _TIMEOUT: number; +declare enum DOM_IDS { + HEALTH_BAR = "health-bar", + STATS_BENCHPRESS = "stats-benchpress", + STATS_CURL = "stats-curl", + STATS_EXPERIENCE = "stats-experience", + STATS_STRENGTH = "stats-strength", + STATS_WISDOMNESS = "stats-wisdomness", + LOGIN_INPUT = "login-input", + LOGIN_UI = "login-ui", + LOGIN_BUTTON = "login-button", + THREEJS = "threejs", + QUEST_UI = "quest-ui" +} +export type { IEVENT_TYPES }; +export { _TIMEOUT, ATTACK_TYPES, CLASS_TYPES_ENUM, CLASS_TYPES, DOM_IDS, EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, WEAPON_TYPES_ENUM, ANIM_TYPES, }; +//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/constants.d.ts.map b/packages/quick-3d-mmo-shared/dist/constants.d.ts.map new file mode 100644 index 00000000..5910579d --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,aAAK,WAAW;IACZ,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,aAAK,UAAU;IACX,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,aAAK,WAAW;IACZ,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,qBAAqB,0BAA0B;IAC/C,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAChC;AAED,aAAK,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEhD,aAAK,cAAc;IACf,QAAQ,aAAa;IACrB,oBAAoB,wBAAwB;IAC5C,6BAA6B,gCAAgC;IAC7D,gBAAgB,qBAAqB;IACrC,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,EAAE,OAAO;IACT,OAAO,YAAY;IACnB,MAAM,WAAW;CACpB;AAED,aAAK,gBAAgB;IACjB,gBAAgB,4BAA4B;IAC5C,cAAc,kBAAkB;IAChC,sBAAsB,yBAAyB;IAC/C,aAAa,iBAAiB;IAC9B,kBAAkB,sBAAsB;IACxC,kBAAkB,sBAAsB;CAC3C;AAED,aAAK,eAAe;IAChB,cAAc,eAAe;IAC7B,YAAY,qBAAqB;CACpC;AAED,aAAK,gBAAgB;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;CACpB;AAED,aAAK,iBAAiB;IAClB,GAAG,gBAAgB;IACnB,MAAM,mBAAmB;IACzB,KAAK,kBAAkB;CAC1B;AAED,QAAA,MAAM,WAAW,oBAAwD,CAAC;AAE1E,aAAK,YAAY;IACb,KAAK,UAAU;CAClB;AAED,QAAA,MAAM,QAAQ,EAAC,MAAc,CAAC;AAE9B,aAAK,OAAO;IACR,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB;AAED,YAAY,EACR,YAAY,EACf,CAAA;AAED,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,UAAU,GACb,CAAC"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/constants.js b/packages/quick-3d-mmo-shared/dist/constants.js new file mode 100644 index 00000000..49877fae --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/constants.js @@ -0,0 +1,124 @@ +"use strict"; +exports.__esModule = true; +exports.ANIM_TYPES = exports.WEAPON_TYPES_ENUM = exports.STATE_TYPES = exports.NAMED_COMPONENTS = exports.KNOWN_ENTITIES = exports.INVENTORY_TYPES = exports.EVENT_TYPES = exports.DOM_IDS = exports.CLASS_TYPES = exports.CLASS_TYPES_ENUM = exports.ATTACK_TYPES = exports._TIMEOUT = void 0; +var STATE_TYPES; +(function (STATE_TYPES) { + STATE_TYPES["ATTACK"] = "attack"; + STATE_TYPES["DANCE"] = "dance"; + STATE_TYPES["DEATH"] = "death"; + STATE_TYPES["IDLE"] = "idle"; + STATE_TYPES["RUN"] = "run"; + STATE_TYPES["WALK"] = "walk"; +})(STATE_TYPES || (STATE_TYPES = {})); +exports.STATE_TYPES = STATE_TYPES; +var ANIM_TYPES; +(function (ANIM_TYPES) { + ANIM_TYPES["ATTACK"] = "Attack"; + ANIM_TYPES["DANCE"] = "Dance"; + ANIM_TYPES["DEATH"] = "Death"; + ANIM_TYPES["IDLE"] = "Idle"; + ANIM_TYPES["RUN"] = "Run"; + ANIM_TYPES["WALK"] = "Walk"; +})(ANIM_TYPES || (ANIM_TYPES = {})); +exports.ANIM_TYPES = ANIM_TYPES; +var EVENT_TYPES; +(function (EVENT_TYPES) { + EVENT_TYPES["ACTION_ATTACK"] = "action.attack"; + EVENT_TYPES["ATTACK"] = "attack"; + EVENT_TYPES["ATTACK_DAMAGE"] = "attack.damage"; + EVENT_TYPES["CHAT_MESSAGE"] = "chat.message"; + EVENT_TYPES["CHAT_MSG"] = "chat.msg"; + EVENT_TYPES["HEALTH_ADD_EXPERIENCE"] = "health.add-experience"; + EVENT_TYPES["HEALTH_DAMAGE"] = "health.damage"; + EVENT_TYPES["HEALTH_DEATH"] = "health.death"; + EVENT_TYPES["HEALTH_LEVEL"] = "health.level"; + EVENT_TYPES["HEALTH_UPDATE"] = "health.update"; + EVENT_TYPES["INVENTORY_EQUIP"] = "inventory.equip"; + EVENT_TYPES["INVENTORY_UPDATED"] = "inventory.updated"; + EVENT_TYPES["LOAD_CHARACTER"] = "load.character"; + EVENT_TYPES["LOAD_WEAPON"] = "load.weapon"; + EVENT_TYPES["LOGIN_COMMIT"] = "login.commit"; + EVENT_TYPES["NETWORK_INVENTORY"] = "network.inventory"; + EVENT_TYPES["PLAYER_ACTION"] = "player.action"; + EVENT_TYPES["STATS_NETWORK"] = "stats.network"; + EVENT_TYPES["WORLD_INVENTORY"] = "world.inventory"; + EVENT_TYPES["WORLD_PLAYER"] = "world.player"; + EVENT_TYPES["WORLD_STATS"] = "world.stats"; + EVENT_TYPES["WORLD_UPDATE"] = "world.update"; + EVENT_TYPES["CONNECT"] = "connect"; + EVENT_TYPES["NETWORK_UPDATE"] = "network.update"; + EVENT_TYPES["EVENTS_NETWORK"] = "events.network"; + EVENT_TYPES["INPUT_PICKED"] = "input.picked"; +})(EVENT_TYPES || (EVENT_TYPES = {})); +exports.EVENT_TYPES = EVENT_TYPES; +var KNOWN_ENTITIES; +(function (KNOWN_ENTITIES) { + KNOWN_ENTITIES["DATABASE"] = "database"; + KNOWN_ENTITIES["INVENTORY_CONTROLLER"] = "InventoryController"; + KNOWN_ENTITIES["INVENTORY_DATABASE_CONTROLLER"] = "InventoryDatabaseController"; + KNOWN_ENTITIES["LEVEL_UP_SPAWNER"] = "level-up-spawner"; + KNOWN_ENTITIES["SPAWNERS"] = "spawners"; + KNOWN_ENTITIES["LOADER"] = "loader"; + KNOWN_ENTITIES["SCENERY"] = "scenery"; + KNOWN_ENTITIES["TERRAIN"] = "terrain"; + KNOWN_ENTITIES["UI"] = "ui"; + KNOWN_ENTITIES["NETWORK"] = "network"; + KNOWN_ENTITIES["PLAYER"] = "player"; +})(KNOWN_ENTITIES || (KNOWN_ENTITIES = {})); +exports.KNOWN_ENTITIES = KNOWN_ENTITIES; +var NAMED_COMPONENTS; +(function (NAMED_COMPONENTS) { + NAMED_COMPONENTS["LEVEL_UP_SPAWNER"] = "LevelUpComponentSpawner"; + NAMED_COMPONENTS["PLAYER_SPAWNER"] = "PlayerSpawner"; + NAMED_COMPONENTS["NETWORK_ENTITY_SPAWNER"] = "NetworkEntitySpawner"; + NAMED_COMPONENTS["UI_CONTROLLER"] = "UIController"; + NAMED_COMPONENTS["THREEJS_CONTROLLER"] = "ThreeJSController"; + NAMED_COMPONENTS["NETWORK_CONTROLLER"] = "NetworkController"; +})(NAMED_COMPONENTS || (NAMED_COMPONENTS = {})); +exports.NAMED_COMPONENTS = NAMED_COMPONENTS; +var INVENTORY_TYPES; +(function (INVENTORY_TYPES) { + INVENTORY_TYPES["DEFAULT_PREFIX"] = "inventory-"; + INVENTORY_TYPES["EQUIP_PREFIX"] = "inventory-equip-"; +})(INVENTORY_TYPES || (INVENTORY_TYPES = {})); +exports.INVENTORY_TYPES = INVENTORY_TYPES; +var CLASS_TYPES_ENUM; +(function (CLASS_TYPES_ENUM) { + CLASS_TYPES_ENUM["PALADIN"] = "paladin"; + CLASS_TYPES_ENUM["SORCEROR"] = "sorceror"; + CLASS_TYPES_ENUM["WARROK"] = "warrok"; + CLASS_TYPES_ENUM["ZOMBIE"] = "zombie"; +})(CLASS_TYPES_ENUM || (CLASS_TYPES_ENUM = {})); +exports.CLASS_TYPES_ENUM = CLASS_TYPES_ENUM; +var WEAPON_TYPES_ENUM; +(function (WEAPON_TYPES_ENUM) { + WEAPON_TYPES_ENUM["AXE"] = "weapon.axe1"; + WEAPON_TYPES_ENUM["HAMMER"] = "weapon.hammer1"; + WEAPON_TYPES_ENUM["SWORD"] = "weapon.sword1"; +})(WEAPON_TYPES_ENUM || (WEAPON_TYPES_ENUM = {})); +exports.WEAPON_TYPES_ENUM = WEAPON_TYPES_ENUM; +var CLASS_TYPES = [CLASS_TYPES_ENUM.SORCEROR, CLASS_TYPES_ENUM.PALADIN]; +exports.CLASS_TYPES = CLASS_TYPES; +var ATTACK_TYPES; +(function (ATTACK_TYPES) { + ATTACK_TYPES["MELEE"] = "melee"; +})(ATTACK_TYPES || (ATTACK_TYPES = {})); +exports.ATTACK_TYPES = ATTACK_TYPES; +var _TIMEOUT = 600.0; +exports._TIMEOUT = _TIMEOUT; +var DOM_IDS; +(function (DOM_IDS) { + DOM_IDS["HEALTH_BAR"] = "health-bar"; + DOM_IDS["STATS_BENCHPRESS"] = "stats-benchpress"; + DOM_IDS["STATS_CURL"] = "stats-curl"; + DOM_IDS["STATS_EXPERIENCE"] = "stats-experience"; + DOM_IDS["STATS_STRENGTH"] = "stats-strength"; + DOM_IDS["STATS_WISDOMNESS"] = "stats-wisdomness"; + DOM_IDS["LOGIN_INPUT"] = "login-input"; + DOM_IDS["LOGIN_UI"] = "login-ui"; + DOM_IDS["LOGIN_BUTTON"] = "login-button"; + DOM_IDS["THREEJS"] = "threejs"; + DOM_IDS["QUEST_UI"] = "quest-ui"; +})(DOM_IDS || (DOM_IDS = {})); +exports.DOM_IDS = DOM_IDS; +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/constants.js.map b/packages/quick-3d-mmo-shared/dist/constants.js.map new file mode 100644 index 00000000..5d6514d9 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/defs.d.ts b/packages/quick-3d-mmo-shared/dist/defs.d.ts new file mode 100644 index 00000000..7752a812 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/defs.d.ts @@ -0,0 +1,64 @@ +import { CLASS_TYPES_ENUM, WEAPON_TYPES_ENUM } from "./constants.js"; +declare module ICharacter { + interface Anchors { + rightHand: string; + } + interface Attack { + timing: number; + cooldown: number; + type: string; + range: number; + } + interface Inventory { + ['inventory-1']?: string; + ['inventory-2']?: string; + ['inventory-equip-1']?: string; + } + interface Stats { + health: number; + maxHealth: number; + strength: number; + wisdomness: number; + benchpress: number; + curl: number; + experience: number; + level: number; + } + interface RootObject { + base: string; + path: string; + anchors: Anchors; + nameOffset: number; + attack: Attack; + scale: number; + inventory: Inventory; + stats: Stats; + name: string; + } +} +interface ICharacterModels { + [CLASS_TYPES_ENUM.PALADIN]: ICharacter.RootObject; + [CLASS_TYPES_ENUM.SORCEROR]: ICharacter.RootObject; + [CLASS_TYPES_ENUM.WARROK]: ICharacter.RootObject; + [CLASS_TYPES_ENUM.ZOMBIE]: ICharacter.RootObject; +} +declare const CHARACTER_MODELS: ICharacterModels; +interface IWeaponsData { + [WEAPON_TYPES_ENUM.AXE]: IWeaponaxe1; + [WEAPON_TYPES_ENUM.SWORD]: IWeaponaxe1; + [WEAPON_TYPES_ENUM.HAMMER]: IWeaponaxe1; +} +interface IWeaponaxe1 { + type: string; + damage: number; + renderParams: RenderParams; +} +interface RenderParams { + name: string; + scale: number; + icon: string; +} +declare const WEAPONS_DATA: IWeaponsData; +export type { ICharacter }; +export { CHARACTER_MODELS, WEAPONS_DATA }; +//# sourceMappingURL=defs.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/defs.d.ts.map b/packages/quick-3d-mmo-shared/dist/defs.d.ts.map new file mode 100644 index 00000000..cbd47069 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/defs.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"defs.d.ts","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,QAAQ,UAAU,CAAC;IAExB,UAAiB,OAAO;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB;IAED,UAAiB,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf;IAED,UAAiB,SAAS;QACxB,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC;QACzB,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC;QACzB,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC;KAChC;IAED,UAAiB,KAAK;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf;IAED,UAAiB,UAAU;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd;CAEF;AAED,UAAU,gBAAgB;IACxB,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC;IAClD,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC;IACnD,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC;IACjD,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC;CAClD;AAGD,QAAA,MAAM,gBAAgB,EAAE,gBAiHvB,CAAC;AAEF,UAAU,YAAY;IACpB,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC;IACrC,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IACvC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CACzC;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,QAAA,MAAM,YAAY,EAAE,YA+BnB,CAAC;AAEF,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/defs.js b/packages/quick-3d-mmo-shared/dist/defs.js new file mode 100644 index 00000000..0d39782a --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/defs.js @@ -0,0 +1,151 @@ +"use strict"; +var _a, _b; +exports.__esModule = true; +exports.WEAPONS_DATA = exports.CHARACTER_MODELS = void 0; +var constants_js_1 = require("./constants.js"); +var CHARACTER_MODELS = (_a = {}, + _a[constants_js_1.CLASS_TYPES_ENUM.PALADIN] = { + base: 'paladin.glb', + path: './src/resources/characters/', + anchors: { + rightHand: 'RightHandIndex1' + }, + nameOffset: 11, + attack: { + timing: 0.35, + cooldown: 1.0, + type: 'melee', + range: 10 + }, + scale: 6.0, + inventory: { + 'inventory-1': constants_js_1.WEAPON_TYPES_ENUM.AXE, + 'inventory-2': constants_js_1.WEAPON_TYPES_ENUM.HAMMER, + 'inventory-equip-1': constants_js_1.WEAPON_TYPES_ENUM.SWORD + }, + stats: { + health: 200, + maxHealth: 200, + strength: 50, + wisdomness: 5, + benchpress: 20, + curl: 100, + experience: 0, + level: 1 + }, + name: 'Paladin' + }, + _a[constants_js_1.CLASS_TYPES_ENUM.SORCEROR] = { + base: 'sorceror.glb', + path: './src/resources/characters/', + anchors: { + rightHand: 'RightHandIndex1' + }, + nameOffset: 10, + attack: { + timing: 1.0, + cooldown: 1.5, + type: 'magic', + range: 40 + }, + scale: 4.0, + inventory: {}, + stats: { + health: 100, + maxHealth: 100, + strength: 10, + wisdomness: 200, + benchpress: 3, + curl: 17, + experience: 0, + level: 1 + }, + name: 'Sorceror' + }, + _a[constants_js_1.CLASS_TYPES_ENUM.WARROK] = { + base: 'warrok.glb', + path: './src/resources/characters/', + anchors: { + rightHand: 'RightHandIndex1' + }, + nameOffset: 16, + attack: { + timing: 1.5, + cooldown: 2.6, + type: 'melee', + range: 15 + }, + scale: 8.0, + inventory: {}, + stats: { + health: 1000, + maxHealth: 1000, + strength: 200, + wisdomness: 4, + benchpress: 3, + curl: 200, + experience: 0, + level: 1 + }, + name: 'Monster Guy' + }, + _a[constants_js_1.CLASS_TYPES_ENUM.ZOMBIE] = { + base: 'zombie-guy.glb', + path: './src/resources/characters/', + anchors: { + rightHand: 'RightHandIndex1' + }, + nameOffset: 8, + attack: { + timing: 1.0, + cooldown: 3.0, + type: 'melee', + range: 10 + }, + scale: 4.0, + inventory: {}, + stats: { + health: 20, + maxHealth: 50, + strength: 25, + wisdomness: 4, + benchpress: 3, + curl: 20, + experience: 0, + level: 1 + }, + name: 'Zombie' + }, + _a); +exports.CHARACTER_MODELS = CHARACTER_MODELS; +var WEAPONS_DATA = (_b = {}, + _b[constants_js_1.WEAPON_TYPES_ENUM.AXE] = { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Axe', + scale: 0.125, + icon: 'war-axe-64.png' + } + }, + _b[constants_js_1.WEAPON_TYPES_ENUM.SWORD] = { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Sword', + scale: 0.125, + icon: 'pointy-sword-64.png' + } + }, + _b[constants_js_1.WEAPON_TYPES_ENUM.HAMMER] = { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Hammer_Small', + scale: 0.125, + icon: 'hammer-64.png' + } + }, + _b); +exports.WEAPONS_DATA = WEAPONS_DATA; +//# sourceMappingURL=defs.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/defs.js.map b/packages/quick-3d-mmo-shared/dist/defs.js.map new file mode 100644 index 00000000..ab97a101 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/defs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":";;;;AAAA,+CAAqE;AAsDrE,IAAM,gBAAgB;IACpB,GAAC,+BAAgB,CAAC,OAAO,IAAG;QAC1B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE;YACP,SAAS,EAAE,iBAAiB;SAC7B;QACD,UAAU,EAAE,EAAE;QACd,MAAM,EAAE;YACN,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE;SACV;QACD,KAAK,EAAE,GAAG;QACV,SAAS,EAAE;YACT,aAAa,EAAE,gCAAiB,CAAC,GAAG;YACpC,aAAa,EAAE,gCAAiB,CAAC,MAAM;YACvC,mBAAmB,EAAE,gCAAiB,CAAC,KAAK;SAC7C;QACD,KAAK,EAAE;YACL,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,GAAG;YACT,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;SACT;QACD,IAAI,EAAE,SAAS;KAChB;IACD,GAAC,+BAAgB,CAAC,QAAQ,IAAG;QAC3B,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE;YACP,SAAS,EAAE,iBAAiB;SAC7B;QACD,UAAU,EAAE,EAAE;QACd,MAAM,EAAE;YACN,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE;SACV;QACD,KAAK,EAAE,GAAG;QACV,SAAS,EAAE,EAAE;QACb,KAAK,EAAE;YACL,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,CAAC;YACb,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;SACT;QACD,IAAI,EAAE,UAAU;KACjB;IACD,GAAC,+BAAgB,CAAC,MAAM,IAAG;QACzB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE;YACP,SAAS,EAAE,iBAAiB;SAC7B;QACD,UAAU,EAAE,EAAE;QACd,MAAM,EAAE;YACN,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE;SACV;QACD,KAAK,EAAE,GAAG;QACV,SAAS,EAAE,EAAE;QACb,KAAK,EAAE;YACL,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,GAAG;YACb,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,IAAI,EAAE,GAAG;YACT,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;SACT;QACD,IAAI,EAAE,aAAa;KACpB;IACD,GAAC,+BAAgB,CAAC,MAAM,IAAG;QACzB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE;YACP,SAAS,EAAE,iBAAiB;SAC7B;QACD,UAAU,EAAE,CAAC;QACb,MAAM,EAAE;YACN,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE;SACV;QACD,KAAK,EAAE,GAAG;QACV,SAAS,EAAE,EAAE;QACb,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;SACT;QACD,IAAI,EAAE,QAAQ;KACf;OACF,CAAC;AAsDO,4CAAgB;AAlCzB,IAAM,YAAY;IAChB,GAAC,gCAAiB,CAAC,GAAG,IACtB;QACE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,YAAY,EAAE;YACZ,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,gBAAgB;SACvB;KACF;IACD,GAAC,gCAAiB,CAAC,KAAK,IACxB;QACE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,qBAAqB;SAC5B;KACF;IACD,GAAC,gCAAiB,CAAC,MAAM,IACzB;QACE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC;QACT,YAAY,EAAE;YACZ,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,eAAe;SACtB;KACF;OACF,CAAC;AAGyB,oCAAY"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts b/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts new file mode 100644 index 00000000..648147c7 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts @@ -0,0 +1,14 @@ +declare class EntityManager { + _ids: number; + _entitiesMap: {}; + _entities: any[]; + constructor(); + _GenerateName(): string; + Get(n: any): any; + Filter(cb: any): any[]; + Add(e: any, n: any): void; + SetActive(e: any, b: any): void; + Update(timeElapsed: any): void; +} +export { EntityManager }; +//# sourceMappingURL=entity-manager.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts.map b/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts.map new file mode 100644 index 00000000..247018f2 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,EAAE,CAAC;IACjB,SAAS,EAAE,GAAG,EAAE,CAAC;;IAQjB,aAAa;IAMb,GAAG,CAAC,CAAC,KAAA;IAIL,MAAM,CAAC,EAAE,KAAA;IAIT,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAcR,SAAS,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAkBd,MAAM,CAAC,WAAW,KAAA;CAyBnB;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/entity-manager.js b/packages/quick-3d-mmo-shared/dist/entity-manager.js new file mode 100644 index 00000000..870b4e92 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/entity-manager.js @@ -0,0 +1,69 @@ +"use strict"; +exports.__esModule = true; +exports.EntityManager = void 0; +var EntityManager = /** @class */ (function () { + function EntityManager() { + this._ids = 0; + this._entitiesMap = {}; + this._entities = []; + } + EntityManager.prototype._GenerateName = function () { + this._ids += 1; + return '__name__' + this._ids; + }; + EntityManager.prototype.Get = function (n) { + return this._entitiesMap[n]; + }; + EntityManager.prototype.Filter = function (cb) { + return this._entities.filter(cb); + }; + EntityManager.prototype.Add = function (e, n) { + // console.log("EntityManager.Add(): ", e, n) + if (!n) { + n = this._GenerateName(); + } + e.SetName(n); + this._entitiesMap[n] = e; + this._entities.push(e); + e.SetParent(this); + e.InitEntity(); + }; + EntityManager.prototype.SetActive = function (e, b) { + var i = this._entities.indexOf(e); + if (!b) { + if (i < 0) { + return; + } + this._entities.splice(i, 1); + } + else { + if (i >= 0) { + return; + } + this._entities.push(e); + } + }; + EntityManager.prototype.Update = function (timeElapsed) { + var dead = []; + var alive = []; + for (var i = 0; i < this._entities.length; ++i) { + var e = this._entities[i]; + e.Update(timeElapsed); + if (e.dead_) { + dead.push(e); + } + else { + alive.push(e); + } + } + for (var i = 0; i < dead.length; ++i) { + var e = dead[i]; + delete this._entitiesMap[e.Name]; + e.Destroy(); + } + this._entities = alive; + }; + return EntityManager; +}()); +exports.EntityManager = EntityManager; +//# sourceMappingURL=entity-manager.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/entity-manager.js.map b/packages/quick-3d-mmo-shared/dist/entity-manager.js.map new file mode 100644 index 00000000..bffbe3a2 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/entity-manager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"entity-manager.js","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":";;;AAAA;IAKE;QACE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,qCAAa,GAAb;QACE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAEf,OAAO,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,2BAAG,GAAH,UAAI,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,8BAAM,GAAN,UAAO,EAAE;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,2BAAG,GAAH,UAAI,CAAC,EAAE,CAAC;QACN,6CAA6C;QAC7C,IAAI,CAAC,CAAC,EAAE;YACN,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;SAC1B;QACD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEvB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAElB,CAAC,CAAC,UAAU,EAAE,CAAC;IACjB,CAAC;IAED,iCAAS,GAAT,UAAU,CAAC,EAAE,CAAC;QACZ,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,CAAC,EAAE;YACN,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,EAAE;gBACV,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;IACH,CAAC;IAED,8BAAM,GAAN,UAAO,WAAW;QAChB,IAAM,IAAI,GAAU,EAAE,CAAC;QACvB,IAAM,KAAK,GAAU,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC9C,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAE5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,KAAK,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACd;iBAAM;gBACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACf;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACpC,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEjC,CAAC,CAAC,OAAO,EAAE,CAAC;SACb;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACH,oBAAC;AAAD,CAAC,AAlFD,IAkFC;AAEQ,sCAAa"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/globaltypes.d.ts b/packages/quick-3d-mmo-shared/dist/globaltypes.d.ts new file mode 100644 index 00000000..0d661c7e --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/globaltypes.d.ts @@ -0,0 +1,15 @@ +import { EVENT_TYPES } from "./constants.js"; +interface IOnMessageArgs { + (evt: TEvt, params: { + accountName?: string; + }): void; +} +/** + * shared event type + */ +declare type TEvt = { + topic: EVENT_TYPES; + params: any; +}; +export type { IOnMessageArgs, TEvt, }; +//# sourceMappingURL=globaltypes.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/globaltypes.d.ts.map b/packages/quick-3d-mmo-shared/dist/globaltypes.d.ts.map new file mode 100644 index 00000000..fa81628e --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/globaltypes.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"globaltypes.d.ts","sourceRoot":"","sources":["../src/globaltypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,UAAU,cAAc;IACpB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAA;CACX;AAGD;;GAEG;AACH,aAAK,IAAI,GAAG;IACR,KAAK,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAClC,CAAA;AAED,YAAY,EACR,cAAc,EACd,IAAI,GACP,CAAC"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/globaltypes.js b/packages/quick-3d-mmo-shared/dist/globaltypes.js new file mode 100644 index 00000000..92bda2ee --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/globaltypes.js @@ -0,0 +1,3 @@ +"use strict"; +exports.__esModule = true; +//# sourceMappingURL=globaltypes.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/globaltypes.js.map b/packages/quick-3d-mmo-shared/dist/globaltypes.js.map new file mode 100644 index 00000000..7aad7e03 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/globaltypes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"globaltypes.js","sourceRoot":"","sources":["../src/globaltypes.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/index.d.ts b/packages/quick-3d-mmo-shared/dist/index.d.ts new file mode 100644 index 00000000..01a1be88 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/index.d.ts @@ -0,0 +1,13 @@ +import * as Constants from './constants.js'; +import * as Defs from './defs.js'; +import * as Math from './math.js'; +import * as EntityManager from './entity-manager.js'; +import * as SpatialHashGrid from './spatial-hash-grid.js'; +import * as Noise from './noise.js'; +import * as TerrainHeight from './terrain-height.js'; +import * as TerrainConstants from './terrain-constants.js'; +import * as Spline from './spline.js'; +import type * as GlobalTypes from './globaltypes.js'; +export type { GlobalTypes }; +export { Constants, Defs, Math, EntityManager, SpatialHashGrid, Noise, TerrainHeight, TerrainConstants, Spline, }; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/index.d.ts.map b/packages/quick-3d-mmo-shared/dist/index.d.ts.map new file mode 100644 index 00000000..b20b25d3 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,KAAK,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAErD,YAAY,EAAC,WAAW,EAAC,CAAA;AAEzB,OAAO,EACH,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,eAAe,EACf,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,MAAM,GACT,CAAC"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/index.js b/packages/quick-3d-mmo-shared/dist/index.js new file mode 100644 index 00000000..2b69a9f9 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/index.js @@ -0,0 +1,22 @@ +"use strict"; +exports.__esModule = true; +exports.Spline = exports.TerrainConstants = exports.TerrainHeight = exports.Noise = exports.SpatialHashGrid = exports.EntityManager = exports.Math = exports.Defs = exports.Constants = void 0; +var Constants = require("./constants.js"); +exports.Constants = Constants; +var Defs = require("./defs.js"); +exports.Defs = Defs; +var Math = require("./math.js"); +exports.Math = Math; +var EntityManager = require("./entity-manager.js"); +exports.EntityManager = EntityManager; +var SpatialHashGrid = require("./spatial-hash-grid.js"); +exports.SpatialHashGrid = SpatialHashGrid; +var Noise = require("./noise.js"); +exports.Noise = Noise; +var TerrainHeight = require("./terrain-height.js"); +exports.TerrainHeight = TerrainHeight; +var TerrainConstants = require("./terrain-constants.js"); +exports.TerrainConstants = TerrainConstants; +var Spline = require("./spline.js"); +exports.Spline = Spline; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/index.js.map b/packages/quick-3d-mmo-shared/dist/index.js.map new file mode 100644 index 00000000..315ef4d3 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAexC,8BAAS;AAdb,gCAAkC;AAe9B,oBAAI;AAdR,gCAAkC;AAe9B,oBAAI;AAdR,mDAAqD;AAejD,sCAAa;AAdjB,wDAA0D;AAetD,0CAAe;AAdnB,kCAAoC;AAehC,sBAAK;AAdT,mDAAqD;AAejD,sCAAa;AAdjB,yDAA2D;AAevD,4CAAgB;AAdpB,oCAAsC;AAelC,wBAAM"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/math.d.ts b/packages/quick-3d-mmo-shared/dist/math.d.ts new file mode 100644 index 00000000..45b23ba6 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/math.d.ts @@ -0,0 +1,11 @@ +declare const rand_range: (a: number, b: number) => number; +declare const rand_normalish: () => number; +declare const rand_int: (a: number, b: number) => number; +declare const lerp: (x: number, a: number, b: number) => number; +declare const smoothstep: (x: number, a: number, b: number) => number; +declare const smootherstep: (x: number, a: number, b: number) => number; +declare const clamp: (x: number, a: number, b: number) => number; +declare const sat: (x: number) => number; +declare const in_range: (x: number, a: number, b: number) => boolean; +export { rand_range, rand_int, rand_normalish, lerp, smoothstep, smootherstep, clamp, sat, in_range, }; +//# sourceMappingURL=math.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/math.d.ts.map b/packages/quick-3d-mmo-shared/dist/math.d.ts.map new file mode 100644 index 00000000..0e0613d0 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/math.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,UAAU,MAAgB,MAAM,KAAK,MAAM,KAAG,MAEnD,CAAA;AAED,QAAA,MAAM,cAAc,QAAgB,MAGnC,CAAA;AAED,QAAA,MAAM,QAAQ,MAAgB,MAAM,KAAK,MAAM,KAAG,MAEjD,CAAA;AAED,QAAA,MAAM,IAAI,MAAgB,MAAM,KAAK,MAAM,KAAK,MAAM,KAAG,MAExD,CAAA;AAED,QAAA,MAAM,UAAU,MAAgB,MAAM,KAAK,MAAM,KAAK,MAAM,KAAG,MAG9D,CAAA;AAED,QAAA,MAAM,YAAY,MAAgB,MAAM,KAAK,MAAM,KAAK,MAAM,KAAG,MAGhE,CAAA;AAED,QAAA,MAAM,KAAK,MAAgB,MAAM,KAAK,MAAM,KAAK,MAAM,KAAG,MAEzD,CAAA;AAED,QAAA,MAAM,GAAG,MAAgB,MAAM,KAAG,MAEjC,CAAA;AAED,QAAA,MAAM,QAAQ,MAAO,MAAM,KAAK,MAAM,KAAK,MAAM,KAAE,OAElD,CAAA;AAED,OAAO,EACL,UAAU,EACV,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,KAAK,EACL,GAAG,EACH,QAAQ,GACT,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/math.js b/packages/quick-3d-mmo-shared/dist/math.js new file mode 100644 index 00000000..839fdd76 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/math.js @@ -0,0 +1,43 @@ +"use strict"; +exports.__esModule = true; +exports.in_range = exports.sat = exports.clamp = exports.smootherstep = exports.smoothstep = exports.lerp = exports.rand_normalish = exports.rand_int = exports.rand_range = void 0; +var rand_range = function (a, b) { + return Math.random() * (b - a) + a; +}; +exports.rand_range = rand_range; +var rand_normalish = function () { + var r = Math.random() + Math.random() + Math.random() + Math.random(); + return (r / 4.0) * 2.0 - 1; +}; +exports.rand_normalish = rand_normalish; +var rand_int = function (a, b) { + return Math.round(Math.random() * (b - a) + a); +}; +exports.rand_int = rand_int; +var lerp = function (x, a, b) { + return x * (b - a) + a; +}; +exports.lerp = lerp; +var smoothstep = function (x, a, b) { + x = x * x * (3.0 - 2.0 * x); + return x * (b - a) + a; +}; +exports.smoothstep = smoothstep; +var smootherstep = function (x, a, b) { + x = x * x * x * (x * (x * 6 - 15) + 10); + return x * (b - a) + a; +}; +exports.smootherstep = smootherstep; +var clamp = function (x, a, b) { + return Math.min(Math.max(x, a), b); +}; +exports.clamp = clamp; +var sat = function (x) { + return Math.min(Math.max(x, 0.0), 1.0); +}; +exports.sat = sat; +var in_range = function (x, a, b) { + return x >= a && x <= b; +}; +exports.in_range = in_range; +//# sourceMappingURL=math.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/math.js.map b/packages/quick-3d-mmo-shared/dist/math.js.map new file mode 100644 index 00000000..1bb0fce5 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/math.js.map @@ -0,0 +1 @@ +{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":";;;AACA,IAAM,UAAU,GAAG,UAAU,CAAS,EAAE,CAAS;IAC/C,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC,CAAA;AAsCC,gCAAU;AApCZ,IAAM,cAAc,GAAG;IACrB,IAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACxE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAA;AAmCC,wCAAc;AAjChB,IAAM,QAAQ,GAAG,UAAU,CAAS,EAAE,CAAS;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC,CAAA;AA8BC,4BAAQ;AA5BV,IAAM,IAAI,GAAG,UAAU,CAAS,EAAE,CAAS,EAAE,CAAS;IACpD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAA;AA4BC,oBAAI;AA1BN,IAAM,UAAU,GAAG,UAAU,CAAS,EAAE,CAAS,EAAE,CAAS;IAC1D,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAA;AAwBC,gCAAU;AAtBZ,IAAM,YAAY,GAAG,UAAU,CAAS,EAAE,CAAS,EAAE,CAAS;IAC5D,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAA;AAoBC,oCAAY;AAlBd,IAAM,KAAK,GAAG,UAAU,CAAS,EAAE,CAAS,EAAE,CAAS;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,CAAC,CAAA;AAiBC,sBAAK;AAfP,IAAM,GAAG,GAAG,UAAU,CAAS;IAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC,CAAA;AAcC,kBAAG;AAZL,IAAM,QAAQ,GAAG,UAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC/C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAA;AAWC,4BAAQ"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/noise.d.ts b/packages/quick-3d-mmo-shared/dist/noise.d.ts new file mode 100644 index 00000000..60309423 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/noise.d.ts @@ -0,0 +1,9 @@ +declare class Noise { + _params: any; + _noise: any; + constructor(params: any); + _Init(): void; + Get(x: any, y: any, z: any): number; +} +export { Noise }; +//# sourceMappingURL=noise.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/noise.d.ts.map b/packages/quick-3d-mmo-shared/dist/noise.d.ts.map new file mode 100644 index 00000000..f3824484 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/noise.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AACA,cAAM,KAAK;IACT,OAAO,EAAE,GAAG,CAAC;IAGb,MAAM,EAAE,GAAG,CAAC;gBAEA,MAAM,KAAA;IAKlB,KAAK;IAIL,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,CAAC,KAAA;CAwBZ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/noise.js b/packages/quick-3d-mmo-shared/dist/noise.js new file mode 100644 index 00000000..bb572a01 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/noise.js @@ -0,0 +1,36 @@ +"use strict"; +exports.__esModule = true; +exports.Noise = void 0; +var simplex_noise_js_1 = require("./simplex-noise.js"); +var Noise = /** @class */ (function () { + function Noise(params) { + this._params = params; + this._Init(); + } + Noise.prototype._Init = function () { + this._noise = new simplex_noise_js_1.SimplexNoise(this._params.seed); + }; + Noise.prototype.Get = function (x, y, z) { + var G = Math.pow(2.0, (-this._params.persistence)); + var xs = x / this._params.scale; + var ys = y / this._params.scale; + var zs = z / this._params.scale; + var noiseFunc = this._noise; + var amplitude = 1.0; + var frequency = 1.0; + var normalization = 0; + var total = 0; + for (var o = 0; o < this._params.octaves; o++) { + var noiseValue = noiseFunc.noise3D(xs * frequency, ys * frequency, zs * frequency) * 0.5 + 0.5; + total += noiseValue * amplitude; + normalization += amplitude; + amplitude *= G; + frequency *= this._params.lacunarity; + } + total /= normalization; + return Math.pow(total, this._params.exponentiation) * this._params.height; + }; + return Noise; +}()); +exports.Noise = Noise; +//# sourceMappingURL=noise.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/noise.js.map b/packages/quick-3d-mmo-shared/dist/noise.js.map new file mode 100644 index 00000000..0ca0da44 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/noise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"noise.js","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":";;;AAAA,uDAAkD;AAClD;IAME,eAAY,MAAM;QAChB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,qBAAK,GAAL;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,+BAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,mBAAG,GAAH,UAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACT,IAAM,CAAC,GAAG,SAAA,GAAG,EAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA,CAAC;QAC7C,IAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,IAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,IAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAE9B,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAClC,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YAE9D,KAAK,IAAI,UAAU,GAAG,SAAS,CAAC;YAChC,aAAa,IAAI,SAAS,CAAC;YAC3B,SAAS,IAAI,CAAC,CAAC;YACf,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SACtC;QACD,KAAK,IAAI,aAAa,CAAC;QACvB,OAAO,IAAI,CAAC,GAAG,CACb,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC9D,CAAC;IACH,YAAC;AAAD,CAAC,AAvCD,IAuCC;AAEQ,sBAAK"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/simplex-noise.d.ts b/packages/quick-3d-mmo-shared/dist/simplex-noise.d.ts new file mode 100644 index 00000000..cae26ba2 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/simplex-noise.d.ts @@ -0,0 +1,7 @@ +declare function SimplexNoise(randomOrSeed: any): void; +declare namespace SimplexNoise { + var _buildPermutationTable: typeof buildPermutationTable; +} +declare function buildPermutationTable(random: any): Uint8Array; +export { SimplexNoise }; +//# sourceMappingURL=simplex-noise.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/simplex-noise.d.ts.map b/packages/quick-3d-mmo-shared/dist/simplex-noise.d.ts.map new file mode 100644 index 00000000..64dc327f --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/simplex-noise.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"simplex-noise.d.ts","sourceRoot":"","sources":["../src/simplex-noise.ts"],"names":[],"mappings":"AA0CE,iBAAS,YAAY,CAAC,YAAY,KAAA,QAkBjC;kBAlBQ,YAAY;;;AAkWrB,iBAAS,qBAAqB,CAAC,MAAM,KAAA,cAapC;AAkED,OAAO,EAAC,YAAY,EAAC,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/simplex-noise.js b/packages/quick-3d-mmo-shared/dist/simplex-noise.js new file mode 100644 index 00000000..ea95aaa2 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/simplex-noise.js @@ -0,0 +1,475 @@ +'use strict'; +exports.__esModule = true; +exports.SimplexNoise = void 0; +/* + * A fast javascript implementation of simplex noise by Jonas Wagner + +Based on a speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. +Which is based on example code by Stefan Gustavson (stegu@itn.liu.se). +With Optimisations by Peter Eastman (peastman@drizzle.stanford.edu). +Better rank ordering method by Stefan Gustavson in 2012. + + + Copyright (c) 2018 Jonas Wagner + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ +// (function() { +var F2 = 0.5 * (Math.sqrt(3.0) - 1.0); +var G2 = (3.0 - Math.sqrt(3.0)) / 6.0; +var F3 = 1.0 / 3.0; +var G3 = 1.0 / 6.0; +var F4 = (Math.sqrt(5.0) - 1.0) / 4.0; +var G4 = (5.0 - Math.sqrt(5.0)) / 20.0; +function SimplexNoise(randomOrSeed) { + var random; + if (typeof randomOrSeed == 'function') { + random = randomOrSeed; + } + else if (randomOrSeed) { + random = alea(randomOrSeed); + } + else { + random = Math.random; + } + this.p = buildPermutationTable(random); + this.perm = new Uint8Array(512); + this.permMod12 = new Uint8Array(512); + for (var i = 0; i < 512; i++) { + this.perm[i] = this.p[i & 255]; + this.permMod12[i] = this.perm[i] % 12; + } +} +exports.SimplexNoise = SimplexNoise; +SimplexNoise.prototype = { + grad3: new Float32Array([1, 1, 0, + -1, 1, 0, + 1, -1, 0, + -1, -1, 0, + 1, 0, 1, + -1, 0, 1, + 1, 0, -1, + -1, 0, -1, + 0, 1, 1, + 0, -1, 1, + 0, 1, -1, + 0, -1, -1]), + grad4: new Float32Array([0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, + 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, + 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, 0, -1, -1, + -1, 0, 1, 1, -1, 0, 1, -1, -1, 0, -1, 1, -1, 0, -1, -1, + 1, 1, 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1, + -1, 1, 0, 1, -1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, -1, + 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0, + -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0]), + noise2D: function (xin, yin) { + var permMod12 = this.permMod12; + var perm = this.perm; + var grad3 = this.grad3; + var n0 = 0; // Noise contributions from the three corners + var n1 = 0; + var n2 = 0; + // Skew the input space to determine which simplex cell we're in + var s = (xin + yin) * F2; // Hairy factor for 2D + var i = Math.floor(xin + s); + var j = Math.floor(yin + s); + var t = (i + j) * G2; + var X0 = i - t; // Unskew the cell origin back to (x,y) space + var Y0 = j - t; + var x0 = xin - X0; // The x,y distances from the cell origin + var y0 = yin - Y0; + // For the 2D case, the simplex shape is an equilateral triangle. + // Determine which simplex we are in. + var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords + if (x0 > y0) { + i1 = 1; + j1 = 0; + } // lower triangle, XY order: (0,0)->(1,0)->(1,1) + else { + i1 = 0; + j1 = 1; + } // upper triangle, YX order: (0,0)->(0,1)->(1,1) + // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and + // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where + // c = (3-sqrt(3))/6 + var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords + var y1 = y0 - j1 + G2; + var x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords + var y2 = y0 - 1.0 + 2.0 * G2; + // Work out the hashed gradient indices of the three simplex corners + var ii = i & 255; + var jj = j & 255; + // Calculate the contribution from the three corners + var t0 = 0.5 - x0 * x0 - y0 * y0; + if (t0 >= 0) { + var gi0 = permMod12[ii + perm[jj]] * 3; + t0 *= t0; + n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0); // (x,y) of grad3 used for 2D gradient + } + var t1 = 0.5 - x1 * x1 - y1 * y1; + if (t1 >= 0) { + var gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3; + t1 *= t1; + n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1); + } + var t2 = 0.5 - x2 * x2 - y2 * y2; + if (t2 >= 0) { + var gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3; + t2 *= t2; + n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2); + } + // Add contributions from each corner to get the final noise value. + // The result is scaled to return values in the interval [-1,1]. + return 70.0 * (n0 + n1 + n2); + }, + // 3D simplex noise + noise3D: function (xin, yin, zin) { + var permMod12 = this.permMod12; + var perm = this.perm; + var grad3 = this.grad3; + var n0, n1, n2, n3; // Noise contributions from the four corners + // Skew the input space to determine which simplex cell we're in + var s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D + var i = Math.floor(xin + s); + var j = Math.floor(yin + s); + var k = Math.floor(zin + s); + var t = (i + j + k) * G3; + var X0 = i - t; // Unskew the cell origin back to (x,y,z) space + var Y0 = j - t; + var Z0 = k - t; + var x0 = xin - X0; // The x,y,z distances from the cell origin + var y0 = yin - Y0; + var z0 = zin - Z0; + // For the 3D case, the simplex shape is a slightly irregular tetrahedron. + // Determine which simplex we are in. + var i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords + var i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords + if (x0 >= y0) { + if (y0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 1; + k2 = 0; + } // X Y Z order + else if (x0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 0; + k2 = 1; + } // X Z Y order + else { + i1 = 0; + j1 = 0; + k1 = 1; + i2 = 1; + j2 = 0; + k2 = 1; + } // Z X Y order + } + else { // x0 y0) + rankx++; + else + ranky++; + if (x0 > z0) + rankx++; + else + rankz++; + if (x0 > w0) + rankx++; + else + rankw++; + if (y0 > z0) + ranky++; + else + rankz++; + if (y0 > w0) + ranky++; + else + rankw++; + if (z0 > w0) + rankz++; + else + rankw++; + var i1, j1, k1, l1; // The integer offsets for the second simplex corner + var i2, j2, k2, l2; // The integer offsets for the third simplex corner + var i3, j3, k3, l3; // The integer offsets for the fourth simplex corner + // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. + // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0; + j1 = ranky >= 3 ? 1 : 0; + k1 = rankz >= 3 ? 1 : 0; + l1 = rankw >= 3 ? 1 : 0; + // Rank 2 denotes the second largest coordinate. + i2 = rankx >= 2 ? 1 : 0; + j2 = ranky >= 2 ? 1 : 0; + k2 = rankz >= 2 ? 1 : 0; + l2 = rankw >= 2 ? 1 : 0; + // Rank 1 denotes the second smallest coordinate. + i3 = rankx >= 1 ? 1 : 0; + j3 = ranky >= 1 ? 1 : 0; + k3 = rankz >= 1 ? 1 : 0; + l3 = rankw >= 1 ? 1 : 0; + // The fifth corner has all coordinate offsets = 1, so no need to compute that. + var x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords + var y1 = y0 - j1 + G4; + var z1 = z0 - k1 + G4; + var w1 = w0 - l1 + G4; + var x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords + var y2 = y0 - j2 + 2.0 * G4; + var z2 = z0 - k2 + 2.0 * G4; + var w2 = w0 - l2 + 2.0 * G4; + var x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords + var y3 = y0 - j3 + 3.0 * G4; + var z3 = z0 - k3 + 3.0 * G4; + var w3 = w0 - l3 + 3.0 * G4; + var x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords + var y4 = y0 - 1.0 + 4.0 * G4; + var z4 = z0 - 1.0 + 4.0 * G4; + var w4 = w0 - 1.0 + 4.0 * G4; + // Work out the hashed gradient indices of the five simplex corners + var ii = i & 255; + var jj = j & 255; + var kk = k & 255; + var ll = l & 255; + // Calculate the contribution from the five corners + var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; + if (t0 < 0) + n0 = 0.0; + else { + var gi0 = (perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32) * 4; + t0 *= t0; + n0 = t0 * t0 * (grad4[gi0] * x0 + grad4[gi0 + 1] * y0 + grad4[gi0 + 2] * z0 + grad4[gi0 + 3] * w0); + } + var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; + if (t1 < 0) + n1 = 0.0; + else { + var gi1 = (perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32) * 4; + t1 *= t1; + n1 = t1 * t1 * (grad4[gi1] * x1 + grad4[gi1 + 1] * y1 + grad4[gi1 + 2] * z1 + grad4[gi1 + 3] * w1); + } + var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; + if (t2 < 0) + n2 = 0.0; + else { + var gi2 = (perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32) * 4; + t2 *= t2; + n2 = t2 * t2 * (grad4[gi2] * x2 + grad4[gi2 + 1] * y2 + grad4[gi2 + 2] * z2 + grad4[gi2 + 3] * w2); + } + var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; + if (t3 < 0) + n3 = 0.0; + else { + var gi3 = (perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32) * 4; + t3 *= t3; + n3 = t3 * t3 * (grad4[gi3] * x3 + grad4[gi3 + 1] * y3 + grad4[gi3 + 2] * z3 + grad4[gi3 + 3] * w3); + } + var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; + if (t4 < 0) + n4 = 0.0; + else { + var gi4 = (perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32) * 4; + t4 *= t4; + n4 = t4 * t4 * (grad4[gi4] * x4 + grad4[gi4 + 1] * y4 + grad4[gi4 + 2] * z4 + grad4[gi4 + 3] * w4); + } + // Sum up and scale the result to cover the range [-1,1] + return 27.0 * (n0 + n1 + n2 + n3 + n4); + } +}; +function buildPermutationTable(random) { + var i; + var p = new Uint8Array(256); + for (i = 0; i < 256; i++) { + p[i] = i; + } + for (i = 0; i < 255; i++) { + var r = i + ~~(random() * (256 - i)); + var aux = p[i]; + p[i] = p[r]; + p[r] = aux; + } + return p; +} +SimplexNoise._buildPermutationTable = buildPermutationTable; +function alea(input) { + // Johannes Baagøe , 2010 + var s0 = 0; + var s1 = 0; + var s2 = 0; + var c = 1; + var mash = masher(); + s0 = mash(' '); + s1 = mash(' '); + s2 = mash(' '); + for (var i = 0; i < arguments.length; i++) { + s0 -= mash(arguments[i]); + if (s0 < 0) { + s0 += 1; + } + s1 -= mash(arguments[i]); + if (s1 < 0) { + s1 += 1; + } + s2 -= mash(arguments[i]); + if (s2 < 0) { + s2 += 1; + } + } + mash = null; + return function () { + var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32 + s0 = s1; + s1 = s2; + return s2 = t - (c = t | 0); + }; +} +function masher() { + var n = 0xefc8249d; + return function (data) { + data = data.toString(); + for (var i = 0; i < data.length; i++) { + n += data.charCodeAt(i); + var h = 0.02519603282416938 * n; + n = h >>> 0; + h -= n; + h *= n; + n = h >>> 0; + h -= n; + n += h * 0x100000000; // 2^32 + } + return (n >>> 0) * 2.3283064365386963e-10; // 2^-32 + }; +} +//# sourceMappingURL=simplex-noise.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/simplex-noise.js.map b/packages/quick-3d-mmo-shared/dist/simplex-noise.js.map new file mode 100644 index 00000000..f80cb90e --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/simplex-noise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"simplex-noise.js","sourceRoot":"","sources":["../src/simplex-noise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.d.ts b/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.d.ts new file mode 100644 index 00000000..30ab20f1 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.d.ts @@ -0,0 +1,24 @@ +declare class SpatialHashGrid { + _cells: any[][]; + _dimensions: any; + _bounds: any; + _queryIds: number; + constructor(bounds: any, dimensions: any); + _GetCellIndex(position: any): number[]; + NewClient(position: any, dimensions: any): { + position: any; + dimensions: any; + _cells: { + min: any; + max: any; + nodes: any; + }; + _queryId: number; + }; + UpdateClient(client: any): void; + FindNear(position: any, bounds: any): any[]; + _Insert(client: any): void; + Remove(client: any): void; +} +export { SpatialHashGrid }; +//# sourceMappingURL=spatial-hash-grid.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.d.ts.map b/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.d.ts.map new file mode 100644 index 00000000..2632657e --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"spatial-hash-grid.d.ts","sourceRoot":"","sources":["../src/spatial-hash-grid.ts"],"names":[],"mappings":"AAEA,cAAM,eAAe;IACnB,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;gBACN,MAAM,KAAA,EAAE,UAAU,KAAA;IAQ9B,aAAa,CAAC,QAAQ,KAAA;IAYtB,SAAS,CAAC,QAAQ,KAAA,EAAE,UAAU,KAAA;;;;;;;;;;IAiB9B,YAAY,CAAC,MAAM,KAAA;IAkBnB,QAAQ,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA;IA4BzB,OAAO,CAAC,MAAM,KAAA;IAqCd,MAAM,CAAC,MAAM,KAAA;CA2Bd;AACD,OAAO,EAAE,eAAe,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js b/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js new file mode 100644 index 00000000..af312c46 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js @@ -0,0 +1,128 @@ +"use strict"; +var __spreadArray = (this && this.__spreadArray) || function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +}; +exports.__esModule = true; +exports.SpatialHashGrid = void 0; +var math = require("./math.js"); +var SpatialHashGrid = /** @class */ (function () { + function SpatialHashGrid(bounds, dimensions) { + var x = dimensions[0], y = dimensions[1]; + this._cells = __spreadArray([], Array(x)).map(function (_) { return __spreadArray([], Array(y)).map(function (_) { return (null); }); }); + this._dimensions = dimensions; + this._bounds = bounds; + this._queryIds = 0; + } + SpatialHashGrid.prototype._GetCellIndex = function (position) { + var x = math.sat((position[0] - this._bounds[0][0]) / (this._bounds[1][0] - this._bounds[0][0])); + var y = math.sat((position[1] - this._bounds[0][1]) / (this._bounds[1][1] - this._bounds[0][1])); + var xIndex = Math.floor(x * (this._dimensions[0] - 1)); + var yIndex = Math.floor(y * (this._dimensions[1] - 1)); + return [xIndex, yIndex]; + }; + SpatialHashGrid.prototype.NewClient = function (position, dimensions) { + var client = { + position: position, + dimensions: dimensions, + _cells: { + min: null, + max: null, + nodes: null + }, + _queryId: -1 + }; + this._Insert(client); + return client; + }; + SpatialHashGrid.prototype.UpdateClient = function (client) { + var _a = client.position, x = _a[0], y = _a[1]; + var _b = client.dimensions, w = _b[0], h = _b[1]; + var i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + var i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + if (client._cells.min[0] == i1[0] && + client._cells.min[1] == i1[1] && + client._cells.max[0] == i2[0] && + client._cells.max[1] == i2[1]) { + return; + } + this.Remove(client); + this._Insert(client); + }; + SpatialHashGrid.prototype.FindNear = function (position, bounds) { + var x = position[0], y = position[1]; + var w = bounds[0], h = bounds[1]; + var i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + var i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + var clients = []; + var queryId = this._queryIds++; + for (var x_1 = i1[0], xn = i2[0]; x_1 <= xn; ++x_1) { + for (var y_1 = i1[1], yn = i2[1]; y_1 <= yn; ++y_1) { + var head = this._cells[x_1][y_1]; + while (head) { + var v = head.client; + head = head.next; + if (v._queryId != queryId) { + v._queryId = queryId; + clients.push(v); + } + } + } + } + return clients; + }; + SpatialHashGrid.prototype._Insert = function (client) { + var _a = client.position, x = _a[0], y = _a[1]; + var _b = client.dimensions, w = _b[0], h = _b[1]; + var i1 = this._GetCellIndex([x - w / 2, y - h / 2]); + var i2 = this._GetCellIndex([x + w / 2, y + h / 2]); + var nodes = []; + for (var x_2 = i1[0], xn = i2[0]; x_2 <= xn; ++x_2) { + nodes.push([]); + for (var y_2 = i1[1], yn = i2[1]; y_2 <= yn; ++y_2) { + var xi = x_2 - i1[0]; + var head = { + next: null, + prev: null, + client: client + }; + nodes[xi].push(head); + head.next = this._cells[x_2][y_2]; + if (this._cells[x_2][y_2]) { + this._cells[x_2][y_2].prev = head; + } + this._cells[x_2][y_2] = head; + } + } + client._cells.min = i1; + client._cells.max = i2; + client._cells.nodes = nodes; + }; + SpatialHashGrid.prototype.Remove = function (client) { + var i1 = client._cells.min; + var i2 = client._cells.max; + for (var x = i1[0], xn = i2[0]; x <= xn; ++x) { + for (var y = i1[1], yn = i2[1]; y <= yn; ++y) { + var xi = x - i1[0]; + var yi = y - i1[1]; + var node = client._cells.nodes[xi][yi]; + if (node.next) { + node.next.prev = node.prev; + } + if (node.prev) { + node.prev.next = node.next; + } + if (!node.prev) { + this._cells[x][y] = node.next; + } + } + } + client._cells.min = null; + client._cells.max = null; + client._cells.nodes = null; + }; + return SpatialHashGrid; +}()); +exports.SpatialHashGrid = SpatialHashGrid; +//# sourceMappingURL=spatial-hash-grid.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js.map b/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js.map new file mode 100644 index 00000000..12687f44 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spatial-hash-grid.js","sourceRoot":"","sources":["../src/spatial-hash-grid.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/spline.d.ts b/packages/quick-3d-mmo-shared/dist/spline.d.ts new file mode 100644 index 00000000..d22c8ed6 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/spline.d.ts @@ -0,0 +1,16 @@ +declare class CubicHermiteSpline { + _points: any[]; + _lerp: any; + constructor(lerp: any); + AddPoint(t: any, d: any): void; + Get(t: any): any; +} +declare class LinearSpline { + _points: any[]; + _lerp: any; + constructor(lerp: any); + AddPoint(t: any, d: any): void; + Get(t: any): any; +} +export { CubicHermiteSpline, LinearSpline }; +//# sourceMappingURL=spline.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/spline.d.ts.map b/packages/quick-3d-mmo-shared/dist/spline.d.ts.map new file mode 100644 index 00000000..156dec6d --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/spline.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"spline.d.ts","sourceRoot":"","sources":["../src/spline.ts"],"names":[],"mappings":"AACE,cAAM,kBAAkB;IACtB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;gBACC,IAAI,KAAA;IAKhB,QAAQ,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAIb,GAAG,CAAC,CAAC,KAAA;CAwBN;AAED,cAAM,YAAY;IAChB,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;gBACC,IAAI,KAAA;IAKhB,QAAQ,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAIb,GAAG,CAAC,CAAC,KAAA;CAqBN;AAGH,OAAO,EAAC,kBAAkB,EAAE,YAAY,EAAC,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/spline.js b/packages/quick-3d-mmo-shared/dist/spline.js new file mode 100644 index 00000000..d7ed92be --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/spline.js @@ -0,0 +1,57 @@ +"use strict"; +exports.__esModule = true; +exports.LinearSpline = exports.CubicHermiteSpline = void 0; +var CubicHermiteSpline = /** @class */ (function () { + function CubicHermiteSpline(lerp) { + this._points = []; + this._lerp = lerp; + } + CubicHermiteSpline.prototype.AddPoint = function (t, d) { + this._points.push([t, d]); + }; + CubicHermiteSpline.prototype.Get = function (t) { + var p1 = 0; + for (var i = 0; i < this._points.length; i++) { + if (this._points[i][0] >= t) { + break; + } + p1 = i; + } + var p0 = Math.max(0, p1 - 1); + var p2 = Math.min(this._points.length - 1, p1 + 1); + var p3 = Math.min(this._points.length - 1, p1 + 2); + if (p1 == p2) { + return this._points[p1][1]; + } + return this._lerp((t - this._points[p1][0]) / (this._points[p2][0] - this._points[p1][0]), this._points[p0][1], this._points[p1][1], this._points[p2][1], this._points[p3][1]); + }; + return CubicHermiteSpline; +}()); +exports.CubicHermiteSpline = CubicHermiteSpline; +; +var LinearSpline = /** @class */ (function () { + function LinearSpline(lerp) { + this._points = []; + this._lerp = lerp; + } + LinearSpline.prototype.AddPoint = function (t, d) { + this._points.push([t, d]); + }; + LinearSpline.prototype.Get = function (t) { + var p1 = 0; + for (var i = 0; i < this._points.length; i++) { + if (this._points[i][0] >= t) { + break; + } + p1 = i; + } + var p2 = Math.min(this._points.length - 1, p1 + 1); + if (p1 == p2) { + return this._points[p1][1]; + } + return this._lerp((t - this._points[p1][0]) / (this._points[p2][0] - this._points[p1][0]), this._points[p1][1], this._points[p2][1]); + }; + return LinearSpline; +}()); +exports.LinearSpline = LinearSpline; +//# sourceMappingURL=spline.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/spline.js.map b/packages/quick-3d-mmo-shared/dist/spline.js.map new file mode 100644 index 00000000..e8a22e8a --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/spline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"spline.js","sourceRoot":"","sources":["../src/spline.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/terrain-constants.d.ts b/packages/quick-3d-mmo-shared/dist/terrain-constants.d.ts new file mode 100644 index 00000000..1d215828 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/terrain-constants.d.ts @@ -0,0 +1,16 @@ +declare const QT_MIN_CELL_SIZE = 100; +declare const QT_MIN_CELL_RESOLUTION = 16; +declare const PLANET_RADIUS = 8000; +declare const NOISE_HEIGHT = 800; +declare const NOISE_SCALE = 1800; +declare const NOISE_PARAMS: { + octaves: number; + persistence: number; + lacunarity: number; + exponentiation: number; + height: number; + scale: number; + seed: number; +}; +export { QT_MIN_CELL_SIZE, QT_MIN_CELL_RESOLUTION, PLANET_RADIUS, NOISE_HEIGHT, NOISE_SCALE, NOISE_PARAMS, }; +//# sourceMappingURL=terrain-constants.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/terrain-constants.d.ts.map b/packages/quick-3d-mmo-shared/dist/terrain-constants.d.ts.map new file mode 100644 index 00000000..ae659b64 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/terrain-constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-constants.d.ts","sourceRoot":"","sources":["../src/terrain-constants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB,MAAM,CAAC;AAE7B,QAAA,MAAM,sBAAsB,KAAK,CAAC;AAElC,QAAA,MAAM,aAAa,OAAS,CAAC;AAE7B,QAAA,MAAM,YAAY,MAAQ,CAAC;AAE3B,QAAA,MAAM,WAAW,OAAS,CAAC;AAC3B,QAAA,MAAM,YAAY;;;;;;;;CAQjB,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/terrain-constants.js b/packages/quick-3d-mmo-shared/dist/terrain-constants.js new file mode 100644 index 00000000..2a15fb99 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/terrain-constants.js @@ -0,0 +1,27 @@ +"use strict"; +exports.__esModule = true; +exports.NOISE_PARAMS = exports.NOISE_SCALE = exports.NOISE_HEIGHT = exports.PLANET_RADIUS = exports.QT_MIN_CELL_RESOLUTION = exports.QT_MIN_CELL_SIZE = void 0; +var QT_MIN_CELL_SIZE = 100; +exports.QT_MIN_CELL_SIZE = QT_MIN_CELL_SIZE; +// const QT_MIN_CELL_RESOLUTION = 24; +var QT_MIN_CELL_RESOLUTION = 16; +exports.QT_MIN_CELL_RESOLUTION = QT_MIN_CELL_RESOLUTION; +// const QT_MIN_CELL_RESOLUTION = 4; +var PLANET_RADIUS = 8000.0; +exports.PLANET_RADIUS = PLANET_RADIUS; +var NOISE_HEIGHT = 800.0; +exports.NOISE_HEIGHT = NOISE_HEIGHT; +// const NOISE_HEIGHT = 0.0; +var NOISE_SCALE = 1800.0; +exports.NOISE_SCALE = NOISE_SCALE; +var NOISE_PARAMS = { + octaves: 10, + persistence: 0.5, + lacunarity: 1.6, + exponentiation: 7.5, + height: NOISE_HEIGHT, + scale: NOISE_SCALE, + seed: 1 +}; +exports.NOISE_PARAMS = NOISE_PARAMS; +//# sourceMappingURL=terrain-constants.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/terrain-constants.js.map b/packages/quick-3d-mmo-shared/dist/terrain-constants.js.map new file mode 100644 index 00000000..cb98de0e --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/terrain-constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-constants.js","sourceRoot":"","sources":["../src/terrain-constants.ts"],"names":[],"mappings":";;;AAAA,IAAM,gBAAgB,GAAG,GAAG,CAAC;AAoB3B,4CAAgB;AAnBlB,qCAAqC;AACrC,IAAM,sBAAsB,GAAG,EAAE,CAAC;AAmBhC,wDAAsB;AAlBxB,oCAAoC;AACpC,IAAM,aAAa,GAAG,MAAM,CAAC;AAkB3B,sCAAa;AAhBf,IAAM,YAAY,GAAG,KAAK,CAAC;AAkBzB,oCAAY;AAjBd,4BAA4B;AAC5B,IAAM,WAAW,GAAG,MAAM,CAAC;AAiBzB,kCAAW;AAhBb,IAAM,YAAY,GAAG;IACnB,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,GAAG;IACf,cAAc,EAAE,GAAG;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,CAAC;CACR,CAAA;AASC,oCAAY"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/terrain-height.d.ts b/packages/quick-3d-mmo-shared/dist/terrain-height.d.ts new file mode 100644 index 00000000..290ba033 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/terrain-height.d.ts @@ -0,0 +1,8 @@ +import { Noise } from './noise.js'; +declare class HeightGenerator { + noise_: Noise; + constructor(); + Get(x: any, y: any, z: any): number[]; +} +export { HeightGenerator }; +//# sourceMappingURL=terrain-height.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/terrain-height.d.ts.map b/packages/quick-3d-mmo-shared/dist/terrain-height.d.ts.map new file mode 100644 index 00000000..1f8ce3d4 --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/terrain-height.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-height.d.ts","sourceRoot":"","sources":["../src/terrain-height.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AAEjC,cAAM,eAAe;IACnB,MAAM,EAAE,KAAK,CAAC;;IAKd,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,CAAC,KAAA;CAGZ;AAED,OAAO,EAAC,eAAe,EAAC,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/terrain-height.js b/packages/quick-3d-mmo-shared/dist/terrain-height.js new file mode 100644 index 00000000..d784352f --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/terrain-height.js @@ -0,0 +1,17 @@ +"use strict"; +exports.__esModule = true; +exports.HeightGenerator = void 0; +var terrain_constants_js_1 = require("./terrain-constants.js"); +var noise_js_1 = require("./noise.js"); +var HeightGenerator = /** @class */ (function () { + function HeightGenerator() { + this.noise_ = new noise_js_1.Noise(terrain_constants_js_1.NOISE_PARAMS); + } + HeightGenerator.prototype.Get = function (x, y, z) { + return [this.noise_.Get(x, y, z), 1]; + }; + return HeightGenerator; +}()); +exports.HeightGenerator = HeightGenerator; +; +//# sourceMappingURL=terrain-height.js.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/terrain-height.js.map b/packages/quick-3d-mmo-shared/dist/terrain-height.js.map new file mode 100644 index 00000000..80881fee --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/terrain-height.js.map @@ -0,0 +1 @@ +{"version":3,"file":"terrain-height.js","sourceRoot":"","sources":["../src/terrain-height.ts"],"names":[],"mappings":";;;AACA,+DAAoD;AACpD,uCAAiC;AAEjC;IAEE;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAK,CAAC,mCAAY,CAAC,CAAC;IACxC,CAAC;IAED,6BAAG,GAAH,UAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACH,sBAAC;AAAD,CAAC,AATD,IASC;AAEO,0CAAe;AAFtB,CAAC"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/package.json b/packages/quick-3d-mmo-shared/package.json new file mode 100644 index 00000000..40352590 --- /dev/null +++ b/packages/quick-3d-mmo-shared/package.json @@ -0,0 +1,14 @@ +{ + "name": "quick-3d-mmo-shared", + "version": "0.0.1", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "license": "MIT", + "dependencies": { + "webpack": "^5.30.0", + "webpack-cli": "^4.6.0" + }, + "scripts": { + "build": "tsc --build" + } +} diff --git a/packages/shared/src/OrbitControls.ts b/packages/quick-3d-mmo-shared/src/OrbitControls.ts similarity index 100% rename from packages/shared/src/OrbitControls.ts rename to packages/quick-3d-mmo-shared/src/OrbitControls.ts diff --git a/packages/shared/src/constants.ts b/packages/quick-3d-mmo-shared/src/constants.ts similarity index 95% rename from packages/shared/src/constants.ts rename to packages/quick-3d-mmo-shared/src/constants.ts index e3dcecf8..9d1b3ea1 100644 --- a/packages/shared/src/constants.ts +++ b/packages/quick-3d-mmo-shared/src/constants.ts @@ -45,6 +45,8 @@ enum EVENT_TYPES { INPUT_PICKED = 'input.picked', } +type IEVENT_TYPES = Record; + enum KNOWN_ENTITIES { DATABASE = 'database', INVENTORY_CONTROLLER = 'InventoryController', @@ -55,7 +57,8 @@ enum KNOWN_ENTITIES { SCENERY = 'scenery', TERRAIN = 'terrain', UI = 'ui', - NETWORK = 'network' + NETWORK = 'network', + PLAYER = 'player' } enum NAMED_COMPONENTS { @@ -107,6 +110,10 @@ enum DOM_IDS { QUEST_UI = 'quest-ui', } +export type { + IEVENT_TYPES +} + export { _TIMEOUT, ATTACK_TYPES, diff --git a/packages/shared/src/defs.ts b/packages/quick-3d-mmo-shared/src/defs.ts similarity index 96% rename from packages/shared/src/defs.ts rename to packages/quick-3d-mmo-shared/src/defs.ts index f18de606..3bdfd8b9 100644 --- a/packages/shared/src/defs.ts +++ b/packages/quick-3d-mmo-shared/src/defs.ts @@ -1,4 +1,4 @@ -import { CLASS_TYPES_ENUM, WEAPON_TYPES_ENUM } from "./constants"; +import { CLASS_TYPES_ENUM, WEAPON_TYPES_ENUM } from "./constants.js"; declare module ICharacter { @@ -55,7 +55,7 @@ interface ICharacterModels { const CHARACTER_MODELS: ICharacterModels = { [CLASS_TYPES_ENUM.PALADIN]: { base: 'paladin.glb', - path: './resources/characters/', + path: './src/resources/characters/', anchors: { rightHand: 'RightHandIndex1', }, @@ -86,7 +86,7 @@ const CHARACTER_MODELS: ICharacterModels = { }, [CLASS_TYPES_ENUM.SORCEROR]: { base: 'sorceror.glb', - path: './resources/characters/', + path: './src/resources/characters/', anchors: { rightHand: 'RightHandIndex1', }, @@ -113,7 +113,7 @@ const CHARACTER_MODELS: ICharacterModels = { }, [CLASS_TYPES_ENUM.WARROK]: { base: 'warrok.glb', - path: './resources/characters/', + path: './src/resources/characters/', anchors: { rightHand: 'RightHandIndex1', }, @@ -140,7 +140,7 @@ const CHARACTER_MODELS: ICharacterModels = { }, [CLASS_TYPES_ENUM.ZOMBIE]: { base: 'zombie-guy.glb', - path: './resources/characters/', + path: './src/resources/characters/', anchors: { rightHand: 'RightHandIndex1', }, diff --git a/packages/shared/src/entity-manager.ts b/packages/quick-3d-mmo-shared/src/entity-manager.ts similarity index 91% rename from packages/shared/src/entity-manager.ts rename to packages/quick-3d-mmo-shared/src/entity-manager.ts index a86f601d..f1b14606 100644 --- a/packages/shared/src/entity-manager.ts +++ b/packages/quick-3d-mmo-shared/src/entity-manager.ts @@ -24,15 +24,16 @@ class EntityManager { } Add(e, n) { + // console.log("EntityManager.Add(): ", e, n) if (!n) { n = this._GenerateName(); } - + e.SetName(n); this._entitiesMap[n] = e; this._entities.push(e); e.SetParent(this); - e.SetName(n); + e.InitEntity(); } @@ -55,8 +56,8 @@ class EntityManager { } Update(timeElapsed) { - const dead = []; - const alive = []; + const dead: any[] = []; + const alive: any[] = []; for (let i = 0; i < this._entities.length; ++i) { const e = this._entities[i]; diff --git a/packages/shared/src/globaltypes.ts b/packages/quick-3d-mmo-shared/src/globaltypes.ts similarity index 83% rename from packages/shared/src/globaltypes.ts rename to packages/quick-3d-mmo-shared/src/globaltypes.ts index 740b2fd1..00489873 100644 --- a/packages/shared/src/globaltypes.ts +++ b/packages/quick-3d-mmo-shared/src/globaltypes.ts @@ -1,4 +1,4 @@ -import { EVENT_TYPES } from "./constants" +import { EVENT_TYPES } from "./constants.js" interface IOnMessageArgs { (evt: TEvt, params: { diff --git a/packages/quick-3d-mmo-shared/src/index.ts b/packages/quick-3d-mmo-shared/src/index.ts new file mode 100644 index 00000000..6294c772 --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/index.ts @@ -0,0 +1,25 @@ +import * as Constants from './constants.js'; +import * as Defs from './defs.js'; +import * as Math from './math.js'; +import * as EntityManager from './entity-manager.js'; +import * as SpatialHashGrid from './spatial-hash-grid.js'; +import * as Noise from './noise.js'; +import * as TerrainHeight from './terrain-height.js'; +import * as TerrainConstants from './terrain-constants.js'; +import * as Spline from './spline.js'; + +import type * as GlobalTypes from './globaltypes.js'; + +export type {GlobalTypes} + +export { + Constants, + Defs, + Math, + EntityManager, + SpatialHashGrid, + Noise, + TerrainHeight, + TerrainConstants, + Spline, +}; \ No newline at end of file diff --git a/packages/shared/src/math.ts b/packages/quick-3d-mmo-shared/src/math.ts similarity index 100% rename from packages/shared/src/math.ts rename to packages/quick-3d-mmo-shared/src/math.ts diff --git a/packages/shared/src/noise.ts b/packages/quick-3d-mmo-shared/src/noise.ts similarity index 95% rename from packages/shared/src/noise.ts rename to packages/quick-3d-mmo-shared/src/noise.ts index 3aa101cf..18badb3e 100644 --- a/packages/shared/src/noise.ts +++ b/packages/quick-3d-mmo-shared/src/noise.ts @@ -1,4 +1,4 @@ -import { SimplexNoise } from './simplex-noise'; +import { SimplexNoise } from './simplex-noise.js'; class Noise { _params: any; // would love to add type def to this, but I don't wanna mess with the simplex function. diff --git a/packages/shared/src/simplex-noise.ts b/packages/quick-3d-mmo-shared/src/simplex-noise.ts similarity index 100% rename from packages/shared/src/simplex-noise.ts rename to packages/quick-3d-mmo-shared/src/simplex-noise.ts diff --git a/packages/shared/src/spatial-hash-grid.ts b/packages/quick-3d-mmo-shared/src/spatial-hash-grid.ts similarity index 94% rename from packages/shared/src/spatial-hash-grid.ts rename to packages/quick-3d-mmo-shared/src/spatial-hash-grid.ts index 2c049a81..f8149cfd 100644 --- a/packages/shared/src/spatial-hash-grid.ts +++ b/packages/quick-3d-mmo-shared/src/spatial-hash-grid.ts @@ -1,4 +1,4 @@ -import * as math from './math'; +import * as math from './math.js'; class SpatialHashGrid { _cells: any[][]; diff --git a/packages/shared/src/spline.ts b/packages/quick-3d-mmo-shared/src/spline.ts similarity index 100% rename from packages/shared/src/spline.ts rename to packages/quick-3d-mmo-shared/src/spline.ts diff --git a/packages/shared/src/terrain-constants.ts b/packages/quick-3d-mmo-shared/src/terrain-constants.ts similarity index 100% rename from packages/shared/src/terrain-constants.ts rename to packages/quick-3d-mmo-shared/src/terrain-constants.ts diff --git a/packages/shared/src/terrain-height.ts b/packages/quick-3d-mmo-shared/src/terrain-height.ts similarity index 69% rename from packages/shared/src/terrain-height.ts rename to packages/quick-3d-mmo-shared/src/terrain-height.ts index a323faa2..0382461d 100644 --- a/packages/shared/src/terrain-height.ts +++ b/packages/quick-3d-mmo-shared/src/terrain-height.ts @@ -1,6 +1,6 @@ -import {NOISE_PARAMS} from './terrain-constants'; -import {Noise} from './noise'; +import {NOISE_PARAMS} from './terrain-constants.js'; +import {Noise} from './noise.js'; class HeightGenerator { noise_: Noise; diff --git a/packages/quick-3d-mmo-shared/tsconfig.json b/packages/quick-3d-mmo-shared/tsconfig.json new file mode 100644 index 00000000..5a735a93 --- /dev/null +++ b/packages/quick-3d-mmo-shared/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + /* Basic Options */ + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "composite": true, + "outDir": "dist", + "rootDir": "src", + "skipLibCheck": true + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/tsconfig.tsbuildinfo b/packages/quick-3d-mmo-shared/tsconfig.tsbuildinfo new file mode 100644 index 00000000..452d1210 --- /dev/null +++ b/packages/quick-3d-mmo-shared/tsconfig.tsbuildinfo @@ -0,0 +1,5102 @@ +{ + "program": { + "fileInfos": { + "../../node_modules/typescript/lib/lib.d.ts": { + "version": "2dc8c927c9c162a773c6bb3cdc4f3286c23f10eedc67414028f9cb5951610f60", + "signature": "2dc8c927c9c162a773c6bb3cdc4f3286c23f10eedc67414028f9cb5951610f60", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "signature": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.dom.d.ts": { + "version": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "signature": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts": { + "version": "7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481", + "signature": "7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.scripthost.d.ts": { + "version": "097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd", + "signature": "097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", + "affectsGlobalScope": true + }, + "../../node_modules/@types/three/src/constants.d.ts": { + "version": "2eaf1bc69aa0154453a8ab69f00c0be5bd1be81ecf390b6db529ddaa6b00f276", + "signature": "2eaf1bc69aa0154453a8ab69f00c0be5bd1be81ecf390b6db529ddaa6b00f276", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/Three.Legacy.d.ts": { + "version": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Interpolant.d.ts": { + "version": "4ba733d1a5ff0a0779b714468b13c9089f0d877e6fbd0147fac7c3af54c89fe0", + "signature": "4ba733d1a5ff0a0779b714468b13c9089f0d877e6fbd0147fac7c3af54c89fe0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts": { + "version": "a39e9304639454356f4a1fe20741899de0c3163e1f040d0e0acfdc8532f779e3", + "signature": "a39e9304639454356f4a1fe20741899de0c3163e1f040d0e0acfdc8532f779e3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts": { + "version": "3bf8a15acc2dbde99020f0ebe9d16ceba9e6220e41e034003fc8f835b47642af", + "signature": "3bf8a15acc2dbde99020f0ebe9d16ceba9e6220e41e034003fc8f835b47642af", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts": { + "version": "eae4d78e9a2660a6af2a638ac809a81d2bba1b90ec36620b2035a65cf296646b", + "signature": "eae4d78e9a2660a6af2a638ac809a81d2bba1b90ec36620b2035a65cf296646b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts": { + "version": "43303fac4d13164e1dfb563f934fb33f66369ba0f1cf07bd6f99b67ffa8c2805", + "signature": "43303fac4d13164e1dfb563f934fb33f66369ba0f1cf07bd6f99b67ffa8c2805", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/tracks/VectorKeyframeTrack.d.ts": { + "version": "b688ddf5ad2d24f3fa58efd84f9ac9e3e1455031d8881dd917d72432a951e9e8", + "signature": "b688ddf5ad2d24f3fa58efd84f9ac9e3e1455031d8881dd917d72432a951e9e8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/tracks/StringKeyframeTrack.d.ts": { + "version": "8cc83bf53997f80f7ddf98c0b70d4c625c3cd5b93ae2efe2fc0084a26d997a7a", + "signature": "8cc83bf53997f80f7ddf98c0b70d4c625c3cd5b93ae2efe2fc0084a26d997a7a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": { + "version": "71eb65c9011c56ea56932a87d9d171cf225f29c3aa601cffdd5818ebd0e16bd7", + "signature": "71eb65c9011c56ea56932a87d9d171cf225f29c3aa601cffdd5818ebd0e16bd7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/tracks/NumberKeyframeTrack.d.ts": { + "version": "164f1c5c8ad203e80b827350fe3ca1c59c8106c8613e20a3ec4ea9e63dd2e730", + "signature": "164f1c5c8ad203e80b827350fe3ca1c59c8106c8613e20a3ec4ea9e63dd2e730", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/tracks/ColorKeyframeTrack.d.ts": { + "version": "a228ab0a7976c724d6135bbc153016418e3b8560a44101999192c5204fd31dfd", + "signature": "a228ab0a7976c724d6135bbc153016418e3b8560a44101999192c5204fd31dfd", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": { + "version": "7a921991afa2ab5da7c9d94d6ee81de34724f82520fb3fabbe6eeaa29a7b5661", + "signature": "7a921991afa2ab5da7c9d94d6ee81de34724f82520fb3fabbe6eeaa29a7b5661", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/PropertyMixer.d.ts": { + "version": "4c136da3b1dce49c12eac152699c6b4bc64fa93d6c7224a43c816f7e51b00930", + "signature": "4c136da3b1dce49c12eac152699c6b4bc64fa93d6c7224a43c816f7e51b00930", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/PropertyBinding.d.ts": { + "version": "bfac6d6a4817bf56d574b1f32b174f655e05ce45c5ddf6d17c9b592660f10935", + "signature": "bfac6d6a4817bf56d574b1f32b174f655e05ce45c5ddf6d17c9b592660f10935", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Quaternion.d.ts": { + "version": "adeaf801104dcea2399264c342f4fd4b5209fa26a5f3aacf9ba16cc99356f69e", + "signature": "adeaf801104dcea2399264c342f4fd4b5209fa26a5f3aacf9ba16cc99356f69e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Matrix3.d.ts": { + "version": "b9351b40d154fceaf3394e9ab886d65b1c2c02bd0cf2db573825fc09decdab0c", + "signature": "b9351b40d154fceaf3394e9ab886d65b1c2c02bd0cf2db573825fc09decdab0c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Matrix4.d.ts": { + "version": "88f7f80c124dcada14f81e9dee5f293bd8fd0975c0195789a927bd92919774b8", + "signature": "88f7f80c124dcada14f81e9dee5f293bd8fd0975c0195789a927bd92919774b8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Euler.d.ts": { + "version": "cf4fdd3a742d65e06fd998588f322f3930b0301fd103931c59926ac22e3ed6e8", + "signature": "cf4fdd3a742d65e06fd998588f322f3930b0301fd103931c59926ac22e3ed6e8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/Layers.d.ts": { + "version": "51d508d4ff9616032a769e6048f2ada3e54a729c251e5dcff834ee9e0c2b828a", + "signature": "51d508d4ff9616032a769e6048f2ada3e54a729c251e5dcff834ee9e0c2b828a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts": { + "version": "916a6bfa21c90d26a0366e486208e3d8319931c2281480a69e5309de8a9d84d6", + "signature": "916a6bfa21c90d26a0366e486208e3d8319931c2281480a69e5309de8a9d84d6", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Color.d.ts": { + "version": "4605b1af02345f54974473028ab6e20a4566e1237d31a57124d475b2d39b9128", + "signature": "4605b1af02345f54974473028ab6e20a4566e1237d31a57124d475b2d39b9128", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/scenes/Fog.d.ts": { + "version": "dfe3e8907d4c07589704e0b42626afff7e46758a2f1e8dda6b1747cb2e3ef79a", + "signature": "dfe3e8907d4c07589704e0b42626afff7e46758a2f1e8dda6b1747cb2e3ef79a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Vector2.d.ts": { + "version": "2f2f2d34f3a5c0291e3eb79dbaae0a4c9101b033fab3c28a3b6c161c0c333e76", + "signature": "2f2f2d34f3a5c0291e3eb79dbaae0a4c9101b033fab3c28a3b6c161c0c333e76", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Triangle.d.ts": { + "version": "2cc978352f37eec71d1d65b6f63ba5fae0ddfb2f1c204c9496717b3a3139519f", + "signature": "2cc978352f37eec71d1d65b6f63ba5fae0ddfb2f1c204c9496717b3a3139519f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Box3.d.ts": { + "version": "d04b9cf296d4276d2f57827d7cb6e7e527c13b08b355888a37b1460ed1122287", + "signature": "d04b9cf296d4276d2f57827d7cb6e7e527c13b08b355888a37b1460ed1122287", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Sphere.d.ts": { + "version": "50547449b9a609476250ca778cf62ce696551ed332972b97933ff603d8bca859", + "signature": "50547449b9a609476250ca778cf62ce696551ed332972b97933ff603d8bca859", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Line3.d.ts": { + "version": "ecfe11afabf0836940c1fc2dc0204548ff643426dd0421dad964150b6bb72da3", + "signature": "ecfe11afabf0836940c1fc2dc0204548ff643426dd0421dad964150b6bb72da3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Plane.d.ts": { + "version": "733046ebecd9ab7b23e13389263880a9d52c0e663939be9ad28a98dc75554f44", + "signature": "733046ebecd9ab7b23e13389263880a9d52c0e663939be9ad28a98dc75554f44", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts": { + "version": "1dcf4e36b518fc1aa7c1ed7fb25e0f6e1160da98f7e4f9a1926e83eecb1804aa", + "signature": "1dcf4e36b518fc1aa7c1ed7fb25e0f6e1160da98f7e4f9a1926e83eecb1804aa", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts": { + "version": "8868268b7cb5bfb508e3844fc129cbdde23e24fae35024fca6798653a3eed289", + "signature": "8868268b7cb5bfb508e3844fc129cbdde23e24fae35024fca6798653a3eed289", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts": { + "version": "166c027b2bfc241c7540aaf3832fdee69018185a3f8a5c8e52baba6fdbcfbd20", + "signature": "166c027b2bfc241c7540aaf3832fdee69018185a3f8a5c8e52baba6fdbcfbd20", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/Material.d.ts": { + "version": "68adc344cad433489316d887082fb31aad3727f573436282f643072999e47b7a", + "signature": "68adc344cad433489316d887082fb31aad3727f573436282f643072999e47b7a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/Texture.d.ts": { + "version": "fd0c4449f1357dfa4c65235b07a4d156100088254ad55ee3557a53d7beae2aef", + "signature": "fd0c4449f1357dfa4c65235b07a4d156100088254ad55ee3557a53d7beae2aef", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Vector4.d.ts": { + "version": "4d66c748eed18b9520de8384c7d371ff374fd8381ec134ca5b788d09b047db94", + "signature": "4d66c748eed18b9520de8384c7d371ff374fd8381ec134ca5b788d09b047db94", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/DepthTexture.d.ts": { + "version": "367bba45eb437cea29f41c3a382c292c6fe6cdb7b26a389ee5d3a5eea5d75040", + "signature": "367bba45eb437cea29f41c3a382c292c6fe6cdb7b26a389ee5d3a5eea5d75040", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts": { + "version": "74b762fd4dea4bcbb20871265c2bb33700336fbed0ad499335beb222b87ffa52", + "signature": "74b762fd4dea4bcbb20871265c2bb33700336fbed0ad499335beb222b87ffa52", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts": { + "version": "21b08a722f729d8d95892465be0977a8563dcf630b38d87886517ce6f027389c", + "signature": "21b08a722f729d8d95892465be0977a8563dcf630b38d87886517ce6f027389c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts": { + "version": "80639ea4472a40009209e18013d543954e3e2379c712b571101ac2e8c5da0fcb", + "signature": "80639ea4472a40009209e18013d543954e3e2379c712b571101ac2e8c5da0fcb", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/scenes/Scene.d.ts": { + "version": "f5e983730652fec8fafa9ea505f5fd1613c07eba776614e3044a421aeb22f33c", + "signature": "f5e983730652fec8fafa9ea505f5fd1613c07eba776614e3044a421aeb22f33c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts": { + "version": "f30b0014b692111f093ac9b8f1f29e6047e2d0deb61005b60e68b562d2320fab", + "signature": "f30b0014b692111f093ac9b8f1f29e6047e2d0deb61005b60e68b562d2320fab", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts": { + "version": "fc3596b10eb99c07fccec7b04b9404d36bea341b9f486173aff1e234aceaccff", + "signature": "fc3596b10eb99c07fccec7b04b9404d36bea341b9f486173aff1e234aceaccff", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLShader.d.ts": { + "version": "b71e7f69e72d51d44ad171e6e93aedc2c33c339dab5fa2656e7b1ee5ba19b2ad", + "signature": "b71e7f69e72d51d44ad171e6e93aedc2c33c339dab5fa2656e7b1ee5ba19b2ad", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts": { + "version": "b613436b912db733f6731b4e5cac3395f5cfe70ba1b003853ce5a441f220ec8f", + "signature": "b613436b912db733f6731b4e5cac3395f5cfe70ba1b003853ce5a441f220ec8f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts": { + "version": "281eb8e4ddd65b6733cf1f175dd1af1bb2595bbcea7c12324f028079ba78fdf9", + "signature": "281eb8e4ddd65b6733cf1f175dd1af1bb2595bbcea7c12324f028079ba78fdf9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLUtils.d.ts": { + "version": "54d68fee094e2ec6d34c4b7d89ba849ff87a2030fb8e907b0c4ad252009d40cf", + "signature": "54d68fee094e2ec6d34c4b7d89ba849ff87a2030fb8e907b0c4ad252009d40cf", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts": { + "version": "e0fdf687219271c3031ae25cd8d3e9fe7c16ce46453ce775292887f486c2aa16", + "signature": "e0fdf687219271c3031ae25cd8d3e9fe7c16ce46453ce775292887f486c2aa16", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts": { + "version": "f17592fc258a847bb7d38ab25799eabce4865f24fcb441cc69a6a6277a48e6a7", + "signature": "f17592fc258a847bb7d38ab25799eabce4865f24fcb441cc69a6a6277a48e6a7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts": { + "version": "512d2b3f264aac071278060d3e4f019508b8a504283708a0fc503198f244c363", + "signature": "512d2b3f264aac071278060d3e4f019508b8a504283708a0fc503198f244c363", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts": { + "version": "5f477e9897e29f47b860b52218d645178362d3ebd17c990df9f36b0c52d0e6ff", + "signature": "5f477e9897e29f47b860b52218d645178362d3ebd17c990df9f36b0c52d0e6ff", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLObjects.d.ts": { + "version": "0df7497ada3a4f6459420803ecf7e555f1ad1e7bd43c1e17bdafbc34e19d7162", + "signature": "0df7497ada3a4f6459420803ecf7e555f1ad1e7bd43c1e17bdafbc34e19d7162", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/Group.d.ts": { + "version": "2923047a1c951231f48fe77a6c2fffba8198c20dd05d4ec1b90f9e45f129adea", + "signature": "2923047a1c951231f48fe77a6c2fffba8198c20dd05d4ec1b90f9e45f129adea", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts": { + "version": "4a67b2b2c0d75420839fdfb71348d7e45617815cbc836451f6b6b713f3ae027d", + "signature": "4a67b2b2c0d75420839fdfb71348d7e45617815cbc836451f6b6b713f3ae027d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts": { + "version": "61151756294f487dc1e8eb4dc04e2b3f16f219476a83af8b1a163b0d3231e125", + "signature": "61151756294f487dc1e8eb4dc04e2b3f16f219476a83af8b1a163b0d3231e125", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts": { + "version": "2ee3c063fa092a063e5af32e89407ce5c8901b47ef161b20a7c493a6797e5942", + "signature": "2ee3c063fa092a063e5af32e89407ce5c8901b47ef161b20a7c493a6797e5942", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts": { + "version": "b005fce0e3020382ab379c1686511827b18d628a45f09c05fe13562d6ff9fbf8", + "signature": "b005fce0e3020382ab379c1686511827b18d628a45f09c05fe13562d6ff9fbf8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/LightShadow.d.ts": { + "version": "cb89d28353d59543e7462bbbc55db4f4b14bdff4a6fc041641a28bf7ca01c580", + "signature": "cb89d28353d59543e7462bbbc55db4f4b14bdff4a6fc041641a28bf7ca01c580", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/Light.d.ts": { + "version": "76112f75c81cde794e557206dfd5176e321d9f650b86e4c049c4b6aa6081fa63", + "signature": "76112f75c81cde794e557206dfd5176e321d9f650b86e4c049c4b6aa6081fa63", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts": { + "version": "2c9bc3a14054cf2c82d57c29d3151fee1b27a4438d7c9699ba6fcdfe0c1690f7", + "signature": "2c9bc3a14054cf2c82d57c29d3151fee1b27a4438d7c9699ba6fcdfe0c1690f7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts": { + "version": "c38cc2b20772e99f3ded463dba15a03a51f8f50d35071f22c567ffcd2c33a27d", + "signature": "c38cc2b20772e99f3ded463dba15a03a51f8f50d35071f22c567ffcd2c33a27d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts": { + "version": "9c69db2c8116f5d70f763166d553e24530ffff7c79ef190ef4186d60cb2a2428", + "signature": "9c69db2c8116f5d70f763166d553e24530ffff7c79ef190ef4186d60cb2a2428", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/DataTexture3D.d.ts": { + "version": "432fe3b8769c1e1090be43baff32bccfb436c1fce8d470a45fef5a8016dbaab1", + "signature": "432fe3b8769c1e1090be43baff32bccfb436c1fce8d470a45fef5a8016dbaab1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts": { + "version": "ed0e3159c03180a7ae7fe891f12b386eb311a9440a3a97e546c4d57039e43162", + "signature": "ed0e3159c03180a7ae7fe891f12b386eb311a9440a3a97e546c4d57039e43162", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts": { + "version": "52bb710e4227d90329c3a3e4304a880805db1599f2c1967cfd18e38a7890d5f8", + "signature": "52bb710e4227d90329c3a3e4304a880805db1599f2c1967cfd18e38a7890d5f8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Ray.d.ts": { + "version": "b148cec375fae1768c5b4089680d664fb05c60078df3871ccf430ad02ccce329", + "signature": "b148cec375fae1768c5b4089680d664fb05c60078df3871ccf430ad02ccce329", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/Raycaster.d.ts": { + "version": "129eaca80766e63a8c4b1f6aee427aea21a4e9826932a77cae021dd170d0f0fc", + "signature": "129eaca80766e63a8c4b1f6aee427aea21a4e9826932a77cae021dd170d0f0fc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/Object3D.d.ts": { + "version": "8730619633dffe07eef990f00e1e327e59d574354540a3b63611f4af20d85567", + "signature": "8730619633dffe07eef990f00e1e327e59d574354540a3b63611f4af20d85567", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/cameras/Camera.d.ts": { + "version": "3470118b64b6e9ea140a7be15b04f8e39d9b17869182a177fd12be31b524c383", + "signature": "3470118b64b6e9ea140a7be15b04f8e39d9b17869182a177fd12be31b524c383", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Spherical.d.ts": { + "version": "21a2391b9b0784854aba05ea34d50854807026b7b52fc07611f65c78d84399a1", + "signature": "21a2391b9b0784854aba05ea34d50854807026b7b52fc07611f65c78d84399a1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Cylindrical.d.ts": { + "version": "4f842cce29cb043bc64c1943521b244ff6cee453a3b6000265ff3631d7035a9c", + "signature": "4f842cce29cb043bc64c1943521b244ff6cee453a3b6000265ff3631d7035a9c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Vector3.d.ts": { + "version": "c0f556a6fa323dbb173bd1ab49d1903a61d437d53443d260dc4a51ce423e226f", + "signature": "c0f556a6fa323dbb173bd1ab49d1903a61d437d53443d260dc4a51ce423e226f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/Bone.d.ts": { + "version": "f677a74b2b038509ea5aef4030fadc0e090cc9fd4dca4c71147934e6697c23b0", + "signature": "f677a74b2b038509ea5aef4030fadc0e090cc9fd4dca4c71147934e6697c23b0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts": { + "version": "ba6a7d0e5cecc3ac957d1b4c3d7ff1a0bab1c67253b3c3b858892323a29abd99", + "signature": "ba6a7d0e5cecc3ac957d1b4c3d7ff1a0bab1c67253b3c3b858892323a29abd99", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/AnimationUtils.d.ts": { + "version": "bc7d1326a9187df243a5af0eddbc3095dc3442ffcc153c23e3974553e11b7972", + "signature": "bc7d1326a9187df243a5af0eddbc3095dc3442ffcc153c23e3974553e11b7972", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/AnimationObjectGroup.d.ts": { + "version": "0e6b3c7f300f6e2587c62783ebf78c74e61e7e85d37591e1e1ecf82cc15adc01", + "signature": "0e6b3c7f300f6e2587c62783ebf78c74e61e7e85d37591e1e1ecf82cc15adc01", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/AnimationAction.d.ts": { + "version": "139ab16e09553addf17cfb7122108eb39cd406b8009692c4d1d9e3dea96ef83d", + "signature": "139ab16e09553addf17cfb7122108eb39cd406b8009692c4d1d9e3dea96ef83d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/animation/AnimationMixer.d.ts": { + "version": "69f3d18ee459096c5e1426df332673a939b56b8bafeeec0b31b3cab1a9e4dadd", + "signature": "69f3d18ee459096c5e1426df332673a939b56b8bafeeec0b31b3cab1a9e4dadd", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/audio/AudioContext.d.ts": { + "version": "192ad3de0ae2044e97d375c601ef54149382bcf59a9eec35066465a73c434c0a", + "signature": "192ad3de0ae2044e97d375c601ef54149382bcf59a9eec35066465a73c434c0a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/audio/AudioListener.d.ts": { + "version": "a99712388b38c17ca788b4b93cee993cc487ba69e18d98dba66000031e90c378", + "signature": "a99712388b38c17ca788b4b93cee993cc487ba69e18d98dba66000031e90c378", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/audio/Audio.d.ts": { + "version": "d78026a89ce7ed12ae2492df52893b8524fbe4ee6546b60b83e57c1ab08faf2c", + "signature": "d78026a89ce7ed12ae2492df52893b8524fbe4ee6546b60b83e57c1ab08faf2c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/audio/PositionalAudio.d.ts": { + "version": "e1b5820a2298308c97ac20096c391a4a064c02819ea897a20ea3f08f15051035", + "signature": "e1b5820a2298308c97ac20096c391a4a064c02819ea897a20ea3f08f15051035", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/audio/AudioAnalyser.d.ts": { + "version": "9d948541e42e0af1cf6e33967c13bdb3193d6507c4ff2bfde6849fe4ee15366c", + "signature": "9d948541e42e0af1cf6e33967c13bdb3193d6507c4ff2bfde6849fe4ee15366c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts": { + "version": "a37385e604ee8726100c207afa819823079a766c30f5c38a242a9368d8c28e45", + "signature": "a37385e604ee8726100c207afa819823079a766c30f5c38a242a9368d8c28e45", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/cameras/StereoCamera.d.ts": { + "version": "ab8c6e4a2b49a17c71848a8c7d14aa7fae2a2620c734922d8d004d59baf59ffb", + "signature": "ab8c6e4a2b49a17c71848a8c7d14aa7fae2a2620c734922d8d004d59baf59ffb", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts": { + "version": "c53f1e0dcd4a2c1c3e86c83345fd078ff75425ffb78654306b0f58521dc30f50", + "signature": "c53f1e0dcd4a2c1c3e86c83345fd078ff75425ffb78654306b0f58521dc30f50", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/cameras/CubeCamera.d.ts": { + "version": "1fc98030aad398bba258e0fd2d5d6e39ab085c5d22257fbcd8181e0c2621489f", + "signature": "1fc98030aad398bba258e0fd2d5d6e39ab085c5d22257fbcd8181e0c2621489f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/cameras/ArrayCamera.d.ts": { + "version": "c60124cf00efc8b113c643d222cc146d15d5ea184c04df3cce9ce8652e42a6fc", + "signature": "c60124cf00efc8b113c643d222cc146d15d5ea184c04df3cce9ce8652e42a6fc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/Uniform.d.ts": { + "version": "7bf91a5d5e38618029b7d1703db7c0219f9eda3024fd816360d2ae791e89d1b3", + "signature": "7bf91a5d5e38618029b7d1703db7c0219f9eda3024fd816360d2ae791e89d1b3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts": { + "version": "0f4e57b76239328d40d68e9c6271b4f17a19970bdbff18d90e08031b04efc19d", + "signature": "0f4e57b76239328d40d68e9c6271b4f17a19970bdbff18d90e08031b04efc19d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/InstancedInterleavedBuffer.d.ts": { + "version": "bd683b2b79122ede787c445f2a35505d9dc60cdd3c2ed08cc05d1140c6807241", + "signature": "bd683b2b79122ede787c445f2a35505d9dc60cdd3c2ed08cc05d1140c6807241", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/InstancedBufferAttribute.d.ts": { + "version": "361ec213e909dea3b00f0aa91e1f1ccafe04eaae327a45bf33fe3c3a9a28d13d", + "signature": "361ec213e909dea3b00f0aa91e1f1ccafe04eaae327a45bf33fe3c3a9a28d13d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/GLBufferAttribute.d.ts": { + "version": "6a60665f3bf35c7be844746ab2f796bb4076118559a7c660cf95fe01163bc79f", + "signature": "6a60665f3bf35c7be844746ab2f796bb4076118559a7c660cf95fe01163bc79f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/core/Clock.d.ts": { + "version": "6e322a837838dbaad00bd298c6f33f5dfc9a5fed6792b0ae1d00b2da68afc2ac", + "signature": "6e322a837838dbaad00bd298c6f33f5dfc9a5fed6792b0ae1d00b2da68afc2ac", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/objects/ImmediateRenderObject.d.ts": { + "version": "f54c06d4e8fbc4f666c8c0830ac3c1cd06e39bf682347dbd84bc0ae05d3a162f", + "signature": "f54c06d4e8fbc4f666c8c0830ac3c1cd06e39bf682347dbd84bc0ae05d3a162f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/core/Curve.d.ts": { + "version": "d8fe7cefa0e694eb6c202bd5dcbaf037217574a68d82aae58d7344d37a1154fa", + "signature": "d8fe7cefa0e694eb6c202bd5dcbaf037217574a68d82aae58d7344d37a1154fa", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts": { + "version": "0f638672b9749835cda995e8eea6ffd2c17c505eb5b51cd263686b1abb5af9ea", + "signature": "0f638672b9749835cda995e8eea6ffd2c17c505eb5b51cd263686b1abb5af9ea", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/ArcCurve.d.ts": { + "version": "105d7842497ad972a7f358d57aa0f95f722d67ce8fb0efc7d93247be6e7b025d", + "signature": "105d7842497ad972a7f358d57aa0f95f722d67ce8fb0efc7d93247be6e7b025d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/CatmullRomCurve3.d.ts": { + "version": "beb69bf7a052aa881fc18d7f7ccd47918719c1ba9ea2c92304bca4266a95df6e", + "signature": "beb69bf7a052aa881fc18d7f7ccd47918719c1ba9ea2c92304bca4266a95df6e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve.d.ts": { + "version": "1f0a034bc92b2b6bf1579253aa20a4983b2170cebdad9ff1e13718c5b58aadbc", + "signature": "1f0a034bc92b2b6bf1579253aa20a4983b2170cebdad9ff1e13718c5b58aadbc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve3.d.ts": { + "version": "07d41369f44f66a60cdd99267d7fd3b4c195d8fb9576a7a326b439bf3cc7b11a", + "signature": "07d41369f44f66a60cdd99267d7fd3b4c195d8fb9576a7a326b439bf3cc7b11a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/LineCurve.d.ts": { + "version": "8eb1f35d3bd99cfb4a61c87f756ae9389709e3cfdc0c4a54589b2e37c814b5a5", + "signature": "8eb1f35d3bd99cfb4a61c87f756ae9389709e3cfdc0c4a54589b2e37c814b5a5", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/LineCurve3.d.ts": { + "version": "8027a5c97cc51405a3382c6b59d9690fd4ad8166dbb43e7976e62efc4a49fdce", + "signature": "8027a5c97cc51405a3382c6b59d9690fd4ad8166dbb43e7976e62efc4a49fdce", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve.d.ts": { + "version": "d6fc38421f16d0a68a6d782a94f567464c1c441fc14949441a140b87a29d7ddd", + "signature": "d6fc38421f16d0a68a6d782a94f567464c1c441fc14949441a140b87a29d7ddd", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve3.d.ts": { + "version": "9e9e3b18823c2179e426b11a6945f6586450d9db21e9eea0eb60491d018fa62b", + "signature": "9e9e3b18823c2179e426b11a6945f6586450d9db21e9eea0eb60491d018fa62b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/SplineCurve.d.ts": { + "version": "d7a12dd03519d05cf43d70990cff5caf033f9b283aac0706e11519ddebf4e945", + "signature": "d7a12dd03519d05cf43d70990cff5caf033f9b283aac0706e11519ddebf4e945", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/curves/Curves.d.ts": { + "version": "4998cbff67e76f385d9955674a9f2ac385926e807ed371ed357ccb6f03a4d72e", + "signature": "4998cbff67e76f385d9955674a9f2ac385926e807ed371ed357ccb6f03a4d72e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/core/CurvePath.d.ts": { + "version": "248195b6ec3d8c14855fa7ba39147abdcf4f2f6bab9c80b70252a96ae6fb1cec", + "signature": "248195b6ec3d8c14855fa7ba39147abdcf4f2f6bab9c80b70252a96ae6fb1cec", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/core/Path.d.ts": { + "version": "1c548e5976ee7f2a3c46b88c09db5d1e7d95d464eff7536cb26515eb62b68694", + "signature": "1c548e5976ee7f2a3c46b88c09db5d1e7d95d464eff7536cb26515eb62b68694", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/core/Shape.d.ts": { + "version": "9034bd380f5e5a35a6d2f986c2b003786fccbc1f86bde6dde029d7ce930e3dd6", + "signature": "9034bd380f5e5a35a6d2f986c2b003786fccbc1f86bde6dde029d7ce930e3dd6", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/core/ShapePath.d.ts": { + "version": "848c83b9294d41fc9fd8eb360b5a28563cc24f3e8f045f169b5cf1a7201a551a", + "signature": "848c83b9294d41fc9fd8eb360b5a28563cc24f3e8f045f169b5cf1a7201a551a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/core/Font.d.ts": { + "version": "6bc8df13510289edc16bf48bff69384ae05288c9c5c0fd2c38e454dd222a9499", + "signature": "6bc8df13510289edc16bf48bff69384ae05288c9c5c0fd2c38e454dd222a9499", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/DataUtils.d.ts": { + "version": "08f77f39ef225aadaa1351d0ae1c4ca7a1d1886b1425c7cb63ef910885582c69", + "signature": "08f77f39ef225aadaa1351d0ae1c4ca7a1d1886b1425c7cb63ef910885582c69", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/ImageUtils.d.ts": { + "version": "b29f216a35d3fd0688b305d31f483781b27c64a40cf76816020a1dcda4816fe5", + "signature": "b29f216a35d3fd0688b305d31f483781b27c64a40cf76816020a1dcda4816fe5", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/ShapeUtils.d.ts": { + "version": "9fe3723a3f5f2daa1317099c833ddf6e9859c3298fdc0edb4e06b463f9805761", + "signature": "9fe3723a3f5f2daa1317099c833ddf6e9859c3298fdc0edb4e06b463f9805761", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/extras/PMREMGenerator.d.ts": { + "version": "09f59f210312b40890556fb204cc7822a41b918bdb90ba2618a932ab4af715da", + "signature": "09f59f210312b40890556fb204cc7822a41b918bdb90ba2618a932ab4af715da", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/BoxGeometry.d.ts": { + "version": "1193b14b29eb632f7c77ce91e0c4741eeb4c4252212241ae6db377b739682513", + "signature": "1193b14b29eb632f7c77ce91e0c4741eeb4c4252212241ae6db377b739682513", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/CircleGeometry.d.ts": { + "version": "b8076d6e64d95061f85a2dcdd6c2a8579898281dd611b15690131f19cb8ff401", + "signature": "b8076d6e64d95061f85a2dcdd6c2a8579898281dd611b15690131f19cb8ff401", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts": { + "version": "65a84489e184bcb327b80ff765f4c1990a854c486834640e14cfcc4d26f4a42d", + "signature": "65a84489e184bcb327b80ff765f4c1990a854c486834640e14cfcc4d26f4a42d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/ConeGeometry.d.ts": { + "version": "ef62fde1a4f8945a551420dd48b2b80848e1486034874339b8e93c2d385b16e5", + "signature": "ef62fde1a4f8945a551420dd48b2b80848e1486034874339b8e93c2d385b16e5", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts": { + "version": "8259bab99eae433b2f46db925186028fa5d1e9fdadcaaba5f2e913d89060d165", + "signature": "8259bab99eae433b2f46db925186028fa5d1e9fdadcaaba5f2e913d89060d165", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/DodecahedronGeometry.d.ts": { + "version": "265d28e894deed6c0efd2670a1b7e9710c1549b3065ccbeac1225665fec812d7", + "signature": "265d28e894deed6c0efd2670a1b7e9710c1549b3065ccbeac1225665fec812d7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/EdgesGeometry.d.ts": { + "version": "d3de1f092f689c00d81dc2fee835ea7589e898b5bbaec44ffe3185020169900f", + "signature": "d3de1f092f689c00d81dc2fee835ea7589e898b5bbaec44ffe3185020169900f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts": { + "version": "4f773d709c92c89c5ce002786b90c50285823b38cfb8943bd23242c85ec53f08", + "signature": "4f773d709c92c89c5ce002786b90c50285823b38cfb8943bd23242c85ec53f08", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/IcosahedronGeometry.d.ts": { + "version": "2765e673d9aaf53c3b49e212cf7873493d7f422b4ee33867d0b554326bf53c40", + "signature": "2765e673d9aaf53c3b49e212cf7873493d7f422b4ee33867d0b554326bf53c40", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/LatheGeometry.d.ts": { + "version": "38c6db11a91433901dca4051014222798f5c2b33beb7849bf4965ec4c79c908f", + "signature": "38c6db11a91433901dca4051014222798f5c2b33beb7849bf4965ec4c79c908f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/OctahedronGeometry.d.ts": { + "version": "bd3cc45d94a9b70ba744db65fc1b2e5c25bec1c78640cad20ddcb2ebb67d102e", + "signature": "bd3cc45d94a9b70ba744db65fc1b2e5c25bec1c78640cad20ddcb2ebb67d102e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/ParametricGeometry.d.ts": { + "version": "c7dd8530f4cf12cc2955e1d5ccc5d556934862f0b11649e1cfcc94a3d96df146", + "signature": "c7dd8530f4cf12cc2955e1d5ccc5d556934862f0b11649e1cfcc94a3d96df146", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/PlaneGeometry.d.ts": { + "version": "3a6e2fd4cd00fcf1645706cb47c18c0252cd5797b0cec996a78b74c9a8d4182e", + "signature": "3a6e2fd4cd00fcf1645706cb47c18c0252cd5797b0cec996a78b74c9a8d4182e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/RingGeometry.d.ts": { + "version": "2064383adec81d5f61965f9481c3a2a80ada7f5c2f19fd065a07e23fb453bd7a", + "signature": "2064383adec81d5f61965f9481c3a2a80ada7f5c2f19fd065a07e23fb453bd7a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/ShapeGeometry.d.ts": { + "version": "7b22b608bd6b8b2dbbfd5fadd6c1e435b83e3c0fc77eeac8e1c4ab6b0dc258d2", + "signature": "7b22b608bd6b8b2dbbfd5fadd6c1e435b83e3c0fc77eeac8e1c4ab6b0dc258d2", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/SphereGeometry.d.ts": { + "version": "7d039d5e0c5c81b77eb80ae80f04c8803223827b60877d926a644326ba7f0201", + "signature": "7d039d5e0c5c81b77eb80ae80f04c8803223827b60877d926a644326ba7f0201", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/TetrahedronGeometry.d.ts": { + "version": "271ef08ab1236d1125f94a8f79b600630d3c1a94179f8af832a234f7e9a89d60", + "signature": "271ef08ab1236d1125f94a8f79b600630d3c1a94179f8af832a234f7e9a89d60", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/TextGeometry.d.ts": { + "version": "77ef5826119e4179c93a5c693afb7eb2c71bf918e132b61b25eea49ca7f9cf0b", + "signature": "77ef5826119e4179c93a5c693afb7eb2c71bf918e132b61b25eea49ca7f9cf0b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/TorusGeometry.d.ts": { + "version": "0a44dbe2497b8eab8dbc8d9adda03e0184911c6a3f3429357968219f6b112052", + "signature": "0a44dbe2497b8eab8dbc8d9adda03e0184911c6a3f3429357968219f6b112052", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/TorusKnotGeometry.d.ts": { + "version": "ea0d0fa3178b173e84905a63c66386d54d3a246226e6a363a8a5cd05d7d705f4", + "signature": "ea0d0fa3178b173e84905a63c66386d54d3a246226e6a363a8a5cd05d7d705f4", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/TubeGeometry.d.ts": { + "version": "7ec9d28642961fd2c54d535480f6ba4064c56aa8c03463749d3f516ce6b7b2b2", + "signature": "7ec9d28642961fd2c54d535480f6ba4064c56aa8c03463749d3f516ce6b7b2b2", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/WireframeGeometry.d.ts": { + "version": "5791278922d75f7f3aa13b64d3f8ec2821302c7d3b660c8bc6b98d4a6b7ceddd", + "signature": "5791278922d75f7f3aa13b64d3f8ec2821302c7d3b660c8bc6b98d4a6b7ceddd", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/geometries/Geometries.d.ts": { + "version": "76f3f959fcce95b9ada79dfac10b7c5df81ecd85bacaf4d15ce5478e8ac2dd31", + "signature": "76f3f959fcce95b9ada79dfac10b7c5df81ecd85bacaf4d15ce5478e8ac2dd31", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/Line.d.ts": { + "version": "f1925b062f9caabf660d0bc80a041fed9ec060f7ff146fc8577b4274ff49cee9", + "signature": "f1925b062f9caabf660d0bc80a041fed9ec060f7ff146fc8577b4274ff49cee9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/LineSegments.d.ts": { + "version": "816cfb03ec4b76b7a1aa07499f5180d764eba634d29ca928adc0a70b8101c522", + "signature": "816cfb03ec4b76b7a1aa07499f5180d764eba634d29ca928adc0a70b8101c522", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/SpotLightHelper.d.ts": { + "version": "1892b5ed89ec050e5e865096d42aa7ac776ffa7428a098dedf9d232f3bfde6af", + "signature": "1892b5ed89ec050e5e865096d42aa7ac776ffa7428a098dedf9d232f3bfde6af", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/SkeletonHelper.d.ts": { + "version": "5e739c6cdb908e7546e5da530ba079166632e69cddd942736660e570acb92479", + "signature": "5e739c6cdb908e7546e5da530ba079166632e69cddd942736660e570acb92479", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/PointLightShadow.d.ts": { + "version": "8f7482100023e5397eb7c1d8fd2595c929727ff423ea1f0b904cebdd37051bc7", + "signature": "8f7482100023e5397eb7c1d8fd2595c929727ff423ea1f0b904cebdd37051bc7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/PointLight.d.ts": { + "version": "cc8689fec73132a375a149168a1ad42414a10d337bdae80290703159e148fb31", + "signature": "cc8689fec73132a375a149168a1ad42414a10d337bdae80290703159e148fb31", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/PointLightHelper.d.ts": { + "version": "34b2a938702294406c6930860ca67e2ac89d4395b2c5d21f41b65937773aef6e", + "signature": "34b2a938702294406c6930860ca67e2ac89d4395b2c5d21f41b65937773aef6e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/HemisphereLight.d.ts": { + "version": "78cd4fd3de5c5150323df1e297ac5392e5f433538862f6fceb30f7fcb4d3e406", + "signature": "78cd4fd3de5c5150323df1e297ac5392e5f433538862f6fceb30f7fcb4d3e406", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts": { + "version": "958ae685995c7da7a94631ead40e081351a81341f7fc66be5617985559bcbcf1", + "signature": "958ae685995c7da7a94631ead40e081351a81341f7fc66be5617985559bcbcf1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/HemisphereLightHelper.d.ts": { + "version": "32810a066471bfb581ece580b082051dd63686cfc6af8cc0b370edfa97544fbf", + "signature": "32810a066471bfb581ece580b082051dd63686cfc6af8cc0b370edfa97544fbf", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/GridHelper.d.ts": { + "version": "842fe81ba5dc7260ff50174e3450b3e19d535df0280c0569bc95166b5f8994d1", + "signature": "842fe81ba5dc7260ff50174e3450b3e19d535df0280c0569bc95166b5f8994d1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/PolarGridHelper.d.ts": { + "version": "438a188697101788b5dd8129844cf1f36cbbe2f866378bdc5de1d19bcefc55ef", + "signature": "438a188697101788b5dd8129844cf1f36cbbe2f866378bdc5de1d19bcefc55ef", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts": { + "version": "37bfbfbec5d900c379b7dc65bf3ad2a9a0312fad4c91778ae3c73590d2d37b6b", + "signature": "37bfbfbec5d900c379b7dc65bf3ad2a9a0312fad4c91778ae3c73590d2d37b6b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/DirectionalLight.d.ts": { + "version": "30defc187296b83860b3ef9e1175de0a5b44ed9e64e1fc79f406bc8aa0063637", + "signature": "30defc187296b83860b3ef9e1175de0a5b44ed9e64e1fc79f406bc8aa0063637", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/DirectionalLightHelper.d.ts": { + "version": "71dfddd1edbb4f345e0bb18af7064da94f35ff58c60f2210b3d534231a7aec38", + "signature": "71dfddd1edbb4f345e0bb18af7064da94f35ff58c60f2210b3d534231a7aec38", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/CameraHelper.d.ts": { + "version": "e91ae57529395e5375189f8cd3be4ad6a1039e4a0f874a7436ff706a09e395fc", + "signature": "e91ae57529395e5375189f8cd3be4ad6a1039e4a0f874a7436ff706a09e395fc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/BoxHelper.d.ts": { + "version": "9cd5d2e584a62306dc5030bdd94e072ac03828e4a34a2531c0e4b90c5e595fd1", + "signature": "9cd5d2e584a62306dc5030bdd94e072ac03828e4a34a2531c0e4b90c5e595fd1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/Box3Helper.d.ts": { + "version": "afd5b50a4d20db25e060396161acdf718fffa3b73a85fb3ec75f2607cfed03c6", + "signature": "afd5b50a4d20db25e060396161acdf718fffa3b73a85fb3ec75f2607cfed03c6", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/PlaneHelper.d.ts": { + "version": "752e7f35c0b26df44e99a773ca1f37195dacce8847394a28fb29fc2984d98bda", + "signature": "752e7f35c0b26df44e99a773ca1f37195dacce8847394a28fb29fc2984d98bda", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/Mesh.d.ts": { + "version": "3cd6aee8e8eba196b46ce259f50f88a8596a1a058e1f611d861f8ac46b7f7477", + "signature": "3cd6aee8e8eba196b46ce259f50f88a8596a1a058e1f611d861f8ac46b7f7477", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/ArrowHelper.d.ts": { + "version": "b65159863b0acf230edf86fdd997cedcfd9c970d346a71c894257e9fdf5aff93", + "signature": "b65159863b0acf230edf86fdd997cedcfd9c970d346a71c894257e9fdf5aff93", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/helpers/AxesHelper.d.ts": { + "version": "39df3cb01af5a05735f446d704e822776ffc25b825659aa7597c50c2e94aa453", + "signature": "39df3cb01af5a05735f446d704e822776ffc25b825659aa7597c50c2e94aa453", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts": { + "version": "9fa45eaaf2626085d031569a52f54714405cec7b6bacb041f28fe7adfd247a05", + "signature": "9fa45eaaf2626085d031569a52f54714405cec7b6bacb041f28fe7adfd247a05", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/SpotLight.d.ts": { + "version": "1f834258edd805e1a428dc400aeba9d2de2817c6ccc63de0f05f2887817e3fe9", + "signature": "1f834258edd805e1a428dc400aeba9d2de2817c6ccc63de0f05f2887817e3fe9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/RectAreaLight.d.ts": { + "version": "da940126d3840677351fc0df9fb2dc6571a8e783461197551bc592a20495351d", + "signature": "da940126d3840677351fc0df9fb2dc6571a8e783461197551bc592a20495351d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/AmbientLight.d.ts": { + "version": "f883682d6e812f8ec1f532103576858788bb2e481d1fab8b37b5f502d9339508", + "signature": "f883682d6e812f8ec1f532103576858788bb2e481d1fab8b37b5f502d9339508", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts": { + "version": "8b6144459f42a74872f64be4506acf0c06b3b57ce7812ae3ba65c5b0a2fc0e2b", + "signature": "8b6144459f42a74872f64be4506acf0c06b3b57ce7812ae3ba65c5b0a2fc0e2b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/LightProbe.d.ts": { + "version": "25987a832e6a9303585accbe47950a9880445f1da53144094f6fc1090335392f", + "signature": "25987a832e6a9303585accbe47950a9880445f1da53144094f6fc1090335392f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/AmbientLightProbe.d.ts": { + "version": "6a5c27878e3144baade4159cb041ff0731dcca18ea00a58f9fab3b166fc92ce1", + "signature": "6a5c27878e3144baade4159cb041ff0731dcca18ea00a58f9fab3b166fc92ce1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/lights/HemisphereLightProbe.d.ts": { + "version": "2951d20f3e51d0ef51bae56c0c3bf81e2cefae7c64790670d9abdfcb40f1dac5", + "signature": "2951d20f3e51d0ef51bae56c0c3bf81e2cefae7c64790670d9abdfcb40f1dac5", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/Loader.d.ts": { + "version": "a70bf51744ec939a5c87a636c383e0118d3b9332b9863b2c1df158194e1680a6", + "signature": "a70bf51744ec939a5c87a636c383e0118d3b9332b9863b2c1df158194e1680a6", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts": { + "version": "04a0be21f320db4716bd8f6283f5bba4560f639ded181eeaa6eef820594c1c55", + "signature": "04a0be21f320db4716bd8f6283f5bba4560f639ded181eeaa6eef820594c1c55", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/AnimationLoader.d.ts": { + "version": "24551b8482b56cba01f5a76871010c9898f87ef22c066b654bc79d6851fb65d8", + "signature": "24551b8482b56cba01f5a76871010c9898f87ef22c066b654bc79d6851fb65d8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/CompressedTexture.d.ts": { + "version": "e1b7d8ebc348369c2636d0548fcb95772a41f13669a92484998636d5c6f6f84c", + "signature": "e1b7d8ebc348369c2636d0548fcb95772a41f13669a92484998636d5c6f6f84c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/CompressedTextureLoader.d.ts": { + "version": "0c39a6721f4481d28125672874d12f869db7beeb63efa5ea207a894a06b01990", + "signature": "0c39a6721f4481d28125672874d12f869db7beeb63efa5ea207a894a06b01990", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/DataTexture.d.ts": { + "version": "5a4b056c4c7b1af3d3310ef90287b814f28062f2eb1b7ba1fbba74024ff751d5", + "signature": "5a4b056c4c7b1af3d3310ef90287b814f28062f2eb1b7ba1fbba74024ff751d5", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/DataTextureLoader.d.ts": { + "version": "fbf180777acc17ed6f59f0fd1639745c64dedecb2ca7886214999c0535ff02da", + "signature": "fbf180777acc17ed6f59f0fd1639745c64dedecb2ca7886214999c0535ff02da", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/CubeTextureLoader.d.ts": { + "version": "473a574ee3ffd1ab73bf001acb92d443c50c7ce58854c08c78ae89522f3b2af1", + "signature": "473a574ee3ffd1ab73bf001acb92d443c50c7ce58854c08c78ae89522f3b2af1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/TextureLoader.d.ts": { + "version": "28cf4b88597d75f21d50d3e89cc60914ef1100ca7647c0bca0d44d0e04a83fdc", + "signature": "28cf4b88597d75f21d50d3e89cc60914ef1100ca7647c0bca0d44d0e04a83fdc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/ObjectLoader.d.ts": { + "version": "4c7a863556a70d4619f5ec8b13e2d3d9e0fb87c79ab8daccc1f64cc8135cf14a", + "signature": "4c7a863556a70d4619f5ec8b13e2d3d9e0fb87c79ab8daccc1f64cc8135cf14a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/MaterialLoader.d.ts": { + "version": "3e0528d53eb3f2386d770412b4dcdd508ea8db6d7a32fac07b27e857b200c6bc", + "signature": "3e0528d53eb3f2386d770412b4dcdd508ea8db6d7a32fac07b27e857b200c6bc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/BufferGeometryLoader.d.ts": { + "version": "7efce11f987fd2d555babdcbbf505520c31671ad4ac08b298bc237f62ddd6941", + "signature": "7efce11f987fd2d555babdcbbf505520c31671ad4ac08b298bc237f62ddd6941", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/ImageLoader.d.ts": { + "version": "5d96064fd7419a9faf2ec2118c273a6245d4933ff18774b39237e3a130ba0ea0", + "signature": "5d96064fd7419a9faf2ec2118c273a6245d4933ff18774b39237e3a130ba0ea0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/ImageBitmapLoader.d.ts": { + "version": "94755c3ecfcf813ef35c06e17b0494cea726eff490be46ec7f10b343cd6d6c66", + "signature": "94755c3ecfcf813ef35c06e17b0494cea726eff490be46ec7f10b343cd6d6c66", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/FontLoader.d.ts": { + "version": "780d4988de0352edd1800224ae70dced2a527a8d6bff3a7ab13927f3d778740d", + "signature": "780d4988de0352edd1800224ae70dced2a527a8d6bff3a7ab13927f3d778740d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/FileLoader.d.ts": { + "version": "59bf56dbda4409f8e87676340c5bfb65cf674442e611a680f9f461c8898c46dd", + "signature": "59bf56dbda4409f8e87676340c5bfb65cf674442e611a680f9f461c8898c46dd", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/LoaderUtils.d.ts": { + "version": "7c9de3d7e945f169a38c135a9f3799746d5774958edc38e7cb800451ce551c6b", + "signature": "7c9de3d7e945f169a38c135a9f3799746d5774958edc38e7cb800451ce551c6b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/Cache.d.ts": { + "version": "57f2d9377264cf90b169ba4bbbcee8135d1350d8523d60a41d5523cf8456f226", + "signature": "57f2d9377264cf90b169ba4bbbcee8135d1350d8523d60a41d5523cf8456f226", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/loaders/AudioLoader.d.ts": { + "version": "8d2a53c59c82a8fac953afd36ca75783f60dcc5dec4740f1a00e8986f1119634", + "signature": "8d2a53c59c82a8fac953afd36ca75783f60dcc5dec4740f1a00e8986f1119634", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/ShadowMaterial.d.ts": { + "version": "d734cf304aba962e33f871ba9fdce61cbdb56a9f7874eefe8759b487853b1ff3", + "signature": "d734cf304aba962e33f871ba9fdce61cbdb56a9f7874eefe8759b487853b1ff3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/SpriteMaterial.d.ts": { + "version": "85f75c094579da83b34686c091e2983f6b5b795bb9859a3916e27a1407f3ba23", + "signature": "85f75c094579da83b34686c091e2983f6b5b795bb9859a3916e27a1407f3ba23", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts": { + "version": "8e6855b08084b2eda1ff8c38bbd309594442b191420c7a05221324bd3b3027c1", + "signature": "8e6855b08084b2eda1ff8c38bbd309594442b191420c7a05221324bd3b3027c1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/RawShaderMaterial.d.ts": { + "version": "1b905f84eb4131fdbbaa1df421065c1eabca4eb7c0836a52e3975b9f1a57ca3c", + "signature": "1b905f84eb4131fdbbaa1df421065c1eabca4eb7c0836a52e3975b9f1a57ca3c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/PointsMaterial.d.ts": { + "version": "7182b52bd8efc672067ad706492b23cd338556bdbbdeaf4f69b825e0efbd4f8d", + "signature": "7182b52bd8efc672067ad706492b23cd338556bdbbdeaf4f69b825e0efbd4f8d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts": { + "version": "20cb99fc5b4d15cd9b966d49a36b6a6a2acd99db413fd359d712fe81d4e8c666", + "signature": "20cb99fc5b4d15cd9b966d49a36b6a6a2acd99db413fd359d712fe81d4e8c666", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshPhysicalMaterial.d.ts": { + "version": "8dab2c485ef578699b81bc2cdeed34b97a9014669dc20b8f74b2ccdbb91fca01", + "signature": "8dab2c485ef578699b81bc2cdeed34b97a9014669dc20b8f74b2ccdbb91fca01", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshPhongMaterial.d.ts": { + "version": "f895190bfdfff38996cede1fdc0a6e91141f5c5e0ceb70bf6acd9e901bbd38d8", + "signature": "f895190bfdfff38996cede1fdc0a6e91141f5c5e0ceb70bf6acd9e901bbd38d8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshToonMaterial.d.ts": { + "version": "62b030f34b2854e29e2958f7db1cd58dfe4c50b5fb1fca4d731fac05fe7da81b", + "signature": "62b030f34b2854e29e2958f7db1cd58dfe4c50b5fb1fca4d731fac05fe7da81b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshNormalMaterial.d.ts": { + "version": "49fc3b4a60cbf88b5b6c0feb1d3c432da102756adbdaa81ee54330b98545232f", + "signature": "49fc3b4a60cbf88b5b6c0feb1d3c432da102756adbdaa81ee54330b98545232f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshLambertMaterial.d.ts": { + "version": "31c0b1ab3b6c6a82e4804e249f74db6c4bc4d9abdb0501ce4c012eb4a29d58cb", + "signature": "31c0b1ab3b6c6a82e4804e249f74db6c4bc4d9abdb0501ce4c012eb4a29d58cb", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshDepthMaterial.d.ts": { + "version": "3cc804687fa3d553f844f6dbe8f1a10edd3830273f13b8eef885408dfbd02709", + "signature": "3cc804687fa3d553f844f6dbe8f1a10edd3830273f13b8eef885408dfbd02709", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshDistanceMaterial.d.ts": { + "version": "a6832dd3109935e8af0440901add1fe7e276899eb00a2ead72cb258a0cb1ca2a", + "signature": "a6832dd3109935e8af0440901add1fe7e276899eb00a2ead72cb258a0cb1ca2a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/MeshMatcapMaterial.d.ts": { + "version": "2984fa039a55c3a4db211960a500037635372274ef07d4dba186b1058f2c4c96", + "signature": "2984fa039a55c3a4db211960a500037635372274ef07d4dba186b1058f2c4c96", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts": { + "version": "487182ebba74b1d438a233885bb71029fc31834379816aaab54536fbc2ce4ba9", + "signature": "487182ebba74b1d438a233885bb71029fc31834379816aaab54536fbc2ce4ba9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/LineDashedMaterial.d.ts": { + "version": "6001413bc3314b05071ea04e9fb64ce675ac1ebe55b3d1188f8969addb15aaf0", + "signature": "6001413bc3314b05071ea04e9fb64ce675ac1ebe55b3d1188f8969addb15aaf0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/materials/Materials.d.ts": { + "version": "355d745d283e4f89bd785542bdba50ae1ab31ca5fa9618f2e221fbe12b9933cc", + "signature": "355d745d283e4f89bd785542bdba50ae1ab31ca5fa9618f2e221fbe12b9933cc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": { + "version": "384fddf003645c4e2212b1a9cf7709ac125dc572e0fec9c9378a2bf9ba6369d3", + "signature": "384fddf003645c4e2212b1a9cf7709ac125dc572e0fec9c9378a2bf9ba6369d3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/MathUtils.d.ts": { + "version": "3f3508121b4d7af99807c0f7716b1eea7d2643c81e69874bf962585c7a73abad", + "signature": "3f3508121b4d7af99807c0f7716b1eea7d2643c81e69874bf962585c7a73abad", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/Sprite.d.ts": { + "version": "bbcd46158e4cc0eccc0043c93b22cdc522148ab501cb09c90e96820f8d87d9ee", + "signature": "bbcd46158e4cc0eccc0043c93b22cdc522148ab501cb09c90e96820f8d87d9ee", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Frustum.d.ts": { + "version": "ae3c0d4364589fb2e85909e65e8f2cb2c4f37d1560c38ab6743785efbf3bd2bc", + "signature": "ae3c0d4364589fb2e85909e65e8f2cb2c4f37d1560c38ab6743785efbf3bd2bc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/math/Box2.d.ts": { + "version": "341bdc4a8ac3b71d48db0efd4069caef374fb2629cd912a9e5d172e558359bf4", + "signature": "341bdc4a8ac3b71d48db0efd4069caef374fb2629cd912a9e5d172e558359bf4", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/LOD.d.ts": { + "version": "ef64d9a231218149fd0ca3a1ef5c27332ec1048288f7703e12d1ae69efb2d941", + "signature": "ef64d9a231218149fd0ca3a1ef5c27332ec1048288f7703e12d1ae69efb2d941", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/InstancedMesh.d.ts": { + "version": "b3548a1a68e235b7a59439d81b1e6698ee319399f8aaa658fda75a637017dac6", + "signature": "b3548a1a68e235b7a59439d81b1e6698ee319399f8aaa658fda75a637017dac6", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/Skeleton.d.ts": { + "version": "ed19c128f66ad5c7ab02e5ca8cdc96329a13dc0982fab3eec04147e235d13199", + "signature": "ed19c128f66ad5c7ab02e5ca8cdc96329a13dc0982fab3eec04147e235d13199", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/SkinnedMesh.d.ts": { + "version": "e589f1c1f69947b4b0ffe590dc2a0eb817d354a42a131f1df97fb52d1017dff1", + "signature": "e589f1c1f69947b4b0ffe590dc2a0eb817d354a42a131f1df97fb52d1017dff1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/LineLoop.d.ts": { + "version": "6011e8396759ef161be4bcb5fefe7e70bf306a39532f8d13deef5d164ed04dcd", + "signature": "6011e8396759ef161be4bcb5fefe7e70bf306a39532f8d13deef5d164ed04dcd", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/objects/Points.d.ts": { + "version": "76de61b6b947c9b1636f755a8b6da3e899215e4cf53b47b40fc123187f679558", + "signature": "76de61b6b947c9b1636f755a8b6da3e899215e4cf53b47b40fc123187f679558", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": { + "version": "a1325c800e29589d0931806b33b36eb23d44b735138734d0e7280d524e814a10", + "signature": "a1325c800e29589d0931806b33b36eb23d44b735138734d0e7280d524e814a10", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/WebGL1Renderer.d.ts": { + "version": "6f887e3afb0de4b6a4e79fb8512910736c1cb43909dabded07521a98fb3ab493", + "signature": "6f887e3afb0de4b6a4e79fb8512910736c1cb43909dabded07521a98fb3ab493", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/shaders/UniformsUtils.d.ts": { + "version": "1e23c65f00a3bbb5a94f4a344e7d16762fcc7a9abaf7be7600a8cd38f22531d8", + "signature": "1e23c65f00a3bbb5a94f4a344e7d16762fcc7a9abaf7be7600a8cd38f22531d8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/shaders/ShaderChunk.d.ts": { + "version": "b428ef19e21c3a1895fef811262cc7ae0bde0274e77fe0426663c27ce86a1946", + "signature": "b428ef19e21c3a1895fef811262cc7ae0bde0274e77fe0426663c27ce86a1946", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": { + "version": "6996398eb3a1f3ee5bc2540f38f716ab941c9ad70fbdfc5a7d7eea87ba6c3cab", + "signature": "6996398eb3a1f3ee5bc2540f38f716ab941c9ad70fbdfc5a7d7eea87ba6c3cab", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts": { + "version": "85a60dc56301151a1290f2935618f1c10642db39c9385d85bb56580f0481bdb3", + "signature": "85a60dc56301151a1290f2935618f1c10642db39c9385d85bb56580f0481bdb3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts": { + "version": "1d719263f4cb05d55e15d893f844445d9ebed33013a8b7dffd17fb5f228c89d0", + "signature": "1d719263f4cb05d55e15d893f844445d9ebed33013a8b7dffd17fb5f228c89d0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLGeometries.d.ts": { + "version": "c0052b367c598946d934581c9156f5bf06846a543bd8f1a419fbbedf0c49db5d", + "signature": "c0052b367c598946d934581c9156f5bf06846a543bd8f1a419fbbedf0c49db5d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts": { + "version": "2360668f67c85a1ea07864282b797189555b9b9928be94685773ed8381302588", + "signature": "2360668f67c85a1ea07864282b797189555b9b9928be94685773ed8381302588", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLLights.d.ts": { + "version": "59fc39062aec81b871c29e9f246333d14d0c60ce3d5e3a01b3eb6336f69b6473", + "signature": "59fc39062aec81b871c29e9f246333d14d0c60ce3d5e3a01b3eb6336f69b6473", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLCubeMaps.d.ts": { + "version": "ccc6589b9029f32ed53b59cbe7bc71ce795ce0006a93b7cb2427f573856c74e9", + "signature": "ccc6589b9029f32ed53b59cbe7bc71ce795ce0006a93b7cb2427f573856c74e9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLBindingStates.d.ts": { + "version": "821d22def6acf0fb49cdb3e0912881f47c5039f8dd730db1113bef321b9bb4ff", + "signature": "821d22def6acf0fb49cdb3e0912881f47c5039f8dd730db1113bef321b9bb4ff", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webgl/WebGLPrograms.d.ts": { + "version": "6c5c5605ae801d8af7781b57643e379106763ba7c30d7535e42f65e5ed957b58", + "signature": "6c5c5605ae801d8af7781b57643e379106763ba7c30d7535e42f65e5ed957b58", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/renderers/webxr/WebXRController.d.ts": { + "version": "5e05074a4290312846bd48ca43d31d8fc22d792492481bef76eb3dd17974a7e0", + "signature": "5e05074a4290312846bd48ca43d31d8fc22d792492481bef76eb3dd17974a7e0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/scenes/FogExp2.d.ts": { + "version": "408d7457ea4c677bac1a16b0266eba485959ebd5bb49cbc2653d3dbeb0ac38a4", + "signature": "408d7457ea4c677bac1a16b0266eba485959ebd5bb49cbc2653d3dbeb0ac38a4", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/VideoTexture.d.ts": { + "version": "cf11f4e19b500ba6f488bdb61a1810c23e15d7bdb994e821d405470158ada1cf", + "signature": "cf11f4e19b500ba6f488bdb61a1810c23e15d7bdb994e821d405470158ada1cf", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/textures/CanvasTexture.d.ts": { + "version": "9736f4d069b690ae03aab866b7d899230edb963c3291db0290373bf6891ed2f8", + "signature": "9736f4d069b690ae03aab866b7d899230edb963c3291db0290373bf6891ed2f8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/src/Three.d.ts": { + "version": "f9c0e30c8092b79f6d65b8e746757e546b85d35361808d6a5a5a25bf61dd40dc", + "signature": "f9c0e30c8092b79f6d65b8e746757e546b85d35361808d6a5a5a25bf61dd40dc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/three/index.d.ts": { + "version": "b054ff8a6b935a750fc9d31f00ad986822b2545b33bd716a91336dbdc66d1ba4", + "signature": "b054ff8a6b935a750fc9d31f00ad986822b2545b33bd716a91336dbdc66d1ba4", + "affectsGlobalScope": false + }, + "./src/OrbitControls.ts": { + "version": "ba7a60bcb8343d452c0502f297699375c87c7cdf347ab16640ae825369422ce7", + "signature": "7f79d2e65a6c65d37499954a054fcbb073438430b81be0472d6ed280ce4fe095", + "affectsGlobalScope": false + }, + "./src/constants.ts": { + "version": "85de1f4dd061627f46104f72f569d1eb903dee8f783c9289b48ef1a9c94d412e", + "signature": "25d6ccf18e59c02f65eac6ccbc9e6498df501355a65115b0774494f6500a4e58", + "affectsGlobalScope": false + }, + "./src/defs.ts": { + "version": "99ed8a889c3ed7d25ba8c6eed445e52b5432e90a2dc27fc8ee6d0fb6e8bbb8a3", + "signature": "70f7a3602e6c1253e4e7cfaf7caed9c14bbf0f50f80ce8f022671d3f62fbfa71", + "affectsGlobalScope": false + }, + "./src/entity-manager.ts": { + "version": "c4a6b397135b13b084b68dc4ad59cee1aca23c00881166821853dc992b8b0f0c", + "signature": "3ac8d504e820eaf7bd25ad6659d53ceadc4e36151fa23535649e5b85ced046a6", + "affectsGlobalScope": false + }, + "./src/globaltypes.ts": { + "version": "0605d0d50fe368f81f5836b8156dfc5567400f51b988d106dde73862fda2a1e9", + "signature": "cb8a0f5ce5b655d1ed93f4b3d767937c83c4421aebd6579603ce6aa53581ac3d", + "affectsGlobalScope": false + }, + "./src/math.ts": { + "version": "3d8383c2056b4abbde276f415ce7da6be79a01c52bb3373642ff88521d23a0c4", + "signature": "8f74d26f95697fccaf35f2e547367380ef124ac13a4c22306ef235deafc89cd6", + "affectsGlobalScope": false + }, + "./src/spatial-hash-grid.ts": { + "version": "b4d5fc9115998909195e005c28bdf3600cdfe77e9e2ccbad4fd7f3a66457a974", + "signature": "94acf0380d5ed01b01616d6fbd5bfbe83c6e90acb0520419cd90ddf3c0c9b9ba", + "affectsGlobalScope": false + }, + "./src/simplex-noise.ts": { + "version": "9d46fb7195fd47f74ceb2de8620b0e68edc598101c547265ce9270c380d826f2", + "signature": "892889ee1b6d0940949d70f933bc9b34efe3fc45fdc224fe8ce1a14aaa5de47d", + "affectsGlobalScope": false + }, + "./src/noise.ts": { + "version": "40d47270237d907988f890f02e5e305a275cf5e61e78c320a1b4cb9738950928", + "signature": "0948dd88dcb21fc3c8e8c90b80627404cf4ea1130a3105752b1816da441fbe23", + "affectsGlobalScope": false + }, + "./src/terrain-constants.ts": { + "version": "7a715dfc01f25d93bc1b37d284455f5795d8ef68980377c04d86002fa5056e3d", + "signature": "2e54d9fea598f4ab39a11fc85530f3912f0e6ee890ebc0ee779868ae48f14347", + "affectsGlobalScope": false + }, + "./src/terrain-height.ts": { + "version": "e4316e9042a68f3e68e561b963b4e268aba7c3149e3778802122933916ebd9fa", + "signature": "3c84c1b7f4069c0430c85a697bc4e32ab64f78ff51706960f1d11dad6055eb0d", + "affectsGlobalScope": false + }, + "./src/spline.ts": { + "version": "32b2e5e577d4da4ac28058a9b6684e473dce3a9363648b54ca3d26586cf80e22", + "signature": "8ab6fe0abede8eedb143be2ad5fd3366c331c97367d6cc9e4cae36157f6e1191", + "affectsGlobalScope": false + }, + "./src/index.ts": { + "version": "f52adbeb2bd3684ba4b28e8d9b955a357dee0ac908a38013699005bb5cc7f52c", + "signature": "7d40ea2c9eb614e316477ae0ff020c4ee7974002696bb3a744c30833955f4a40", + "affectsGlobalScope": false + }, + "../../node_modules/@types/component-emitter/index.d.ts": { + "version": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "signature": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", + "affectsGlobalScope": false + }, + "../../node_modules/@types/cookie/index.d.ts": { + "version": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "signature": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", + "affectsGlobalScope": false + }, + "../../node_modules/@types/cors/index.d.ts": { + "version": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "signature": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", + "affectsGlobalScope": false + }, + "../../node_modules/@types/eslint/helpers.d.ts": { + "version": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46", + "signature": "f345b0888d003fd69cb32bad3a0aa04c615ccafc572019e4bd86a52bd5e49e46", + "affectsGlobalScope": true + }, + "../../node_modules/@types/eslint/lib/rules/index.d.ts": { + "version": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0", + "signature": "0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/json-schema/index.d.ts": { + "version": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "signature": "3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27", + "affectsGlobalScope": false + }, + "../../node_modules/@types/estree/index.d.ts": { + "version": "f1e8ecd1d960d12e57316fd2889b0a57635f38f8c4c976d8deafa29650bbf320", + "signature": "f1e8ecd1d960d12e57316fd2889b0a57635f38f8c4c976d8deafa29650bbf320", + "affectsGlobalScope": false + }, + "../../node_modules/@types/eslint/index.d.ts": { + "version": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c", + "signature": "649fbcb16a4a7e1d9f32a49db7381150ef5b2e472a0c52a1543d4c35a2aefa3c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/eslint-scope/index.d.ts": { + "version": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed", + "signature": "274bda283ef15f4205603ca9967313fc013aa77ae89f2cbeab5fbd51439e96ed", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/globals.d.ts": { + "version": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "signature": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/async_hooks.d.ts": { + "version": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "signature": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/buffer.d.ts": { + "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/child_process.d.ts": { + "version": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "signature": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/cluster.d.ts": { + "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/console.d.ts": { + "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/constants.d.ts": { + "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/crypto.d.ts": { + "version": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "signature": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/dgram.d.ts": { + "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/dns.d.ts": { + "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/domain.d.ts": { + "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/events.d.ts": { + "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/fs.d.ts": { + "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/fs/promises.d.ts": { + "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/http.d.ts": { + "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/http2.d.ts": { + "version": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "signature": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/https.d.ts": { + "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/inspector.d.ts": { + "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/module.d.ts": { + "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/net.d.ts": { + "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/os.d.ts": { + "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/path.d.ts": { + "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/perf_hooks.d.ts": { + "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/process.d.ts": { + "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/punycode.d.ts": { + "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/querystring.d.ts": { + "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/readline.d.ts": { + "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/repl.d.ts": { + "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/stream.d.ts": { + "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/string_decoder.d.ts": { + "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/timers.d.ts": { + "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/tls.d.ts": { + "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/trace_events.d.ts": { + "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/tty.d.ts": { + "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/url.d.ts": { + "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/util.d.ts": { + "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/v8.d.ts": { + "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/vm.d.ts": { + "version": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "signature": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/worker_threads.d.ts": { + "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/zlib.d.ts": { + "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/wasi.d.ts": { + "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.6/base.d.ts": { + "version": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "signature": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/assert.d.ts": { + "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/base.d.ts": { + "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/index.d.ts": { + "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/minimatch/index.d.ts": { + "version": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "signature": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", + "affectsGlobalScope": false + }, + "../../node_modules/@types/glob/index.d.ts": { + "version": "393137c76bd922ba70a2f8bf1ade4f59a16171a02fb25918c168d48875b0cfb0", + "signature": "393137c76bd922ba70a2f8bf1ade4f59a16171a02fb25918c168d48875b0cfb0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/html-minifier-terser/index.d.ts": { + "version": "6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d", + "signature": "6767cce098e1e6369c26258b7a1f9e569c5467d501a47a090136d5ea6e80ae6d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/json5/index.d.ts": { + "version": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538", + "signature": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538", + "affectsGlobalScope": false + } + }, + "options": { + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "composite": true, + "outDir": "./dist", + "rootDir": "./src", + "skipLibCheck": true, + "watch": true, + "configFilePath": "./tsconfig.json" + }, + "referencedMap": { + "../../node_modules/@types/cors/index.d.ts": [ + "../../node_modules/@types/node/http.d.ts" + ], + "../../node_modules/@types/eslint-scope/index.d.ts": [ + "../../node_modules/@types/eslint/index.d.ts", + "../../node_modules/@types/estree/index.d.ts" + ], + "../../node_modules/@types/eslint/index.d.ts": [ + "../../node_modules/@types/eslint/helpers.d.ts", + "../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../node_modules/@types/estree/index.d.ts", + "../../node_modules/@types/json-schema/index.d.ts" + ], + "../../node_modules/@types/eslint/lib/rules/index.d.ts": [ + "../../node_modules/@types/eslint/index.d.ts" + ], + "../../node_modules/@types/glob/index.d.ts": [ + "../../node_modules/@types/minimatch/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/index.d.ts" + ], + "../../node_modules/@types/node/assert.d.ts": [ + "../../node_modules/@types/node/assert.d.ts" + ], + "../../node_modules/@types/node/async_hooks.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts" + ], + "../../node_modules/@types/node/base.d.ts": [ + "../../node_modules/@types/node/assert.d.ts", + "../../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../../node_modules/@types/node/buffer.d.ts": [ + "../../node_modules/@types/node/buffer.d.ts" + ], + "../../node_modules/@types/node/child_process.d.ts": [ + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/cluster.d.ts": [ + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts" + ], + "../../node_modules/@types/node/console.d.ts": [ + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/constants.d.ts": [ + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/os.d.ts" + ], + "../../node_modules/@types/node/crypto.d.ts": [ + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/dgram.d.ts": [ + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts" + ], + "../../node_modules/@types/node/dns.d.ts": [ + "../../node_modules/@types/node/dns.d.ts" + ], + "../../node_modules/@types/node/domain.d.ts": [ + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts" + ], + "../../node_modules/@types/node/events.d.ts": [ + "../../node_modules/@types/node/events.d.ts" + ], + "../../node_modules/@types/node/fs.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/fs/promises.d.ts": [ + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts" + ], + "../../node_modules/@types/node/http.d.ts": [ + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/http2.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/https.d.ts": [ + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/index.d.ts": [ + "../../node_modules/@types/node/base.d.ts" + ], + "../../node_modules/@types/node/inspector.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/inspector.d.ts" + ], + "../../node_modules/@types/node/module.d.ts": [ + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/net.d.ts": [ + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/os.d.ts": [ + "../../node_modules/@types/node/os.d.ts" + ], + "../../node_modules/@types/node/path.d.ts": [ + "../../node_modules/@types/node/path.d.ts" + ], + "../../node_modules/@types/node/perf_hooks.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts" + ], + "../../node_modules/@types/node/process.d.ts": [ + "../../node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/@types/node/punycode.d.ts": [ + "../../node_modules/@types/node/punycode.d.ts" + ], + "../../node_modules/@types/node/querystring.d.ts": [ + "../../node_modules/@types/node/querystring.d.ts" + ], + "../../node_modules/@types/node/readline.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/readline.d.ts" + ], + "../../node_modules/@types/node/repl.d.ts": [ + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/stream.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/string_decoder.d.ts": [ + "../../node_modules/@types/node/string_decoder.d.ts" + ], + "../../node_modules/@types/node/timers.d.ts": [ + "../../node_modules/@types/node/timers.d.ts" + ], + "../../node_modules/@types/node/tls.d.ts": [ + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/tls.d.ts" + ], + "../../node_modules/@types/node/trace_events.d.ts": [ + "../../node_modules/@types/node/trace_events.d.ts" + ], + "../../node_modules/@types/node/ts3.6/base.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/globals.global.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/wasi.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/@types/node/tty.d.ts": [ + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/@types/node/url.d.ts": [ + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/util.d.ts": [ + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/v8.d.ts": [ + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/v8.d.ts" + ], + "../../node_modules/@types/node/vm.d.ts": [ + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/wasi.d.ts": [ + "../../node_modules/@types/node/wasi.d.ts" + ], + "../../node_modules/@types/node/worker_threads.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts" + ], + "../../node_modules/@types/node/zlib.d.ts": [ + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/@types/three/index.d.ts": [ + "../../node_modules/@types/three/src/Three.d.ts" + ], + "../../node_modules/@types/three/src/Three.d.ts": [ + "../../node_modules/@types/three/src/Three.Legacy.d.ts", + "../../node_modules/@types/three/src/animation/AnimationAction.d.ts", + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/animation/AnimationMixer.d.ts", + "../../node_modules/@types/three/src/animation/AnimationObjectGroup.d.ts", + "../../node_modules/@types/three/src/animation/AnimationUtils.d.ts", + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/PropertyBinding.d.ts", + "../../node_modules/@types/three/src/animation/PropertyMixer.d.ts", + "../../node_modules/@types/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/ColorKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/NumberKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/StringKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/VectorKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/audio/Audio.d.ts", + "../../node_modules/@types/three/src/audio/AudioAnalyser.d.ts", + "../../node_modules/@types/three/src/audio/AudioContext.d.ts", + "../../node_modules/@types/three/src/audio/AudioListener.d.ts", + "../../node_modules/@types/three/src/audio/PositionalAudio.d.ts", + "../../node_modules/@types/three/src/cameras/ArrayCamera.d.ts", + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/cameras/CubeCamera.d.ts", + "../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts", + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts", + "../../node_modules/@types/three/src/cameras/StereoCamera.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Clock.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/GLBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InstancedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/InstancedInterleavedBuffer.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/Layers.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/core/Uniform.d.ts", + "../../node_modules/@types/three/src/extras/DataUtils.d.ts", + "../../node_modules/@types/three/src/extras/ImageUtils.d.ts", + "../../node_modules/@types/three/src/extras/PMREMGenerator.d.ts", + "../../node_modules/@types/three/src/extras/ShapeUtils.d.ts", + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/extras/core/CurvePath.d.ts", + "../../node_modules/@types/three/src/extras/core/Font.d.ts", + "../../node_modules/@types/three/src/extras/core/Path.d.ts", + "../../node_modules/@types/three/src/extras/core/Shape.d.ts", + "../../node_modules/@types/three/src/extras/core/ShapePath.d.ts", + "../../node_modules/@types/three/src/extras/curves/Curves.d.ts", + "../../node_modules/@types/three/src/extras/objects/ImmediateRenderObject.d.ts", + "../../node_modules/@types/three/src/geometries/Geometries.d.ts", + "../../node_modules/@types/three/src/helpers/ArrowHelper.d.ts", + "../../node_modules/@types/three/src/helpers/AxesHelper.d.ts", + "../../node_modules/@types/three/src/helpers/Box3Helper.d.ts", + "../../node_modules/@types/three/src/helpers/BoxHelper.d.ts", + "../../node_modules/@types/three/src/helpers/CameraHelper.d.ts", + "../../node_modules/@types/three/src/helpers/DirectionalLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/GridHelper.d.ts", + "../../node_modules/@types/three/src/helpers/HemisphereLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PlaneHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PointLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PolarGridHelper.d.ts", + "../../node_modules/@types/three/src/helpers/SkeletonHelper.d.ts", + "../../node_modules/@types/three/src/helpers/SpotLightHelper.d.ts", + "../../node_modules/@types/three/src/lights/AmbientLight.d.ts", + "../../node_modules/@types/three/src/lights/AmbientLightProbe.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLight.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts", + "../../node_modules/@types/three/src/lights/HemisphereLight.d.ts", + "../../node_modules/@types/three/src/lights/HemisphereLightProbe.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/lights/LightProbe.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts", + "../../node_modules/@types/three/src/lights/PointLight.d.ts", + "../../node_modules/@types/three/src/lights/PointLightShadow.d.ts", + "../../node_modules/@types/three/src/lights/RectAreaLight.d.ts", + "../../node_modules/@types/three/src/lights/SpotLight.d.ts", + "../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts", + "../../node_modules/@types/three/src/loaders/AnimationLoader.d.ts", + "../../node_modules/@types/three/src/loaders/AudioLoader.d.ts", + "../../node_modules/@types/three/src/loaders/BufferGeometryLoader.d.ts", + "../../node_modules/@types/three/src/loaders/Cache.d.ts", + "../../node_modules/@types/three/src/loaders/CompressedTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/CubeTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/DataTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/FileLoader.d.ts", + "../../node_modules/@types/three/src/loaders/FontLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ImageBitmapLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ImageLoader.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoaderUtils.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/loaders/MaterialLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ObjectLoader.d.ts", + "../../node_modules/@types/three/src/loaders/TextureLoader.d.ts", + "../../node_modules/@types/three/src/materials/Materials.d.ts", + "../../node_modules/@types/three/src/math/Box2.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Cylindrical.d.ts", + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Frustum.d.ts", + "../../node_modules/@types/three/src/math/Interpolant.d.ts", + "../../node_modules/@types/three/src/math/Line3.d.ts", + "../../node_modules/@types/three/src/math/MathUtils.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Ray.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Spherical.d.ts", + "../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts", + "../../node_modules/@types/three/src/math/Triangle.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/objects/InstancedMesh.d.ts", + "../../node_modules/@types/three/src/objects/LOD.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts", + "../../node_modules/@types/three/src/objects/LineLoop.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts", + "../../node_modules/@types/three/src/objects/Points.d.ts", + "../../node_modules/@types/three/src/objects/Skeleton.d.ts", + "../../node_modules/@types/three/src/objects/SkinnedMesh.d.ts", + "../../node_modules/@types/three/src/objects/Sprite.d.ts", + "../../node_modules/@types/three/src/renderers/WebGL1Renderer.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/ShaderChunk.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/UniformsUtils.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLGeometries.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLLights.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLObjects.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLPrograms.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShader.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXRController.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts", + "../../node_modules/@types/three/src/scenes/Fog.d.ts", + "../../node_modules/@types/three/src/scenes/FogExp2.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts", + "../../node_modules/@types/three/src/textures/CanvasTexture.d.ts", + "../../node_modules/@types/three/src/textures/CompressedTexture.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture3D.d.ts", + "../../node_modules/@types/three/src/textures/DepthTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts", + "../../node_modules/@types/three/src/textures/VideoTexture.d.ts" + ], + "../../node_modules/@types/three/src/animation/AnimationAction.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/animation/AnimationMixer.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts" + ], + "../../node_modules/@types/three/src/animation/AnimationMixer.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationAction.d.ts", + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/animation/AnimationObjectGroup.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/animation/AnimationUtils.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts" + ], + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/ColorKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/NumberKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/StringKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/VectorKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/audio/Audio.d.ts": [ + "../../node_modules/@types/three/src/audio/AudioContext.d.ts", + "../../node_modules/@types/three/src/audio/AudioListener.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/audio/AudioAnalyser.d.ts": [ + "../../node_modules/@types/three/src/audio/Audio.d.ts" + ], + "../../node_modules/@types/three/src/audio/AudioListener.d.ts": [ + "../../node_modules/@types/three/src/audio/AudioContext.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/audio/PositionalAudio.d.ts": [ + "../../node_modules/@types/three/src/audio/Audio.d.ts", + "../../node_modules/@types/three/src/audio/AudioListener.d.ts" + ], + "../../node_modules/@types/three/src/cameras/ArrayCamera.d.ts": [ + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts" + ], + "../../node_modules/@types/three/src/cameras/Camera.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/cameras/CubeCamera.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts" + ], + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts" + ], + "../../node_modules/@types/three/src/cameras/StereoCamera.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts" + ], + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts" + ], + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/core/InstancedBufferAttribute.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/core/InstancedInterleavedBuffer.d.ts": [ + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts" + ], + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts" + ], + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts" + ], + "../../node_modules/@types/three/src/core/Object3D.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/Layers.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/core/Raycaster.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/Layers.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Ray.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/ImageUtils.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/extras/PMREMGenerator.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/Curve.d.ts": [ + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/CurvePath.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/Font.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Shape.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/Path.d.ts": [ + "../../node_modules/@types/three/src/extras/core/CurvePath.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/Shape.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Path.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/ShapePath.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Shape.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/ArcCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/CatmullRomCurve3.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve3.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/Curves.d.ts": [ + "../../node_modules/@types/three/src/extras/curves/ArcCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/CatmullRomCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/LineCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/LineCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/SplineCurve.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/LineCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/LineCurve3.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve3.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/SplineCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/objects/ImmediateRenderObject.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts" + ], + "../../node_modules/@types/three/src/geometries/BoxGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/CircleGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/ConeGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/DodecahedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/EdgesGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/extras/core/Shape.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/geometries/Geometries.d.ts": [ + "../../node_modules/@types/three/src/geometries/BoxGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/CircleGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ConeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/DodecahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/EdgesGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/IcosahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/LatheGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/OctahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ParametricGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/PlaneGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/RingGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ShapeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/SphereGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TetrahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TextGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TorusGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TorusKnotGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TubeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/WireframeGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/IcosahedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/LatheGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/geometries/OctahedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/ParametricGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/geometries/PlaneGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/RingGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/ShapeGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/extras/core/Shape.d.ts" + ], + "../../node_modules/@types/three/src/geometries/SphereGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TetrahedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TextGeometry.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Font.d.ts", + "../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TorusGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TorusKnotGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TubeGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/geometries/WireframeGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/helpers/ArrowHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts" + ], + "../../node_modules/@types/three/src/helpers/AxesHelper.d.ts": [ + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/Box3Helper.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/BoxHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/CameraHelper.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/DirectionalLightHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLight.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts" + ], + "../../node_modules/@types/three/src/helpers/GridHelper.d.ts": [ + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/HemisphereLightHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/HemisphereLight.d.ts", + "../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts" + ], + "../../node_modules/@types/three/src/helpers/PlaneHelper.d.ts": [ + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/PointLightHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/PointLight.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts" + ], + "../../node_modules/@types/three/src/helpers/PolarGridHelper.d.ts": [ + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/SkeletonHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/SpotLightHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/lights/AmbientLight.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/AmbientLightProbe.d.ts": [ + "../../node_modules/@types/three/src/lights/LightProbe.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/DirectionalLight.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts": [ + "../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts" + ], + "../../node_modules/@types/three/src/lights/HemisphereLight.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/lights/HemisphereLightProbe.d.ts": [ + "../../node_modules/@types/three/src/lights/LightProbe.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/Light.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/LightProbe.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts" + ], + "../../node_modules/@types/three/src/lights/LightShadow.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts" + ], + "../../node_modules/@types/three/src/lights/PointLight.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/lights/PointLightShadow.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/PointLightShadow.d.ts": [ + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts" + ], + "../../node_modules/@types/three/src/lights/RectAreaLight.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/SpotLight.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts": [ + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts" + ], + "../../node_modules/@types/three/src/loaders/AnimationLoader.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/AudioLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/BufferGeometryLoader.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/CompressedTextureLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/textures/CompressedTexture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/CubeTextureLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/DataTextureLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/FileLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/FontLoader.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Font.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/ImageBitmapLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/ImageLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/Loader.d.ts": [ + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts" + ], + "../../node_modules/@types/three/src/loaders/MaterialLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/ObjectLoader.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/TextureLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/materials/LineDashedMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts" + ], + "../../node_modules/@types/three/src/materials/Material.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts" + ], + "../../node_modules/@types/three/src/materials/Materials.d.ts": [ + "../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts", + "../../node_modules/@types/three/src/materials/LineDashedMaterial.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshDepthMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshDistanceMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshLambertMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshMatcapMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshNormalMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshPhongMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshPhysicalMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshToonMaterial.d.ts", + "../../node_modules/@types/three/src/materials/PointsMaterial.d.ts", + "../../node_modules/@types/three/src/materials/RawShaderMaterial.d.ts", + "../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts", + "../../node_modules/@types/three/src/materials/ShadowMaterial.d.ts", + "../../node_modules/@types/three/src/materials/SpriteMaterial.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshDepthMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshDistanceMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshLambertMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshMatcapMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshNormalMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshPhongMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshPhysicalMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshToonMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/PointsMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/RawShaderMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts" + ], + "../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts" + ], + "../../node_modules/@types/three/src/materials/ShadowMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/materials/SpriteMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/math/Box2.d.ts": [ + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/math/Box3.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Triangle.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Color.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts" + ], + "../../node_modules/@types/three/src/math/Cylindrical.d.ts": [ + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Euler.d.ts": [ + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Frustum.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Sprite.d.ts" + ], + "../../node_modules/@types/three/src/math/Line3.d.ts": [ + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/MathUtils.d.ts": [ + "../../node_modules/@types/three/src/math/Quaternion.d.ts" + ], + "../../node_modules/@types/three/src/math/Matrix3.d.ts": [ + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Matrix4.d.ts": [ + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Plane.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Line3.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Quaternion.d.ts": [ + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Ray.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Sphere.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Spherical.d.ts": [ + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts": [ + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Triangle.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Vector2.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts" + ], + "../../node_modules/@types/three/src/math/Vector3.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/math/Cylindrical.d.ts", + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Spherical.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/math/Vector4.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts": [ + "../../node_modules/@types/three/src/math/Interpolant.d.ts" + ], + "../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts": [ + "../../node_modules/@types/three/src/math/Interpolant.d.ts" + ], + "../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts": [ + "../../node_modules/@types/three/src/math/Interpolant.d.ts" + ], + "../../node_modules/@types/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": [ + "../../node_modules/@types/three/src/math/Interpolant.d.ts" + ], + "../../node_modules/@types/three/src/objects/Bone.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/objects/Group.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/objects/InstancedMesh.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts" + ], + "../../node_modules/@types/three/src/objects/LOD.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts" + ], + "../../node_modules/@types/three/src/objects/Line.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts" + ], + "../../node_modules/@types/three/src/objects/LineLoop.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts" + ], + "../../node_modules/@types/three/src/objects/LineSegments.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts" + ], + "../../node_modules/@types/three/src/objects/Mesh.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts" + ], + "../../node_modules/@types/three/src/objects/Points.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts" + ], + "../../node_modules/@types/three/src/objects/Skeleton.d.ts": [ + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture.d.ts" + ], + "../../node_modules/@types/three/src/objects/SkinnedMesh.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts", + "../../node_modules/@types/three/src/objects/Skeleton.d.ts" + ], + "../../node_modules/@types/three/src/objects/Sprite.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Materials.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGL1Renderer.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/textures/DepthTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture3D.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts": [ + "../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLBindingStates.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLCubeMaps.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLGeometries.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLLights.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShader.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLPrograms.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLBindingStates.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCubeMaps.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLObjects.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLUtils.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webxr/WebXRController.d.ts": [ + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts" + ], + "../../node_modules/@types/three/src/scenes/Fog.d.ts": [ + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/scenes/FogExp2.d.ts": [ + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/scenes/Fog.d.ts" + ], + "../../node_modules/@types/three/src/scenes/Scene.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/scenes/Fog.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/CanvasTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/CompressedTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/DataTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/DataTexture3D.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/DepthTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/Texture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/textures/VideoTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "./src/OrbitControls.ts": [ + "../../node_modules/@types/three/index.d.ts" + ], + "./src/defs.ts": [ + "./src/constants.ts" + ], + "./src/globaltypes.ts": [ + "./src/constants.ts" + ], + "./src/index.ts": [ + "./src/constants.ts", + "./src/defs.ts", + "./src/entity-manager.ts", + "./src/globaltypes.ts", + "./src/math.ts", + "./src/noise.ts", + "./src/spatial-hash-grid.ts", + "./src/spline.ts", + "./src/terrain-constants.ts", + "./src/terrain-height.ts" + ], + "./src/noise.ts": [ + "./src/simplex-noise.ts" + ], + "./src/spatial-hash-grid.ts": [ + "./src/math.ts" + ], + "./src/terrain-height.ts": [ + "./src/noise.ts", + "./src/terrain-constants.ts" + ] + }, + "exportedModulesMap": { + "../../node_modules/@types/cors/index.d.ts": [ + "../../node_modules/@types/node/http.d.ts" + ], + "../../node_modules/@types/eslint-scope/index.d.ts": [ + "../../node_modules/@types/eslint/index.d.ts", + "../../node_modules/@types/estree/index.d.ts" + ], + "../../node_modules/@types/eslint/index.d.ts": [ + "../../node_modules/@types/eslint/helpers.d.ts", + "../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../node_modules/@types/estree/index.d.ts", + "../../node_modules/@types/json-schema/index.d.ts" + ], + "../../node_modules/@types/eslint/lib/rules/index.d.ts": [ + "../../node_modules/@types/eslint/index.d.ts" + ], + "../../node_modules/@types/glob/index.d.ts": [ + "../../node_modules/@types/minimatch/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/index.d.ts" + ], + "../../node_modules/@types/node/assert.d.ts": [ + "../../node_modules/@types/node/assert.d.ts" + ], + "../../node_modules/@types/node/async_hooks.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts" + ], + "../../node_modules/@types/node/base.d.ts": [ + "../../node_modules/@types/node/assert.d.ts", + "../../node_modules/@types/node/ts3.6/base.d.ts" + ], + "../../node_modules/@types/node/buffer.d.ts": [ + "../../node_modules/@types/node/buffer.d.ts" + ], + "../../node_modules/@types/node/child_process.d.ts": [ + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/cluster.d.ts": [ + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts" + ], + "../../node_modules/@types/node/console.d.ts": [ + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/constants.d.ts": [ + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/os.d.ts" + ], + "../../node_modules/@types/node/crypto.d.ts": [ + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/dgram.d.ts": [ + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts" + ], + "../../node_modules/@types/node/dns.d.ts": [ + "../../node_modules/@types/node/dns.d.ts" + ], + "../../node_modules/@types/node/domain.d.ts": [ + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts" + ], + "../../node_modules/@types/node/events.d.ts": [ + "../../node_modules/@types/node/events.d.ts" + ], + "../../node_modules/@types/node/fs.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/fs/promises.d.ts": [ + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts" + ], + "../../node_modules/@types/node/http.d.ts": [ + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/http2.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/https.d.ts": [ + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/index.d.ts": [ + "../../node_modules/@types/node/base.d.ts" + ], + "../../node_modules/@types/node/inspector.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/inspector.d.ts" + ], + "../../node_modules/@types/node/module.d.ts": [ + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/net.d.ts": [ + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/os.d.ts": [ + "../../node_modules/@types/node/os.d.ts" + ], + "../../node_modules/@types/node/path.d.ts": [ + "../../node_modules/@types/node/path.d.ts" + ], + "../../node_modules/@types/node/perf_hooks.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts" + ], + "../../node_modules/@types/node/process.d.ts": [ + "../../node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/@types/node/punycode.d.ts": [ + "../../node_modules/@types/node/punycode.d.ts" + ], + "../../node_modules/@types/node/querystring.d.ts": [ + "../../node_modules/@types/node/querystring.d.ts" + ], + "../../node_modules/@types/node/readline.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/readline.d.ts" + ], + "../../node_modules/@types/node/repl.d.ts": [ + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/stream.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/stream.d.ts" + ], + "../../node_modules/@types/node/string_decoder.d.ts": [ + "../../node_modules/@types/node/string_decoder.d.ts" + ], + "../../node_modules/@types/node/timers.d.ts": [ + "../../node_modules/@types/node/timers.d.ts" + ], + "../../node_modules/@types/node/tls.d.ts": [ + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/tls.d.ts" + ], + "../../node_modules/@types/node/trace_events.d.ts": [ + "../../node_modules/@types/node/trace_events.d.ts" + ], + "../../node_modules/@types/node/ts3.6/base.d.ts": [ + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/globals.global.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/wasi.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/@types/node/tty.d.ts": [ + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/tty.d.ts" + ], + "../../node_modules/@types/node/url.d.ts": [ + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/url.d.ts" + ], + "../../node_modules/@types/node/util.d.ts": [ + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/v8.d.ts": [ + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/v8.d.ts" + ], + "../../node_modules/@types/node/vm.d.ts": [ + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/wasi.d.ts": [ + "../../node_modules/@types/node/wasi.d.ts" + ], + "../../node_modules/@types/node/worker_threads.d.ts": [ + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts" + ], + "../../node_modules/@types/node/zlib.d.ts": [ + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/@types/three/index.d.ts": [ + "../../node_modules/@types/three/src/Three.d.ts" + ], + "../../node_modules/@types/three/src/Three.d.ts": [ + "../../node_modules/@types/three/src/Three.Legacy.d.ts", + "../../node_modules/@types/three/src/animation/AnimationAction.d.ts", + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/animation/AnimationMixer.d.ts", + "../../node_modules/@types/three/src/animation/AnimationObjectGroup.d.ts", + "../../node_modules/@types/three/src/animation/AnimationUtils.d.ts", + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/PropertyBinding.d.ts", + "../../node_modules/@types/three/src/animation/PropertyMixer.d.ts", + "../../node_modules/@types/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/ColorKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/NumberKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/StringKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/VectorKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/audio/Audio.d.ts", + "../../node_modules/@types/three/src/audio/AudioAnalyser.d.ts", + "../../node_modules/@types/three/src/audio/AudioContext.d.ts", + "../../node_modules/@types/three/src/audio/AudioListener.d.ts", + "../../node_modules/@types/three/src/audio/PositionalAudio.d.ts", + "../../node_modules/@types/three/src/cameras/ArrayCamera.d.ts", + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/cameras/CubeCamera.d.ts", + "../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts", + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts", + "../../node_modules/@types/three/src/cameras/StereoCamera.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Clock.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/GLBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InstancedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/InstancedInterleavedBuffer.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/Layers.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/core/Uniform.d.ts", + "../../node_modules/@types/three/src/extras/DataUtils.d.ts", + "../../node_modules/@types/three/src/extras/ImageUtils.d.ts", + "../../node_modules/@types/three/src/extras/PMREMGenerator.d.ts", + "../../node_modules/@types/three/src/extras/ShapeUtils.d.ts", + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/extras/core/CurvePath.d.ts", + "../../node_modules/@types/three/src/extras/core/Font.d.ts", + "../../node_modules/@types/three/src/extras/core/Path.d.ts", + "../../node_modules/@types/three/src/extras/core/Shape.d.ts", + "../../node_modules/@types/three/src/extras/core/ShapePath.d.ts", + "../../node_modules/@types/three/src/extras/curves/Curves.d.ts", + "../../node_modules/@types/three/src/extras/objects/ImmediateRenderObject.d.ts", + "../../node_modules/@types/three/src/geometries/Geometries.d.ts", + "../../node_modules/@types/three/src/helpers/ArrowHelper.d.ts", + "../../node_modules/@types/three/src/helpers/AxesHelper.d.ts", + "../../node_modules/@types/three/src/helpers/Box3Helper.d.ts", + "../../node_modules/@types/three/src/helpers/BoxHelper.d.ts", + "../../node_modules/@types/three/src/helpers/CameraHelper.d.ts", + "../../node_modules/@types/three/src/helpers/DirectionalLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/GridHelper.d.ts", + "../../node_modules/@types/three/src/helpers/HemisphereLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PlaneHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PointLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PolarGridHelper.d.ts", + "../../node_modules/@types/three/src/helpers/SkeletonHelper.d.ts", + "../../node_modules/@types/three/src/helpers/SpotLightHelper.d.ts", + "../../node_modules/@types/three/src/lights/AmbientLight.d.ts", + "../../node_modules/@types/three/src/lights/AmbientLightProbe.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLight.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts", + "../../node_modules/@types/three/src/lights/HemisphereLight.d.ts", + "../../node_modules/@types/three/src/lights/HemisphereLightProbe.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/lights/LightProbe.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts", + "../../node_modules/@types/three/src/lights/PointLight.d.ts", + "../../node_modules/@types/three/src/lights/PointLightShadow.d.ts", + "../../node_modules/@types/three/src/lights/RectAreaLight.d.ts", + "../../node_modules/@types/three/src/lights/SpotLight.d.ts", + "../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts", + "../../node_modules/@types/three/src/loaders/AnimationLoader.d.ts", + "../../node_modules/@types/three/src/loaders/AudioLoader.d.ts", + "../../node_modules/@types/three/src/loaders/BufferGeometryLoader.d.ts", + "../../node_modules/@types/three/src/loaders/Cache.d.ts", + "../../node_modules/@types/three/src/loaders/CompressedTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/CubeTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/DataTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/FileLoader.d.ts", + "../../node_modules/@types/three/src/loaders/FontLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ImageBitmapLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ImageLoader.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoaderUtils.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/loaders/MaterialLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ObjectLoader.d.ts", + "../../node_modules/@types/three/src/loaders/TextureLoader.d.ts", + "../../node_modules/@types/three/src/materials/Materials.d.ts", + "../../node_modules/@types/three/src/math/Box2.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Cylindrical.d.ts", + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Frustum.d.ts", + "../../node_modules/@types/three/src/math/Interpolant.d.ts", + "../../node_modules/@types/three/src/math/Line3.d.ts", + "../../node_modules/@types/three/src/math/MathUtils.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Ray.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Spherical.d.ts", + "../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts", + "../../node_modules/@types/three/src/math/Triangle.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/objects/InstancedMesh.d.ts", + "../../node_modules/@types/three/src/objects/LOD.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts", + "../../node_modules/@types/three/src/objects/LineLoop.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts", + "../../node_modules/@types/three/src/objects/Points.d.ts", + "../../node_modules/@types/three/src/objects/Skeleton.d.ts", + "../../node_modules/@types/three/src/objects/SkinnedMesh.d.ts", + "../../node_modules/@types/three/src/objects/Sprite.d.ts", + "../../node_modules/@types/three/src/renderers/WebGL1Renderer.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/ShaderChunk.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/UniformsUtils.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLGeometries.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLLights.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLObjects.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLPrograms.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShader.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXRController.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts", + "../../node_modules/@types/three/src/scenes/Fog.d.ts", + "../../node_modules/@types/three/src/scenes/FogExp2.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts", + "../../node_modules/@types/three/src/textures/CanvasTexture.d.ts", + "../../node_modules/@types/three/src/textures/CompressedTexture.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture3D.d.ts", + "../../node_modules/@types/three/src/textures/DepthTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts", + "../../node_modules/@types/three/src/textures/VideoTexture.d.ts" + ], + "../../node_modules/@types/three/src/animation/AnimationAction.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/animation/AnimationMixer.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts" + ], + "../../node_modules/@types/three/src/animation/AnimationMixer.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationAction.d.ts", + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/animation/AnimationObjectGroup.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/animation/AnimationUtils.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts" + ], + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/ColorKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/NumberKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/StringKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/animation/tracks/VectorKeyframeTrack.d.ts": [ + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/constants.d.ts" + ], + "../../node_modules/@types/three/src/audio/Audio.d.ts": [ + "../../node_modules/@types/three/src/audio/AudioContext.d.ts", + "../../node_modules/@types/three/src/audio/AudioListener.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/audio/AudioAnalyser.d.ts": [ + "../../node_modules/@types/three/src/audio/Audio.d.ts" + ], + "../../node_modules/@types/three/src/audio/AudioListener.d.ts": [ + "../../node_modules/@types/three/src/audio/AudioContext.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/audio/PositionalAudio.d.ts": [ + "../../node_modules/@types/three/src/audio/Audio.d.ts", + "../../node_modules/@types/three/src/audio/AudioListener.d.ts" + ], + "../../node_modules/@types/three/src/cameras/ArrayCamera.d.ts": [ + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts" + ], + "../../node_modules/@types/three/src/cameras/Camera.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/cameras/CubeCamera.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts" + ], + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts" + ], + "../../node_modules/@types/three/src/cameras/StereoCamera.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts" + ], + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts" + ], + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/core/InstancedBufferAttribute.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/core/InstancedInterleavedBuffer.d.ts": [ + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts" + ], + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts" + ], + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts" + ], + "../../node_modules/@types/three/src/core/Object3D.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/Layers.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/core/Raycaster.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/Layers.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Ray.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/ImageUtils.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/extras/PMREMGenerator.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/Curve.d.ts": [ + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/CurvePath.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/Font.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Shape.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/Path.d.ts": [ + "../../node_modules/@types/three/src/extras/core/CurvePath.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/Shape.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Path.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/core/ShapePath.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Shape.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/ArcCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/CatmullRomCurve3.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve3.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/Curves.d.ts": [ + "../../node_modules/@types/three/src/extras/curves/ArcCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/CatmullRomCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/LineCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/LineCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/SplineCurve.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/LineCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/LineCurve3.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve3.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/extras/curves/SplineCurve.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/extras/objects/ImmediateRenderObject.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts" + ], + "../../node_modules/@types/three/src/geometries/BoxGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/CircleGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/ConeGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/DodecahedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/EdgesGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/extras/core/Shape.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/geometries/Geometries.d.ts": [ + "../../node_modules/@types/three/src/geometries/BoxGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/CircleGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ConeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/DodecahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/EdgesGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/IcosahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/LatheGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/OctahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ParametricGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/PlaneGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/RingGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ShapeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/SphereGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TetrahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TextGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TorusGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TorusKnotGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TubeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/WireframeGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/IcosahedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/LatheGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/geometries/OctahedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/ParametricGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/geometries/PlaneGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/RingGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/ShapeGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/extras/core/Shape.d.ts" + ], + "../../node_modules/@types/three/src/geometries/SphereGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TetrahedronGeometry.d.ts": [ + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TextGeometry.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Font.d.ts", + "../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TorusGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TorusKnotGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/geometries/TubeGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/geometries/WireframeGeometry.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts" + ], + "../../node_modules/@types/three/src/helpers/ArrowHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts" + ], + "../../node_modules/@types/three/src/helpers/AxesHelper.d.ts": [ + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/Box3Helper.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/BoxHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/CameraHelper.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/DirectionalLightHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLight.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts" + ], + "../../node_modules/@types/three/src/helpers/GridHelper.d.ts": [ + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/HemisphereLightHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/HemisphereLight.d.ts", + "../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts" + ], + "../../node_modules/@types/three/src/helpers/PlaneHelper.d.ts": [ + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/PointLightHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/PointLight.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts" + ], + "../../node_modules/@types/three/src/helpers/PolarGridHelper.d.ts": [ + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/SkeletonHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/helpers/SpotLightHelper.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts" + ], + "../../node_modules/@types/three/src/lights/AmbientLight.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/AmbientLightProbe.d.ts": [ + "../../node_modules/@types/three/src/lights/LightProbe.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/DirectionalLight.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts": [ + "../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts" + ], + "../../node_modules/@types/three/src/lights/HemisphereLight.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/lights/HemisphereLightProbe.d.ts": [ + "../../node_modules/@types/three/src/lights/LightProbe.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/Light.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/LightProbe.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts" + ], + "../../node_modules/@types/three/src/lights/LightShadow.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts" + ], + "../../node_modules/@types/three/src/lights/PointLight.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/lights/PointLightShadow.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/PointLightShadow.d.ts": [ + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts" + ], + "../../node_modules/@types/three/src/lights/RectAreaLight.d.ts": [ + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/lights/SpotLight.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts": [ + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts" + ], + "../../node_modules/@types/three/src/loaders/AnimationLoader.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/AudioLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/BufferGeometryLoader.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/CompressedTextureLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/textures/CompressedTexture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/CubeTextureLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/DataTextureLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/FileLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/FontLoader.d.ts": [ + "../../node_modules/@types/three/src/extras/core/Font.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/ImageBitmapLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/ImageLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/Loader.d.ts": [ + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts" + ], + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts" + ], + "../../node_modules/@types/three/src/loaders/MaterialLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/ObjectLoader.d.ts": [ + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/loaders/TextureLoader.d.ts": [ + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/materials/LineDashedMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts" + ], + "../../node_modules/@types/three/src/materials/Material.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts" + ], + "../../node_modules/@types/three/src/materials/Materials.d.ts": [ + "../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts", + "../../node_modules/@types/three/src/materials/LineDashedMaterial.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshDepthMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshDistanceMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshLambertMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshMatcapMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshNormalMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshPhongMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshPhysicalMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshToonMaterial.d.ts", + "../../node_modules/@types/three/src/materials/PointsMaterial.d.ts", + "../../node_modules/@types/three/src/materials/RawShaderMaterial.d.ts", + "../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts", + "../../node_modules/@types/three/src/materials/ShadowMaterial.d.ts", + "../../node_modules/@types/three/src/materials/SpriteMaterial.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshDepthMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshDistanceMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshLambertMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshMatcapMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshNormalMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshPhongMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshPhysicalMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/MeshToonMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/PointsMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/materials/RawShaderMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts" + ], + "../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts" + ], + "../../node_modules/@types/three/src/materials/ShadowMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/materials/SpriteMaterial.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/math/Box2.d.ts": [ + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/math/Box3.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Triangle.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Color.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts" + ], + "../../node_modules/@types/three/src/math/Cylindrical.d.ts": [ + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Euler.d.ts": [ + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Frustum.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Sprite.d.ts" + ], + "../../node_modules/@types/three/src/math/Line3.d.ts": [ + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/MathUtils.d.ts": [ + "../../node_modules/@types/three/src/math/Quaternion.d.ts" + ], + "../../node_modules/@types/three/src/math/Matrix3.d.ts": [ + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Matrix4.d.ts": [ + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Plane.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Line3.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Quaternion.d.ts": [ + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Ray.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Sphere.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Spherical.d.ts": [ + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts": [ + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Triangle.d.ts": [ + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts" + ], + "../../node_modules/@types/three/src/math/Vector2.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts" + ], + "../../node_modules/@types/three/src/math/Vector3.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/math/Cylindrical.d.ts", + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Spherical.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/math/Vector4.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts": [ + "../../node_modules/@types/three/src/math/Interpolant.d.ts" + ], + "../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts": [ + "../../node_modules/@types/three/src/math/Interpolant.d.ts" + ], + "../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts": [ + "../../node_modules/@types/three/src/math/Interpolant.d.ts" + ], + "../../node_modules/@types/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": [ + "../../node_modules/@types/three/src/math/Interpolant.d.ts" + ], + "../../node_modules/@types/three/src/objects/Bone.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/objects/Group.d.ts": [ + "../../node_modules/@types/three/src/core/Object3D.d.ts" + ], + "../../node_modules/@types/three/src/objects/InstancedMesh.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts" + ], + "../../node_modules/@types/three/src/objects/LOD.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts" + ], + "../../node_modules/@types/three/src/objects/Line.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts" + ], + "../../node_modules/@types/three/src/objects/LineLoop.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts" + ], + "../../node_modules/@types/three/src/objects/LineSegments.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts" + ], + "../../node_modules/@types/three/src/objects/Mesh.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts" + ], + "../../node_modules/@types/three/src/objects/Points.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts" + ], + "../../node_modules/@types/three/src/objects/Skeleton.d.ts": [ + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture.d.ts" + ], + "../../node_modules/@types/three/src/objects/SkinnedMesh.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts", + "../../node_modules/@types/three/src/objects/Skeleton.d.ts" + ], + "../../node_modules/@types/three/src/objects/Sprite.d.ts": [ + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/materials/Materials.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGL1Renderer.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/textures/DepthTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture3D.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts": [ + "../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLBindingStates.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLCubeMaps.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLGeometries.d.ts": [ + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLLights.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts": [ + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShader.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLPrograms.d.ts": [ + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLBindingStates.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCubeMaps.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLObjects.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLUtils.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts": [ + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webxr/WebXRController.d.ts": [ + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts" + ], + "../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts" + ], + "../../node_modules/@types/three/src/scenes/Fog.d.ts": [ + "../../node_modules/@types/three/src/math/Color.d.ts" + ], + "../../node_modules/@types/three/src/scenes/FogExp2.d.ts": [ + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/scenes/Fog.d.ts" + ], + "../../node_modules/@types/three/src/scenes/Scene.d.ts": [ + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/scenes/Fog.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/CanvasTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/CompressedTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/DataTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/DataTexture3D.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/DepthTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "../../node_modules/@types/three/src/textures/Texture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts" + ], + "../../node_modules/@types/three/src/textures/VideoTexture.d.ts": [ + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts" + ], + "./src/defs.ts": [ + "./src/constants.ts" + ], + "./src/globaltypes.ts": [ + "./src/constants.ts" + ], + "./src/index.ts": [ + "./src/constants.ts", + "./src/defs.ts", + "./src/entity-manager.ts", + "./src/globaltypes.ts", + "./src/math.ts", + "./src/noise.ts", + "./src/spatial-hash-grid.ts", + "./src/spline.ts", + "./src/terrain-constants.ts", + "./src/terrain-height.ts" + ], + "./src/terrain-height.ts": [ + "./src/noise.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../../node_modules/@types/component-emitter/index.d.ts", + "../../node_modules/@types/cookie/index.d.ts", + "../../node_modules/@types/cors/index.d.ts", + "../../node_modules/@types/eslint-scope/index.d.ts", + "../../node_modules/@types/eslint/helpers.d.ts", + "../../node_modules/@types/eslint/index.d.ts", + "../../node_modules/@types/eslint/lib/rules/index.d.ts", + "../../node_modules/@types/estree/index.d.ts", + "../../node_modules/@types/glob/index.d.ts", + "../../node_modules/@types/html-minifier-terser/index.d.ts", + "../../node_modules/@types/json-schema/index.d.ts", + "../../node_modules/@types/json5/index.d.ts", + "../../node_modules/@types/minimatch/index.d.ts", + "../../node_modules/@types/node/assert.d.ts", + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/base.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/globals.global.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/index.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/ts3.6/base.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/wasi.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts", + "../../node_modules/@types/three/index.d.ts", + "../../node_modules/@types/three/src/Three.Legacy.d.ts", + "../../node_modules/@types/three/src/Three.d.ts", + "../../node_modules/@types/three/src/animation/AnimationAction.d.ts", + "../../node_modules/@types/three/src/animation/AnimationClip.d.ts", + "../../node_modules/@types/three/src/animation/AnimationMixer.d.ts", + "../../node_modules/@types/three/src/animation/AnimationObjectGroup.d.ts", + "../../node_modules/@types/three/src/animation/AnimationUtils.d.ts", + "../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/PropertyBinding.d.ts", + "../../node_modules/@types/three/src/animation/PropertyMixer.d.ts", + "../../node_modules/@types/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/ColorKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/NumberKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/StringKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/animation/tracks/VectorKeyframeTrack.d.ts", + "../../node_modules/@types/three/src/audio/Audio.d.ts", + "../../node_modules/@types/three/src/audio/AudioAnalyser.d.ts", + "../../node_modules/@types/three/src/audio/AudioContext.d.ts", + "../../node_modules/@types/three/src/audio/AudioListener.d.ts", + "../../node_modules/@types/three/src/audio/PositionalAudio.d.ts", + "../../node_modules/@types/three/src/cameras/ArrayCamera.d.ts", + "../../node_modules/@types/three/src/cameras/Camera.d.ts", + "../../node_modules/@types/three/src/cameras/CubeCamera.d.ts", + "../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts", + "../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts", + "../../node_modules/@types/three/src/cameras/StereoCamera.d.ts", + "../../node_modules/@types/three/src/constants.d.ts", + "../../node_modules/@types/three/src/core/BufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/BufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/Clock.d.ts", + "../../node_modules/@types/three/src/core/EventDispatcher.d.ts", + "../../node_modules/@types/three/src/core/GLBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InstancedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts", + "../../node_modules/@types/three/src/core/InstancedInterleavedBuffer.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts", + "../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts", + "../../node_modules/@types/three/src/core/Layers.d.ts", + "../../node_modules/@types/three/src/core/Object3D.d.ts", + "../../node_modules/@types/three/src/core/Raycaster.d.ts", + "../../node_modules/@types/three/src/core/Uniform.d.ts", + "../../node_modules/@types/three/src/extras/DataUtils.d.ts", + "../../node_modules/@types/three/src/extras/ImageUtils.d.ts", + "../../node_modules/@types/three/src/extras/PMREMGenerator.d.ts", + "../../node_modules/@types/three/src/extras/ShapeUtils.d.ts", + "../../node_modules/@types/three/src/extras/core/Curve.d.ts", + "../../node_modules/@types/three/src/extras/core/CurvePath.d.ts", + "../../node_modules/@types/three/src/extras/core/Font.d.ts", + "../../node_modules/@types/three/src/extras/core/Path.d.ts", + "../../node_modules/@types/three/src/extras/core/Shape.d.ts", + "../../node_modules/@types/three/src/extras/core/ShapePath.d.ts", + "../../node_modules/@types/three/src/extras/curves/ArcCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/CatmullRomCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/CubicBezierCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/Curves.d.ts", + "../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/LineCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/LineCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve.d.ts", + "../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve3.d.ts", + "../../node_modules/@types/three/src/extras/curves/SplineCurve.d.ts", + "../../node_modules/@types/three/src/extras/objects/ImmediateRenderObject.d.ts", + "../../node_modules/@types/three/src/geometries/BoxGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/CircleGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ConeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/DodecahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/EdgesGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/Geometries.d.ts", + "../../node_modules/@types/three/src/geometries/IcosahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/LatheGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/OctahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ParametricGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/PlaneGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/RingGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/ShapeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/SphereGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TetrahedronGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TextGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TorusGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TorusKnotGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/TubeGeometry.d.ts", + "../../node_modules/@types/three/src/geometries/WireframeGeometry.d.ts", + "../../node_modules/@types/three/src/helpers/ArrowHelper.d.ts", + "../../node_modules/@types/three/src/helpers/AxesHelper.d.ts", + "../../node_modules/@types/three/src/helpers/Box3Helper.d.ts", + "../../node_modules/@types/three/src/helpers/BoxHelper.d.ts", + "../../node_modules/@types/three/src/helpers/CameraHelper.d.ts", + "../../node_modules/@types/three/src/helpers/DirectionalLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/GridHelper.d.ts", + "../../node_modules/@types/three/src/helpers/HemisphereLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PlaneHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PointLightHelper.d.ts", + "../../node_modules/@types/three/src/helpers/PolarGridHelper.d.ts", + "../../node_modules/@types/three/src/helpers/SkeletonHelper.d.ts", + "../../node_modules/@types/three/src/helpers/SpotLightHelper.d.ts", + "../../node_modules/@types/three/src/lights/AmbientLight.d.ts", + "../../node_modules/@types/three/src/lights/AmbientLightProbe.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLight.d.ts", + "../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts", + "../../node_modules/@types/three/src/lights/HemisphereLight.d.ts", + "../../node_modules/@types/three/src/lights/HemisphereLightProbe.d.ts", + "../../node_modules/@types/three/src/lights/Light.d.ts", + "../../node_modules/@types/three/src/lights/LightProbe.d.ts", + "../../node_modules/@types/three/src/lights/LightShadow.d.ts", + "../../node_modules/@types/three/src/lights/PointLight.d.ts", + "../../node_modules/@types/three/src/lights/PointLightShadow.d.ts", + "../../node_modules/@types/three/src/lights/RectAreaLight.d.ts", + "../../node_modules/@types/three/src/lights/SpotLight.d.ts", + "../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts", + "../../node_modules/@types/three/src/loaders/AnimationLoader.d.ts", + "../../node_modules/@types/three/src/loaders/AudioLoader.d.ts", + "../../node_modules/@types/three/src/loaders/BufferGeometryLoader.d.ts", + "../../node_modules/@types/three/src/loaders/Cache.d.ts", + "../../node_modules/@types/three/src/loaders/CompressedTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/CubeTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/DataTextureLoader.d.ts", + "../../node_modules/@types/three/src/loaders/FileLoader.d.ts", + "../../node_modules/@types/three/src/loaders/FontLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ImageBitmapLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ImageLoader.d.ts", + "../../node_modules/@types/three/src/loaders/Loader.d.ts", + "../../node_modules/@types/three/src/loaders/LoaderUtils.d.ts", + "../../node_modules/@types/three/src/loaders/LoadingManager.d.ts", + "../../node_modules/@types/three/src/loaders/MaterialLoader.d.ts", + "../../node_modules/@types/three/src/loaders/ObjectLoader.d.ts", + "../../node_modules/@types/three/src/loaders/TextureLoader.d.ts", + "../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts", + "../../node_modules/@types/three/src/materials/LineDashedMaterial.d.ts", + "../../node_modules/@types/three/src/materials/Material.d.ts", + "../../node_modules/@types/three/src/materials/Materials.d.ts", + "../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshDepthMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshDistanceMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshLambertMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshMatcapMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshNormalMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshPhongMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshPhysicalMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts", + "../../node_modules/@types/three/src/materials/MeshToonMaterial.d.ts", + "../../node_modules/@types/three/src/materials/PointsMaterial.d.ts", + "../../node_modules/@types/three/src/materials/RawShaderMaterial.d.ts", + "../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts", + "../../node_modules/@types/three/src/materials/ShadowMaterial.d.ts", + "../../node_modules/@types/three/src/materials/SpriteMaterial.d.ts", + "../../node_modules/@types/three/src/math/Box2.d.ts", + "../../node_modules/@types/three/src/math/Box3.d.ts", + "../../node_modules/@types/three/src/math/Color.d.ts", + "../../node_modules/@types/three/src/math/Cylindrical.d.ts", + "../../node_modules/@types/three/src/math/Euler.d.ts", + "../../node_modules/@types/three/src/math/Frustum.d.ts", + "../../node_modules/@types/three/src/math/Interpolant.d.ts", + "../../node_modules/@types/three/src/math/Line3.d.ts", + "../../node_modules/@types/three/src/math/MathUtils.d.ts", + "../../node_modules/@types/three/src/math/Matrix3.d.ts", + "../../node_modules/@types/three/src/math/Matrix4.d.ts", + "../../node_modules/@types/three/src/math/Plane.d.ts", + "../../node_modules/@types/three/src/math/Quaternion.d.ts", + "../../node_modules/@types/three/src/math/Ray.d.ts", + "../../node_modules/@types/three/src/math/Sphere.d.ts", + "../../node_modules/@types/three/src/math/Spherical.d.ts", + "../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts", + "../../node_modules/@types/three/src/math/Triangle.d.ts", + "../../node_modules/@types/three/src/math/Vector2.d.ts", + "../../node_modules/@types/three/src/math/Vector3.d.ts", + "../../node_modules/@types/three/src/math/Vector4.d.ts", + "../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts", + "../../node_modules/@types/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", + "../../node_modules/@types/three/src/objects/Bone.d.ts", + "../../node_modules/@types/three/src/objects/Group.d.ts", + "../../node_modules/@types/three/src/objects/InstancedMesh.d.ts", + "../../node_modules/@types/three/src/objects/LOD.d.ts", + "../../node_modules/@types/three/src/objects/Line.d.ts", + "../../node_modules/@types/three/src/objects/LineLoop.d.ts", + "../../node_modules/@types/three/src/objects/LineSegments.d.ts", + "../../node_modules/@types/three/src/objects/Mesh.d.ts", + "../../node_modules/@types/three/src/objects/Points.d.ts", + "../../node_modules/@types/three/src/objects/Skeleton.d.ts", + "../../node_modules/@types/three/src/objects/SkinnedMesh.d.ts", + "../../node_modules/@types/three/src/objects/Sprite.d.ts", + "../../node_modules/@types/three/src/renderers/WebGL1Renderer.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts", + "../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/ShaderChunk.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts", + "../../node_modules/@types/three/src/renderers/shaders/UniformsUtils.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLBindingStates.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLCubeMaps.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLGeometries.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLLights.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLObjects.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLPrograms.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShader.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts", + "../../node_modules/@types/three/src/renderers/webgl/WebGLUtils.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXRController.d.ts", + "../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts", + "../../node_modules/@types/three/src/scenes/Fog.d.ts", + "../../node_modules/@types/three/src/scenes/FogExp2.d.ts", + "../../node_modules/@types/three/src/scenes/Scene.d.ts", + "../../node_modules/@types/three/src/textures/CanvasTexture.d.ts", + "../../node_modules/@types/three/src/textures/CompressedTexture.d.ts", + "../../node_modules/@types/three/src/textures/CubeTexture.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts", + "../../node_modules/@types/three/src/textures/DataTexture3D.d.ts", + "../../node_modules/@types/three/src/textures/DepthTexture.d.ts", + "../../node_modules/@types/three/src/textures/Texture.d.ts", + "../../node_modules/@types/three/src/textures/VideoTexture.d.ts", + "../../node_modules/typescript/lib/lib.d.ts", + "../../node_modules/typescript/lib/lib.dom.d.ts", + "../../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../../node_modules/typescript/lib/lib.es2015.d.ts", + "../../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../../node_modules/typescript/lib/lib.es2016.d.ts", + "../../node_modules/typescript/lib/lib.es2017.d.ts", + "../../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../../node_modules/typescript/lib/lib.es2018.d.ts", + "../../node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../../node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../../node_modules/typescript/lib/lib.es5.d.ts", + "../../node_modules/typescript/lib/lib.esnext.intl.d.ts", + "../../node_modules/typescript/lib/lib.scripthost.d.ts", + "../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts", + "./src/OrbitControls.ts", + "./src/constants.ts", + "./src/defs.ts", + "./src/entity-manager.ts", + "./src/globaltypes.ts", + "./src/index.ts", + "./src/math.ts", + "./src/noise.ts", + "./src/simplex-noise.ts", + "./src/spatial-hash-grid.ts", + "./src/spline.ts", + "./src/terrain-constants.ts", + "./src/terrain-height.ts" + ] + }, + "version": "4.2.3" +} \ No newline at end of file diff --git a/packages/server/dist/index.js b/packages/server/dist/index.js deleted file mode 100644 index d240c1bd..00000000 --- a/packages/server/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import { test } from 'shared'; -import * as http from 'http'; -import * as socket_io from 'socket.io'; -import { WorldServer } from './scripts/world-server'; -function Main() { - const port = process.env.PORT || 3000; - const server = http.createServer(); - const io = new socket_io.Server(server, { - cors: { - origin: '*' - } - }); - server.listen(port, () => { - console.log(`listening on: ${port} : ${test}`); - }); - const _WORLD = new WorldServer(io); - _WORLD.Run(); -} -Main(); diff --git a/packages/server/dist/scripts/world-server.js b/packages/server/dist/scripts/world-server.js deleted file mode 100644 index da9dfa34..00000000 --- a/packages/server/dist/scripts/world-server.js +++ /dev/null @@ -1,77 +0,0 @@ -import { performance } from 'perf_hooks'; -import { WorldManager } from './world-manager'; -import { LoginQueue } from './login-queue'; -class SocketWrapper { - constructor(params) { - this.socket_ = params.socket; - this.onMessage = null; - this.dead_ = false; - this.SetupSocket_(); - } - get ID() { - return this.socket_.id; - } - get IsAlive() { - return !this.dead_; - } - SetupSocket_() { - this.socket_.on('user-connected', () => { - console.log('socket.id: ' + this.socket_.id); - }); - this.socket_.on('disconnect', () => { - console.log('Client disconnected.'); - this.dead_ = true; - }); - this.socket_.onAny((e, d) => { - try { - if (!this.onMessage(e, d)) { - console.log('Unknown command (' + e + '), disconnected.'); - this.Disconnect(); - } - } - catch (err) { - console.error(err); - this.Disconnect(); - } - }); - } - Disconnect() { - this.socket_.disconnect(true); - } - Send(msg, data) { - this.socket_.emit(msg, data); - } - onMessage(e, d) { return false; } -} -; -class WorldServer { - constructor(io) { - this.loginQueue_ = new LoginQueue((c, p) => { this.OnLogin_(c, p); }); - this.worldMgr_ = new WorldManager({ parent: this }); - this.SetupIO_(io); - } - SetupIO_(io) { - io.on('connection', socket => { - this.loginQueue_.Add(new SocketWrapper({ socket: socket })); - }); - } - OnLogin_(client, params) { - this.worldMgr_.Add(client, params); - } - Run() { - let t1 = performance.now(); - this.Schedule_(t1); - } - Schedule_(t1) { - setTimeout(() => { - let t2 = performance.now(); - this.Update_((t2 - t1) * 0.001); - this.Schedule_(t2); - }); - } - Update_(timeElapsed) { - this.worldMgr_.Update(timeElapsed); - } -} -; -export { WorldServer, SocketWrapper }; diff --git a/packages/server/package.json b/packages/server/package.json deleted file mode 100644 index 26c8bb89..00000000 --- a/packages/server/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "server", - "version": "0.0.1", - "dependencies": { - "gl-matrix": "^3.3.0", - "http": "^0.0.1-security", - "shared": "0.0.1", - "socket.io": "^4.0.0", - "typescript": "^4.2.3" - }, - "devDependencies": { - "cross-env": "^5.0.5", - "nodemon": "^2.0.7", - "tsc-watch": "^4.2.9" - }, - "scripts": { - "build": "tsc --build", - "start:dev": "tsc-watch --onSuccess 'node ./dist/index.js'", - "start": "node ./dist/index.js" - } -} diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json deleted file mode 100644 index af521dca..00000000 --- a/packages/server/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.packages.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "target": "ES6", - "moduleResolution": "Node" - }, - "include": ["./src/*.ts"], - "exclude": ["./dist", "node_modules"], - "references": [{"path": "../shared"}] -} \ No newline at end of file diff --git a/packages/shared/package.json b/packages/shared/package.json deleted file mode 100644 index cc049af1..00000000 --- a/packages/shared/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "shared", - "version": "0.0.1", - "devDependencies": { - "cross-env": "^5.0.5", - "nodemon": "^2.0.7", - "tsc-watch": "^4.2.9", - "typescript": "^4.2.3" - }, - "main": "src/index.ts" -} diff --git a/packages/shared/src/dat.gui.module.ts b/packages/shared/src/dat.gui.module.ts deleted file mode 100644 index b545c77a..00000000 --- a/packages/shared/src/dat.gui.module.ts +++ /dev/null @@ -1,3576 +0,0 @@ -// @ts-nocheck -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -function ___$insertStyle(css) { - - if (!css) { - - return; - - } - if (typeof window === 'undefined') { - - return; - - } - - var style = document.createElement('style'); - - style.setAttribute('type', 'text/css'); - style.innerHTML = css; - document.head.appendChild(style); - - return css; - -} - -function colorToString(color, forceCSSHex) { - - var colorFormat = color.__state.conversionName.toString(); - var r = Math.round(color.r); - var g = Math.round(color.g); - var b = Math.round(color.b); - var a = color.a; - var h = Math.round(color.h); - var s = color.s.toFixed(1); - var v = color.v.toFixed(1); - if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') { - - var str = color.hex.toString(16); - while (str.length < 6) { - - str = '0' + str; - - } - return '#' + str; - - } else if (colorFormat === 'CSS_RGB') { - - return 'rgb(' + r + ',' + g + ',' + b + ')'; - - } else if (colorFormat === 'CSS_RGBA') { - - return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; - - } else if (colorFormat === 'HEX') { - - return '0x' + color.hex.toString(16); - - } else if (colorFormat === 'RGB_ARRAY') { - - return '[' + r + ',' + g + ',' + b + ']'; - - } else if (colorFormat === 'RGBA_ARRAY') { - - return '[' + r + ',' + g + ',' + b + ',' + a + ']'; - - } else if (colorFormat === 'RGB_OBJ') { - - return '{r:' + r + ',g:' + g + ',b:' + b + '}'; - - } else if (colorFormat === 'RGBA_OBJ') { - - return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}'; - - } else if (colorFormat === 'HSV_OBJ') { - - return '{h:' + h + ',s:' + s + ',v:' + v + '}'; - - } else if (colorFormat === 'HSVA_OBJ') { - - return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}'; - - } - return 'unknown format'; - -} - -var ARR_EACH = Array.prototype.forEach; -var ARR_SLICE = Array.prototype.slice; -var Common = { - BREAK: {}, - extend: function extend(target) { - - this.each(ARR_SLICE.call(arguments, 1), function (obj) { - - var keys = this.isObject(obj) ? Object.keys(obj) : []; - keys.forEach(function (key) { - - if (!this.isUndefined(obj[key])) { - - target[key] = obj[key]; - - } - - }.bind(this)); - - }, this); - return target; - - }, - defaults: function defaults(target) { - - this.each(ARR_SLICE.call(arguments, 1), function (obj) { - - var keys = this.isObject(obj) ? Object.keys(obj) : []; - keys.forEach(function (key) { - - if (this.isUndefined(target[key])) { - - target[key] = obj[key]; - - } - - }.bind(this)); - - }, this); - return target; - - }, - compose: function compose() { - - var toCall = ARR_SLICE.call(arguments); - return function () { - - var args = ARR_SLICE.call(arguments); - for (var i = toCall.length - 1; i >= 0; i--) { - - args = [toCall[i].apply(this, args)]; - - } - return args[0]; - - }; - - }, - each: function each(obj, itr, scope) { - - if (!obj) { - - return; - - } - if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) { - - obj.forEach(itr, scope); - - } else if (obj.length === obj.length + 0) { - - var key = void 0; - var l = void 0; - for (key = 0, l = obj.length; key < l; key++) { - - if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) { - - return; - - } - - } - - } else { - - for (var _key in obj) { - - if (itr.call(scope, obj[_key], _key) === this.BREAK) { - - return; - - } - - } - - } - - }, - defer: function defer(fnc) { - - setTimeout(fnc, 0); - - }, - debounce: function debounce(func, threshold, callImmediately) { - - var timeout = void 0; - return function () { - - var obj = this; - var args = arguments; - function delayed() { - - timeout = null; - if (!callImmediately) func.apply(obj, args); - - } - var callNow = callImmediately || !timeout; - clearTimeout(timeout); - timeout = setTimeout(delayed, threshold); - if (callNow) { - - func.apply(obj, args); - - } - - }; - - }, - toArray: function toArray(obj) { - - if (obj.toArray) return obj.toArray(); - return ARR_SLICE.call(obj); - - }, - isUndefined: function isUndefined(obj) { - - return obj === undefined; - - }, - isNull: function isNull(obj) { - - return obj === null; - - }, - isNaN: function (_isNaN) { - - function isNaN() { - - return _isNaN.apply(this, arguments); - - } - isNaN.toString = function () { - - return _isNaN.toString(); - - }; - return isNaN; - - }(function (obj) { - - return isNaN(obj); - - }), - isArray: Array.isArray || function (obj) { - - return obj.constructor === Array; - - }, - isObject: function isObject(obj) { - - return obj === Object(obj); - - }, - isNumber: function isNumber(obj) { - - return obj === obj + 0; - - }, - isString: function isString(obj) { - - return obj === obj + ''; - - }, - isBoolean: function isBoolean(obj) { - - return obj === false || obj === true; - - }, - isFunction: function isFunction(obj) { - - return obj instanceof Function; - - } -}; - -var INTERPRETATIONS = [ - { - litmus: Common.isString, - conversions: { - THREE_CHAR_HEX: { - read: function read(original) { - - var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i); - if (test === null) { - - return false; - - } - return { - space: 'HEX', - hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0) - }; - - }, - write: colorToString - }, - SIX_CHAR_HEX: { - read: function read(original) { - - var test = original.match(/^#([A-F0-9]{6})$/i); - if (test === null) { - - return false; - - } - return { - space: 'HEX', - hex: parseInt('0x' + test[1].toString(), 0) - }; - - }, - write: colorToString - }, - CSS_RGB: { - read: function read(original) { - - var test = original.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); - if (test === null) { - - return false; - - } - return { - space: 'RGB', - r: parseFloat(test[1]), - g: parseFloat(test[2]), - b: parseFloat(test[3]) - }; - - }, - write: colorToString - }, - CSS_RGBA: { - read: function read(original) { - - var test = original.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); - if (test === null) { - - return false; - - } - return { - space: 'RGB', - r: parseFloat(test[1]), - g: parseFloat(test[2]), - b: parseFloat(test[3]), - a: parseFloat(test[4]) - }; - - }, - write: colorToString - } - } - }, - { - litmus: Common.isNumber, - conversions: { - HEX: { - read: function read(original) { - - return { - space: 'HEX', - hex: original, - conversionName: 'HEX' - }; - - }, - write: function write(color) { - - return color.hex; - - } - } - } - }, - { - litmus: Common.isArray, - conversions: { - RGB_ARRAY: { - read: function read(original) { - - if (original.length !== 3) { - - return false; - - } - return { - space: 'RGB', - r: original[0], - g: original[1], - b: original[2] - }; - - }, - write: function write(color) { - - return [color.r, color.g, color.b]; - - } - }, - RGBA_ARRAY: { - read: function read(original) { - - if (original.length !== 4) return false; - return { - space: 'RGB', - r: original[0], - g: original[1], - b: original[2], - a: original[3] - }; - - }, - write: function write(color) { - - return [color.r, color.g, color.b, color.a]; - - } - } - } - }, - { - litmus: Common.isObject, - conversions: { - RGBA_OBJ: { - read: function read(original) { - - if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) { - - return { - space: 'RGB', - r: original.r, - g: original.g, - b: original.b, - a: original.a - }; - - } - return false; - - }, - write: function write(color) { - - return { - r: color.r, - g: color.g, - b: color.b, - a: color.a - }; - - } - }, - RGB_OBJ: { - read: function read(original) { - - if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) { - - return { - space: 'RGB', - r: original.r, - g: original.g, - b: original.b - }; - - } - return false; - - }, - write: function write(color) { - - return { - r: color.r, - g: color.g, - b: color.b - }; - - } - }, - HSVA_OBJ: { - read: function read(original) { - - if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) { - - return { - space: 'HSV', - h: original.h, - s: original.s, - v: original.v, - a: original.a - }; - - } - return false; - - }, - write: function write(color) { - - return { - h: color.h, - s: color.s, - v: color.v, - a: color.a - }; - - } - }, - HSV_OBJ: { - read: function read(original) { - - if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) { - - return { - space: 'HSV', - h: original.h, - s: original.s, - v: original.v - }; - - } - return false; - - }, - write: function write(color) { - - return { - h: color.h, - s: color.s, - v: color.v - }; - - } - } - } - }]; -var result = void 0; -var toReturn = void 0; -var interpret = function interpret() { - - toReturn = false; - var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0]; - Common.each(INTERPRETATIONS, function (family) { - - if (family.litmus(original)) { - - Common.each(family.conversions, function (conversion, conversionName) { - - result = conversion.read(original); - if (toReturn === false && result !== false) { - - toReturn = result; - result.conversionName = conversionName; - result.conversion = conversion; - return Common.BREAK; - - } - - }, null); - return Common.BREAK; - - } - - }); - return toReturn; - -}; - -var tmpComponent = void 0; -var ColorMath = { - hsv_to_rgb: function hsv_to_rgb(h, s, v) { - - var hi = Math.floor(h / 60) % 6; - var f = h / 60 - Math.floor(h / 60); - var p = v * (1.0 - s); - var q = v * (1.0 - f * s); - var t = v * (1.0 - (1.0 - f) * s); - var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi]; - return { - r: c[0] * 255, - g: c[1] * 255, - b: c[2] * 255 - }; - - }, - rgb_to_hsv: function rgb_to_hsv(r, g, b) { - - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h = void 0; - var s = void 0; - if (max !== 0) { - - s = delta / max; - - } else { - - return { - h: NaN, - s: 0, - v: 0 - }; - - } - if (r === max) { - - h = (g - b) / delta; - - } else if (g === max) { - - h = 2 + (b - r) / delta; - - } else { - - h = 4 + (r - g) / delta; - - } - h /= 6; - if (h < 0) { - - h += 1; - - } - return { - h: h * 360, - s: s, - v: max / 255 - }; - - }, - rgb_to_hex: function rgb_to_hex(r, g, b) { - - var hex = this.hex_with_component(0, 2, r); - hex = this.hex_with_component(hex, 1, g); - hex = this.hex_with_component(hex, 0, b); - return hex; - - }, - component_from_hex: function component_from_hex(hex, componentIndex) { - - return hex >> componentIndex * 8 & 0xFF; - - }, - hex_with_component: function hex_with_component(hex, componentIndex, value) { - - return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent); - - } -}; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - - return typeof obj; - -} : function (obj) { - - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - -}; - - - - - - - - - - - -var classCallCheck = function (instance, Constructor) { - - if (!(instance instanceof Constructor)) { - - throw new TypeError("Cannot call a class as a function"); - - } - -}; - -var createClass = function () { - - function defineProperties(target, props) { - - for (var i = 0; i < props.length; i++) { - - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - - } - - } - - return function (Constructor, protoProps, staticProps) { - - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - - }; - -}(); - - - - - - - -var get = function get(object, property, receiver) { - - if (object === null) object = Function.prototype; - var desc = Object.getOwnPropertyDescriptor(object, property); - - if (desc === undefined) { - - var parent = Object.getPrototypeOf(object); - - if (parent === null) { - - return undefined; - - } else { - - return get(parent, property, receiver); - - } - - } else if ("value" in desc) { - - return desc.value; - - } else { - - var getter = desc.get; - - if (getter === undefined) { - - return undefined; - - } - - return getter.call(receiver); - - } - -}; - -var inherits = function (subClass, superClass) { - - if (typeof superClass !== "function" && superClass !== null) { - - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true - } - }); - if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - -}; - - - - - - - - - - - -var possibleConstructorReturn = function (self, call) { - - if (!self) { - - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - - } - - return call && (typeof call === "object" || typeof call === "function") ? call : self; - -}; - -var Color = function () { - - function Color() { - - classCallCheck(this, Color); - this.__state = interpret.apply(this, arguments); - if (this.__state === false) { - - throw new Error('Failed to interpret color arguments'); - - } - this.__state.a = this.__state.a || 1; - - } - createClass(Color, [{ - key: 'toString', - value: function toString() { - - return colorToString(this); - - } - }, { - key: 'toHexString', - value: function toHexString() { - - return colorToString(this, true); - - } - }, { - key: 'toOriginal', - value: function toOriginal() { - - return this.__state.conversion.write(this); - - } - }]); - return Color; - -}(); -function defineRGBComponent(target, component, componentHexIndex) { - - Object.defineProperty(target, component, { - get: function get$$1() { - - if (this.__state.space === 'RGB') { - - return this.__state[component]; - - } - Color.recalculateRGB(this, component, componentHexIndex); - return this.__state[component]; - - }, - set: function set$$1(v) { - - if (this.__state.space !== 'RGB') { - - Color.recalculateRGB(this, component, componentHexIndex); - this.__state.space = 'RGB'; - - } - this.__state[component] = v; - - } - }); - -} -function defineHSVComponent(target, component) { - - Object.defineProperty(target, component, { - get: function get$$1() { - - if (this.__state.space === 'HSV') { - - return this.__state[component]; - - } - Color.recalculateHSV(this); - return this.__state[component]; - - }, - set: function set$$1(v) { - - if (this.__state.space !== 'HSV') { - - Color.recalculateHSV(this); - this.__state.space = 'HSV'; - - } - this.__state[component] = v; - - } - }); - -} -Color.recalculateRGB = function (color, component, componentHexIndex) { - - if (color.__state.space === 'HEX') { - - color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex); - - } else if (color.__state.space === 'HSV') { - - Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v)); - - } else { - - throw new Error('Corrupted color state'); - - } - -}; -Color.recalculateHSV = function (color) { - - var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b); - Common.extend(color.__state, { - s: result.s, - v: result.v - }); - if (!Common.isNaN(result.h)) { - - color.__state.h = result.h; - - } else if (Common.isUndefined(color.__state.h)) { - - color.__state.h = 0; - - } - -}; -Color.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a']; -defineRGBComponent(Color.prototype, 'r', 2); -defineRGBComponent(Color.prototype, 'g', 1); -defineRGBComponent(Color.prototype, 'b', 0); -defineHSVComponent(Color.prototype, 'h'); -defineHSVComponent(Color.prototype, 's'); -defineHSVComponent(Color.prototype, 'v'); -Object.defineProperty(Color.prototype, 'a', { - get: function get$$1() { - - return this.__state.a; - - }, - set: function set$$1(v) { - - this.__state.a = v; - - } -}); -Object.defineProperty(Color.prototype, 'hex', { - get: function get$$1() { - - if (this.__state.space !== 'HEX') { - - this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b); - this.__state.space = 'HEX'; - - } - return this.__state.hex; - - }, - set: function set$$1(v) { - - this.__state.space = 'HEX'; - this.__state.hex = v; - - } -}); - -var Controller = function () { - - function Controller(object, property) { - - classCallCheck(this, Controller); - this.initialValue = object[property]; - this.domElement = document.createElement('div'); - this.object = object; - this.property = property; - this.__onChange = undefined; - this.__onFinishChange = undefined; - - } - createClass(Controller, [{ - key: 'onChange', - value: function onChange(fnc) { - - this.__onChange = fnc; - return this; - - } - }, { - key: 'onFinishChange', - value: function onFinishChange(fnc) { - - this.__onFinishChange = fnc; - return this; - - } - }, { - key: 'setValue', - value: function setValue(newValue) { - - this.object[this.property] = newValue; - if (this.__onChange) { - - this.__onChange.call(this, newValue); - - } - this.updateDisplay(); - return this; - - } - }, { - key: 'getValue', - value: function getValue() { - - return this.object[this.property]; - - } - }, { - key: 'updateDisplay', - value: function updateDisplay() { - - return this; - - } - }, { - key: 'isModified', - value: function isModified() { - - return this.initialValue !== this.getValue(); - - } - }]); - return Controller; - -}(); - -var EVENT_MAP = { - HTMLEvents: ['change'], - MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'], - KeyboardEvents: ['keydown'] -}; -var EVENT_MAP_INV = {}; -Common.each(EVENT_MAP, function (v, k) { - - Common.each(v, function (e) { - - EVENT_MAP_INV[e] = k; - - }); - -}); -var CSS_VALUE_PIXELS = /(\d+(\.\d+)?)px/; -function cssValueToPixels(val) { - - if (val === '0' || Common.isUndefined(val)) { - - return 0; - - } - var match = val.match(CSS_VALUE_PIXELS); - if (!Common.isNull(match)) { - - return parseFloat(match[1]); - - } - return 0; - -} -var dom = { - makeSelectable: function makeSelectable(elem, selectable) { - - if (elem === undefined || elem.style === undefined) return; - elem.onselectstart = selectable ? function () { - - return false; - - } : function () { }; - elem.style.MozUserSelect = selectable ? 'auto' : 'none'; - elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none'; - elem.unselectable = selectable ? 'on' : 'off'; - - }, - makeFullscreen: function makeFullscreen(elem, hor, vert) { - - var vertical = vert; - var horizontal = hor; - if (Common.isUndefined(horizontal)) { - - horizontal = true; - - } - if (Common.isUndefined(vertical)) { - - vertical = true; - - } - elem.style.position = 'absolute'; - if (horizontal) { - - elem.style.left = 0; - elem.style.right = 0; - - } - if (vertical) { - - elem.style.top = 0; - elem.style.bottom = 0; - - } - - }, - fakeEvent: function fakeEvent(elem, eventType, pars, aux) { - - var params = pars || {}; - var className = EVENT_MAP_INV[eventType]; - if (!className) { - - throw new Error('Event type ' + eventType + ' not supported.'); - - } - var evt = document.createEvent(className); - switch (className) { - - case 'MouseEvents': - { - - var clientX = params.x || params.clientX || 0; - var clientY = params.y || params.clientY || 0; - evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0, - 0, - clientX, - clientY, - false, false, false, false, 0, null); - break; - - } - case 'KeyboardEvents': - { - - var init = evt.initKeyboardEvent || evt.initKeyEvent; - Common.defaults(params, { - cancelable: true, - ctrlKey: false, - altKey: false, - shiftKey: false, - metaKey: false, - keyCode: undefined, - charCode: undefined - }); - init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode); - break; - - } - default: - { - - evt.initEvent(eventType, params.bubbles || false, params.cancelable || true); - break; - - } - - } - Common.defaults(evt, aux); - elem.dispatchEvent(evt); - - }, - bind: function bind(elem, event, func, newBool) { - - var bool = newBool || false; - if (elem.addEventListener) { - - elem.addEventListener(event, func, bool); - - } else if (elem.attachEvent) { - - elem.attachEvent('on' + event, func); - - } - return dom; - - }, - unbind: function unbind(elem, event, func, newBool) { - - var bool = newBool || false; - if (elem.removeEventListener) { - - elem.removeEventListener(event, func, bool); - - } else if (elem.detachEvent) { - - elem.detachEvent('on' + event, func); - - } - return dom; - - }, - addClass: function addClass(elem, className) { - - if (elem.className === undefined) { - - elem.className = className; - - } else if (elem.className !== className) { - - var classes = elem.className.split(/ +/); - if (classes.indexOf(className) === - 1) { - - classes.push(className); - elem.className = classes.join(' ').replace(/^\s+/, '').replace(/\s+$/, ''); - - } - - } - return dom; - - }, - removeClass: function removeClass(elem, className) { - - if (className) { - - if (elem.className === className) { - - elem.removeAttribute('class'); - - } else { - - var classes = elem.className.split(/ +/); - var index = classes.indexOf(className); - if (index !== - 1) { - - classes.splice(index, 1); - elem.className = classes.join(' '); - - } - - } - - } else { - - elem.className = undefined; - - } - return dom; - - }, - hasClass: function hasClass(elem, className) { - - return new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)').test(elem.className) || false; - - }, - getWidth: function getWidth(elem) { - - var style = getComputedStyle(elem); - return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width); - - }, - getHeight: function getHeight(elem) { - - var style = getComputedStyle(elem); - return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height); - - }, - getOffset: function getOffset(el) { - - var elem = el; - var offset = { left: 0, top: 0 }; - if (elem.offsetParent) { - - do { - - offset.left += elem.offsetLeft; - offset.top += elem.offsetTop; - elem = elem.offsetParent; - - } while (elem); - - } - return offset; - - }, - isActive: function isActive(elem) { - - return elem === document.activeElement && (elem.type || elem.href); - - } -}; - -var BooleanController = function (_Controller) { - - inherits(BooleanController, _Controller); - function BooleanController(object, property) { - - classCallCheck(this, BooleanController); - var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property)); - var _this = _this2; - _this2.__prev = _this2.getValue(); - _this2.__checkbox = document.createElement('input'); - _this2.__checkbox.setAttribute('type', 'checkbox'); - function onChange() { - - _this.setValue(!_this.__prev); - - } - dom.bind(_this2.__checkbox, 'change', onChange, false); - _this2.domElement.appendChild(_this2.__checkbox); - _this2.updateDisplay(); - return _this2; - - } - createClass(BooleanController, [{ - key: 'setValue', - value: function setValue(v) { - - var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v); - if (this.__onFinishChange) { - - this.__onFinishChange.call(this, this.getValue()); - - } - this.__prev = this.getValue(); - return toReturn; - - } - }, { - key: 'updateDisplay', - value: function updateDisplay() { - - if (this.getValue() === true) { - - this.__checkbox.setAttribute('checked', 'checked'); - this.__checkbox.checked = true; - this.__prev = true; - - } else { - - this.__checkbox.checked = false; - this.__prev = false; - - } - return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this); - - } - }]); - return BooleanController; - -}(Controller); - -var OptionController = function (_Controller) { - - inherits(OptionController, _Controller); - function OptionController(object, property, opts) { - - classCallCheck(this, OptionController); - var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property)); - var options = opts; - var _this = _this2; - _this2.__select = document.createElement('select'); - if (Common.isArray(options)) { - - var map = {}; - Common.each(options, function (element) { - - map[element] = element; - - }); - options = map; - - } - Common.each(options, function (value, key) { - - var opt = document.createElement('option'); - opt.innerHTML = key; - opt.setAttribute('value', value); - _this.__select.appendChild(opt); - - }); - _this2.updateDisplay(); - dom.bind(_this2.__select, 'change', function () { - - var desiredValue = this.options[this.selectedIndex].value; - _this.setValue(desiredValue); - - }); - _this2.domElement.appendChild(_this2.__select); - return _this2; - - } - createClass(OptionController, [{ - key: 'setValue', - value: function setValue(v) { - - var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v); - if (this.__onFinishChange) { - - this.__onFinishChange.call(this, this.getValue()); - - } - return toReturn; - - } - }, { - key: 'updateDisplay', - value: function updateDisplay() { - - if (dom.isActive(this.__select)) return this; - this.__select.value = this.getValue(); - return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this); - - } - }]); - return OptionController; - -}(Controller); - -var StringController = function (_Controller) { - - inherits(StringController, _Controller); - function StringController(object, property) { - - classCallCheck(this, StringController); - var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property)); - var _this = _this2; - function onChange() { - - _this.setValue(_this.__input.value); - - } - function onBlur() { - - if (_this.__onFinishChange) { - - _this.__onFinishChange.call(_this, _this.getValue()); - - } - - } - _this2.__input = document.createElement('input'); - _this2.__input.setAttribute('type', 'text'); - dom.bind(_this2.__input, 'keyup', onChange); - dom.bind(_this2.__input, 'change', onChange); - dom.bind(_this2.__input, 'blur', onBlur); - dom.bind(_this2.__input, 'keydown', function (e) { - - if (e.keyCode === 13) { - - this.blur(); - - } - - }); - _this2.updateDisplay(); - _this2.domElement.appendChild(_this2.__input); - return _this2; - - } - createClass(StringController, [{ - key: 'updateDisplay', - value: function updateDisplay() { - - if (!dom.isActive(this.__input)) { - - this.__input.value = this.getValue(); - - } - return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this); - - } - }]); - return StringController; - -}(Controller); - -function numDecimals(x) { - - var _x = x.toString(); - if (_x.indexOf('.') > - 1) { - - return _x.length - _x.indexOf('.') - 1; - - } - return 0; - -} -var NumberController = function (_Controller) { - - inherits(NumberController, _Controller); - function NumberController(object, property, params) { - - classCallCheck(this, NumberController); - var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property)); - var _params = params || {}; - _this.__min = _params.min; - _this.__max = _params.max; - _this.__step = _params.step; - if (Common.isUndefined(_this.__step)) { - - if (_this.initialValue === 0) { - - _this.__impliedStep = 1; - - } else { - - _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10; - - } - - } else { - - _this.__impliedStep = _this.__step; - - } - _this.__precision = numDecimals(_this.__impliedStep); - return _this; - - } - createClass(NumberController, [{ - key: 'setValue', - value: function setValue(v) { - - var _v = v; - if (this.__min !== undefined && _v < this.__min) { - - _v = this.__min; - - } else if (this.__max !== undefined && _v > this.__max) { - - _v = this.__max; - - } - if (this.__step !== undefined && _v % this.__step !== 0) { - - _v = Math.round(_v / this.__step) * this.__step; - - } - return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v); - - } - }, { - key: 'min', - value: function min(minValue) { - - this.__min = minValue; - return this; - - } - }, { - key: 'max', - value: function max(maxValue) { - - this.__max = maxValue; - return this; - - } - }, { - key: 'step', - value: function step(stepValue) { - - this.__step = stepValue; - this.__impliedStep = stepValue; - this.__precision = numDecimals(stepValue); - return this; - - } - }]); - return NumberController; - -}(Controller); - -function roundToDecimal(value, decimals) { - - var tenTo = Math.pow(10, decimals); - return Math.round(value * tenTo) / tenTo; - -} -var NumberControllerBox = function (_NumberController) { - - inherits(NumberControllerBox, _NumberController); - function NumberControllerBox(object, property, params) { - - classCallCheck(this, NumberControllerBox); - var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params)); - _this2.__truncationSuspended = false; - var _this = _this2; - var prevY = void 0; - function onChange() { - - var attempted = parseFloat(_this.__input.value); - if (!Common.isNaN(attempted)) { - - _this.setValue(attempted); - - } - - } - function onFinish() { - - if (_this.__onFinishChange) { - - _this.__onFinishChange.call(_this, _this.getValue()); - - } - - } - function onBlur() { - - onFinish(); - - } - function onMouseDrag(e) { - - var diff = prevY - e.clientY; - _this.setValue(_this.getValue() + diff * _this.__impliedStep); - prevY = e.clientY; - - } - function onMouseUp() { - - dom.unbind(window, 'mousemove', onMouseDrag); - dom.unbind(window, 'mouseup', onMouseUp); - onFinish(); - - } - function onMouseDown(e) { - - dom.bind(window, 'mousemove', onMouseDrag); - dom.bind(window, 'mouseup', onMouseUp); - prevY = e.clientY; - - } - _this2.__input = document.createElement('input'); - _this2.__input.setAttribute('type', 'text'); - dom.bind(_this2.__input, 'change', onChange); - dom.bind(_this2.__input, 'blur', onBlur); - dom.bind(_this2.__input, 'mousedown', onMouseDown); - dom.bind(_this2.__input, 'keydown', function (e) { - - if (e.keyCode === 13) { - - _this.__truncationSuspended = true; - this.blur(); - _this.__truncationSuspended = false; - onFinish(); - - } - - }); - _this2.updateDisplay(); - _this2.domElement.appendChild(_this2.__input); - return _this2; - - } - createClass(NumberControllerBox, [{ - key: 'updateDisplay', - value: function updateDisplay() { - - this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision); - return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this); - - } - }]); - return NumberControllerBox; - -}(NumberController); - -function map(v, i1, i2, o1, o2) { - - return o1 + (o2 - o1) * ((v - i1) / (i2 - i1)); - -} -var NumberControllerSlider = function (_NumberController) { - - inherits(NumberControllerSlider, _NumberController); - function NumberControllerSlider(object, property, min, max, step) { - - classCallCheck(this, NumberControllerSlider); - var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step })); - var _this = _this2; - _this2.__background = document.createElement('div'); - _this2.__foreground = document.createElement('div'); - dom.bind(_this2.__background, 'mousedown', onMouseDown); - dom.bind(_this2.__background, 'touchstart', onTouchStart); - dom.addClass(_this2.__background, 'slider'); - dom.addClass(_this2.__foreground, 'slider-fg'); - function onMouseDown(e) { - - document.activeElement.blur(); - dom.bind(window, 'mousemove', onMouseDrag); - dom.bind(window, 'mouseup', onMouseUp); - onMouseDrag(e); - - } - function onMouseDrag(e) { - - e.preventDefault(); - var bgRect = _this.__background.getBoundingClientRect(); - _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)); - return false; - - } - function onMouseUp() { - - dom.unbind(window, 'mousemove', onMouseDrag); - dom.unbind(window, 'mouseup', onMouseUp); - if (_this.__onFinishChange) { - - _this.__onFinishChange.call(_this, _this.getValue()); - - } - - } - function onTouchStart(e) { - - if (e.touches.length !== 1) { - - return; - - } - dom.bind(window, 'touchmove', onTouchMove); - dom.bind(window, 'touchend', onTouchEnd); - onTouchMove(e); - - } - function onTouchMove(e) { - - var clientX = e.touches[0].clientX; - var bgRect = _this.__background.getBoundingClientRect(); - _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)); - - } - function onTouchEnd() { - - dom.unbind(window, 'touchmove', onTouchMove); - dom.unbind(window, 'touchend', onTouchEnd); - if (_this.__onFinishChange) { - - _this.__onFinishChange.call(_this, _this.getValue()); - - } - - } - _this2.updateDisplay(); - _this2.__background.appendChild(_this2.__foreground); - _this2.domElement.appendChild(_this2.__background); - return _this2; - - } - createClass(NumberControllerSlider, [{ - key: 'updateDisplay', - value: function updateDisplay() { - - var pct = (this.getValue() - this.__min) / (this.__max - this.__min); - this.__foreground.style.width = pct * 100 + '%'; - return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this); - - } - }]); - return NumberControllerSlider; - -}(NumberController); - -var FunctionController = function (_Controller) { - - inherits(FunctionController, _Controller); - function FunctionController(object, property, text) { - - classCallCheck(this, FunctionController); - var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property)); - var _this = _this2; - _this2.__button = document.createElement('div'); - _this2.__button.innerHTML = text === undefined ? 'Fire' : text; - dom.bind(_this2.__button, 'click', function (e) { - - e.preventDefault(); - _this.fire(); - return false; - - }); - dom.addClass(_this2.__button, 'button'); - _this2.domElement.appendChild(_this2.__button); - return _this2; - - } - createClass(FunctionController, [{ - key: 'fire', - value: function fire() { - - if (this.__onChange) { - - this.__onChange.call(this); - - } - this.getValue().call(this.object); - if (this.__onFinishChange) { - - this.__onFinishChange.call(this, this.getValue()); - - } - - } - }]); - return FunctionController; - -}(Controller); - -var ColorController = function (_Controller) { - - inherits(ColorController, _Controller); - function ColorController(object, property) { - - classCallCheck(this, ColorController); - var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property)); - _this2.__color = new Color(_this2.getValue()); - _this2.__temp = new Color(0); - var _this = _this2; - _this2.domElement = document.createElement('div'); - dom.makeSelectable(_this2.domElement, false); - _this2.__selector = document.createElement('div'); - _this2.__selector.className = 'selector'; - _this2.__saturation_field = document.createElement('div'); - _this2.__saturation_field.className = 'saturation-field'; - _this2.__field_knob = document.createElement('div'); - _this2.__field_knob.className = 'field-knob'; - _this2.__field_knob_border = '2px solid '; - _this2.__hue_knob = document.createElement('div'); - _this2.__hue_knob.className = 'hue-knob'; - _this2.__hue_field = document.createElement('div'); - _this2.__hue_field.className = 'hue-field'; - _this2.__input = document.createElement('input'); - _this2.__input.type = 'text'; - _this2.__input_textShadow = '0 1px 1px '; - dom.bind(_this2.__input, 'keydown', function (e) { - - if (e.keyCode === 13) { - - onBlur.call(this); - - } - - }); - dom.bind(_this2.__input, 'blur', onBlur); - dom.bind(_this2.__selector, 'mousedown', function () { - - dom.addClass(this, 'drag').bind(window, 'mouseup', function () { - - dom.removeClass(_this.__selector, 'drag'); - - }); - - }); - dom.bind(_this2.__selector, 'touchstart', function () { - - dom.addClass(this, 'drag').bind(window, 'touchend', function () { - - dom.removeClass(_this.__selector, 'drag'); - - }); - - }); - var valueField = document.createElement('div'); - Common.extend(_this2.__selector.style, { - width: '122px', - height: '102px', - padding: '3px', - backgroundColor: '#222', - boxShadow: '0px 1px 3px rgba(0,0,0,0.3)' - }); - Common.extend(_this2.__field_knob.style, { - position: 'absolute', - width: '12px', - height: '12px', - border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'), - boxShadow: '0px 1px 3px rgba(0,0,0,0.5)', - borderRadius: '12px', - zIndex: 1 - }); - Common.extend(_this2.__hue_knob.style, { - position: 'absolute', - width: '15px', - height: '2px', - borderRight: '4px solid #fff', - zIndex: 1 - }); - Common.extend(_this2.__saturation_field.style, { - width: '100px', - height: '100px', - border: '1px solid #555', - marginRight: '3px', - display: 'inline-block', - cursor: 'pointer' - }); - Common.extend(valueField.style, { - width: '100%', - height: '100%', - background: 'none' - }); - linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000'); - Common.extend(_this2.__hue_field.style, { - width: '15px', - height: '100px', - border: '1px solid #555', - cursor: 'ns-resize', - position: 'absolute', - top: '3px', - right: '3px' - }); - hueGradient(_this2.__hue_field); - Common.extend(_this2.__input.style, { - outline: 'none', - textAlign: 'center', - color: '#fff', - border: 0, - fontWeight: 'bold', - textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)' - }); - dom.bind(_this2.__saturation_field, 'mousedown', fieldDown); - dom.bind(_this2.__saturation_field, 'touchstart', fieldDown); - dom.bind(_this2.__field_knob, 'mousedown', fieldDown); - dom.bind(_this2.__field_knob, 'touchstart', fieldDown); - dom.bind(_this2.__hue_field, 'mousedown', fieldDownH); - dom.bind(_this2.__hue_field, 'touchstart', fieldDownH); - function fieldDown(e) { - - setSV(e); - dom.bind(window, 'mousemove', setSV); - dom.bind(window, 'touchmove', setSV); - dom.bind(window, 'mouseup', fieldUpSV); - dom.bind(window, 'touchend', fieldUpSV); - - } - function fieldDownH(e) { - - setH(e); - dom.bind(window, 'mousemove', setH); - dom.bind(window, 'touchmove', setH); - dom.bind(window, 'mouseup', fieldUpH); - dom.bind(window, 'touchend', fieldUpH); - - } - function fieldUpSV() { - - dom.unbind(window, 'mousemove', setSV); - dom.unbind(window, 'touchmove', setSV); - dom.unbind(window, 'mouseup', fieldUpSV); - dom.unbind(window, 'touchend', fieldUpSV); - onFinish(); - - } - function fieldUpH() { - - dom.unbind(window, 'mousemove', setH); - dom.unbind(window, 'touchmove', setH); - dom.unbind(window, 'mouseup', fieldUpH); - dom.unbind(window, 'touchend', fieldUpH); - onFinish(); - - } - function onBlur() { - - var i = interpret(this.value); - if (i !== false) { - - _this.__color.__state = i; - _this.setValue(_this.__color.toOriginal()); - - } else { - - this.value = _this.__color.toString(); - - } - - } - function onFinish() { - - if (_this.__onFinishChange) { - - _this.__onFinishChange.call(_this, _this.__color.toOriginal()); - - } - - } - _this2.__saturation_field.appendChild(valueField); - _this2.__selector.appendChild(_this2.__field_knob); - _this2.__selector.appendChild(_this2.__saturation_field); - _this2.__selector.appendChild(_this2.__hue_field); - _this2.__hue_field.appendChild(_this2.__hue_knob); - _this2.domElement.appendChild(_this2.__input); - _this2.domElement.appendChild(_this2.__selector); - _this2.updateDisplay(); - function setSV(e) { - - if (e.type.indexOf('touch') === - 1) { - - e.preventDefault(); - - } - var fieldRect = _this.__saturation_field.getBoundingClientRect(); - var _ref = e.touches && e.touches[0] || e, - clientX = _ref.clientX, - clientY = _ref.clientY; - var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left); - var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); - if (v > 1) { - - v = 1; - - } else if (v < 0) { - - v = 0; - - } - if (s > 1) { - - s = 1; - - } else if (s < 0) { - - s = 0; - - } - _this.__color.v = v; - _this.__color.s = s; - _this.setValue(_this.__color.toOriginal()); - return false; - - } - function setH(e) { - - if (e.type.indexOf('touch') === - 1) { - - e.preventDefault(); - - } - var fieldRect = _this.__hue_field.getBoundingClientRect(); - var _ref2 = e.touches && e.touches[0] || e, - clientY = _ref2.clientY; - var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); - if (h > 1) { - - h = 1; - - } else if (h < 0) { - - h = 0; - - } - _this.__color.h = h * 360; - _this.setValue(_this.__color.toOriginal()); - return false; - - } - return _this2; - - } - createClass(ColorController, [{ - key: 'updateDisplay', - value: function updateDisplay() { - - var i = interpret(this.getValue()); - if (i !== false) { - - var mismatch = false; - Common.each(Color.COMPONENTS, function (component) { - - if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) { - - mismatch = true; - return {}; - - } - - }, this); - if (mismatch) { - - Common.extend(this.__color.__state, i); - - } - - } - Common.extend(this.__temp.__state, this.__color.__state); - this.__temp.a = 1; - var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0; - var _flip = 255 - flip; - Common.extend(this.__field_knob.style, { - marginLeft: 100 * this.__color.s - 7 + 'px', - marginTop: 100 * (1 - this.__color.v) - 7 + 'px', - backgroundColor: this.__temp.toHexString(), - border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')' - }); - this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px'; - this.__temp.s = 1; - this.__temp.v = 1; - linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString()); - this.__input.value = this.__color.toString(); - Common.extend(this.__input.style, { - backgroundColor: this.__color.toHexString(), - color: 'rgb(' + flip + ',' + flip + ',' + flip + ')', - textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)' - }); - - } - }]); - return ColorController; - -}(Controller); -var vendors = ['-moz-', '-o-', '-webkit-', '-ms-', '']; -function linearGradient(elem, x, a, b) { - - elem.style.background = ''; - Common.each(vendors, function (vendor) { - - elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); '; - - }); - -} -function hueGradient(elem) { - - elem.style.background = ''; - elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);'; - elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; - elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; - elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; - elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; - -} - -var css = { - load: function load(url, indoc) { - - var doc = indoc || document; - var link = doc.createElement('link'); - link.type = 'text/css'; - link.rel = 'stylesheet'; - link.href = url; - doc.getElementsByTagName('head')[0].appendChild(link); - - }, - inject: function inject(cssContent, indoc) { - - var doc = indoc || document; - var injected = document.createElement('style'); - injected.type = 'text/css'; - injected.innerHTML = cssContent; - var head = doc.getElementsByTagName('head')[0]; - try { - - head.appendChild(injected); - - } catch (e) { - } - - } -}; - -var saveDialogContents = "
\n\n Here's the new load parameter for your GUI's constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI's constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
"; - -var ControllerFactory = function ControllerFactory(object, property) { - - var initialValue = object[property]; - if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) { - - return new OptionController(object, property, arguments[2]); - - } - if (Common.isNumber(initialValue)) { - - if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) { - - if (Common.isNumber(arguments[4])) { - - return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]); - - } - return new NumberControllerSlider(object, property, arguments[2], arguments[3]); - - } - if (Common.isNumber(arguments[4])) { - - return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] }); - - } - return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] }); - - } - if (Common.isString(initialValue)) { - - return new StringController(object, property); - - } - if (Common.isFunction(initialValue)) { - - return new FunctionController(object, property, ''); - - } - if (Common.isBoolean(initialValue)) { - - return new BooleanController(object, property); - - } - return null; - -}; - -function requestAnimationFrame(callback) { - - setTimeout(callback, 1000 / 60); - -} -var requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame; - -var CenteredDiv = function () { - - function CenteredDiv() { - - classCallCheck(this, CenteredDiv); - this.backgroundElement = document.createElement('div'); - Common.extend(this.backgroundElement.style, { - backgroundColor: 'rgba(0,0,0,0.8)', - top: 0, - left: 0, - display: 'none', - zIndex: '1000', - opacity: 0, - WebkitTransition: 'opacity 0.2s linear', - transition: 'opacity 0.2s linear' - }); - dom.makeFullscreen(this.backgroundElement); - this.backgroundElement.style.position = 'fixed'; - this.domElement = document.createElement('div'); - Common.extend(this.domElement.style, { - position: 'fixed', - display: 'none', - zIndex: '1001', - opacity: 0, - WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear', - transition: 'transform 0.2s ease-out, opacity 0.2s linear' - }); - document.body.appendChild(this.backgroundElement); - document.body.appendChild(this.domElement); - var _this = this; - dom.bind(this.backgroundElement, 'click', function () { - - _this.hide(); - - }); - - } - createClass(CenteredDiv, [{ - key: 'show', - value: function show() { - - var _this = this; - this.backgroundElement.style.display = 'block'; - this.domElement.style.display = 'block'; - this.domElement.style.opacity = 0; - this.domElement.style.webkitTransform = 'scale(1.1)'; - this.layout(); - Common.defer(function () { - - _this.backgroundElement.style.opacity = 1; - _this.domElement.style.opacity = 1; - _this.domElement.style.webkitTransform = 'scale(1)'; - - }); - - } - }, { - key: 'hide', - value: function hide() { - - var _this = this; - var hide = function hide() { - - _this.domElement.style.display = 'none'; - _this.backgroundElement.style.display = 'none'; - dom.unbind(_this.domElement, 'webkitTransitionEnd', hide); - dom.unbind(_this.domElement, 'transitionend', hide); - dom.unbind(_this.domElement, 'oTransitionEnd', hide); - - }; - dom.bind(this.domElement, 'webkitTransitionEnd', hide); - dom.bind(this.domElement, 'transitionend', hide); - dom.bind(this.domElement, 'oTransitionEnd', hide); - this.backgroundElement.style.opacity = 0; - this.domElement.style.opacity = 0; - this.domElement.style.webkitTransform = 'scale(1.1)'; - - } - }, { - key: 'layout', - value: function layout() { - - this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px'; - this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px'; - - } - }]); - return CenteredDiv; - -}(); - -var styleSheet = ___$insertStyle(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"); - -css.inject(styleSheet); -var CSS_NAMESPACE = 'dg'; -var HIDE_KEY_CODE = 72; -var CLOSE_BUTTON_HEIGHT = 20; -var DEFAULT_DEFAULT_PRESET_NAME = 'Default'; -var SUPPORTS_LOCAL_STORAGE = function () { - - try { - - return !!window.localStorage; - - } catch (e) { - - return false; - - } - -}(); -var SAVE_DIALOGUE = void 0; -var autoPlaceVirgin = true; -var autoPlaceContainer = void 0; -var hide = false; -var hideableGuis = []; -var GUI = function GUI(pars) { - - var _this = this; - var params = pars || {}; - this.domElement = document.createElement('div'); - this.__ul = document.createElement('ul'); - this.domElement.appendChild(this.__ul); - dom.addClass(this.domElement, CSS_NAMESPACE); - this.__folders = {}; - this.__controllers = []; - this.__rememberedObjects = []; - this.__rememberedObjectIndecesToControllers = []; - this.__listening = []; - params = Common.defaults(params, { - closeOnTop: false, - autoPlace: true, - width: GUI.DEFAULT_WIDTH - }); - params = Common.defaults(params, { - resizable: params.autoPlace, - hideable: params.autoPlace - }); - if (!Common.isUndefined(params.load)) { - - if (params.preset) { - - params.load.preset = params.preset; - - } - - } else { - - params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME }; - - } - if (Common.isUndefined(params.parent) && params.hideable) { - - hideableGuis.push(this); - - } - params.resizable = Common.isUndefined(params.parent) && params.resizable; - if (params.autoPlace && Common.isUndefined(params.scrollable)) { - - params.scrollable = true; - - } - var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true'; - var saveToLocalStorage = void 0; - var titleRow = void 0; - Object.defineProperties(this, - { - parent: { - get: function get$$1() { - - return params.parent; - - } - }, - scrollable: { - get: function get$$1() { - - return params.scrollable; - - } - }, - autoPlace: { - get: function get$$1() { - - return params.autoPlace; - - } - }, - closeOnTop: { - get: function get$$1() { - - return params.closeOnTop; - - } - }, - preset: { - get: function get$$1() { - - if (_this.parent) { - - return _this.getRoot().preset; - - } - return params.load.preset; - - }, - set: function set$$1(v) { - - if (_this.parent) { - - _this.getRoot().preset = v; - - } else { - - params.load.preset = v; - - } - setPresetSelectIndex(this); - _this.revert(); - - } - }, - width: { - get: function get$$1() { - - return params.width; - - }, - set: function set$$1(v) { - - params.width = v; - setWidth(_this, v); - - } - }, - name: { - get: function get$$1() { - - return params.name; - - }, - set: function set$$1(v) { - - params.name = v; - if (titleRow) { - - titleRow.innerHTML = params.name; - - } - - } - }, - closed: { - get: function get$$1() { - - return params.closed; - - }, - set: function set$$1(v) { - - params.closed = v; - if (params.closed) { - - dom.addClass(_this.__ul, GUI.CLASS_CLOSED); - - } else { - - dom.removeClass(_this.__ul, GUI.CLASS_CLOSED); - - } - this.onResize(); - if (_this.__closeButton) { - - _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED; - - } - - } - }, - load: { - get: function get$$1() { - - return params.load; - - } - }, - useLocalStorage: { - get: function get$$1() { - - return useLocalStorage; - - }, - set: function set$$1(bool) { - - if (SUPPORTS_LOCAL_STORAGE) { - - useLocalStorage = bool; - if (bool) { - - dom.bind(window, 'unload', saveToLocalStorage); - - } else { - - dom.unbind(window, 'unload', saveToLocalStorage); - - } - localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool); - - } - - } - } - }); - if (Common.isUndefined(params.parent)) { - - this.closed = params.closed || false; - dom.addClass(this.domElement, GUI.CLASS_MAIN); - dom.makeSelectable(this.domElement, false); - if (SUPPORTS_LOCAL_STORAGE) { - - if (useLocalStorage) { - - _this.useLocalStorage = true; - var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui')); - if (savedGui) { - - params.load = JSON.parse(savedGui); - - } - - } - - } - this.__closeButton = document.createElement('div'); - this.__closeButton.innerHTML = GUI.TEXT_CLOSED; - dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON); - if (params.closeOnTop) { - - dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP); - this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]); - - } else { - - dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM); - this.domElement.appendChild(this.__closeButton); - - } - dom.bind(this.__closeButton, 'click', function () { - - _this.closed = !_this.closed; - - }); - - } else { - - if (params.closed === undefined) { - - params.closed = true; - - } - var titleRowName = document.createTextNode(params.name); - dom.addClass(titleRowName, 'controller-name'); - titleRow = addRow(_this, titleRowName); - var onClickTitle = function onClickTitle(e) { - - e.preventDefault(); - _this.closed = !_this.closed; - return false; - - }; - dom.addClass(this.__ul, GUI.CLASS_CLOSED); - dom.addClass(titleRow, 'title'); - dom.bind(titleRow, 'click', onClickTitle); - if (!params.closed) { - - this.closed = false; - - } - - } - if (params.autoPlace) { - - if (Common.isUndefined(params.parent)) { - - if (autoPlaceVirgin) { - - autoPlaceContainer = document.createElement('div'); - dom.addClass(autoPlaceContainer, CSS_NAMESPACE); - dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER); - document.body.appendChild(autoPlaceContainer); - autoPlaceVirgin = false; - - } - autoPlaceContainer.appendChild(this.domElement); - dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE); - - } - if (!this.parent) { - - setWidth(_this, params.width); - - } - - } - this.__resizeHandler = function () { - - _this.onResizeDebounced(); - - }; - dom.bind(window, 'resize', this.__resizeHandler); - dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler); - dom.bind(this.__ul, 'transitionend', this.__resizeHandler); - dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler); - this.onResize(); - if (params.resizable) { - - addResizeHandle(this); - - } - saveToLocalStorage = function saveToLocalStorage() { - - if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') { - - localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject())); - - } - - }; - this.saveToLocalStorageIfPossible = saveToLocalStorage; - function resetWidth() { - - var root = _this.getRoot(); - root.width += 1; - Common.defer(function () { - - root.width -= 1; - - }); - - } - if (!params.parent) { - - resetWidth(); - - } - -}; -GUI.toggleHide = function () { - - hide = !hide; - Common.each(hideableGuis, function (gui) { - - gui.domElement.style.display = hide ? 'none' : ''; - - }); - -}; -GUI.CLASS_AUTO_PLACE = 'a'; -GUI.CLASS_AUTO_PLACE_CONTAINER = 'ac'; -GUI.CLASS_MAIN = 'main'; -GUI.CLASS_CONTROLLER_ROW = 'cr'; -GUI.CLASS_TOO_TALL = 'taller-than-window'; -GUI.CLASS_CLOSED = 'closed'; -GUI.CLASS_CLOSE_BUTTON = 'close-button'; -GUI.CLASS_CLOSE_TOP = 'close-top'; -GUI.CLASS_CLOSE_BOTTOM = 'close-bottom'; -GUI.CLASS_DRAG = 'drag'; -GUI.DEFAULT_WIDTH = 245; -GUI.TEXT_CLOSED = 'Close Controls'; -GUI.TEXT_OPEN = 'Open Controls'; -GUI._keydownHandler = function (e) { - - if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) { - - GUI.toggleHide(); - - } - -}; -dom.bind(window, 'keydown', GUI._keydownHandler, false); -Common.extend(GUI.prototype, - { - add: function add(object, property) { - - return _add(this, object, property, { - factoryArgs: Array.prototype.slice.call(arguments, 2) - }); - - }, - addColor: function addColor(object, property) { - - return _add(this, object, property, { - color: true - }); - - }, - remove: function remove(controller) { - - this.__ul.removeChild(controller.__li); - this.__controllers.splice(this.__controllers.indexOf(controller), 1); - var _this = this; - Common.defer(function () { - - _this.onResize(); - - }); - - }, - destroy: function destroy() { - - if (this.parent) { - - throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.'); - - } - if (this.autoPlace) { - - autoPlaceContainer.removeChild(this.domElement); - - } - var _this = this; - Common.each(this.__folders, function (subfolder) { - - _this.removeFolder(subfolder); - - }); - dom.unbind(window, 'keydown', GUI._keydownHandler, false); - removeListeners(this); - - }, - addFolder: function addFolder(name) { - - if (this.__folders[name] !== undefined) { - - throw new Error('You already have a folder in this GUI by the' + ' name "' + name + '"'); - - } - var newGuiParams = { name: name, parent: this }; - newGuiParams.autoPlace = this.autoPlace; - if (this.load && - this.load.folders && - this.load.folders[name]) { - - newGuiParams.closed = this.load.folders[name].closed; - newGuiParams.load = this.load.folders[name]; - - } - var gui = new GUI(newGuiParams); - this.__folders[name] = gui; - var li = addRow(this, gui.domElement); - dom.addClass(li, 'folder'); - return gui; - - }, - removeFolder: function removeFolder(folder) { - - this.__ul.removeChild(folder.domElement.parentElement); - delete this.__folders[folder.name]; - if (this.load && - this.load.folders && - this.load.folders[folder.name]) { - - delete this.load.folders[folder.name]; - - } - removeListeners(folder); - var _this = this; - Common.each(folder.__folders, function (subfolder) { - - folder.removeFolder(subfolder); - - }); - Common.defer(function () { - - _this.onResize(); - - }); - - }, - open: function open() { - - this.closed = false; - - }, - close: function close() { - - this.closed = true; - - }, - hide: function hide() { - - this.domElement.style.display = 'none'; - - }, - show: function show() { - - this.domElement.style.display = ''; - - }, - onResize: function onResize() { - - var root = this.getRoot(); - if (root.scrollable) { - - var top = dom.getOffset(root.__ul).top; - var h = 0; - Common.each(root.__ul.childNodes, function (node) { - - if (!(root.autoPlace && node === root.__save_row)) { - - h += dom.getHeight(node); - - } - - }); - if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) { - - dom.addClass(root.domElement, GUI.CLASS_TOO_TALL); - root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px'; - - } else { - - dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL); - root.__ul.style.height = 'auto'; - - } - - } - if (root.__resize_handle) { - - Common.defer(function () { - - root.__resize_handle.style.height = root.__ul.offsetHeight + 'px'; - - }); - - } - if (root.__closeButton) { - - root.__closeButton.style.width = root.width + 'px'; - - } - - }, - onResizeDebounced: Common.debounce(function () { - - this.onResize(); - - }, 50), - remember: function remember() { - - if (Common.isUndefined(SAVE_DIALOGUE)) { - - SAVE_DIALOGUE = new CenteredDiv(); - SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents; - - } - if (this.parent) { - - throw new Error('You can only call remember on a top level GUI.'); - - } - var _this = this; - Common.each(Array.prototype.slice.call(arguments), function (object) { - - if (_this.__rememberedObjects.length === 0) { - - addSaveMenu(_this); - - } - if (_this.__rememberedObjects.indexOf(object) === - 1) { - - _this.__rememberedObjects.push(object); - - } - - }); - if (this.autoPlace) { - - setWidth(this, this.width); - - } - - }, - getRoot: function getRoot() { - - var gui = this; - while (gui.parent) { - - gui = gui.parent; - - } - return gui; - - }, - getSaveObject: function getSaveObject() { - - var toReturn = this.load; - toReturn.closed = this.closed; - if (this.__rememberedObjects.length > 0) { - - toReturn.preset = this.preset; - if (!toReturn.remembered) { - - toReturn.remembered = {}; - - } - toReturn.remembered[this.preset] = getCurrentPreset(this); - - } - toReturn.folders = {}; - Common.each(this.__folders, function (element, key) { - - toReturn.folders[key] = element.getSaveObject(); - - }); - return toReturn; - - }, - save: function save() { - - if (!this.load.remembered) { - - this.load.remembered = {}; - - } - this.load.remembered[this.preset] = getCurrentPreset(this); - markPresetModified(this, false); - this.saveToLocalStorageIfPossible(); - - }, - saveAs: function saveAs(presetName) { - - if (!this.load.remembered) { - - this.load.remembered = {}; - this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true); - - } - this.load.remembered[presetName] = getCurrentPreset(this); - this.preset = presetName; - addPresetOption(this, presetName, true); - this.saveToLocalStorageIfPossible(); - - }, - revert: function revert(gui) { - - Common.each(this.__controllers, function (controller) { - - if (!this.getRoot().load.remembered) { - - controller.setValue(controller.initialValue); - - } else { - - recallSavedValue(gui || this.getRoot(), controller); - - } - if (controller.__onFinishChange) { - - controller.__onFinishChange.call(controller, controller.getValue()); - - } - - }, this); - Common.each(this.__folders, function (folder) { - - folder.revert(folder); - - }); - if (!gui) { - - markPresetModified(this.getRoot(), false); - - } - - }, - listen: function listen(controller) { - - var init = this.__listening.length === 0; - this.__listening.push(controller); - if (init) { - - updateDisplays(this.__listening); - - } - - }, - updateDisplay: function updateDisplay() { - - Common.each(this.__controllers, function (controller) { - - controller.updateDisplay(); - - }); - Common.each(this.__folders, function (folder) { - - folder.updateDisplay(); - - }); - - } - }); -function addRow(gui, newDom, liBefore) { - - var li = document.createElement('li'); - if (newDom) { - - li.appendChild(newDom); - - } - if (liBefore) { - - gui.__ul.insertBefore(li, liBefore); - - } else { - - gui.__ul.appendChild(li); - - } - gui.onResize(); - return li; - -} -function removeListeners(gui) { - - dom.unbind(window, 'resize', gui.__resizeHandler); - if (gui.saveToLocalStorageIfPossible) { - - dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible); - - } - -} -function markPresetModified(gui, modified) { - - var opt = gui.__preset_select[gui.__preset_select.selectedIndex]; - if (modified) { - - opt.innerHTML = opt.value + '*'; - - } else { - - opt.innerHTML = opt.value; - - } - -} -function augmentController(gui, li, controller) { - - controller.__li = li; - controller.__gui = gui; - Common.extend(controller, { - options: function options(_options) { - - if (arguments.length > 1) { - - var nextSibling = controller.__li.nextElementSibling; - controller.remove(); - return _add(gui, controller.object, controller.property, { - before: nextSibling, - factoryArgs: [Common.toArray(arguments)] - }); - - } - if (Common.isArray(_options) || Common.isObject(_options)) { - - var _nextSibling = controller.__li.nextElementSibling; - controller.remove(); - return _add(gui, controller.object, controller.property, { - before: _nextSibling, - factoryArgs: [_options] - }); - - } - - }, - name: function name(_name) { - - controller.__li.firstElementChild.firstElementChild.innerHTML = _name; - return controller; - - }, - listen: function listen() { - - controller.__gui.listen(controller); - return controller; - - }, - remove: function remove() { - - controller.__gui.remove(controller); - return controller; - - } - }); - if (controller instanceof NumberControllerSlider) { - - var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step }); - Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) { - - var pc = controller[method]; - var pb = box[method]; - controller[method] = box[method] = function () { - - var args = Array.prototype.slice.call(arguments); - pb.apply(box, args); - return pc.apply(controller, args); - - }; - - }); - dom.addClass(li, 'has-slider'); - controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild); - - } else if (controller instanceof NumberControllerBox) { - - var r = function r(returned) { - - if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) { - - var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML; - var wasListening = controller.__gui.__listening.indexOf(controller) > - 1; - controller.remove(); - var newController = _add(gui, controller.object, controller.property, { - before: controller.__li.nextElementSibling, - factoryArgs: [controller.__min, controller.__max, controller.__step] - }); - newController.name(oldName); - if (wasListening) newController.listen(); - return newController; - - } - return returned; - - }; - controller.min = Common.compose(r, controller.min); - controller.max = Common.compose(r, controller.max); - - } else if (controller instanceof BooleanController) { - - dom.bind(li, 'click', function () { - - dom.fakeEvent(controller.__checkbox, 'click'); - - }); - dom.bind(controller.__checkbox, 'click', function (e) { - - e.stopPropagation(); - - }); - - } else if (controller instanceof FunctionController) { - - dom.bind(li, 'click', function () { - - dom.fakeEvent(controller.__button, 'click'); - - }); - dom.bind(li, 'mouseover', function () { - - dom.addClass(controller.__button, 'hover'); - - }); - dom.bind(li, 'mouseout', function () { - - dom.removeClass(controller.__button, 'hover'); - - }); - - } else if (controller instanceof ColorController) { - - dom.addClass(li, 'color'); - controller.updateDisplay = Common.compose(function (val) { - - li.style.borderLeftColor = controller.__color.toString(); - return val; - - }, controller.updateDisplay); - controller.updateDisplay(); - - } - controller.setValue = Common.compose(function (val) { - - if (gui.getRoot().__preset_select && controller.isModified()) { - - markPresetModified(gui.getRoot(), true); - - } - return val; - - }, controller.setValue); - -} -function recallSavedValue(gui, controller) { - - var root = gui.getRoot(); - var matchedIndex = root.__rememberedObjects.indexOf(controller.object); - if (matchedIndex !== - 1) { - - var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex]; - if (controllerMap === undefined) { - - controllerMap = {}; - root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap; - - } - controllerMap[controller.property] = controller; - if (root.load && root.load.remembered) { - - var presetMap = root.load.remembered; - var preset = void 0; - if (presetMap[gui.preset]) { - - preset = presetMap[gui.preset]; - - } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) { - - preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME]; - - } else { - - return; - - } - if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) { - - var value = preset[matchedIndex][controller.property]; - controller.initialValue = value; - controller.setValue(value); - - } - - } - - } - -} -function _add(gui, object, property, params) { - - if (object[property] === undefined) { - - throw new Error('Object "' + object + '" has no property "' + property + '"'); - - } - var controller = void 0; - if (params.color) { - - controller = new ColorController(object, property); - - } else { - - var factoryArgs = [object, property].concat(params.factoryArgs); - controller = ControllerFactory.apply(gui, factoryArgs); - - } - if (params.before instanceof Controller) { - - params.before = params.before.__li; - - } - recallSavedValue(gui, controller); - dom.addClass(controller.domElement, 'c'); - var name = document.createElement('span'); - dom.addClass(name, 'property-name'); - name.innerHTML = controller.property; - var container = document.createElement('div'); - container.appendChild(name); - container.appendChild(controller.domElement); - var li = addRow(gui, container, params.before); - dom.addClass(li, GUI.CLASS_CONTROLLER_ROW); - if (controller instanceof ColorController) { - - dom.addClass(li, 'color'); - - } else { - - dom.addClass(li, _typeof(controller.getValue())); - - } - augmentController(gui, li, controller); - gui.__controllers.push(controller); - return controller; - -} -function getLocalStorageHash(gui, key) { - - return document.location.href + '.' + key; - -} -function addPresetOption(gui, name, setSelected) { - - var opt = document.createElement('option'); - opt.innerHTML = name; - opt.value = name; - gui.__preset_select.appendChild(opt); - if (setSelected) { - - gui.__preset_select.selectedIndex = gui.__preset_select.length - 1; - - } - -} -function showHideExplain(gui, explain) { - - explain.style.display = gui.useLocalStorage ? 'block' : 'none'; - -} -function addSaveMenu(gui) { - - var div = gui.__save_row = document.createElement('li'); - dom.addClass(gui.domElement, 'has-save'); - gui.__ul.insertBefore(div, gui.__ul.firstChild); - dom.addClass(div, 'save-row'); - var gears = document.createElement('span'); - gears.innerHTML = ' '; - dom.addClass(gears, 'button gears'); - var button = document.createElement('span'); - button.innerHTML = 'Save'; - dom.addClass(button, 'button'); - dom.addClass(button, 'save'); - var button2 = document.createElement('span'); - button2.innerHTML = 'New'; - dom.addClass(button2, 'button'); - dom.addClass(button2, 'save-as'); - var button3 = document.createElement('span'); - button3.innerHTML = 'Revert'; - dom.addClass(button3, 'button'); - dom.addClass(button3, 'revert'); - var select = gui.__preset_select = document.createElement('select'); - if (gui.load && gui.load.remembered) { - - Common.each(gui.load.remembered, function (value, key) { - - addPresetOption(gui, key, key === gui.preset); - - }); - - } else { - - addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false); - - } - dom.bind(select, 'change', function () { - - for (var index = 0; index < gui.__preset_select.length; index++) { - - gui.__preset_select[index].innerHTML = gui.__preset_select[index].value; - - } - gui.preset = this.value; - - }); - div.appendChild(select); - div.appendChild(gears); - div.appendChild(button); - div.appendChild(button2); - div.appendChild(button3); - if (SUPPORTS_LOCAL_STORAGE) { - - var explain = document.getElementById('dg-local-explain'); - var localStorageCheckBox = document.getElementById('dg-local-storage'); - var saveLocally = document.getElementById('dg-save-locally'); - saveLocally.style.display = 'block'; - if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') { - - localStorageCheckBox.setAttribute('checked', 'checked'); - - } - showHideExplain(gui, explain); - dom.bind(localStorageCheckBox, 'change', function () { - - gui.useLocalStorage = !gui.useLocalStorage; - showHideExplain(gui, explain); - - }); - - } - var newConstructorTextArea = document.getElementById('dg-new-constructor'); - dom.bind(newConstructorTextArea, 'keydown', function (e) { - - if (e.metaKey && (e.which === 67 || e.keyCode === 67)) { - - SAVE_DIALOGUE.hide(); - - } - - }); - dom.bind(gears, 'click', function () { - - newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2); - SAVE_DIALOGUE.show(); - newConstructorTextArea.focus(); - newConstructorTextArea.select(); - - }); - dom.bind(button, 'click', function () { - - gui.save(); - - }); - dom.bind(button2, 'click', function () { - - var presetName = prompt('Enter a new preset name.'); - if (presetName) { - - gui.saveAs(presetName); - - } - - }); - dom.bind(button3, 'click', function () { - - gui.revert(); - - }); - -} -function addResizeHandle(gui) { - - var pmouseX = void 0; - gui.__resize_handle = document.createElement('div'); - Common.extend(gui.__resize_handle.style, { - width: '6px', - marginLeft: '-3px', - height: '200px', - cursor: 'ew-resize', - position: 'absolute' - }); - function drag(e) { - - e.preventDefault(); - gui.width += pmouseX - e.clientX; - gui.onResize(); - pmouseX = e.clientX; - return false; - - } - function dragStop() { - - dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG); - dom.unbind(window, 'mousemove', drag); - dom.unbind(window, 'mouseup', dragStop); - - } - function dragStart(e) { - - e.preventDefault(); - pmouseX = e.clientX; - dom.addClass(gui.__closeButton, GUI.CLASS_DRAG); - dom.bind(window, 'mousemove', drag); - dom.bind(window, 'mouseup', dragStop); - return false; - - } - dom.bind(gui.__resize_handle, 'mousedown', dragStart); - dom.bind(gui.__closeButton, 'mousedown', dragStart); - gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild); - -} -function setWidth(gui, w) { - - gui.domElement.style.width = w + 'px'; - if (gui.__save_row && gui.autoPlace) { - - gui.__save_row.style.width = w + 'px'; - - } - if (gui.__closeButton) { - - gui.__closeButton.style.width = w + 'px'; - - } - -} -function getCurrentPreset(gui, useInitialValues) { - - var toReturn = {}; - Common.each(gui.__rememberedObjects, function (val, index) { - - var savedValues = {}; - var controllerMap = gui.__rememberedObjectIndecesToControllers[index]; - Common.each(controllerMap, function (controller, property) { - - savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue(); - - }); - toReturn[index] = savedValues; - - }); - return toReturn; - -} -function setPresetSelectIndex(gui) { - - for (var index = 0; index < gui.__preset_select.length; index++) { - - if (gui.__preset_select[index].value === gui.preset) { - - gui.__preset_select.selectedIndex = index; - - } - - } - -} -function updateDisplays(controllerArray) { - - if (controllerArray.length !== 0) { - - requestAnimationFrame$1.call(window, function () { - - updateDisplays(controllerArray); - - }); - - } - Common.each(controllerArray, function (c) { - - c.updateDisplay(); - - }); - -} - -var color = { - Color: Color, - math: ColorMath, - interpret: interpret -}; -var controllers = { - Controller: Controller, - BooleanController: BooleanController, - OptionController: OptionController, - StringController: StringController, - NumberController: NumberController, - NumberControllerBox: NumberControllerBox, - NumberControllerSlider: NumberControllerSlider, - FunctionController: FunctionController, - ColorController: ColorController -}; -var dom$1 = { dom: dom }; -var gui = { GUI: GUI }; -var GUI$1 = GUI; -var index = { - color: color, - controllers: controllers, - dom: dom$1, - gui: gui, - GUI: GUI$1 -}; - -export { color, controllers, dom$1 as dom, gui, GUI$1 as GUI }; -export default index; diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts deleted file mode 100644 index 9d8eaff1..00000000 --- a/packages/shared/src/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as Constants from './constants'; -import * as Defs from './defs'; -import * as Math from './math'; -import * as EntityManager from './entity-manager'; -import * as SpatialHashGrid from './spatial-hash-grid'; -import * as Noise from './noise'; -import * as TerrainHeight from './terrain-height'; -import * as TerrainConstants from './terrain-constants'; -import * as Spline from './spline'; -import GUI from './dat.gui.module' - -import type * as GlobalTypes from './globaltypes'; - -export type {GlobalTypes} - -export { - Constants, - Defs, - Math, - EntityManager, - SpatialHashGrid, - Noise, - TerrainHeight, - TerrainConstants, - Spline, - GUI -}; \ No newline at end of file diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json deleted file mode 100644 index ddc517c3..00000000 --- a/packages/shared/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "../../tsconfig.packages.json", - "compilerOptions": { - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "composite": true, - "rootDir": "src", - "outDir": "dist", - "lib": ["dom"], - "allowJs": true, - "checkJs": false - }, - "include": [ - "src/*.ts" -, "src/dat.gui.module.ts" ], - "exclude": [ - "dist", - "node_modules" - ] -} \ No newline at end of file diff --git a/packages/shared/tsconfig.tsbuildinfo b/packages/shared/tsconfig.tsbuildinfo deleted file mode 100644 index f49d2bd5..00000000 --- a/packages/shared/tsconfig.tsbuildinfo +++ /dev/null @@ -1,5384 +0,0 @@ -{ - "program": { - "fileInfos": { - "../node_modules/typescript/lib/lib.es5.d.ts": { - "version": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", - "signature": "b3584bc5798ed422ce2516df360ffa9cf2d80b5eae852867db9ba3743145f895", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.d.ts": { - "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", - "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", - "affectsGlobalScope": false - }, - "../node_modules/typescript/lib/lib.es2016.d.ts": { - "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", - "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", - "affectsGlobalScope": false - }, - "../node_modules/typescript/lib/lib.es2017.d.ts": { - "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", - "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", - "affectsGlobalScope": false - }, - "../node_modules/typescript/lib/lib.es2018.d.ts": { - "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", - "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", - "affectsGlobalScope": false - }, - "../node_modules/typescript/lib/lib.dom.d.ts": { - "version": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", - "signature": "feeeb1dd8a80fb76be42b0426e8f3ffa9bdef3c2f3c12c147e7660b1c5ba8b3b", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.core.d.ts": { - "version": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", - "signature": "46ee15e9fefa913333b61eaf6b18885900b139867d89832a515059b62cf16a17", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { - "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", - "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { - "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", - "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { - "version": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", - "signature": "8b2a5df1ce95f78f6b74f1a555ccdb6baab0486b42d8345e0871dd82811f9b9a", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { - "version": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", - "signature": "2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { - "version": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", - "signature": "810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { - "version": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", - "signature": "62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { - "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", - "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { - "version": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", - "signature": "9d122b7e8c1a5c72506eea50c0973cba55b92b5532d5cafa8a6ce2c547d57551", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { - "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", - "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2017.object.d.ts": { - "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", - "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { - "version": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", - "signature": "7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2017.string.d.ts": { - "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", - "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { - "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", - "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { - "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", - "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { - "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", - "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { - "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", - "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2018.intl.d.ts": { - "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", - "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2018.promise.d.ts": { - "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", - "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { - "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", - "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { - "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", - "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", - "affectsGlobalScope": true - }, - "../node_modules/typescript/lib/lib.esnext.intl.d.ts": { - "version": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", - "signature": "506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e", - "affectsGlobalScope": true - }, - "../node_modules/three/src/polyfills.d.ts": { - "version": "bae8640f98f4800ab31583b8a680e283d8f7e51d1d601f23a2461ebf2a35b7b6", - "signature": "bae8640f98f4800ab31583b8a680e283d8f7e51d1d601f23a2461ebf2a35b7b6", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Quaternion.d.ts": { - "version": "9ec8c22c765b53d591c4f4ced7f169179b3abdaa532183fdd2de9809f53e8447", - "signature": "9ec8c22c765b53d591c4f4ced7f169179b3abdaa532183fdd2de9809f53e8447", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Euler.d.ts": { - "version": "cf1e60d3ac816e692299db9077abd3ecd340f2efb0b988cba55f7e9a4834314a", - "signature": "cf1e60d3ac816e692299db9077abd3ecd340f2efb0b988cba55f7e9a4834314a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Matrix3.d.ts": { - "version": "02f7c43cb5d67591df1fdc9a56c3cc75b68c383c6358e7b53b2d2daa583d6895", - "signature": "02f7c43cb5d67591df1fdc9a56c3cc75b68c383c6358e7b53b2d2daa583d6895", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/Layers.d.ts": { - "version": "f71f5c980f73a75a95234c32a86e6ca6fd77740b658cb1aec643e68ea5865b0c", - "signature": "f71f5c980f73a75a95234c32a86e6ca6fd77740b658cb1aec643e68ea5865b0c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/constants.d.ts": { - "version": "067d2686532727f5a184082424fb5e481ebc109b8ec9a13998369fd2ebdb42c9", - "signature": "067d2686532727f5a184082424fb5e481ebc109b8ec9a13998369fd2ebdb42c9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/BufferAttribute.d.ts": { - "version": "e58657ba619d49e9fd6a7f36830d391d69deff7253de0caf143e3e902870f353", - "signature": "e58657ba619d49e9fd6a7f36830d391d69deff7253de0caf143e3e902870f353", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Color.d.ts": { - "version": "3a358af08f4209e1170f587cc051d83561aeaaad8f55e442a63e1009ef5e038a", - "signature": "3a358af08f4209e1170f587cc051d83561aeaaad8f55e442a63e1009ef5e038a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/scenes/Fog.d.ts": { - "version": "76e868b09261bf9dd4d7ce3c9fd034bda1ed1aa7a8aae497a7e5ae0a258b169e", - "signature": "76e868b09261bf9dd4d7ce3c9fd034bda1ed1aa7a8aae497a7e5ae0a258b169e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Vector2.d.ts": { - "version": "0a50cf8b125d4376f6f76feec5bd6677a1a76e467d6dd87de5f2af00bbefb7da", - "signature": "0a50cf8b125d4376f6f76feec5bd6677a1a76e467d6dd87de5f2af00bbefb7da", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Triangle.d.ts": { - "version": "f601e9de54b5bc335a60d5602b651b77d2c7d415730f5027eac51a4a8fdbe7e1", - "signature": "f601e9de54b5bc335a60d5602b651b77d2c7d415730f5027eac51a4a8fdbe7e1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Box3.d.ts": { - "version": "23080fb370ff46bed1ad7d0310145b6af7c990a452bb36445e370d22bd2b081e", - "signature": "23080fb370ff46bed1ad7d0310145b6af7c990a452bb36445e370d22bd2b081e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Sphere.d.ts": { - "version": "83b166f487e4358a41ddd61d5da37f89e124ab51eb9ec63d231f72622ac4c715", - "signature": "83b166f487e4358a41ddd61d5da37f89e124ab51eb9ec63d231f72622ac4c715", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Line3.d.ts": { - "version": "eec9dc5597317c41df8676a0c0693f613519e70d9289fe8274052bd2803beb86", - "signature": "eec9dc5597317c41df8676a0c0693f613519e70d9289fe8274052bd2803beb86", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Plane.d.ts": { - "version": "cf3d11589dd4e3bd8c69220fd933d268ca95feeec62a1f5390e78daeb4418cd3", - "signature": "cf3d11589dd4e3bd8c69220fd933d268ca95feeec62a1f5390e78daeb4418cd3", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/EventDispatcher.d.ts": { - "version": "2d126f01b385e46a6954e9b759175445a70589475aa0bd106d61f0f44ba16824", - "signature": "2d126f01b385e46a6954e9b759175445a70589475aa0bd106d61f0f44ba16824", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts": { - "version": "6beeb177b3e112a823e9b78e5a929a2b337caf21b851b0ad8b76554fb40652f4", - "signature": "6beeb177b3e112a823e9b78e5a929a2b337caf21b851b0ad8b76554fb40652f4", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts": { - "version": "6d8e630c34b0da8bc4876615199656aed775344924292591d3574e2eae7282d0", - "signature": "6d8e630c34b0da8bc4876615199656aed775344924292591d3574e2eae7282d0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/Material.d.ts": { - "version": "d7d4dfbf4d98b8ef0ea72d71d4cca36005f8bfcc5ce970a7cd4270a5ca8f9a60", - "signature": "d7d4dfbf4d98b8ef0ea72d71d4cca36005f8bfcc5ce970a7cd4270a5ca8f9a60", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/Texture.d.ts": { - "version": "34bc59a64626bdc0af3a8b3b92c40131fc2f9bc3a59de457aaf86dfd1d8046c1", - "signature": "34bc59a64626bdc0af3a8b3b92c40131fc2f9bc3a59de457aaf86dfd1d8046c1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/CubeTexture.d.ts": { - "version": "7c70c3f3845a0b2d183ced4b134b518e2b01d760eb562b6ad34c6585944a02d7", - "signature": "7c70c3f3845a0b2d183ced4b134b518e2b01d760eb562b6ad34c6585944a02d7", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts": { - "version": "c0c438afa18dfa53e44da1ee170d112cd662df7891de46c5b6065a6102a0c38e", - "signature": "c0c438afa18dfa53e44da1ee170d112cd662df7891de46c5b6065a6102a0c38e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/scenes/Scene.d.ts": { - "version": "85439264469a6e41174476497764e63674aaa142c96989d1831d559f409e42d3", - "signature": "85439264469a6e41174476497764e63674aaa142c96989d1831d559f409e42d3", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts": { - "version": "96f66a2d50f8755808d11dfe0f059e9843aa2044815e024728b97198531aa450", - "signature": "96f66a2d50f8755808d11dfe0f059e9843aa2044815e024728b97198531aa450", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts": { - "version": "a9c5d065fdf15f2ad2172bc77c05d521b0e1974fb347ed6e2746d4fe9309bdfd", - "signature": "a9c5d065fdf15f2ad2172bc77c05d521b0e1974fb347ed6e2746d4fe9309bdfd", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts": { - "version": "c1a2eb8f17703db13432aa789cc42f17cfe367ad1642420c151b05483b5bcc8a", - "signature": "c1a2eb8f17703db13432aa789cc42f17cfe367ad1642420c151b05483b5bcc8a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts": { - "version": "6aeaf84f78365709724e236f3c970ed86b53b9139a6596daea708cde04173282", - "signature": "6aeaf84f78365709724e236f3c970ed86b53b9139a6596daea708cde04173282", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts": { - "version": "4a62aafd24dbac76740d630a5fca5ec5c622bf1c70027ca81ef781250f7b21ea", - "signature": "4a62aafd24dbac76740d630a5fca5ec5c622bf1c70027ca81ef781250f7b21ea", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLUtils.d.ts": { - "version": "561d2843063b97c9eb497a338e3cca20aa2921f0022e23bee74f8ea7e48d01e6", - "signature": "561d2843063b97c9eb497a338e3cca20aa2921f0022e23bee74f8ea7e48d01e6", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts": { - "version": "5c4d869f83138555d1e10063609e51f7ea63d985793a1398d1b516401cddb66c", - "signature": "5c4d869f83138555d1e10063609e51f7ea63d985793a1398d1b516401cddb66c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts": { - "version": "153b366509ec94cfd9458d31d82bd26b815088c194e021bc887cc87c1abf434e", - "signature": "153b366509ec94cfd9458d31d82bd26b815088c194e021bc887cc87c1abf434e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts": { - "version": "75433b83c53cc302b880653d1a079eb68f9e246611a82e90c56fe93ddc4eedd8", - "signature": "75433b83c53cc302b880653d1a079eb68f9e246611a82e90c56fe93ddc4eedd8", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts": { - "version": "da0b75fde997f5293ac95bfd8484e1570660bb18b9e7a7c13bfca9cd49180669", - "signature": "da0b75fde997f5293ac95bfd8484e1570660bb18b9e7a7c13bfca9cd49180669", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts": { - "version": "a44f7f81b0eb053b5d76ec1213e8611c19985746f827ebb3587213316155467e", - "signature": "a44f7f81b0eb053b5d76ec1213e8611c19985746f827ebb3587213316155467e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/Group.d.ts": { - "version": "19849c22ba216ca4389438d66abc6a2d0e4f99177f84252cdb1b6e06287a8f91", - "signature": "19849c22ba216ca4389438d66abc6a2d0e4f99177f84252cdb1b6e06287a8f91", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/Face3.d.ts": { - "version": "7569cf62cb606aba7efe3432e28851ea83d35307f94cdf6229a2a2c0742a6739", - "signature": "7569cf62cb606aba7efe3432e28851ea83d35307f94cdf6229a2a2c0742a6739", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Ray.d.ts": { - "version": "a3fd9e78ed03f244031594a7b15d897b28f4aabf8b520a14fcde352593035250", - "signature": "a3fd9e78ed03f244031594a7b15d897b28f4aabf8b520a14fcde352593035250", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/Raycaster.d.ts": { - "version": "9fd6bb73427912a6602c62c84a680744f4834e8a8ca06695663e208a6f8e0965", - "signature": "9fd6bb73427912a6602c62c84a680744f4834e8a8ca06695663e208a6f8e0965", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/Mesh.d.ts": { - "version": "fe818a2b08021eb4bedc9d4d1f172c28b90795a838222dfd8724bf7d8e8f99b8", - "signature": "fe818a2b08021eb4bedc9d4d1f172c28b90795a838222dfd8724bf7d8e8f99b8", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/Bone.d.ts": { - "version": "884ca9a302751744e80f8c14d866e3e7063029725bef8228647a8678ac4f425b", - "signature": "884ca9a302751744e80f8c14d866e3e7063029725bef8228647a8678ac4f425b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Interpolant.d.ts": { - "version": "fa86859bf96acbf32ddb71bec8465139b31573cd7017fb3cd8cddf69d15e77cb", - "signature": "fa86859bf96acbf32ddb71bec8465139b31573cd7017fb3cd8cddf69d15e77cb", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts": { - "version": "f493d1c4104b3e6f49cbb2863b2c8b533ba07862f4d6321fb8aee59cac2ec9b9", - "signature": "f493d1c4104b3e6f49cbb2863b2c8b533ba07862f4d6321fb8aee59cac2ec9b9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts": { - "version": "81256ce2c0798ecbc7d8c5bc93aad16b10ef4ab2a244599a8c12f2be019a88e1", - "signature": "81256ce2c0798ecbc7d8c5bc93aad16b10ef4ab2a244599a8c12f2be019a88e1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts": { - "version": "e64294f2454f8e5b8879e1c28cd2867a46e2a9da21d12e5fa4a45213e6045477", - "signature": "e64294f2454f8e5b8879e1c28cd2867a46e2a9da21d12e5fa4a45213e6045477", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/KeyframeTrack.d.ts": { - "version": "49c545febb655c32209e04cc841aea93946a558824a322f289331a85d2c67788", - "signature": "49c545febb655c32209e04cc841aea93946a558824a322f289331a85d2c67788", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/AnimationClip.d.ts": { - "version": "a0eae98fb28afab7df8296cbfa4a830cda6592b69ee646a0476b81a16403d444", - "signature": "a0eae98fb28afab7df8296cbfa4a830cda6592b69ee646a0476b81a16403d444", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/Geometry.d.ts": { - "version": "86538ad7fdd3ce90f6231f8f522f035a24c7429834cad844dd2780d74eca90cf", - "signature": "86538ad7fdd3ce90f6231f8f522f035a24c7429834cad844dd2780d74eca90cf", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/DirectGeometry.d.ts": { - "version": "88e5d0522eb347140ee5440e7d6482a31448f96e47280f87cb45410e3ce0c06a", - "signature": "88e5d0522eb347140ee5440e7d6482a31448f96e47280f87cb45410e3ce0c06a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/InterleavedBuffer.d.ts": { - "version": "d60f3568e03a2636f93a38a27ebd84dc92d934a228db48157276ffde58d2786a", - "signature": "d60f3568e03a2636f93a38a27ebd84dc92d934a228db48157276ffde58d2786a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts": { - "version": "4a855f3b01b2f37ee5b763bb52dd22ff19620bc46602b13fc5c4b933c1e61307", - "signature": "4a855f3b01b2f37ee5b763bb52dd22ff19620bc46602b13fc5c4b933c1e61307", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/BufferGeometry.d.ts": { - "version": "4a356b4a0ab172ef86af204e4a52db24d3566139c285577fbd20cd51ea73c5a9", - "signature": "4a356b4a0ab172ef86af204e4a52db24d3566139c285577fbd20cd51ea73c5a9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts": { - "version": "cea0f4c77ded3cb1c25e1c325569ab31dd02d603a1859ca1002f859c10e21451", - "signature": "cea0f4c77ded3cb1c25e1c325569ab31dd02d603a1859ca1002f859c10e21451", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/LightShadow.d.ts": { - "version": "c50ceef0349e0b5ebc2df522734e8ab4af187be106d2ce2ffaefca04ea38894e", - "signature": "c50ceef0349e0b5ebc2df522734e8ab4af187be106d2ce2ffaefca04ea38894e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/Light.d.ts": { - "version": "8bd0d45b67bd01369ec8715a8b39e19eea762ca9306824bb1933944c39dbd541", - "signature": "8bd0d45b67bd01369ec8715a8b39e19eea762ca9306824bb1933944c39dbd541", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts": { - "version": "41a6372dea8f77ac0d1bc71c4da1ddb5447d9a34e54c3daaea961d3d9a46fdbb", - "signature": "41a6372dea8f77ac0d1bc71c4da1ddb5447d9a34e54c3daaea961d3d9a46fdbb", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webxr/WebXR.d.ts": { - "version": "394706c99cc2cbe0aac93000c1ca60ff546f7d3987e91fff9b8dd40dd4bb7bd5", - "signature": "394706c99cc2cbe0aac93000c1ca60ff546f7d3987e91fff9b8dd40dd4bb7bd5", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts": { - "version": "002191707252b65379f26389a7162df2d2e1941a98109d4bfb08c9b0793d4467", - "signature": "002191707252b65379f26389a7162df2d2e1941a98109d4bfb08c9b0793d4467", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/WebGLRenderer.d.ts": { - "version": "39376f690117cd5e30a0be16443c05d06671e56a3925938310ec7f0e535d8536", - "signature": "39376f690117cd5e30a0be16443c05d06671e56a3925938310ec7f0e535d8536", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/Object3D.d.ts": { - "version": "f985551352439f25b8b616269345c3c22a7b14723d99953ff87f43b8e4062eb3", - "signature": "f985551352439f25b8b616269345c3c22a7b14723d99953ff87f43b8e4062eb3", - "affectsGlobalScope": false - }, - "../node_modules/three/src/cameras/Camera.d.ts": { - "version": "89ddef08571f074c3794518cc270a879626b3d238d7027d24b3e588ac128357b", - "signature": "89ddef08571f074c3794518cc270a879626b3d238d7027d24b3e588ac128357b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Spherical.d.ts": { - "version": "dd789bdbf32baab95bf257952f074d6e321b8e5815f18c1f4a97cc134a1cf79f", - "signature": "dd789bdbf32baab95bf257952f074d6e321b8e5815f18c1f4a97cc134a1cf79f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Cylindrical.d.ts": { - "version": "54cae366ddd40cdb1988e6acdbc25b671f21f4ea7c06b2d062248fbbbf95044e", - "signature": "54cae366ddd40cdb1988e6acdbc25b671f21f4ea7c06b2d062248fbbbf95044e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Vector3.d.ts": { - "version": "641d20fc7ca0b72111c3d586cfedcd2d4860fc7aa7c0b83c571199f49d4129cd", - "signature": "641d20fc7ca0b72111c3d586cfedcd2d4860fc7aa7c0b83c571199f49d4129cd", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Matrix4.d.ts": { - "version": "7322b2e598fa9946e883d1a139da65bc87c65d2cc6300817f8c6482f295a982c", - "signature": "7322b2e598fa9946e883d1a139da65bc87c65d2cc6300817f8c6482f295a982c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Vector4.d.ts": { - "version": "6d190fb2b8290b4407c519881455c72ba3a0ffa5fafc3284376f1b6fc1dec34e", - "signature": "6d190fb2b8290b4407c519881455c72ba3a0ffa5fafc3284376f1b6fc1dec34e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/DepthTexture.d.ts": { - "version": "b52c7b58a354a17e021a04ff11d91244438310b632c21f796c9b83b50f5733fc", - "signature": "b52c7b58a354a17e021a04ff11d91244438310b632c21f796c9b83b50f5733fc", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts": { - "version": "5072a6ac1050d7c025955571793dbac357d92618452fe625def1be4a2455d59f", - "signature": "5072a6ac1050d7c025955571793dbac357d92618452fe625def1be4a2455d59f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": { - "version": "d0fd71a16bbde18706197532a11682aea4031a780b81b5f6cc028893f6cc7bfd", - "signature": "d0fd71a16bbde18706197532a11682aea4031a780b81b5f6cc028893f6cc7bfd", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/WebGL1Renderer.d.ts": { - "version": "9435bba8873eca583b5e94a0fcc8dfb064a59c3cf028a2a68d007db1a0b4de86", - "signature": "9435bba8873eca583b5e94a0fcc8dfb064a59c3cf028a2a68d007db1a0b4de86", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/shaders/UniformsUtils.d.ts": { - "version": "374df830ffcdae74590aa3e45d784bfce8909cc215c7796785937d098964e4c2", - "signature": "374df830ffcdae74590aa3e45d784bfce8909cc215c7796785937d098964e4c2", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/shaders/ShaderChunk.d.ts": { - "version": "ec26ea0ddbb4c6e316d35469b76ca822f7170e06c65f3015dc5b8d68e1913398", - "signature": "ec26ea0ddbb4c6e316d35469b76ca822f7170e06c65f3015dc5b8d68e1913398", - "affectsGlobalScope": false - }, - "../node_modules/three/src/scenes/FogExp2.d.ts": { - "version": "c0577ecf5bdd534c2612c879873e2565ab5554c82091192380b0ca8e8f4898c9", - "signature": "c0577ecf5bdd534c2612c879873e2565ab5554c82091192380b0ca8e8f4898c9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/ShadowMaterial.d.ts": { - "version": "73d6f7d82bdc40bf33fa0a82d84d607aa9cfb4738ab83ab232f97a6bd69c00fd", - "signature": "73d6f7d82bdc40bf33fa0a82d84d607aa9cfb4738ab83ab232f97a6bd69c00fd", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/SpriteMaterial.d.ts": { - "version": "22d9e3ee38db808e88cda09ac2b1cd31d2e11f0d1c7a7841cb81a9f92b550b1f", - "signature": "22d9e3ee38db808e88cda09ac2b1cd31d2e11f0d1c7a7841cb81a9f92b550b1f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/ShaderMaterial.d.ts": { - "version": "ccc4d960e8ca3408590ac63975ab2ac3cb4fff4cd29cb7d9d5f7a5c95924239b", - "signature": "ccc4d960e8ca3408590ac63975ab2ac3cb4fff4cd29cb7d9d5f7a5c95924239b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/RawShaderMaterial.d.ts": { - "version": "6e76375967f95c970091a2a3378b1f33c96e7a9d0c7c694fbbcd1364501ccbda", - "signature": "6e76375967f95c970091a2a3378b1f33c96e7a9d0c7c694fbbcd1364501ccbda", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/PointsMaterial.d.ts": { - "version": "1a631f45b430df4b2694616daf02d09f282de052df2ff28535c4ebe9cbd6850a", - "signature": "1a631f45b430df4b2694616daf02d09f282de052df2ff28535c4ebe9cbd6850a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshStandardMaterial.d.ts": { - "version": "a5a617fe935e64642639bad53184d3a5a95bc232a47dafef30ae5e00ebf344d9", - "signature": "a5a617fe935e64642639bad53184d3a5a95bc232a47dafef30ae5e00ebf344d9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts": { - "version": "17d9f0e0ea72127491f46f994cd98de4b0578d79db08e2085c731433df756ead", - "signature": "17d9f0e0ea72127491f46f994cd98de4b0578d79db08e2085c731433df756ead", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshPhongMaterial.d.ts": { - "version": "e4907dc8926a40e56dc3f6feb2f76bbe898a7d3fa5a30b133a0e64dbfda30cfb", - "signature": "e4907dc8926a40e56dc3f6feb2f76bbe898a7d3fa5a30b133a0e64dbfda30cfb", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshToonMaterial.d.ts": { - "version": "bb7a8c550b56060dc2a3d862f5bbe7f3587bbf9a5a3866fc48853a8e4d0f232b", - "signature": "bb7a8c550b56060dc2a3d862f5bbe7f3587bbf9a5a3866fc48853a8e4d0f232b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshNormalMaterial.d.ts": { - "version": "81e2df121a8d94b454b1f13e598c461f3583297a1bdc70792d72ea1c36476e4c", - "signature": "81e2df121a8d94b454b1f13e598c461f3583297a1bdc70792d72ea1c36476e4c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshLambertMaterial.d.ts": { - "version": "84b665f618f939c42fa9396a0f4b61fb44d8f0a82095448efcb683398c4c2596", - "signature": "84b665f618f939c42fa9396a0f4b61fb44d8f0a82095448efcb683398c4c2596", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshDepthMaterial.d.ts": { - "version": "12e46c3bc585ac098652ae1dd59f998813c433223c854c630e63bbdae62a9007", - "signature": "12e46c3bc585ac098652ae1dd59f998813c433223c854c630e63bbdae62a9007", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts": { - "version": "b66f9bc40fc03d6c799ea18c43878fb05d19a90a3a77f0efd72ccd293a7475d7", - "signature": "b66f9bc40fc03d6c799ea18c43878fb05d19a90a3a77f0efd72ccd293a7475d7", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshBasicMaterial.d.ts": { - "version": "a55882366dfef3b69e0c50117869d0d97abb8a55340bec0a4308dcb4bda84bb4", - "signature": "a55882366dfef3b69e0c50117869d0d97abb8a55340bec0a4308dcb4bda84bb4", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts": { - "version": "eb02aeba1f7b6384349324de1dda6a4cee080474ef9b71e4c0458b1fc3432eba", - "signature": "eb02aeba1f7b6384349324de1dda6a4cee080474ef9b71e4c0458b1fc3432eba", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/LineBasicMaterial.d.ts": { - "version": "7404e6b4ecbc4ca455747088e76f333fe5fd05f9d5515720fc749f18dcad6a26", - "signature": "7404e6b4ecbc4ca455747088e76f333fe5fd05f9d5515720fc749f18dcad6a26", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/LineDashedMaterial.d.ts": { - "version": "c90cbad957d33ec00520d89ef1c535a699248b6dc0d73f9bd42dcdb2369f3158", - "signature": "c90cbad957d33ec00520d89ef1c535a699248b6dc0d73f9bd42dcdb2369f3158", - "affectsGlobalScope": false - }, - "../node_modules/three/src/materials/Materials.d.ts": { - "version": "355d745d283e4f89bd785542bdba50ae1ab31ca5fa9618f2e221fbe12b9933cc", - "signature": "355d745d283e4f89bd785542bdba50ae1ab31ca5fa9618f2e221fbe12b9933cc", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/Sprite.d.ts": { - "version": "87b4338924eabf315f82d61b6227d0fbbbd712b527384832ba995f0c96f5e5d1", - "signature": "87b4338924eabf315f82d61b6227d0fbbbd712b527384832ba995f0c96f5e5d1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/LOD.d.ts": { - "version": "873820fa4faed2d2e4974cbde2db255f47cb956b3ced50d0752c8c1d4c855484", - "signature": "873820fa4faed2d2e4974cbde2db255f47cb956b3ced50d0752c8c1d4c855484", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/InstancedMesh.d.ts": { - "version": "5bae4a939da9846badccbed331906938ff8468cbc4c3d52dece1da4db0145fb4", - "signature": "5bae4a939da9846badccbed331906938ff8468cbc4c3d52dece1da4db0145fb4", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/DataTexture.d.ts": { - "version": "7d86173eb49ad47ec88e313306f25302af599bdf78d308da6bd8a37c2f598531", - "signature": "7d86173eb49ad47ec88e313306f25302af599bdf78d308da6bd8a37c2f598531", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/Skeleton.d.ts": { - "version": "f69299c8c432c0dab44d7bb06e47f3f3a54c6c219a30b04375d479836f2be9a2", - "signature": "f69299c8c432c0dab44d7bb06e47f3f3a54c6c219a30b04375d479836f2be9a2", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/SkinnedMesh.d.ts": { - "version": "c1bec8131f58c297e6dad3794ecd0feae713a0ef293786391878407993b892fd", - "signature": "c1bec8131f58c297e6dad3794ecd0feae713a0ef293786391878407993b892fd", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/Line.d.ts": { - "version": "04e66eae24e76fc4a8cb9ae492de117884fd2a3ec605466a1157535058e6e1a9", - "signature": "04e66eae24e76fc4a8cb9ae492de117884fd2a3ec605466a1157535058e6e1a9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/LineSegments.d.ts": { - "version": "8ce53d588bf8b257900741473613003e2f86c6c72242c19e24c259a73b1c2833", - "signature": "8ce53d588bf8b257900741473613003e2f86c6c72242c19e24c259a73b1c2833", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/LineLoop.d.ts": { - "version": "58613b1a397da18258ad044a46c6a5637e6ef08ba2372fdb6e93c5f4d1c5fdfb", - "signature": "58613b1a397da18258ad044a46c6a5637e6ef08ba2372fdb6e93c5f4d1c5fdfb", - "affectsGlobalScope": false - }, - "../node_modules/three/src/objects/Points.d.ts": { - "version": "ffbd112aca9f61ac0b4d9443dcc3dca9309678403780b7b809704ca4b449c49b", - "signature": "ffbd112aca9f61ac0b4d9443dcc3dca9309678403780b7b809704ca4b449c49b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/VideoTexture.d.ts": { - "version": "99f2bb5898a327bdc1c16d587ed090ea052da86521c3ee54c7a3ac52a6543002", - "signature": "99f2bb5898a327bdc1c16d587ed090ea052da86521c3ee54c7a3ac52a6543002", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/DataTexture2DArray.d.ts": { - "version": "42e41629a2ba5e604dd98cae7b4cce83be4cee0990a0d55363b1b01346ab0bd8", - "signature": "42e41629a2ba5e604dd98cae7b4cce83be4cee0990a0d55363b1b01346ab0bd8", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/DataTexture3D.d.ts": { - "version": "68bc808ef05f15a1378dc430bb22552fc9f5e3f32c492baa96c1b8b332987171", - "signature": "68bc808ef05f15a1378dc430bb22552fc9f5e3f32c492baa96c1b8b332987171", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/CompressedTexture.d.ts": { - "version": "75a8b7922a1679b55d83518f1f96bfe9bc8c01bb2c4605a5422244f3668ac7e0", - "signature": "75a8b7922a1679b55d83518f1f96bfe9bc8c01bb2c4605a5422244f3668ac7e0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/textures/CanvasTexture.d.ts": { - "version": "32203953b80342bd8969021ef173634c9327b01067bf54eca5dd34c89600afc2", - "signature": "32203953b80342bd8969021ef173634c9327b01067bf54eca5dd34c89600afc2", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/BoxGeometry.d.ts": { - "version": "5c244bb9e042d4cd3657883850601344c3ba978162cdd611d5a1df1e0799021a", - "signature": "5c244bb9e042d4cd3657883850601344c3ba978162cdd611d5a1df1e0799021a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts": { - "version": "5e2ff50cbb499fa61c834f0c3f475a4a980e9cea077046dd81e9032498c89181", - "signature": "5e2ff50cbb499fa61c834f0c3f475a4a980e9cea077046dd81e9032498c89181", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/CircleGeometry.d.ts": { - "version": "da0a0ebbfd8a96941262b3e3f4cb97e9e5c9837a6f9f702a678db140e426711b", - "signature": "da0a0ebbfd8a96941262b3e3f4cb97e9e5c9837a6f9f702a678db140e426711b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts": { - "version": "9e2e0bed41381daea467ebf667de13663544ce8a6a4c42c43ac9b6f168db5cf9", - "signature": "9e2e0bed41381daea467ebf667de13663544ce8a6a4c42c43ac9b6f168db5cf9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/CylinderGeometry.d.ts": { - "version": "cb095734b0f0f65f08cf18575f5d16b5b264233051452781c3c75dbf2ead7ee9", - "signature": "cb095734b0f0f65f08cf18575f5d16b5b264233051452781c3c75dbf2ead7ee9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/ConeGeometry.d.ts": { - "version": "56074aa3417e05ff0a3d2281d82427871a26b9c5872bd81abe766ca07d666f64", - "signature": "56074aa3417e05ff0a3d2281d82427871a26b9c5872bd81abe766ca07d666f64", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts": { - "version": "ffdb7973e3aa43cf33feaa25c0ff02777a977d755fe81f07b2bece270a9a9568", - "signature": "ffdb7973e3aa43cf33feaa25c0ff02777a977d755fe81f07b2bece270a9a9568", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts": { - "version": "eea76e1ac82eaf221b5f50c02df1b26b767a9723c99d5c9ea0440e8b86b6fc09", - "signature": "eea76e1ac82eaf221b5f50c02df1b26b767a9723c99d5c9ea0440e8b86b6fc09", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts": { - "version": "b45632734f143e3059d81f2fbcd7d192667fbd26111f02b3e27d740d9d37f992", - "signature": "b45632734f143e3059d81f2fbcd7d192667fbd26111f02b3e27d740d9d37f992", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts": { - "version": "281f0f03a165a3c49626ba919e64fe9341f03e8651baa9e0c789065d342aa4ef", - "signature": "281f0f03a165a3c49626ba919e64fe9341f03e8651baa9e0c789065d342aa4ef", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts": { - "version": "5f58734d1824159a7f4dd4a74c0ff498e7f1c68e26e5dba470b232bc507d038c", - "signature": "5f58734d1824159a7f4dd4a74c0ff498e7f1c68e26e5dba470b232bc507d038c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/EdgesGeometry.d.ts": { - "version": "1ae3fef0b76b404e1ec72430f00a8a5207a87f84e3cc313d293b2e1e62811ca3", - "signature": "1ae3fef0b76b404e1ec72430f00a8a5207a87f84e3cc313d293b2e1e62811ca3", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/core/Curve.d.ts": { - "version": "1b18011fdda8f6669557b02690107ea74d0750d7f8c2d0e9459d5ebe6c3288e0", - "signature": "1b18011fdda8f6669557b02690107ea74d0750d7f8c2d0e9459d5ebe6c3288e0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/core/CurvePath.d.ts": { - "version": "8e33f328e816ecc128eee84616f67bbafbfdff09c9b37ab41d108e2cab61f5b3", - "signature": "8e33f328e816ecc128eee84616f67bbafbfdff09c9b37ab41d108e2cab61f5b3", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/core/Path.d.ts": { - "version": "0279718a661b0cec730f0c80413738c64bdf30c33986b06c173e12a2343561da", - "signature": "0279718a661b0cec730f0c80413738c64bdf30c33986b06c173e12a2343561da", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/ShapeGeometry.d.ts": { - "version": "8d581dc5b581e9d552439947fb9f79eafb08ea8ccf30fe79e363b3292a2018d0", - "signature": "8d581dc5b581e9d552439947fb9f79eafb08ea8ccf30fe79e363b3292a2018d0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/core/Shape.d.ts": { - "version": "ae113be81a21cd5bbac748f6293b9346ad6e4e3557935ff980280beadc9a2c7a", - "signature": "ae113be81a21cd5bbac748f6293b9346ad6e4e3557935ff980280beadc9a2c7a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts": { - "version": "66d7beca037eee68d73fbba7825fa9517adc307db73fc1bbe9160e0249fc1f6e", - "signature": "66d7beca037eee68d73fbba7825fa9517adc307db73fc1bbe9160e0249fc1f6e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts": { - "version": "c983476c4566217bdfcef0adca6f14e95e57c8f8b2a8b52caef419450b296fa1", - "signature": "c983476c4566217bdfcef0adca6f14e95e57c8f8b2a8b52caef419450b296fa1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts": { - "version": "82e2605fe2d42494866e4570f7b9fc5060ea2e2a881359f61efa425dfc0b59a8", - "signature": "82e2605fe2d42494866e4570f7b9fc5060ea2e2a881359f61efa425dfc0b59a8", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts": { - "version": "64223ab142213dc57ddf7e581baac4467eed01cfb007033ee860412210150e30", - "signature": "64223ab142213dc57ddf7e581baac4467eed01cfb007033ee860412210150e30", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/LatheGeometry.d.ts": { - "version": "c943a30ab1e188c9f60c0c6500d3d5d3c11b2f2ca5061f66f4ef8a21ff87c936", - "signature": "c943a30ab1e188c9f60c0c6500d3d5d3c11b2f2ca5061f66f4ef8a21ff87c936", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts": { - "version": "5f279127d9eabc8f542aa5fa4e1892941aefdda45ce5929d22fcab6b195f21f5", - "signature": "5f279127d9eabc8f542aa5fa4e1892941aefdda45ce5929d22fcab6b195f21f5", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/OctahedronGeometry.d.ts": { - "version": "7be2fc549a8ac2a64bc47d27eee22bca0a428f77114b920c66e83f693cb43fb2", - "signature": "7be2fc549a8ac2a64bc47d27eee22bca0a428f77114b920c66e83f693cb43fb2", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts": { - "version": "d1ee35fb506b17b6501c6ccf50651f18b862ea899967b8a19af4a9c9d0fd1ac7", - "signature": "d1ee35fb506b17b6501c6ccf50651f18b862ea899967b8a19af4a9c9d0fd1ac7", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/ParametricGeometry.d.ts": { - "version": "d7327b66a06fc3f9bb0b25fd0a772ed110843ce75247fbe7ebb336f0ee8ddeea", - "signature": "d7327b66a06fc3f9bb0b25fd0a772ed110843ce75247fbe7ebb336f0ee8ddeea", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts": { - "version": "d81a8dd281a483715ec5aa6c107e4b665f4ca80e477fda53cfad7d1c9a9bb142", - "signature": "d81a8dd281a483715ec5aa6c107e4b665f4ca80e477fda53cfad7d1c9a9bb142", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/PlaneGeometry.d.ts": { - "version": "1d025e8886f2fec6f83687534111f0a7ba7b1937895c83fee526252c9281d7f9", - "signature": "1d025e8886f2fec6f83687534111f0a7ba7b1937895c83fee526252c9281d7f9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts": { - "version": "a21a71f2a7506ec4cbb236695720844ec44d6c490e32625553c2e83061f83ab0", - "signature": "a21a71f2a7506ec4cbb236695720844ec44d6c490e32625553c2e83061f83ab0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts": { - "version": "a7e057c8f9822d5d7a98b689c4b8e35a6e918ae09d1586564fae5107a928935f", - "signature": "a7e057c8f9822d5d7a98b689c4b8e35a6e918ae09d1586564fae5107a928935f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/RingGeometry.d.ts": { - "version": "1de015ea48963a11dec80ff6a0b6ca75834b41a828da08feb211aa522f8a9336", - "signature": "1de015ea48963a11dec80ff6a0b6ca75834b41a828da08feb211aa522f8a9336", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/RingBufferGeometry.d.ts": { - "version": "d4d7ac003b5917eef6897a4e4079937abca6808f28a03e5414351135c8e753a0", - "signature": "d4d7ac003b5917eef6897a4e4079937abca6808f28a03e5414351135c8e753a0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts": { - "version": "6ce5745d796d1c8e60ad6fc667353d80fceb39617f8b26090dcb2d7953c72066", - "signature": "6ce5745d796d1c8e60ad6fc667353d80fceb39617f8b26090dcb2d7953c72066", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/SphereGeometry.d.ts": { - "version": "5ce1d82940668665e217476420ff41b84fb9a512d10735796441fe7196517125", - "signature": "5ce1d82940668665e217476420ff41b84fb9a512d10735796441fe7196517125", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts": { - "version": "9ece00793894f040be474b430fd36397b9168a0c19147511853e8c647c2a911f", - "signature": "9ece00793894f040be474b430fd36397b9168a0c19147511853e8c647c2a911f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts": { - "version": "426136ce9cc57ba3de3e4a5e0d59760a240973be004efe9451a8fc553b0e72fe", - "signature": "426136ce9cc57ba3de3e4a5e0d59760a240973be004efe9451a8fc553b0e72fe", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts": { - "version": "c2802e611d49d070a0a8d6fbac64ec9c8643d34de6f42008f0a61d6d14cdfe2b", - "signature": "c2802e611d49d070a0a8d6fbac64ec9c8643d34de6f42008f0a61d6d14cdfe2b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/core/Font.d.ts": { - "version": "436a86f32de19f660faaba6ab399b3503ee5152727de08ceabb54dc02c840116", - "signature": "436a86f32de19f660faaba6ab399b3503ee5152727de08ceabb54dc02c840116", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TextBufferGeometry.d.ts": { - "version": "63d72427f833f416c406f098b9418a98bcc82ebda3625e5e575c39e2edffc160", - "signature": "63d72427f833f416c406f098b9418a98bcc82ebda3625e5e575c39e2edffc160", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TextGeometry.d.ts": { - "version": "ff5e4dfc030f193d7bd1f36755b81732c0975e5154070e0e179bf48a8e735f60", - "signature": "ff5e4dfc030f193d7bd1f36755b81732c0975e5154070e0e179bf48a8e735f60", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TorusGeometry.d.ts": { - "version": "e1d209016d9e68055d1a80ffd07c0803e1b150ecd1c0f462be9c803c5f74e84d", - "signature": "e1d209016d9e68055d1a80ffd07c0803e1b150ecd1c0f462be9c803c5f74e84d", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts": { - "version": "6b95dd250051dbcfe23b186e4add7620cc819fa6eb61d6b53f27c33bb7835992", - "signature": "6b95dd250051dbcfe23b186e4add7620cc819fa6eb61d6b53f27c33bb7835992", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts": { - "version": "c2ca14afe82e4dcf28f6f45a7e7ca5bfb5c459fcfa24570ac478073f4190b15c", - "signature": "c2ca14afe82e4dcf28f6f45a7e7ca5bfb5c459fcfa24570ac478073f4190b15c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts": { - "version": "c5989fab43a5866216af885ff77230c7bd4a8077486c99883e53634d5495a5db", - "signature": "c5989fab43a5866216af885ff77230c7bd4a8077486c99883e53634d5495a5db", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TubeGeometry.d.ts": { - "version": "5e8104cc3413209ef4d3cfa5948b45174d7d399d66ce938df171e1fdb8b403dd", - "signature": "5e8104cc3413209ef4d3cfa5948b45174d7d399d66ce938df171e1fdb8b403dd", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts": { - "version": "aa186e410cf728f08488178074d80652d7a14b6e78db72730dabd4589d23b8b1", - "signature": "aa186e410cf728f08488178074d80652d7a14b6e78db72730dabd4589d23b8b1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/WireframeGeometry.d.ts": { - "version": "85fc7661b8988644a472402405fc9b48c88164a95ba7abf9c4031b0a848a7fd1", - "signature": "85fc7661b8988644a472402405fc9b48c88164a95ba7abf9c4031b0a848a7fd1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/geometries/Geometries.d.ts": { - "version": "74eca9f5b8b75520d65fecaa88829964f9430a209b2ec879bb16abe09a5a1ace", - "signature": "74eca9f5b8b75520d65fecaa88829964f9430a209b2ec879bb16abe09a5a1ace", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/Loader.d.ts": { - "version": "a72dcb765a9b4287f1adbe84f0784d887dd462b27b1be1320b12f4eeec888032", - "signature": "a72dcb765a9b4287f1adbe84f0784d887dd462b27b1be1320b12f4eeec888032", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/LoadingManager.d.ts": { - "version": "096ccc78d28d561ee0cb8ddbfe3b09b099a513d70732004c2d121ae028e2537c", - "signature": "096ccc78d28d561ee0cb8ddbfe3b09b099a513d70732004c2d121ae028e2537c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/AnimationLoader.d.ts": { - "version": "00cf8c14cb0bf467e38deaea3657ac652d038b3d4aadb707d7b2473c62d7961e", - "signature": "00cf8c14cb0bf467e38deaea3657ac652d038b3d4aadb707d7b2473c62d7961e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts": { - "version": "90e4593ebd701c4e42a5725e5bfb01685d7aa7d2137d3f8aaaba57859d1df722", - "signature": "90e4593ebd701c4e42a5725e5bfb01685d7aa7d2137d3f8aaaba57859d1df722", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/DataTextureLoader.d.ts": { - "version": "58e4ac1738f57a0b72857ab9cea87d7378d2176455adacb01ecfbe61f7273cef", - "signature": "58e4ac1738f57a0b72857ab9cea87d7378d2176455adacb01ecfbe61f7273cef", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/CubeTextureLoader.d.ts": { - "version": "a5349196160d03ae091244e4c4bd043b87de393842bdc6660427d1a4c1d33f79", - "signature": "a5349196160d03ae091244e4c4bd043b87de393842bdc6660427d1a4c1d33f79", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/TextureLoader.d.ts": { - "version": "a3b0483b154b6a496f0b76646fad75af104aa569924d8dbef4e4f15fd61eea82", - "signature": "a3b0483b154b6a496f0b76646fad75af104aa569924d8dbef4e4f15fd61eea82", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/ObjectLoader.d.ts": { - "version": "4faf759e8e8e595716ed687e0bdb75c39f50b162c6970b653cb1580ab7d0717a", - "signature": "4faf759e8e8e595716ed687e0bdb75c39f50b162c6970b653cb1580ab7d0717a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/MaterialLoader.d.ts": { - "version": "54bef3553216f887a79d88aa5b12ae5cd54b47120d6f367515238f0c1d99e3fb", - "signature": "54bef3553216f887a79d88aa5b12ae5cd54b47120d6f367515238f0c1d99e3fb", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/InstancedBufferGeometry.d.ts": { - "version": "f1477e292370cb3d9cc5b7800c02624b589c789d9c40219cb718a75e17bce992", - "signature": "f1477e292370cb3d9cc5b7800c02624b589c789d9c40219cb718a75e17bce992", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts": { - "version": "3b6b9be6198383913e6dac7ea64b485aa157da753c2e01b04fc17c2a662be21c", - "signature": "3b6b9be6198383913e6dac7ea64b485aa157da753c2e01b04fc17c2a662be21c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/ImageLoader.d.ts": { - "version": "290767d42ab176b3db6da68594fc1f084292838a94ce9dd4dcc982070bb97c43", - "signature": "290767d42ab176b3db6da68594fc1f084292838a94ce9dd4dcc982070bb97c43", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts": { - "version": "0b69881c10a075269a565ee3871aafa9d398cf46f17249e89c9f2e0f7240aa42", - "signature": "0b69881c10a075269a565ee3871aafa9d398cf46f17249e89c9f2e0f7240aa42", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/FontLoader.d.ts": { - "version": "987dbc7d78b979ed143f87be5cad71763cb207a59c66645e073ff863d02a4abd", - "signature": "987dbc7d78b979ed143f87be5cad71763cb207a59c66645e073ff863d02a4abd", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/FileLoader.d.ts": { - "version": "c8b51a7eaa607d1be8649af592faef0b5f168f61826a9354b9145d530bed9b17", - "signature": "c8b51a7eaa607d1be8649af592faef0b5f168f61826a9354b9145d530bed9b17", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/LoaderUtils.d.ts": { - "version": "69b5e85d185c724f0947fb40711f75266f6aaab53345d4384dd80b9a57214c46", - "signature": "69b5e85d185c724f0947fb40711f75266f6aaab53345d4384dd80b9a57214c46", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/Cache.d.ts": { - "version": "609dbe55175c0982030f9f270b3aa1bd8f85d313323956133df31207834a09cf", - "signature": "609dbe55175c0982030f9f270b3aa1bd8f85d313323956133df31207834a09cf", - "affectsGlobalScope": false - }, - "../node_modules/three/src/loaders/AudioLoader.d.ts": { - "version": "ee042fb1c109176ed53177dc9ac342bf70cb74dd991629f080f9b2f6a12d9132", - "signature": "ee042fb1c109176ed53177dc9ac342bf70cb74dd991629f080f9b2f6a12d9132", - "affectsGlobalScope": false - }, - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts": { - "version": "02594940abedb506bea6e9a89f42dc663e6bc5d14d4c7022bbd1206ff3fecb52", - "signature": "02594940abedb506bea6e9a89f42dc663e6bc5d14d4c7022bbd1206ff3fecb52", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/SpotLightShadow.d.ts": { - "version": "9caa267524e911fabaad8ff7235ee387c4969b37593ea1578b2796181527d6ef", - "signature": "9caa267524e911fabaad8ff7235ee387c4969b37593ea1578b2796181527d6ef", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/SpotLight.d.ts": { - "version": "c4c5424b0fafdf5db869c90bb065136015088567916944a51732e546ab5aeee7", - "signature": "c4c5424b0fafdf5db869c90bb065136015088567916944a51732e546ab5aeee7", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/PointLightShadow.d.ts": { - "version": "080c5e53470690d535e57c8996582daeefe945c9e5838ac5114a878427ac062d", - "signature": "080c5e53470690d535e57c8996582daeefe945c9e5838ac5114a878427ac062d", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/PointLight.d.ts": { - "version": "8c0d24b8fed0f0237e631607bd164d5debc615d15b54d908a2b61c3256e3012d", - "signature": "8c0d24b8fed0f0237e631607bd164d5debc615d15b54d908a2b61c3256e3012d", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/RectAreaLight.d.ts": { - "version": "cacf1756ff0087224113803d167e6f17ddcff407ba93a95f53b5bf7470de8e0d", - "signature": "cacf1756ff0087224113803d167e6f17ddcff407ba93a95f53b5bf7470de8e0d", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/HemisphereLight.d.ts": { - "version": "d01108d8d88777434a7a88009ccfeb1ef6eaa405f10f9e817d88a32f60c04021", - "signature": "d01108d8d88777434a7a88009ccfeb1ef6eaa405f10f9e817d88a32f60c04021", - "affectsGlobalScope": false - }, - "../node_modules/three/src/cameras/OrthographicCamera.d.ts": { - "version": "954a8ab7a12af5588bded5afcd728f42aa9f1b4ea506ce9709569372c127ca61", - "signature": "954a8ab7a12af5588bded5afcd728f42aa9f1b4ea506ce9709569372c127ca61", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/DirectionalLightShadow.d.ts": { - "version": "cb510525f6d3cf0a5da49b286d38518f5c59583f4b0caf4768a170c0f5fef5b9", - "signature": "cb510525f6d3cf0a5da49b286d38518f5c59583f4b0caf4768a170c0f5fef5b9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/DirectionalLight.d.ts": { - "version": "48bf62799d990a764d998af647f39b0e7fa8d9ddca16466381c3dc70dffd749b", - "signature": "48bf62799d990a764d998af647f39b0e7fa8d9ddca16466381c3dc70dffd749b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/AmbientLight.d.ts": { - "version": "d67c1526c0e60d2ac438a94d910debc045277ae9d6da56072f925e17ef8ded3c", - "signature": "d67c1526c0e60d2ac438a94d910debc045277ae9d6da56072f925e17ef8ded3c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/SphericalHarmonics3.d.ts": { - "version": "2c9924b43f02c478f1371bbb16ab377dda904e0c06170f221f8df32cdc898430", - "signature": "2c9924b43f02c478f1371bbb16ab377dda904e0c06170f221f8df32cdc898430", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/LightProbe.d.ts": { - "version": "bff8bc8a9cb0d3d7559da02f87f2ed90806feca89e90caafb4db118691be3d1b", - "signature": "bff8bc8a9cb0d3d7559da02f87f2ed90806feca89e90caafb4db118691be3d1b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/AmbientLightProbe.d.ts": { - "version": "f76d529e6a2438ecaed261b23d3e152a2a3452e15e0a6256115cbf1ac40da866", - "signature": "f76d529e6a2438ecaed261b23d3e152a2a3452e15e0a6256115cbf1ac40da866", - "affectsGlobalScope": false - }, - "../node_modules/three/src/lights/HemisphereLightProbe.d.ts": { - "version": "b45f1d7704c649259e85e335ea0dc47d8813caa8335ae34f44d8e9829f93b74a", - "signature": "b45f1d7704c649259e85e335ea0dc47d8813caa8335ae34f44d8e9829f93b74a", - "affectsGlobalScope": false - }, - "../node_modules/three/src/cameras/StereoCamera.d.ts": { - "version": "382aee957702a3669129f336d1f2eaf4da55d1f72d330bd0bd86fc5141e62a29", - "signature": "382aee957702a3669129f336d1f2eaf4da55d1f72d330bd0bd86fc5141e62a29", - "affectsGlobalScope": false - }, - "../node_modules/three/src/cameras/CubeCamera.d.ts": { - "version": "d24bacb3789b72f2ee367239fa8078ba1e3844021a1bd78c77d6272da85e2992", - "signature": "d24bacb3789b72f2ee367239fa8078ba1e3844021a1bd78c77d6272da85e2992", - "affectsGlobalScope": false - }, - "../node_modules/three/src/cameras/ArrayCamera.d.ts": { - "version": "6b0a5dd86066886465f595f22bf6693dd7d50e84278d2f936be085240cba9447", - "signature": "6b0a5dd86066886465f595f22bf6693dd7d50e84278d2f936be085240cba9447", - "affectsGlobalScope": false - }, - "../node_modules/three/src/audio/AudioContext.d.ts": { - "version": "3a16fc8f323474862a7a13e4cb1890d9f490eb6f26c44b81d064dcf8bdd13882", - "signature": "3a16fc8f323474862a7a13e4cb1890d9f490eb6f26c44b81d064dcf8bdd13882", - "affectsGlobalScope": false - }, - "../node_modules/three/src/audio/AudioListener.d.ts": { - "version": "45882e7ddcabd7ecd3f88914265169537c4d2038bda68cc9c3b10c1eac82d66f", - "signature": "45882e7ddcabd7ecd3f88914265169537c4d2038bda68cc9c3b10c1eac82d66f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/audio/Audio.d.ts": { - "version": "3bf67c4150ef2a6681d0bd15a659be49e373deafcd98e77102069958361b96b8", - "signature": "3bf67c4150ef2a6681d0bd15a659be49e373deafcd98e77102069958361b96b8", - "affectsGlobalScope": false - }, - "../node_modules/three/src/audio/PositionalAudio.d.ts": { - "version": "94ac917a35edb7e8dee856ee994833e581b293bbc565be80359e3cfbe02b68ab", - "signature": "94ac917a35edb7e8dee856ee994833e581b293bbc565be80359e3cfbe02b68ab", - "affectsGlobalScope": false - }, - "../node_modules/three/src/audio/AudioAnalyser.d.ts": { - "version": "cd0bfc372a4cb0b23a6ed6461bf5218485671715f3d7e8cc1b21548ebf2f2e03", - "signature": "cd0bfc372a4cb0b23a6ed6461bf5218485671715f3d7e8cc1b21548ebf2f2e03", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts": { - "version": "a4d62616dc35504638f9a1e0cc1ecbaef840df69f4026b4f6ffe4742d596f168", - "signature": "a4d62616dc35504638f9a1e0cc1ecbaef840df69f4026b4f6ffe4742d596f168", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts": { - "version": "0cb09335768a1c28021248c27da0ad243e2d16eeb0d8e31ea227c352de39ce26", - "signature": "0cb09335768a1c28021248c27da0ad243e2d16eeb0d8e31ea227c352de39ce26", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": { - "version": "4c818329eba79c527592f8970ddba721c7325c29fd28b7156d7d50c55207c58f", - "signature": "4c818329eba79c527592f8970ddba721c7325c29fd28b7156d7d50c55207c58f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts": { - "version": "0a874a82c54596c15ffe75b3dd1b730773a753b90d630ed3e296e904079a31a9", - "signature": "0a874a82c54596c15ffe75b3dd1b730773a753b90d630ed3e296e904079a31a9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts": { - "version": "0fd64abcdb567e7cfcc536f5cb633b1361ca482ba424ea1ffc7cfa50240bc0de", - "signature": "0fd64abcdb567e7cfcc536f5cb633b1361ca482ba424ea1ffc7cfa50240bc0de", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": { - "version": "5a766534f22553988632e8b5a92fc3e4aec917f6cd2a8fae890612711741c70d", - "signature": "5a766534f22553988632e8b5a92fc3e4aec917f6cd2a8fae890612711741c70d", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/PropertyMixer.d.ts": { - "version": "d153da124dee66283298d5e1c6c06cf79609172cc90305426144977496b6ab17", - "signature": "d153da124dee66283298d5e1c6c06cf79609172cc90305426144977496b6ab17", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/PropertyBinding.d.ts": { - "version": "12b10434acc5b84b93dd245ec7120e1fe2f257e80b11ec110a60071166025470", - "signature": "12b10434acc5b84b93dd245ec7120e1fe2f257e80b11ec110a60071166025470", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/AnimationUtils.d.ts": { - "version": "ba7fb82eb8d0b6e527ff15643e5157f74cb88b3ca38eb27812e4a17e96f1cf04", - "signature": "ba7fb82eb8d0b6e527ff15643e5157f74cb88b3ca38eb27812e4a17e96f1cf04", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/AnimationObjectGroup.d.ts": { - "version": "5f01f1a897d15abb687597ef551b2b23ffb7c872e11187f649f86de79cf246d4", - "signature": "5f01f1a897d15abb687597ef551b2b23ffb7c872e11187f649f86de79cf246d4", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/AnimationAction.d.ts": { - "version": "75a6f3a1b056897f94eeb387e2b61f0814bd3ee1baedad54ca95c8b50370b6a5", - "signature": "75a6f3a1b056897f94eeb387e2b61f0814bd3ee1baedad54ca95c8b50370b6a5", - "affectsGlobalScope": false - }, - "../node_modules/three/src/animation/AnimationMixer.d.ts": { - "version": "985a17f0f588aa99d19f4fadd5b37643abfaa7d99b95346e13f62099d1bbc123", - "signature": "985a17f0f588aa99d19f4fadd5b37643abfaa7d99b95346e13f62099d1bbc123", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/Uniform.d.ts": { - "version": "a35c91c464268c07c67020b513e4f88847e87d549514628c3524f9d1d5d9d539", - "signature": "a35c91c464268c07c67020b513e4f88847e87d549514628c3524f9d1d5d9d539", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts": { - "version": "07cb3f0fd34165c2f477d01e9919fe3dba3e3ff5dbf6427059dd3e8ae75f66d4", - "signature": "07cb3f0fd34165c2f477d01e9919fe3dba3e3ff5dbf6427059dd3e8ae75f66d4", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/InstancedBufferAttribute.d.ts": { - "version": "8864bde866a8940afb6b8cd295b6eb42e133c12ca11b052a3df004a2114d19d0", - "signature": "8864bde866a8940afb6b8cd295b6eb42e133c12ca11b052a3df004a2114d19d0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/core/Clock.d.ts": { - "version": "697ea55faaeb771f18270d9ba27a868c13b4430ae7530c4fd53cabed4d1041a1", - "signature": "697ea55faaeb771f18270d9ba27a868c13b4430ae7530c4fd53cabed4d1041a1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": { - "version": "6eb0074c07aa60be1bfdeba02bc0075808d04b6fae7a76268259088114c9193d", - "signature": "6eb0074c07aa60be1bfdeba02bc0075808d04b6fae7a76268259088114c9193d", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/MathUtils.d.ts": { - "version": "b0edf0b98895c080f4a082c5f1b35e42bd12c6ee624cb42b723a928245167257", - "signature": "b0edf0b98895c080f4a082c5f1b35e42bd12c6ee624cb42b723a928245167257", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Frustum.d.ts": { - "version": "d3025fdb12b8ca9b680e6641fbe9b296da425a0a69969b075110db065f1deee0", - "signature": "d3025fdb12b8ca9b680e6641fbe9b296da425a0a69969b075110db065f1deee0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/math/Box2.d.ts": { - "version": "3b74a19021afa846dd0d9820a97cec907bea98239e8726fff3584a77f4f3673f", - "signature": "3b74a19021afa846dd0d9820a97cec907bea98239e8726fff3584a77f4f3673f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts": { - "version": "f1cdfd6a76470a10fd22833d042a2ceed76176f61c48b1a26546d34cf476e4e7", - "signature": "f1cdfd6a76470a10fd22833d042a2ceed76176f61c48b1a26546d34cf476e4e7", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/SpotLightHelper.d.ts": { - "version": "fd384aa99baea593712841ea6d10b4eba364a514db821ab403c376b3c46940fa", - "signature": "fd384aa99baea593712841ea6d10b4eba364a514db821ab403c376b3c46940fa", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/SkeletonHelper.d.ts": { - "version": "5cf9e76cd6647ce638189b9859e5d2a2262171d81ea0359b5debf9c8f51cf342", - "signature": "5cf9e76cd6647ce638189b9859e5d2a2262171d81ea0359b5debf9c8f51cf342", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/PointLightHelper.d.ts": { - "version": "dd37a03a0e5ea3e5c1c7eeaec7477ef4af32fc0351ed9ce2c79adb2c56218436", - "signature": "dd37a03a0e5ea3e5c1c7eeaec7477ef4af32fc0351ed9ce2c79adb2c56218436", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts": { - "version": "d5aac916cb7ba330a8e9bdb27740b508b314851ec616e88e8972f27ba3949356", - "signature": "d5aac916cb7ba330a8e9bdb27740b508b314851ec616e88e8972f27ba3949356", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/GridHelper.d.ts": { - "version": "e925f64d2c32d61bde90a9cbf12fc6195d49855551ad830751ef012941b7b423", - "signature": "e925f64d2c32d61bde90a9cbf12fc6195d49855551ad830751ef012941b7b423", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/PolarGridHelper.d.ts": { - "version": "d47993e9c87064a944cf4fc876b8e9c50e8e880a6847c73a344594cca9c477c4", - "signature": "d47993e9c87064a944cf4fc876b8e9c50e8e880a6847c73a344594cca9c477c4", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts": { - "version": "2b194c4d7aabca35846dc5694fb1332b674c41f7e3c44122392b94d0e230673c", - "signature": "2b194c4d7aabca35846dc5694fb1332b674c41f7e3c44122392b94d0e230673c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/CameraHelper.d.ts": { - "version": "c9654377f5ac130bea0d1f8e55c52d1fabc6bd9c27cfe0fb9dc53215a35d08c1", - "signature": "c9654377f5ac130bea0d1f8e55c52d1fabc6bd9c27cfe0fb9dc53215a35d08c1", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/BoxHelper.d.ts": { - "version": "4d31bbe9dde590c11d519c0770e882573fc23100a32243d9c6b63f693c3c788f", - "signature": "4d31bbe9dde590c11d519c0770e882573fc23100a32243d9c6b63f693c3c788f", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/Box3Helper.d.ts": { - "version": "ff8001abcd514a62a25d7b38508d7fa1dd38e0f325b3ae2f28258ab377b5c980", - "signature": "ff8001abcd514a62a25d7b38508d7fa1dd38e0f325b3ae2f28258ab377b5c980", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/PlaneHelper.d.ts": { - "version": "961ee6061c130e5deaae9c3255c2547e4c1b709a00476f9ac1b8c7c6d11e8327", - "signature": "961ee6061c130e5deaae9c3255c2547e4c1b709a00476f9ac1b8c7c6d11e8327", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/ArrowHelper.d.ts": { - "version": "80ef78000a8288906f9b31007dc99b2567999adaa2e5dd6b7a700cac7fa6803e", - "signature": "80ef78000a8288906f9b31007dc99b2567999adaa2e5dd6b7a700cac7fa6803e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/helpers/AxesHelper.d.ts": { - "version": "df3f8cad4f2b8e5f4c03e3441bf21a02f7b2d0e1e4e4e84c00e41599e0c80552", - "signature": "df3f8cad4f2b8e5f4c03e3441bf21a02f7b2d0e1e4e4e84c00e41599e0c80552", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/EllipseCurve.d.ts": { - "version": "8f3463eab8661e0deb795df8463afa78b3d2f12620acdd9ef47dae2cf077f7f4", - "signature": "8f3463eab8661e0deb795df8463afa78b3d2f12620acdd9ef47dae2cf077f7f4", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/ArcCurve.d.ts": { - "version": "b1662bcb4a857a741ccd2a97932fa0f09817c487d22a700a86a7957341d492a6", - "signature": "b1662bcb4a857a741ccd2a97932fa0f09817c487d22a700a86a7957341d492a6", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts": { - "version": "e9624fbce97908868186ec11f7386b6ce7fc6f63547f0cdc3157b5278d2518ab", - "signature": "e9624fbce97908868186ec11f7386b6ce7fc6f63547f0cdc3157b5278d2518ab", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts": { - "version": "f82723b24df7d1dbbf6519aaddd6fba3bc02ecf4d0802b36f1b5cc1cb032157c", - "signature": "f82723b24df7d1dbbf6519aaddd6fba3bc02ecf4d0802b36f1b5cc1cb032157c", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts": { - "version": "c5b4b089a4fc8e068e647616d1c3ecf70dc1f44771b34865e50a60bbec5279a7", - "signature": "c5b4b089a4fc8e068e647616d1c3ecf70dc1f44771b34865e50a60bbec5279a7", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/LineCurve.d.ts": { - "version": "353fb5256371abae2c2784b88413e69450dc0a50172b3b03f9a823f542115782", - "signature": "353fb5256371abae2c2784b88413e69450dc0a50172b3b03f9a823f542115782", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/LineCurve3.d.ts": { - "version": "22d5121c485534164b41467be72553dac37b6b8cf05cde86f20b8426eebd66a9", - "signature": "22d5121c485534164b41467be72553dac37b6b8cf05cde86f20b8426eebd66a9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts": { - "version": "0c5a87a03e070ed01782aae86b4884721a670dabfcb59191a8cc6099e1f6e8b5", - "signature": "0c5a87a03e070ed01782aae86b4884721a670dabfcb59191a8cc6099e1f6e8b5", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts": { - "version": "4b8ff5288876b9536917ad6a989a0eca57e6c6e78968dd6695cf1f691d2cdde9", - "signature": "4b8ff5288876b9536917ad6a989a0eca57e6c6e78968dd6695cf1f691d2cdde9", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/SplineCurve.d.ts": { - "version": "bd7fbab735542acc02a20d6a306f3fd74e8bb67fee943d9592a128a938e9dc54", - "signature": "bd7fbab735542acc02a20d6a306f3fd74e8bb67fee943d9592a128a938e9dc54", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/curves/Curves.d.ts": { - "version": "4998cbff67e76f385d9955674a9f2ac385926e807ed371ed357ccb6f03a4d72e", - "signature": "4998cbff67e76f385d9955674a9f2ac385926e807ed371ed357ccb6f03a4d72e", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/core/ShapePath.d.ts": { - "version": "c70a17f88a18c816a1db716fdc3c04cd179c03b659dfb0832ebd87fb7b0693aa", - "signature": "c70a17f88a18c816a1db716fdc3c04cd179c03b659dfb0832ebd87fb7b0693aa", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/DataUtils.d.ts": { - "version": "b5651e85f368793aa0eda055713b327c60ef9dee3a600859e3ec0da044540d86", - "signature": "b5651e85f368793aa0eda055713b327c60ef9dee3a600859e3ec0da044540d86", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/ImageUtils.d.ts": { - "version": "e6fd54ef41facbe3a7a1faaa15668675c300fefc362f7a22848b3ad9b31afff0", - "signature": "e6fd54ef41facbe3a7a1faaa15668675c300fefc362f7a22848b3ad9b31afff0", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/ShapeUtils.d.ts": { - "version": "8d07903d00b0906311abc0c5ab3cb3ce2955ab19d66db7fe4e153af82b66db58", - "signature": "8d07903d00b0906311abc0c5ab3cb3ce2955ab19d66db7fe4e153af82b66db58", - "affectsGlobalScope": false - }, - "../node_modules/three/src/extras/PMREMGenerator.d.ts": { - "version": "a39e71fd9aea81bb04de848f4d3e9564dfb03d03dbc8e622e157d23725830162", - "signature": "a39e71fd9aea81bb04de848f4d3e9564dfb03d03dbc8e622e157d23725830162", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": { - "version": "b085d79c2a9dfd4ad97d0cdf99c8f1a20747f00eaac15d6292ac2ea79d4102f4", - "signature": "b085d79c2a9dfd4ad97d0cdf99c8f1a20747f00eaac15d6292ac2ea79d4102f4", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts": { - "version": "3b2e6dfa494d183e41597c2255151800c4698c442e89cf6e86ced1f21f1c402b", - "signature": "3b2e6dfa494d183e41597c2255151800c4698c442e89cf6e86ced1f21f1c402b", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts": { - "version": "e2c4839f9075e560003f9a957aab9573def00f67e61be01a7f74849b24ff3226", - "signature": "e2c4839f9075e560003f9a957aab9573def00f67e61be01a7f74849b24ff3226", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts": { - "version": "d7d67f8b9211226c101dd03951a55f2d731314d03e4058f514a561f761b11c21", - "signature": "d7d67f8b9211226c101dd03951a55f2d731314d03e4058f514a561f761b11c21", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts": { - "version": "637606c43185cc19da3a519338b903cd6c579820a465837a25b270db0c92c249", - "signature": "637606c43185cc19da3a519338b903cd6c579820a465837a25b270db0c92c249", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts": { - "version": "7f2b316acec1a1be0fba99e35c651139c784fd293cb2689c8562854b4d81ab44", - "signature": "7f2b316acec1a1be0fba99e35c651139c784fd293cb2689c8562854b4d81ab44", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts": { - "version": "7992371e47123acd9d2318f1472a2fd82d55f1477dd0c83781002bdcc10e58bd", - "signature": "7992371e47123acd9d2318f1472a2fd82d55f1477dd0c83781002bdcc10e58bd", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts": { - "version": "182f0e0b0866058320e00a8f417aeb0892d8a220dd81f7a647c25eeb70354583", - "signature": "182f0e0b0866058320e00a8f417aeb0892d8a220dd81f7a647c25eeb70354583", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts": { - "version": "74989bb8182ff93b96b99c38c12393e698083cccc01a046a8120bfbfe81abb21", - "signature": "74989bb8182ff93b96b99c38c12393e698083cccc01a046a8120bfbfe81abb21", - "affectsGlobalScope": false - }, - "../node_modules/three/src/renderers/webxr/WebXRController.d.ts": { - "version": "3b405d5a85aed78f25003669ef0ed14513dc4aa6f0116ad5d8a80d51933dd5be", - "signature": "3b405d5a85aed78f25003669ef0ed14513dc4aa6f0116ad5d8a80d51933dd5be", - "affectsGlobalScope": false - }, - "../node_modules/three/src/Three.Legacy.d.ts": { - "version": "d6f22642eec4002db21f1b66b3d2589329e933798b5a6d40dd5fc3dcbbb5d3ea", - "signature": "d6f22642eec4002db21f1b66b3d2589329e933798b5a6d40dd5fc3dcbbb5d3ea", - "affectsGlobalScope": false - }, - "../node_modules/three/src/Three.d.ts": { - "version": "c9355e11cd1b1149dc6cc93cac06dfda57e5472f972b39864bffd1385c95b0e8", - "signature": "c9355e11cd1b1149dc6cc93cac06dfda57e5472f972b39864bffd1385c95b0e8", - "affectsGlobalScope": false - }, - "./src/OrbitControls.ts": { - "version": "ba7a60bcb8343d452c0502f297699375c87c7cdf347ab16640ae825369422ce7", - "signature": "7f79d2e65a6c65d37499954a054fcbb073438430b81be0472d6ed280ce4fe095", - "affectsGlobalScope": false - }, - "./src/constants.ts": { - "version": "34b52104e5431a15db6e7272d131ebac9575352ba3679e3d9c4f8cb1fdf58164", - "signature": "04b6d17dc5edbb7c491985baa2f88e2a3bda07c73f03e6671e9ff3a6aacd639b", - "affectsGlobalScope": false - }, - "./src/defs.ts": { - "version": "d3c7eb0ebd42d2246b729fc9a9bf04c2089fb846070d49cd3557309a833ea604", - "signature": "a29b6eeefcc096608ae147a08c191ab35e5e366c8b3ea01031bec525631f0638", - "affectsGlobalScope": false - }, - "./src/entity-manager.ts": { - "version": "e0e5715b91b5043c4f4c88a0466bc1f63d2db98efebd23d6cfc17c52da4304d5", - "signature": "3ac8d504e820eaf7bd25ad6659d53ceadc4e36151fa23535649e5b85ced046a6", - "affectsGlobalScope": false - }, - "./src/globaltypes.ts": { - "version": "eb4c1f4c99e94e80a96c809bc6c34ca33faa72f2c44e72f1e886260a9fee1dc2", - "signature": "d05d26aaf833e6a4e66400cf88170a9fb5ccf4537d16b48bd9d2b6e57ce5ecf3", - "affectsGlobalScope": false - }, - "./src/index.ts": { - "version": "9301bb02e2f6d6c92b3867a5d736934b520fbe1654e12ab9f56c48213192026d", - "signature": "ffca81ea3c17cb22c60c5782fc065001c8129c5005a68cceef9220d139374831", - "affectsGlobalScope": false - }, - "./src/math.ts": { - "version": "16c14b29971a1b3340d07dcd3b8eb0902613b8b2af18e9870ae49917dcfa6e27", - "signature": "44d6689d60be8e48f26bf724c4ac258fdb62114ca7f6d347156bf4746d166152", - "affectsGlobalScope": false - }, - "./src/simplex-noise.ts": { - "version": "9d46fb7195fd47f74ceb2de8620b0e68edc598101c547265ce9270c380d826f2", - "signature": "892889ee1b6d0940949d70f933bc9b34efe3fc45fdc224fe8ce1a14aaa5de47d", - "affectsGlobalScope": false - }, - "./src/noise.ts": { - "version": "da104448d4e8980a224ce8eb50055f648a98e24406d6e01473eb5b858850738c", - "signature": "0948dd88dcb21fc3c8e8c90b80627404cf4ea1130a3105752b1816da441fbe23", - "affectsGlobalScope": false - }, - "./src/spatial-hash-grid.ts": { - "version": "9a53e8426ecca022c62a07c399482c0f9efcd69268b01bd988f84b9f1a537020", - "signature": "94acf0380d5ed01b01616d6fbd5bfbe83c6e90acb0520419cd90ddf3c0c9b9ba", - "affectsGlobalScope": false - }, - "./src/spline.ts": { - "version": "32b2e5e577d4da4ac28058a9b6684e473dce3a9363648b54ca3d26586cf80e22", - "signature": "8ab6fe0abede8eedb143be2ad5fd3366c331c97367d6cc9e4cae36157f6e1191", - "affectsGlobalScope": false - }, - "./src/terrain-constants.ts": { - "version": "7a715dfc01f25d93bc1b37d284455f5795d8ef68980377c04d86002fa5056e3d", - "signature": "2e54d9fea598f4ab39a11fc85530f3912f0e6ee890ebc0ee779868ae48f14347", - "affectsGlobalScope": false - }, - "./src/terrain-height.ts": { - "version": "b0272188f97de9f2072fae1d3fa3a89b3a8866d69934f2e97bfb6357b2222767", - "signature": "3733c1c49de58091f4b887909d2530298d920493cace325ba57a9bfc22c119b8", - "affectsGlobalScope": false - }, - "../node_modules/@types/component-emitter/index.d.ts": { - "version": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", - "signature": "a3a88c1869ba1022dfaefac47ff7a984ec62510e9b4d60988f91d5e523266c34", - "affectsGlobalScope": false - }, - "../node_modules/@types/cookie/index.d.ts": { - "version": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", - "signature": "405ad6db8aa3d5618c3be21cde8125de28a3e40690eb05136c123f420c05c082", - "affectsGlobalScope": false - }, - "../node_modules/@types/cors/index.d.ts": { - "version": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", - "signature": "a68969f643e0cb091046a9437b64cb1880a081fc07c70a4717b0edef2a38bc85", - "affectsGlobalScope": false - }, - "../node_modules/@types/minimatch/index.d.ts": { - "version": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", - "signature": "95c22bc19835e28e2e524a4bb8898eb5f2107b640d7279a6d3aade261916bbf2", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/globals.d.ts": { - "version": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", - "signature": "25b4a0c4fab47c373ee49df4c239826ee3430019fc0c1b5e59edc3e398b7468d", - "affectsGlobalScope": true - }, - "../node_modules/@types/node/async_hooks.d.ts": { - "version": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", - "signature": "d20f08527645f62facb2d66c2b7bd31ea964b59c897d00bddb1efe8c13890b72", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/buffer.d.ts": { - "version": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", - "signature": "5726b5ce952dc5beaeb08d5f64236632501568a54a390363d2339ba1dc5393b1", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/child_process.d.ts": { - "version": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", - "signature": "674bedbfd2004e233e2a266a3d2286e524f0d58787a98522d834d6ccda1d215a", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/cluster.d.ts": { - "version": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", - "signature": "714637d594e1a38a075091fe464ca91c6abc0b154784b4287f6883200e28ccef", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/console.d.ts": { - "version": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", - "signature": "23edba5f47d3409810c563fe8034ae2c59e718e1ef8570f4152ccdde1915a096", - "affectsGlobalScope": true - }, - "../node_modules/@types/node/constants.d.ts": { - "version": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", - "signature": "0e9c55f894ca2d9cf63b5b0d43a8cec1772dd560233fd16275bc7a485eb82f83", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/crypto.d.ts": { - "version": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", - "signature": "d53b352a01645c470a0d8c31bf290ba791fc28ade0ce187a4a50f5c2f826f75e", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/dgram.d.ts": { - "version": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", - "signature": "5f0a09de75bd965c21dc6d73671ba88830272f9ed62897bb0aa9754b369b1eed", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/dns.d.ts": { - "version": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", - "signature": "2b34e7fcba9e1f24e7f54ba5c8be5a8895b0b8b444ccf6548e04acdee0899317", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/domain.d.ts": { - "version": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", - "signature": "06d2be99c3dd2ff52114d02ee443ba486ab482423df1941d3c97d6a92e924d70", - "affectsGlobalScope": true - }, - "../node_modules/@types/node/events.d.ts": { - "version": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", - "signature": "bfd4f140c07091b5e8a963c89e6fa3f44b6cfcbc11471b465cf63e2d020ad0eb", - "affectsGlobalScope": true - }, - "../node_modules/@types/node/fs.d.ts": { - "version": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", - "signature": "a106a0bea088b70879ac88ff606dc253c0cc474ea05ad3a282b8bfb1091ae576", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/fs/promises.d.ts": { - "version": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", - "signature": "c98ce957db9eebd75f53edda3f6893e05ab2d2283b5667b18e31bcdb6427ed10", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/http.d.ts": { - "version": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", - "signature": "1f08bd8305d4a789a68f71ab622156dfff993aa51a2aa58b9ccf166cc6f9fcf7", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/http2.d.ts": { - "version": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", - "signature": "9aff68f1b847b846d3d50a58c9f8f99389bedd0258d1b1c201f11b97ecfd36f8", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/https.d.ts": { - "version": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", - "signature": "1978992206803f5761e99e893d93b25abc818c5fe619674fdf2ae02b29f641ba", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/inspector.d.ts": { - "version": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", - "signature": "05fbe81f09fc455a2c343d2458d2b3c600c90b92b22926be765ee79326be9466", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/module.d.ts": { - "version": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", - "signature": "8e7d6dae9e19bbe47600dcfd4418db85b30ae7351474ea0aad5e628f9845d340", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/net.d.ts": { - "version": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", - "signature": "f20ea392f7f27feb7a90e5a24319a4e365b07bf83c39a547711fe7ff9df68657", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/os.d.ts": { - "version": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", - "signature": "32542c4660ecda892a333a533feedba31738ee538ef6a78eb73af647137bc3fc", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/path.d.ts": { - "version": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", - "signature": "0ecacea5047d1a7d350e7049dbd22f26435be5e8736a81a56afec5b3264db1ca", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/perf_hooks.d.ts": { - "version": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", - "signature": "ffcb4ebde21f83370ed402583888b28651d2eb7f05bfec9482eb46d82adedd7f", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/process.d.ts": { - "version": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", - "signature": "06c004006016a51c4d1855527a523562c329dc44c473931c65f10373281f730e", - "affectsGlobalScope": true - }, - "../node_modules/@types/node/punycode.d.ts": { - "version": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", - "signature": "a7b43c69f9602d198825e403ee34e5d64f83c48b391b2897e8c0e6f72bca35f8", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/querystring.d.ts": { - "version": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", - "signature": "f4a3fc4efc6944e7b7bd4ccfa45e0df68b6359808e6cf9d061f04fd964a7b2d3", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/readline.d.ts": { - "version": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", - "signature": "73cad675aead7a2c05cf934e7e700c61d84b2037ac1d576c3f751199b25331da", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/repl.d.ts": { - "version": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", - "signature": "8c3137ba3583ec18484429ec1c8eff89efdc42730542f157b38b102fdccc0c71", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/stream.d.ts": { - "version": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", - "signature": "d84300d886b45a198c346158e4ff7ae361cc7bc1c3deab44afb3db7de56b5d25", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/string_decoder.d.ts": { - "version": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", - "signature": "94ca7beec4e274d32362b54e0133152f7b4be9487db7b005070c03880b6363aa", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/timers.d.ts": { - "version": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", - "signature": "2d713cbcbd5bcc38d91546eaeea7bb1c8686dc4a2995a28556d957b1b9de11d9", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/tls.d.ts": { - "version": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", - "signature": "bbf21f210782db4193359010a4710786add43e3b50aa42fc0d371f45b4e4d8d3", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/trace_events.d.ts": { - "version": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", - "signature": "0b7733d83619ac4e3963e2a9f7c75dc1e9af6850cb2354c9554977813092c10a", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/tty.d.ts": { - "version": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", - "signature": "3ce933f0c3955f67f67eb7d6b5c83c2c54a18472c1d6f2bb651e51dd40c84837", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/url.d.ts": { - "version": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", - "signature": "631e96db896d645f7132c488ad34a16d71fd2be9f44696f8c98289ee1c8cbfa9", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/util.d.ts": { - "version": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", - "signature": "2c77230d381cba81eb6f87cda2fbfff6c0427c6546c2e2590110effff37c58f7", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/v8.d.ts": { - "version": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", - "signature": "da86ee9a2f09a4583db1d5e37815894967e1f694ad9f3c25e84e0e4d40411e14", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/vm.d.ts": { - "version": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", - "signature": "141a943e5690105898a67537a470f70b56d0e183441b56051d929e902376b7b2", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/worker_threads.d.ts": { - "version": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", - "signature": "ddc086b1adac44e2fccf55422da1e90fa970e659d77f99712422a421564b4877", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/zlib.d.ts": { - "version": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", - "signature": "515ef1d99036ff0dafa5bf738e02222edea94e0d97a0aa0ff277ac5e96b57977", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/globals.global.d.ts": { - "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", - "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", - "affectsGlobalScope": true - }, - "../node_modules/@types/node/wasi.d.ts": { - "version": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", - "signature": "780058f4a804c8bdcdd2f60e7af64b2bc57d149c1586ee3db732a84d659a50bf", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/ts3.6/base.d.ts": { - "version": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", - "signature": "ae68a04912ee5a0f589276f9ec60b095f8c40d48128a4575b3fdd7d93806931c", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/assert.d.ts": { - "version": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", - "signature": "19d580a3b42ad5caeaee266ae958260e23f2df0549ee201c886c8bd7a4f01d4e", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/base.d.ts": { - "version": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", - "signature": "e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b", - "affectsGlobalScope": false - }, - "../node_modules/@types/node/index.d.ts": { - "version": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", - "signature": "9c4c395e927045b324877acdc4bfb95f128f36bc9f073266a2f0342495075a4f", - "affectsGlobalScope": false - } - }, - "options": { - "target": 2, - "module": 99, - "lib": [ - "lib.dom.d.ts" - ], - "strict": false, - "moduleResolution": 2, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true, - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "composite": true, - "rootDir": "./src", - "outDir": "./dist", - "configFilePath": "./tsconfig.json" - }, - "referencedMap": { - "../node_modules/@types/cors/index.d.ts": [ - "../node_modules/@types/node/http.d.ts" - ], - "../node_modules/@types/node/assert.d.ts": [ - "../node_modules/@types/node/assert.d.ts" - ], - "../node_modules/@types/node/async_hooks.d.ts": [ - "../node_modules/@types/node/async_hooks.d.ts" - ], - "../node_modules/@types/node/base.d.ts": [ - "../node_modules/@types/node/assert.d.ts", - "../node_modules/@types/node/ts3.6/base.d.ts" - ], - "../node_modules/@types/node/buffer.d.ts": [ - "../node_modules/@types/node/buffer.d.ts" - ], - "../node_modules/@types/node/child_process.d.ts": [ - "../node_modules/@types/node/child_process.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/stream.d.ts" - ], - "../node_modules/@types/node/cluster.d.ts": [ - "../node_modules/@types/node/child_process.d.ts", - "../node_modules/@types/node/cluster.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/net.d.ts" - ], - "../node_modules/@types/node/console.d.ts": [ - "../node_modules/@types/node/util.d.ts" - ], - "../node_modules/@types/node/constants.d.ts": [ - "../node_modules/@types/node/constants.d.ts", - "../node_modules/@types/node/crypto.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/os.d.ts" - ], - "../node_modules/@types/node/crypto.d.ts": [ - "../node_modules/@types/node/crypto.d.ts", - "../node_modules/@types/node/stream.d.ts" - ], - "../node_modules/@types/node/dgram.d.ts": [ - "../node_modules/@types/node/dgram.d.ts", - "../node_modules/@types/node/dns.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/net.d.ts" - ], - "../node_modules/@types/node/dns.d.ts": [ - "../node_modules/@types/node/dns.d.ts" - ], - "../node_modules/@types/node/domain.d.ts": [ - "../node_modules/@types/node/domain.d.ts", - "../node_modules/@types/node/events.d.ts" - ], - "../node_modules/@types/node/events.d.ts": [ - "../node_modules/@types/node/events.d.ts" - ], - "../node_modules/@types/node/fs.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/fs/promises.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/fs/promises.d.ts": [ - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/fs/promises.d.ts" - ], - "../node_modules/@types/node/http.d.ts": [ - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/http2.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/http2.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/tls.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/https.d.ts": [ - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/https.d.ts", - "../node_modules/@types/node/tls.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/index.d.ts": [ - "../node_modules/@types/node/base.d.ts" - ], - "../node_modules/@types/node/inspector.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/inspector.d.ts" - ], - "../node_modules/@types/node/module.d.ts": [ - "../node_modules/@types/node/module.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/net.d.ts": [ - "../node_modules/@types/node/dns.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/stream.d.ts" - ], - "../node_modules/@types/node/os.d.ts": [ - "../node_modules/@types/node/os.d.ts" - ], - "../node_modules/@types/node/path.d.ts": [ - "../node_modules/@types/node/path.d.ts" - ], - "../node_modules/@types/node/perf_hooks.d.ts": [ - "../node_modules/@types/node/async_hooks.d.ts", - "../node_modules/@types/node/perf_hooks.d.ts" - ], - "../node_modules/@types/node/process.d.ts": [ - "../node_modules/@types/node/tty.d.ts" - ], - "../node_modules/@types/node/punycode.d.ts": [ - "../node_modules/@types/node/punycode.d.ts" - ], - "../node_modules/@types/node/querystring.d.ts": [ - "../node_modules/@types/node/querystring.d.ts" - ], - "../node_modules/@types/node/readline.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/readline.d.ts" - ], - "../node_modules/@types/node/repl.d.ts": [ - "../node_modules/@types/node/readline.d.ts", - "../node_modules/@types/node/repl.d.ts", - "../node_modules/@types/node/util.d.ts", - "../node_modules/@types/node/vm.d.ts" - ], - "../node_modules/@types/node/stream.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/stream.d.ts" - ], - "../node_modules/@types/node/string_decoder.d.ts": [ - "../node_modules/@types/node/string_decoder.d.ts" - ], - "../node_modules/@types/node/timers.d.ts": [ - "../node_modules/@types/node/timers.d.ts" - ], - "../node_modules/@types/node/tls.d.ts": [ - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/tls.d.ts" - ], - "../node_modules/@types/node/trace_events.d.ts": [ - "../node_modules/@types/node/trace_events.d.ts" - ], - "../node_modules/@types/node/ts3.6/base.d.ts": [ - "../node_modules/@types/node/async_hooks.d.ts", - "../node_modules/@types/node/buffer.d.ts", - "../node_modules/@types/node/child_process.d.ts", - "../node_modules/@types/node/cluster.d.ts", - "../node_modules/@types/node/console.d.ts", - "../node_modules/@types/node/constants.d.ts", - "../node_modules/@types/node/crypto.d.ts", - "../node_modules/@types/node/dgram.d.ts", - "../node_modules/@types/node/dns.d.ts", - "../node_modules/@types/node/domain.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/fs/promises.d.ts", - "../node_modules/@types/node/globals.d.ts", - "../node_modules/@types/node/globals.global.d.ts", - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/http2.d.ts", - "../node_modules/@types/node/https.d.ts", - "../node_modules/@types/node/inspector.d.ts", - "../node_modules/@types/node/module.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/os.d.ts", - "../node_modules/@types/node/path.d.ts", - "../node_modules/@types/node/perf_hooks.d.ts", - "../node_modules/@types/node/process.d.ts", - "../node_modules/@types/node/punycode.d.ts", - "../node_modules/@types/node/querystring.d.ts", - "../node_modules/@types/node/readline.d.ts", - "../node_modules/@types/node/repl.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/string_decoder.d.ts", - "../node_modules/@types/node/timers.d.ts", - "../node_modules/@types/node/tls.d.ts", - "../node_modules/@types/node/trace_events.d.ts", - "../node_modules/@types/node/tty.d.ts", - "../node_modules/@types/node/url.d.ts", - "../node_modules/@types/node/util.d.ts", - "../node_modules/@types/node/v8.d.ts", - "../node_modules/@types/node/vm.d.ts", - "../node_modules/@types/node/wasi.d.ts", - "../node_modules/@types/node/worker_threads.d.ts", - "../node_modules/@types/node/zlib.d.ts" - ], - "../node_modules/@types/node/tty.d.ts": [ - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/tty.d.ts" - ], - "../node_modules/@types/node/url.d.ts": [ - "../node_modules/@types/node/querystring.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/util.d.ts": [ - "../node_modules/@types/node/util.d.ts" - ], - "../node_modules/@types/node/v8.d.ts": [ - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/v8.d.ts" - ], - "../node_modules/@types/node/vm.d.ts": [ - "../node_modules/@types/node/vm.d.ts" - ], - "../node_modules/@types/node/wasi.d.ts": [ - "../node_modules/@types/node/wasi.d.ts" - ], - "../node_modules/@types/node/worker_threads.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs/promises.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/url.d.ts", - "../node_modules/@types/node/vm.d.ts", - "../node_modules/@types/node/worker_threads.d.ts" - ], - "../node_modules/@types/node/zlib.d.ts": [ - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/zlib.d.ts" - ], - "../node_modules/three/src/Three.Legacy.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/Three.d.ts": [ - "../node_modules/three/src/Three.Legacy.d.ts", - "../node_modules/three/src/animation/AnimationAction.d.ts", - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/animation/AnimationMixer.d.ts", - "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", - "../node_modules/three/src/animation/AnimationUtils.d.ts", - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/animation/PropertyBinding.d.ts", - "../node_modules/three/src/animation/PropertyMixer.d.ts", - "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts", - "../node_modules/three/src/audio/Audio.d.ts", - "../node_modules/three/src/audio/AudioAnalyser.d.ts", - "../node_modules/three/src/audio/AudioContext.d.ts", - "../node_modules/three/src/audio/AudioListener.d.ts", - "../node_modules/three/src/audio/PositionalAudio.d.ts", - "../node_modules/three/src/cameras/ArrayCamera.d.ts", - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/cameras/CubeCamera.d.ts", - "../node_modules/three/src/cameras/OrthographicCamera.d.ts", - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", - "../node_modules/three/src/cameras/StereoCamera.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Clock.d.ts", - "../node_modules/three/src/core/DirectGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Face3.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/InstancedBufferAttribute.d.ts", - "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", - "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts", - "../node_modules/three/src/core/InterleavedBuffer.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/core/Layers.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/core/Uniform.d.ts", - "../node_modules/three/src/extras/DataUtils.d.ts", - "../node_modules/three/src/extras/ImageUtils.d.ts", - "../node_modules/three/src/extras/PMREMGenerator.d.ts", - "../node_modules/three/src/extras/ShapeUtils.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/extras/core/CurvePath.d.ts", - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/extras/core/Path.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/extras/core/ShapePath.d.ts", - "../node_modules/three/src/extras/curves/Curves.d.ts", - "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts", - "../node_modules/three/src/geometries/Geometries.d.ts", - "../node_modules/three/src/helpers/ArrowHelper.d.ts", - "../node_modules/three/src/helpers/AxesHelper.d.ts", - "../node_modules/three/src/helpers/Box3Helper.d.ts", - "../node_modules/three/src/helpers/BoxHelper.d.ts", - "../node_modules/three/src/helpers/CameraHelper.d.ts", - "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts", - "../node_modules/three/src/helpers/GridHelper.d.ts", - "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts", - "../node_modules/three/src/helpers/PlaneHelper.d.ts", - "../node_modules/three/src/helpers/PointLightHelper.d.ts", - "../node_modules/three/src/helpers/PolarGridHelper.d.ts", - "../node_modules/three/src/helpers/SkeletonHelper.d.ts", - "../node_modules/three/src/helpers/SpotLightHelper.d.ts", - "../node_modules/three/src/lights/AmbientLight.d.ts", - "../node_modules/three/src/lights/AmbientLightProbe.d.ts", - "../node_modules/three/src/lights/DirectionalLight.d.ts", - "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", - "../node_modules/three/src/lights/HemisphereLight.d.ts", - "../node_modules/three/src/lights/HemisphereLightProbe.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/lights/LightProbe.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts", - "../node_modules/three/src/lights/PointLight.d.ts", - "../node_modules/three/src/lights/PointLightShadow.d.ts", - "../node_modules/three/src/lights/RectAreaLight.d.ts", - "../node_modules/three/src/lights/SpotLight.d.ts", - "../node_modules/three/src/lights/SpotLightShadow.d.ts", - "../node_modules/three/src/loaders/AnimationLoader.d.ts", - "../node_modules/three/src/loaders/AudioLoader.d.ts", - "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts", - "../node_modules/three/src/loaders/Cache.d.ts", - "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts", - "../node_modules/three/src/loaders/CubeTextureLoader.d.ts", - "../node_modules/three/src/loaders/DataTextureLoader.d.ts", - "../node_modules/three/src/loaders/FileLoader.d.ts", - "../node_modules/three/src/loaders/FontLoader.d.ts", - "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts", - "../node_modules/three/src/loaders/ImageLoader.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoaderUtils.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/loaders/MaterialLoader.d.ts", - "../node_modules/three/src/loaders/ObjectLoader.d.ts", - "../node_modules/three/src/loaders/TextureLoader.d.ts", - "../node_modules/three/src/materials/Materials.d.ts", - "../node_modules/three/src/math/Box2.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Cylindrical.d.ts", - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Frustum.d.ts", - "../node_modules/three/src/math/Interpolant.d.ts", - "../node_modules/three/src/math/Line3.d.ts", - "../node_modules/three/src/math/MathUtils.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Ray.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Spherical.d.ts", - "../node_modules/three/src/math/SphericalHarmonics3.d.ts", - "../node_modules/three/src/math/Triangle.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/objects/InstancedMesh.d.ts", - "../node_modules/three/src/objects/LOD.d.ts", - "../node_modules/three/src/objects/Line.d.ts", - "../node_modules/three/src/objects/LineLoop.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts", - "../node_modules/three/src/objects/Points.d.ts", - "../node_modules/three/src/objects/Skeleton.d.ts", - "../node_modules/three/src/objects/SkinnedMesh.d.ts", - "../node_modules/three/src/objects/Sprite.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/renderers/WebGL1Renderer.d.ts", - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/shaders/ShaderChunk.d.ts", - "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts", - "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts", - "../node_modules/three/src/renderers/shaders/UniformsUtils.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts", - "../node_modules/three/src/renderers/webxr/WebXRController.d.ts", - "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", - "../node_modules/three/src/scenes/Fog.d.ts", - "../node_modules/three/src/scenes/FogExp2.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts", - "../node_modules/three/src/textures/CanvasTexture.d.ts", - "../node_modules/three/src/textures/CompressedTexture.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts", - "../node_modules/three/src/textures/DataTexture.d.ts", - "../node_modules/three/src/textures/DataTexture2DArray.d.ts", - "../node_modules/three/src/textures/DataTexture3D.d.ts", - "../node_modules/three/src/textures/DepthTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts", - "../node_modules/three/src/textures/VideoTexture.d.ts" - ], - "../node_modules/three/src/animation/AnimationAction.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/animation/AnimationMixer.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/animation/AnimationClip.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/objects/Bone.d.ts" - ], - "../node_modules/three/src/animation/AnimationMixer.d.ts": [ - "../node_modules/three/src/animation/AnimationAction.d.ts", - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/animation/AnimationUtils.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts" - ], - "../node_modules/three/src/animation/KeyframeTrack.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts" - ], - "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts" - ], - "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/audio/Audio.d.ts": [ - "../node_modules/three/src/audio/AudioContext.d.ts", - "../node_modules/three/src/audio/AudioListener.d.ts", - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/audio/AudioAnalyser.d.ts": [ - "../node_modules/three/src/audio/Audio.d.ts" - ], - "../node_modules/three/src/audio/AudioListener.d.ts": [ - "../node_modules/three/src/audio/AudioContext.d.ts", - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/audio/PositionalAudio.d.ts": [ - "../node_modules/three/src/audio/Audio.d.ts", - "../node_modules/three/src/audio/AudioListener.d.ts" - ], - "../node_modules/three/src/cameras/ArrayCamera.d.ts": [ - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts" - ], - "../node_modules/three/src/cameras/Camera.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/cameras/CubeCamera.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/cameras/OrthographicCamera.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts" - ], - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts" - ], - "../node_modules/three/src/cameras/StereoCamera.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts" - ], - "../node_modules/three/src/core/BufferAttribute.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts" - ], - "../node_modules/three/src/core/BufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/DirectGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/core/DirectGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/math/Vector4.d.ts" - ], - "../node_modules/three/src/core/Face3.d.ts": [ - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/core/Geometry.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Face3.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts" - ], - "../node_modules/three/src/core/InstancedBufferAttribute.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/core/InstancedBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts": [ - "../node_modules/three/src/core/InterleavedBuffer.d.ts" - ], - "../node_modules/three/src/core/InterleavedBuffer.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts" - ], - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/InterleavedBuffer.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts" - ], - "../node_modules/three/src/core/Object3D.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Layers.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/core/Raycaster.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/Face3.d.ts", - "../node_modules/three/src/core/Layers.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Ray.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/ImageUtils.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/extras/PMREMGenerator.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/extras/core/Curve.d.ts": [ - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/core/CurvePath.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/core/Font.d.ts": [ - "../node_modules/three/src/extras/core/Shape.d.ts" - ], - "../node_modules/three/src/extras/core/Path.d.ts": [ - "../node_modules/three/src/extras/core/CurvePath.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/core/Shape.d.ts": [ - "../node_modules/three/src/extras/core/Path.d.ts", - "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", - "../node_modules/three/src/geometries/ShapeGeometry.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/core/ShapePath.d.ts": [ - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/ArcCurve.d.ts": [ - "../node_modules/three/src/extras/curves/EllipseCurve.d.ts" - ], - "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/curves/Curves.d.ts": [ - "../node_modules/three/src/extras/curves/ArcCurve.d.ts", - "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts", - "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts", - "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts", - "../node_modules/three/src/extras/curves/EllipseCurve.d.ts", - "../node_modules/three/src/extras/curves/LineCurve.d.ts", - "../node_modules/three/src/extras/curves/LineCurve3.d.ts", - "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts", - "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts", - "../node_modules/three/src/extras/curves/SplineCurve.d.ts" - ], - "../node_modules/three/src/extras/curves/EllipseCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/LineCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/LineCurve3.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/curves/SplineCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts" - ], - "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/BoxGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/CircleGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/ConeGeometry.d.ts": [ - "../node_modules/three/src/geometries/CylinderGeometry.d.ts" - ], - "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/CylinderGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/EdgesGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/Geometries.d.ts": [ - "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts", - "../node_modules/three/src/geometries/BoxGeometry.d.ts", - "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts", - "../node_modules/three/src/geometries/CircleGeometry.d.ts", - "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ConeGeometry.d.ts", - "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts", - "../node_modules/three/src/geometries/CylinderGeometry.d.ts", - "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts", - "../node_modules/three/src/geometries/EdgesGeometry.d.ts", - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", - "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts", - "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts", - "../node_modules/three/src/geometries/LatheGeometry.d.ts", - "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/OctahedronGeometry.d.ts", - "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ParametricGeometry.d.ts", - "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts", - "../node_modules/three/src/geometries/PlaneGeometry.d.ts", - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts", - "../node_modules/three/src/geometries/RingBufferGeometry.d.ts", - "../node_modules/three/src/geometries/RingGeometry.d.ts", - "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ShapeGeometry.d.ts", - "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts", - "../node_modules/three/src/geometries/SphereGeometry.d.ts", - "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts", - "../node_modules/three/src/geometries/TextBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TextGeometry.d.ts", - "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TorusGeometry.d.ts", - "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts", - "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TubeGeometry.d.ts", - "../node_modules/three/src/geometries/WireframeGeometry.d.ts" - ], - "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/geometries/LatheGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/OctahedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/ParametricGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/PlaneGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/RingBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/RingGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts" - ], - "../node_modules/three/src/geometries/ShapeGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts" - ], - "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/SphereGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/TextBufferGeometry.d.ts": [ - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TextGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/geometries/TextBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TorusGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/TubeGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/WireframeGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/helpers/ArrowHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/objects/Line.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts" - ], - "../node_modules/three/src/helpers/AxesHelper.d.ts": [ - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/Box3Helper.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/BoxHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/CameraHelper.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/DirectionalLight.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Line.d.ts" - ], - "../node_modules/three/src/helpers/GridHelper.d.ts": [ - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/HemisphereLight.d.ts", - "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts" - ], - "../node_modules/three/src/helpers/PlaneHelper.d.ts": [ - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/PointLightHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/PointLight.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts" - ], - "../node_modules/three/src/helpers/PolarGridHelper.d.ts": [ - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/SkeletonHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/SpotLightHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/lights/AmbientLight.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/AmbientLightProbe.d.ts": [ - "../node_modules/three/src/lights/LightProbe.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/DirectionalLight.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/lights/DirectionalLightShadow.d.ts": [ - "../node_modules/three/src/cameras/OrthographicCamera.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts" - ], - "../node_modules/three/src/lights/HemisphereLight.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/lights/HemisphereLightProbe.d.ts": [ - "../node_modules/three/src/lights/LightProbe.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/Light.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/LightProbe.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/SphericalHarmonics3.d.ts" - ], - "../node_modules/three/src/lights/LightShadow.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts" - ], - "../node_modules/three/src/lights/PointLight.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/lights/PointLightShadow.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/PointLightShadow.d.ts": [ - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts" - ], - "../node_modules/three/src/lights/RectAreaLight.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/SpotLight.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/lights/SpotLightShadow.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/lights/SpotLightShadow.d.ts": [ - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts" - ], - "../node_modules/three/src/loaders/AnimationLoader.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/AudioLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/textures/CompressedTexture.d.ts" - ], - "../node_modules/three/src/loaders/CubeTextureLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts" - ], - "../node_modules/three/src/loaders/DataTextureLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/textures/DataTexture.d.ts" - ], - "../node_modules/three/src/loaders/FileLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/FontLoader.d.ts": [ - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/ImageLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/Loader.d.ts": [ - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/LoaderUtils.d.ts": [ - "../node_modules/three/src/polyfills.d.ts" - ], - "../node_modules/three/src/loaders/LoadingManager.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts" - ], - "../node_modules/three/src/loaders/MaterialLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/loaders/ObjectLoader.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/loaders/TextureLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/LineBasicMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/materials/LineDashedMaterial.d.ts": [ - "../node_modules/three/src/materials/LineBasicMaterial.d.ts" - ], - "../node_modules/three/src/materials/Material.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts" - ], - "../node_modules/three/src/materials/Materials.d.ts": [ - "../node_modules/three/src/materials/LineBasicMaterial.d.ts", - "../node_modules/three/src/materials/LineDashedMaterial.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", - "../node_modules/three/src/materials/MeshDepthMaterial.d.ts", - "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts", - "../node_modules/three/src/materials/MeshLambertMaterial.d.ts", - "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts", - "../node_modules/three/src/materials/MeshNormalMaterial.d.ts", - "../node_modules/three/src/materials/MeshPhongMaterial.d.ts", - "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts", - "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", - "../node_modules/three/src/materials/MeshToonMaterial.d.ts", - "../node_modules/three/src/materials/PointsMaterial.d.ts", - "../node_modules/three/src/materials/RawShaderMaterial.d.ts", - "../node_modules/three/src/materials/ShaderMaterial.d.ts", - "../node_modules/three/src/materials/ShadowMaterial.d.ts", - "../node_modules/three/src/materials/SpriteMaterial.d.ts" - ], - "../node_modules/three/src/materials/MeshBasicMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshDepthMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshLambertMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshNormalMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshPhongMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts": [ - "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshStandardMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshToonMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/PointsMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/RawShaderMaterial.d.ts": [ - "../node_modules/three/src/materials/ShaderMaterial.d.ts" - ], - "../node_modules/three/src/materials/ShaderMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts" - ], - "../node_modules/three/src/materials/ShadowMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/materials/SpriteMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/math/Box2.d.ts": [ - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/math/Box3.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Triangle.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Color.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts" - ], - "../node_modules/three/src/math/Cylindrical.d.ts": [ - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Euler.d.ts": [ - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Frustum.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/objects/Sprite.d.ts" - ], - "../node_modules/three/src/math/Line3.d.ts": [ - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/MathUtils.d.ts": [ - "../node_modules/three/src/math/Quaternion.d.ts" - ], - "../node_modules/three/src/math/Matrix3.d.ts": [ - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Matrix4.d.ts": [ - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Plane.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Line3.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Quaternion.d.ts": [ - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Ray.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Sphere.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Spherical.d.ts": [ - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/SphericalHarmonics3.d.ts": [ - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Triangle.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Vector2.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts" - ], - "../node_modules/three/src/math/Vector3.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/math/Cylindrical.d.ts", - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Spherical.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/math/Vector4.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts": [ - "../node_modules/three/src/math/Interpolant.d.ts" - ], - "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts": [ - "../node_modules/three/src/math/Interpolant.d.ts" - ], - "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts": [ - "../node_modules/three/src/math/Interpolant.d.ts" - ], - "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": [ - "../node_modules/three/src/math/Interpolant.d.ts" - ], - "../node_modules/three/src/objects/Bone.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/objects/Group.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/objects/InstancedMesh.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts" - ], - "../node_modules/three/src/objects/LOD.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts" - ], - "../node_modules/three/src/objects/Line.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Material.d.ts" - ], - "../node_modules/three/src/objects/LineLoop.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/objects/Line.d.ts" - ], - "../node_modules/three/src/objects/LineSegments.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/objects/Line.d.ts" - ], - "../node_modules/three/src/objects/Mesh.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Material.d.ts" - ], - "../node_modules/three/src/objects/Points.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Material.d.ts" - ], - "../node_modules/three/src/objects/Skeleton.d.ts": [ - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/textures/DataTexture.d.ts" - ], - "../node_modules/three/src/objects/SkinnedMesh.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts", - "../node_modules/three/src/objects/Skeleton.d.ts" - ], - "../node_modules/three/src/objects/Sprite.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Materials.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/renderers/WebGL1Renderer.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderer.d.ts" - ], - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts" - ], - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/textures/DepthTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/renderers/WebGLRenderer.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts", - "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts": [ - "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderer.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLUtils.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts" - ], - "../node_modules/three/src/renderers/webxr/WebXRController.d.ts": [ - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts" - ], - "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts" - ], - "../node_modules/three/src/scenes/Fog.d.ts": [ - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/scenes/FogExp2.d.ts": [ - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/scenes/Fog.d.ts" - ], - "../node_modules/three/src/scenes/Scene.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/scenes/Fog.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/CanvasTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/CompressedTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/CubeTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/DataTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/DataTexture2DArray.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/DataTexture3D.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/DepthTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/Texture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/textures/VideoTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "./src/OrbitControls.ts": [ - "../node_modules/three/src/Three.d.ts" - ], - "./src/globaltypes.ts": [ - "./src/constants.ts" - ], - "./src/noise.ts": [ - "./src/simplex-noise.ts" - ], - "./src/spatial-hash-grid.ts": [ - "./src/math.ts" - ], - "./src/terrain-height.ts": [ - "./src/noise.ts", - "./src/terrain-constants.ts" - ] - }, - "exportedModulesMap": { - "../node_modules/@types/cors/index.d.ts": [ - "../node_modules/@types/node/http.d.ts" - ], - "../node_modules/@types/node/assert.d.ts": [ - "../node_modules/@types/node/assert.d.ts" - ], - "../node_modules/@types/node/async_hooks.d.ts": [ - "../node_modules/@types/node/async_hooks.d.ts" - ], - "../node_modules/@types/node/base.d.ts": [ - "../node_modules/@types/node/assert.d.ts", - "../node_modules/@types/node/ts3.6/base.d.ts" - ], - "../node_modules/@types/node/buffer.d.ts": [ - "../node_modules/@types/node/buffer.d.ts" - ], - "../node_modules/@types/node/child_process.d.ts": [ - "../node_modules/@types/node/child_process.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/stream.d.ts" - ], - "../node_modules/@types/node/cluster.d.ts": [ - "../node_modules/@types/node/child_process.d.ts", - "../node_modules/@types/node/cluster.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/net.d.ts" - ], - "../node_modules/@types/node/console.d.ts": [ - "../node_modules/@types/node/util.d.ts" - ], - "../node_modules/@types/node/constants.d.ts": [ - "../node_modules/@types/node/constants.d.ts", - "../node_modules/@types/node/crypto.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/os.d.ts" - ], - "../node_modules/@types/node/crypto.d.ts": [ - "../node_modules/@types/node/crypto.d.ts", - "../node_modules/@types/node/stream.d.ts" - ], - "../node_modules/@types/node/dgram.d.ts": [ - "../node_modules/@types/node/dgram.d.ts", - "../node_modules/@types/node/dns.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/net.d.ts" - ], - "../node_modules/@types/node/dns.d.ts": [ - "../node_modules/@types/node/dns.d.ts" - ], - "../node_modules/@types/node/domain.d.ts": [ - "../node_modules/@types/node/domain.d.ts", - "../node_modules/@types/node/events.d.ts" - ], - "../node_modules/@types/node/events.d.ts": [ - "../node_modules/@types/node/events.d.ts" - ], - "../node_modules/@types/node/fs.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/fs/promises.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/fs/promises.d.ts": [ - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/fs/promises.d.ts" - ], - "../node_modules/@types/node/http.d.ts": [ - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/http2.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/http2.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/tls.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/https.d.ts": [ - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/https.d.ts", - "../node_modules/@types/node/tls.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/index.d.ts": [ - "../node_modules/@types/node/base.d.ts" - ], - "../node_modules/@types/node/inspector.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/inspector.d.ts" - ], - "../node_modules/@types/node/module.d.ts": [ - "../node_modules/@types/node/module.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/net.d.ts": [ - "../node_modules/@types/node/dns.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/stream.d.ts" - ], - "../node_modules/@types/node/os.d.ts": [ - "../node_modules/@types/node/os.d.ts" - ], - "../node_modules/@types/node/path.d.ts": [ - "../node_modules/@types/node/path.d.ts" - ], - "../node_modules/@types/node/perf_hooks.d.ts": [ - "../node_modules/@types/node/async_hooks.d.ts", - "../node_modules/@types/node/perf_hooks.d.ts" - ], - "../node_modules/@types/node/process.d.ts": [ - "../node_modules/@types/node/tty.d.ts" - ], - "../node_modules/@types/node/punycode.d.ts": [ - "../node_modules/@types/node/punycode.d.ts" - ], - "../node_modules/@types/node/querystring.d.ts": [ - "../node_modules/@types/node/querystring.d.ts" - ], - "../node_modules/@types/node/readline.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/readline.d.ts" - ], - "../node_modules/@types/node/repl.d.ts": [ - "../node_modules/@types/node/readline.d.ts", - "../node_modules/@types/node/repl.d.ts", - "../node_modules/@types/node/util.d.ts", - "../node_modules/@types/node/vm.d.ts" - ], - "../node_modules/@types/node/stream.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/stream.d.ts" - ], - "../node_modules/@types/node/string_decoder.d.ts": [ - "../node_modules/@types/node/string_decoder.d.ts" - ], - "../node_modules/@types/node/timers.d.ts": [ - "../node_modules/@types/node/timers.d.ts" - ], - "../node_modules/@types/node/tls.d.ts": [ - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/tls.d.ts" - ], - "../node_modules/@types/node/trace_events.d.ts": [ - "../node_modules/@types/node/trace_events.d.ts" - ], - "../node_modules/@types/node/ts3.6/base.d.ts": [ - "../node_modules/@types/node/async_hooks.d.ts", - "../node_modules/@types/node/buffer.d.ts", - "../node_modules/@types/node/child_process.d.ts", - "../node_modules/@types/node/cluster.d.ts", - "../node_modules/@types/node/console.d.ts", - "../node_modules/@types/node/constants.d.ts", - "../node_modules/@types/node/crypto.d.ts", - "../node_modules/@types/node/dgram.d.ts", - "../node_modules/@types/node/dns.d.ts", - "../node_modules/@types/node/domain.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/fs/promises.d.ts", - "../node_modules/@types/node/globals.d.ts", - "../node_modules/@types/node/globals.global.d.ts", - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/http2.d.ts", - "../node_modules/@types/node/https.d.ts", - "../node_modules/@types/node/inspector.d.ts", - "../node_modules/@types/node/module.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/os.d.ts", - "../node_modules/@types/node/path.d.ts", - "../node_modules/@types/node/perf_hooks.d.ts", - "../node_modules/@types/node/process.d.ts", - "../node_modules/@types/node/punycode.d.ts", - "../node_modules/@types/node/querystring.d.ts", - "../node_modules/@types/node/readline.d.ts", - "../node_modules/@types/node/repl.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/string_decoder.d.ts", - "../node_modules/@types/node/timers.d.ts", - "../node_modules/@types/node/tls.d.ts", - "../node_modules/@types/node/trace_events.d.ts", - "../node_modules/@types/node/tty.d.ts", - "../node_modules/@types/node/url.d.ts", - "../node_modules/@types/node/util.d.ts", - "../node_modules/@types/node/v8.d.ts", - "../node_modules/@types/node/vm.d.ts", - "../node_modules/@types/node/wasi.d.ts", - "../node_modules/@types/node/worker_threads.d.ts", - "../node_modules/@types/node/zlib.d.ts" - ], - "../node_modules/@types/node/tty.d.ts": [ - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/tty.d.ts" - ], - "../node_modules/@types/node/url.d.ts": [ - "../node_modules/@types/node/querystring.d.ts", - "../node_modules/@types/node/url.d.ts" - ], - "../node_modules/@types/node/util.d.ts": [ - "../node_modules/@types/node/util.d.ts" - ], - "../node_modules/@types/node/v8.d.ts": [ - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/v8.d.ts" - ], - "../node_modules/@types/node/vm.d.ts": [ - "../node_modules/@types/node/vm.d.ts" - ], - "../node_modules/@types/node/wasi.d.ts": [ - "../node_modules/@types/node/wasi.d.ts" - ], - "../node_modules/@types/node/worker_threads.d.ts": [ - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs/promises.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/url.d.ts", - "../node_modules/@types/node/vm.d.ts", - "../node_modules/@types/node/worker_threads.d.ts" - ], - "../node_modules/@types/node/zlib.d.ts": [ - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/zlib.d.ts" - ], - "../node_modules/three/src/Three.Legacy.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/Three.d.ts": [ - "../node_modules/three/src/Three.Legacy.d.ts", - "../node_modules/three/src/animation/AnimationAction.d.ts", - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/animation/AnimationMixer.d.ts", - "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", - "../node_modules/three/src/animation/AnimationUtils.d.ts", - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/animation/PropertyBinding.d.ts", - "../node_modules/three/src/animation/PropertyMixer.d.ts", - "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts", - "../node_modules/three/src/audio/Audio.d.ts", - "../node_modules/three/src/audio/AudioAnalyser.d.ts", - "../node_modules/three/src/audio/AudioContext.d.ts", - "../node_modules/three/src/audio/AudioListener.d.ts", - "../node_modules/three/src/audio/PositionalAudio.d.ts", - "../node_modules/three/src/cameras/ArrayCamera.d.ts", - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/cameras/CubeCamera.d.ts", - "../node_modules/three/src/cameras/OrthographicCamera.d.ts", - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", - "../node_modules/three/src/cameras/StereoCamera.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Clock.d.ts", - "../node_modules/three/src/core/DirectGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Face3.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/InstancedBufferAttribute.d.ts", - "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", - "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts", - "../node_modules/three/src/core/InterleavedBuffer.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/core/Layers.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/core/Uniform.d.ts", - "../node_modules/three/src/extras/DataUtils.d.ts", - "../node_modules/three/src/extras/ImageUtils.d.ts", - "../node_modules/three/src/extras/PMREMGenerator.d.ts", - "../node_modules/three/src/extras/ShapeUtils.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/extras/core/CurvePath.d.ts", - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/extras/core/Path.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/extras/core/ShapePath.d.ts", - "../node_modules/three/src/extras/curves/Curves.d.ts", - "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts", - "../node_modules/three/src/geometries/Geometries.d.ts", - "../node_modules/three/src/helpers/ArrowHelper.d.ts", - "../node_modules/three/src/helpers/AxesHelper.d.ts", - "../node_modules/three/src/helpers/Box3Helper.d.ts", - "../node_modules/three/src/helpers/BoxHelper.d.ts", - "../node_modules/three/src/helpers/CameraHelper.d.ts", - "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts", - "../node_modules/three/src/helpers/GridHelper.d.ts", - "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts", - "../node_modules/three/src/helpers/PlaneHelper.d.ts", - "../node_modules/three/src/helpers/PointLightHelper.d.ts", - "../node_modules/three/src/helpers/PolarGridHelper.d.ts", - "../node_modules/three/src/helpers/SkeletonHelper.d.ts", - "../node_modules/three/src/helpers/SpotLightHelper.d.ts", - "../node_modules/three/src/lights/AmbientLight.d.ts", - "../node_modules/three/src/lights/AmbientLightProbe.d.ts", - "../node_modules/three/src/lights/DirectionalLight.d.ts", - "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", - "../node_modules/three/src/lights/HemisphereLight.d.ts", - "../node_modules/three/src/lights/HemisphereLightProbe.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/lights/LightProbe.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts", - "../node_modules/three/src/lights/PointLight.d.ts", - "../node_modules/three/src/lights/PointLightShadow.d.ts", - "../node_modules/three/src/lights/RectAreaLight.d.ts", - "../node_modules/three/src/lights/SpotLight.d.ts", - "../node_modules/three/src/lights/SpotLightShadow.d.ts", - "../node_modules/three/src/loaders/AnimationLoader.d.ts", - "../node_modules/three/src/loaders/AudioLoader.d.ts", - "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts", - "../node_modules/three/src/loaders/Cache.d.ts", - "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts", - "../node_modules/three/src/loaders/CubeTextureLoader.d.ts", - "../node_modules/three/src/loaders/DataTextureLoader.d.ts", - "../node_modules/three/src/loaders/FileLoader.d.ts", - "../node_modules/three/src/loaders/FontLoader.d.ts", - "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts", - "../node_modules/three/src/loaders/ImageLoader.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoaderUtils.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/loaders/MaterialLoader.d.ts", - "../node_modules/three/src/loaders/ObjectLoader.d.ts", - "../node_modules/three/src/loaders/TextureLoader.d.ts", - "../node_modules/three/src/materials/Materials.d.ts", - "../node_modules/three/src/math/Box2.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Cylindrical.d.ts", - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Frustum.d.ts", - "../node_modules/three/src/math/Interpolant.d.ts", - "../node_modules/three/src/math/Line3.d.ts", - "../node_modules/three/src/math/MathUtils.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Ray.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Spherical.d.ts", - "../node_modules/three/src/math/SphericalHarmonics3.d.ts", - "../node_modules/three/src/math/Triangle.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/objects/InstancedMesh.d.ts", - "../node_modules/three/src/objects/LOD.d.ts", - "../node_modules/three/src/objects/Line.d.ts", - "../node_modules/three/src/objects/LineLoop.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts", - "../node_modules/three/src/objects/Points.d.ts", - "../node_modules/three/src/objects/Skeleton.d.ts", - "../node_modules/three/src/objects/SkinnedMesh.d.ts", - "../node_modules/three/src/objects/Sprite.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/renderers/WebGL1Renderer.d.ts", - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/shaders/ShaderChunk.d.ts", - "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts", - "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts", - "../node_modules/three/src/renderers/shaders/UniformsUtils.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts", - "../node_modules/three/src/renderers/webxr/WebXRController.d.ts", - "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", - "../node_modules/three/src/scenes/Fog.d.ts", - "../node_modules/three/src/scenes/FogExp2.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts", - "../node_modules/three/src/textures/CanvasTexture.d.ts", - "../node_modules/three/src/textures/CompressedTexture.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts", - "../node_modules/three/src/textures/DataTexture.d.ts", - "../node_modules/three/src/textures/DataTexture2DArray.d.ts", - "../node_modules/three/src/textures/DataTexture3D.d.ts", - "../node_modules/three/src/textures/DepthTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts", - "../node_modules/three/src/textures/VideoTexture.d.ts" - ], - "../node_modules/three/src/animation/AnimationAction.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/animation/AnimationMixer.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/animation/AnimationClip.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/objects/Bone.d.ts" - ], - "../node_modules/three/src/animation/AnimationMixer.d.ts": [ - "../node_modules/three/src/animation/AnimationAction.d.ts", - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/animation/AnimationUtils.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts" - ], - "../node_modules/three/src/animation/KeyframeTrack.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts" - ], - "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts" - ], - "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts": [ - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/constants.d.ts" - ], - "../node_modules/three/src/audio/Audio.d.ts": [ - "../node_modules/three/src/audio/AudioContext.d.ts", - "../node_modules/three/src/audio/AudioListener.d.ts", - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/audio/AudioAnalyser.d.ts": [ - "../node_modules/three/src/audio/Audio.d.ts" - ], - "../node_modules/three/src/audio/AudioListener.d.ts": [ - "../node_modules/three/src/audio/AudioContext.d.ts", - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/audio/PositionalAudio.d.ts": [ - "../node_modules/three/src/audio/Audio.d.ts", - "../node_modules/three/src/audio/AudioListener.d.ts" - ], - "../node_modules/three/src/cameras/ArrayCamera.d.ts": [ - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts" - ], - "../node_modules/three/src/cameras/Camera.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/cameras/CubeCamera.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/cameras/OrthographicCamera.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts" - ], - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts" - ], - "../node_modules/three/src/cameras/StereoCamera.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts" - ], - "../node_modules/three/src/core/BufferAttribute.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts" - ], - "../node_modules/three/src/core/BufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/DirectGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/core/DirectGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/math/Vector4.d.ts" - ], - "../node_modules/three/src/core/Face3.d.ts": [ - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/core/Geometry.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Face3.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts" - ], - "../node_modules/three/src/core/InstancedBufferAttribute.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/core/InstancedBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts": [ - "../node_modules/three/src/core/InterleavedBuffer.d.ts" - ], - "../node_modules/three/src/core/InterleavedBuffer.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts" - ], - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/InterleavedBuffer.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts" - ], - "../node_modules/three/src/core/Object3D.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Layers.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/core/Raycaster.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/Face3.d.ts", - "../node_modules/three/src/core/Layers.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Ray.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/ImageUtils.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/extras/PMREMGenerator.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/extras/core/Curve.d.ts": [ - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/core/CurvePath.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/core/Font.d.ts": [ - "../node_modules/three/src/extras/core/Shape.d.ts" - ], - "../node_modules/three/src/extras/core/Path.d.ts": [ - "../node_modules/three/src/extras/core/CurvePath.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/core/Shape.d.ts": [ - "../node_modules/three/src/extras/core/Path.d.ts", - "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", - "../node_modules/three/src/geometries/ShapeGeometry.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/core/ShapePath.d.ts": [ - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/ArcCurve.d.ts": [ - "../node_modules/three/src/extras/curves/EllipseCurve.d.ts" - ], - "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/curves/Curves.d.ts": [ - "../node_modules/three/src/extras/curves/ArcCurve.d.ts", - "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts", - "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts", - "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts", - "../node_modules/three/src/extras/curves/EllipseCurve.d.ts", - "../node_modules/three/src/extras/curves/LineCurve.d.ts", - "../node_modules/three/src/extras/curves/LineCurve3.d.ts", - "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts", - "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts", - "../node_modules/three/src/extras/curves/SplineCurve.d.ts" - ], - "../node_modules/three/src/extras/curves/EllipseCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/LineCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/LineCurve3.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/extras/curves/SplineCurve.d.ts": [ - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts" - ], - "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/BoxGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/CircleGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/ConeGeometry.d.ts": [ - "../node_modules/three/src/geometries/CylinderGeometry.d.ts" - ], - "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/CylinderGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/EdgesGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/Geometries.d.ts": [ - "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts", - "../node_modules/three/src/geometries/BoxGeometry.d.ts", - "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts", - "../node_modules/three/src/geometries/CircleGeometry.d.ts", - "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ConeGeometry.d.ts", - "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts", - "../node_modules/three/src/geometries/CylinderGeometry.d.ts", - "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts", - "../node_modules/three/src/geometries/EdgesGeometry.d.ts", - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", - "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts", - "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts", - "../node_modules/three/src/geometries/LatheGeometry.d.ts", - "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/OctahedronGeometry.d.ts", - "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ParametricGeometry.d.ts", - "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts", - "../node_modules/three/src/geometries/PlaneGeometry.d.ts", - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts", - "../node_modules/three/src/geometries/RingBufferGeometry.d.ts", - "../node_modules/three/src/geometries/RingGeometry.d.ts", - "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ShapeGeometry.d.ts", - "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts", - "../node_modules/three/src/geometries/SphereGeometry.d.ts", - "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts", - "../node_modules/three/src/geometries/TextBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TextGeometry.d.ts", - "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TorusGeometry.d.ts", - "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts", - "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TubeGeometry.d.ts", - "../node_modules/three/src/geometries/WireframeGeometry.d.ts" - ], - "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/geometries/LatheGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/OctahedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/ParametricGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/PlaneGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/RingBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/RingGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts" - ], - "../node_modules/three/src/geometries/ShapeGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts" - ], - "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/SphereGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts": [ - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/TextBufferGeometry.d.ts": [ - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TextGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/geometries/TextBufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TorusGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts" - ], - "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/TubeGeometry.d.ts": [ - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/geometries/WireframeGeometry.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts" - ], - "../node_modules/three/src/helpers/ArrowHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/objects/Line.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts" - ], - "../node_modules/three/src/helpers/AxesHelper.d.ts": [ - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/Box3Helper.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/BoxHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/CameraHelper.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/DirectionalLight.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Line.d.ts" - ], - "../node_modules/three/src/helpers/GridHelper.d.ts": [ - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/HemisphereLight.d.ts", - "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts" - ], - "../node_modules/three/src/helpers/PlaneHelper.d.ts": [ - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/PointLightHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/PointLight.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts" - ], - "../node_modules/three/src/helpers/PolarGridHelper.d.ts": [ - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/SkeletonHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/helpers/SpotLightHelper.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts" - ], - "../node_modules/three/src/lights/AmbientLight.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/AmbientLightProbe.d.ts": [ - "../node_modules/three/src/lights/LightProbe.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/DirectionalLight.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/lights/DirectionalLightShadow.d.ts": [ - "../node_modules/three/src/cameras/OrthographicCamera.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts" - ], - "../node_modules/three/src/lights/HemisphereLight.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/lights/HemisphereLightProbe.d.ts": [ - "../node_modules/three/src/lights/LightProbe.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/Light.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/LightProbe.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/SphericalHarmonics3.d.ts" - ], - "../node_modules/three/src/lights/LightShadow.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts" - ], - "../node_modules/three/src/lights/PointLight.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/lights/PointLightShadow.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/PointLightShadow.d.ts": [ - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts" - ], - "../node_modules/three/src/lights/RectAreaLight.d.ts": [ - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/lights/SpotLight.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/lights/SpotLightShadow.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/lights/SpotLightShadow.d.ts": [ - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts" - ], - "../node_modules/three/src/loaders/AnimationLoader.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/AudioLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/textures/CompressedTexture.d.ts" - ], - "../node_modules/three/src/loaders/CubeTextureLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts" - ], - "../node_modules/three/src/loaders/DataTextureLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/textures/DataTexture.d.ts" - ], - "../node_modules/three/src/loaders/FileLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/FontLoader.d.ts": [ - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/ImageLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/Loader.d.ts": [ - "../node_modules/three/src/loaders/LoadingManager.d.ts" - ], - "../node_modules/three/src/loaders/LoaderUtils.d.ts": [ - "../node_modules/three/src/polyfills.d.ts" - ], - "../node_modules/three/src/loaders/LoadingManager.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts" - ], - "../node_modules/three/src/loaders/MaterialLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/loaders/ObjectLoader.d.ts": [ - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/loaders/TextureLoader.d.ts": [ - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/LineBasicMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/materials/LineDashedMaterial.d.ts": [ - "../node_modules/three/src/materials/LineBasicMaterial.d.ts" - ], - "../node_modules/three/src/materials/Material.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts" - ], - "../node_modules/three/src/materials/Materials.d.ts": [ - "../node_modules/three/src/materials/LineBasicMaterial.d.ts", - "../node_modules/three/src/materials/LineDashedMaterial.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", - "../node_modules/three/src/materials/MeshDepthMaterial.d.ts", - "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts", - "../node_modules/three/src/materials/MeshLambertMaterial.d.ts", - "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts", - "../node_modules/three/src/materials/MeshNormalMaterial.d.ts", - "../node_modules/three/src/materials/MeshPhongMaterial.d.ts", - "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts", - "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", - "../node_modules/three/src/materials/MeshToonMaterial.d.ts", - "../node_modules/three/src/materials/PointsMaterial.d.ts", - "../node_modules/three/src/materials/RawShaderMaterial.d.ts", - "../node_modules/three/src/materials/ShaderMaterial.d.ts", - "../node_modules/three/src/materials/ShadowMaterial.d.ts", - "../node_modules/three/src/materials/SpriteMaterial.d.ts" - ], - "../node_modules/three/src/materials/MeshBasicMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshDepthMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshLambertMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshNormalMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshPhongMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts": [ - "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshStandardMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/MeshToonMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/PointsMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/materials/RawShaderMaterial.d.ts": [ - "../node_modules/three/src/materials/ShaderMaterial.d.ts" - ], - "../node_modules/three/src/materials/ShaderMaterial.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts" - ], - "../node_modules/three/src/materials/ShadowMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/materials/SpriteMaterial.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/math/Box2.d.ts": [ - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/math/Box3.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Triangle.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Color.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts" - ], - "../node_modules/three/src/math/Cylindrical.d.ts": [ - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Euler.d.ts": [ - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Frustum.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/objects/Sprite.d.ts" - ], - "../node_modules/three/src/math/Line3.d.ts": [ - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/MathUtils.d.ts": [ - "../node_modules/three/src/math/Quaternion.d.ts" - ], - "../node_modules/three/src/math/Matrix3.d.ts": [ - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Matrix4.d.ts": [ - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Plane.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Line3.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Quaternion.d.ts": [ - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Ray.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Sphere.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Spherical.d.ts": [ - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/SphericalHarmonics3.d.ts": [ - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Triangle.d.ts": [ - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts" - ], - "../node_modules/three/src/math/Vector2.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts" - ], - "../node_modules/three/src/math/Vector3.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/math/Cylindrical.d.ts", - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Spherical.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/math/Vector4.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts": [ - "../node_modules/three/src/math/Interpolant.d.ts" - ], - "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts": [ - "../node_modules/three/src/math/Interpolant.d.ts" - ], - "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts": [ - "../node_modules/three/src/math/Interpolant.d.ts" - ], - "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts": [ - "../node_modules/three/src/math/Interpolant.d.ts" - ], - "../node_modules/three/src/objects/Bone.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/objects/Group.d.ts": [ - "../node_modules/three/src/core/Object3D.d.ts" - ], - "../node_modules/three/src/objects/InstancedMesh.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts" - ], - "../node_modules/three/src/objects/LOD.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts" - ], - "../node_modules/three/src/objects/Line.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Material.d.ts" - ], - "../node_modules/three/src/objects/LineLoop.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/objects/Line.d.ts" - ], - "../node_modules/three/src/objects/LineSegments.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/objects/Line.d.ts" - ], - "../node_modules/three/src/objects/Mesh.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Material.d.ts" - ], - "../node_modules/three/src/objects/Points.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Material.d.ts" - ], - "../node_modules/three/src/objects/Skeleton.d.ts": [ - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/textures/DataTexture.d.ts" - ], - "../node_modules/three/src/objects/SkinnedMesh.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts", - "../node_modules/three/src/objects/Skeleton.d.ts" - ], - "../node_modules/three/src/objects/Sprite.d.ts": [ - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/materials/Materials.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/renderers/WebGL1Renderer.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderer.d.ts" - ], - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts" - ], - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/textures/DepthTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/renderers/WebGLRenderer.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts", - "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts": [ - "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderer.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts": [ - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts": [ - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts": [ - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLUtils.d.ts" - ], - "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts": [ - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts" - ], - "../node_modules/three/src/renderers/webxr/WebXRController.d.ts": [ - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts" - ], - "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts" - ], - "../node_modules/three/src/scenes/Fog.d.ts": [ - "../node_modules/three/src/math/Color.d.ts" - ], - "../node_modules/three/src/scenes/FogExp2.d.ts": [ - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/scenes/Fog.d.ts" - ], - "../node_modules/three/src/scenes/Scene.d.ts": [ - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/scenes/Fog.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/CanvasTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/CompressedTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/CubeTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/DataTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/DataTexture2DArray.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/DataTexture3D.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/DepthTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "../node_modules/three/src/textures/Texture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Vector2.d.ts" - ], - "../node_modules/three/src/textures/VideoTexture.d.ts": [ - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/textures/Texture.d.ts" - ], - "./src/globaltypes.ts": [ - "./src/constants.ts" - ], - "./src/terrain-height.ts": [ - "./src/noise.ts" - ] - }, - "semanticDiagnosticsPerFile": [ - "../node_modules/@types/component-emitter/index.d.ts", - "../node_modules/@types/cookie/index.d.ts", - "../node_modules/@types/cors/index.d.ts", - "../node_modules/@types/minimatch/index.d.ts", - "../node_modules/@types/node/assert.d.ts", - "../node_modules/@types/node/async_hooks.d.ts", - "../node_modules/@types/node/base.d.ts", - "../node_modules/@types/node/buffer.d.ts", - "../node_modules/@types/node/child_process.d.ts", - "../node_modules/@types/node/cluster.d.ts", - "../node_modules/@types/node/console.d.ts", - "../node_modules/@types/node/constants.d.ts", - "../node_modules/@types/node/crypto.d.ts", - "../node_modules/@types/node/dgram.d.ts", - "../node_modules/@types/node/dns.d.ts", - "../node_modules/@types/node/domain.d.ts", - "../node_modules/@types/node/events.d.ts", - "../node_modules/@types/node/fs.d.ts", - "../node_modules/@types/node/fs/promises.d.ts", - "../node_modules/@types/node/globals.d.ts", - "../node_modules/@types/node/globals.global.d.ts", - "../node_modules/@types/node/http.d.ts", - "../node_modules/@types/node/http2.d.ts", - "../node_modules/@types/node/https.d.ts", - "../node_modules/@types/node/index.d.ts", - "../node_modules/@types/node/inspector.d.ts", - "../node_modules/@types/node/module.d.ts", - "../node_modules/@types/node/net.d.ts", - "../node_modules/@types/node/os.d.ts", - "../node_modules/@types/node/path.d.ts", - "../node_modules/@types/node/perf_hooks.d.ts", - "../node_modules/@types/node/process.d.ts", - "../node_modules/@types/node/punycode.d.ts", - "../node_modules/@types/node/querystring.d.ts", - "../node_modules/@types/node/readline.d.ts", - "../node_modules/@types/node/repl.d.ts", - "../node_modules/@types/node/stream.d.ts", - "../node_modules/@types/node/string_decoder.d.ts", - "../node_modules/@types/node/timers.d.ts", - "../node_modules/@types/node/tls.d.ts", - "../node_modules/@types/node/trace_events.d.ts", - "../node_modules/@types/node/ts3.6/base.d.ts", - "../node_modules/@types/node/tty.d.ts", - "../node_modules/@types/node/url.d.ts", - "../node_modules/@types/node/util.d.ts", - "../node_modules/@types/node/v8.d.ts", - "../node_modules/@types/node/vm.d.ts", - "../node_modules/@types/node/wasi.d.ts", - "../node_modules/@types/node/worker_threads.d.ts", - "../node_modules/@types/node/zlib.d.ts", - "../node_modules/three/src/Three.Legacy.d.ts", - "../node_modules/three/src/Three.d.ts", - "../node_modules/three/src/animation/AnimationAction.d.ts", - "../node_modules/three/src/animation/AnimationClip.d.ts", - "../node_modules/three/src/animation/AnimationMixer.d.ts", - "../node_modules/three/src/animation/AnimationObjectGroup.d.ts", - "../node_modules/three/src/animation/AnimationUtils.d.ts", - "../node_modules/three/src/animation/KeyframeTrack.d.ts", - "../node_modules/three/src/animation/PropertyBinding.d.ts", - "../node_modules/three/src/animation/PropertyMixer.d.ts", - "../node_modules/three/src/animation/tracks/BooleanKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/ColorKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/NumberKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/StringKeyframeTrack.d.ts", - "../node_modules/three/src/animation/tracks/VectorKeyframeTrack.d.ts", - "../node_modules/three/src/audio/Audio.d.ts", - "../node_modules/three/src/audio/AudioAnalyser.d.ts", - "../node_modules/three/src/audio/AudioContext.d.ts", - "../node_modules/three/src/audio/AudioListener.d.ts", - "../node_modules/three/src/audio/PositionalAudio.d.ts", - "../node_modules/three/src/cameras/ArrayCamera.d.ts", - "../node_modules/three/src/cameras/Camera.d.ts", - "../node_modules/three/src/cameras/CubeCamera.d.ts", - "../node_modules/three/src/cameras/OrthographicCamera.d.ts", - "../node_modules/three/src/cameras/PerspectiveCamera.d.ts", - "../node_modules/three/src/cameras/StereoCamera.d.ts", - "../node_modules/three/src/constants.d.ts", - "../node_modules/three/src/core/BufferAttribute.d.ts", - "../node_modules/three/src/core/BufferGeometry.d.ts", - "../node_modules/three/src/core/Clock.d.ts", - "../node_modules/three/src/core/DirectGeometry.d.ts", - "../node_modules/three/src/core/EventDispatcher.d.ts", - "../node_modules/three/src/core/Face3.d.ts", - "../node_modules/three/src/core/Geometry.d.ts", - "../node_modules/three/src/core/InstancedBufferAttribute.d.ts", - "../node_modules/three/src/core/InstancedBufferGeometry.d.ts", - "../node_modules/three/src/core/InstancedInterleavedBuffer.d.ts", - "../node_modules/three/src/core/InterleavedBuffer.d.ts", - "../node_modules/three/src/core/InterleavedBufferAttribute.d.ts", - "../node_modules/three/src/core/Layers.d.ts", - "../node_modules/three/src/core/Object3D.d.ts", - "../node_modules/three/src/core/Raycaster.d.ts", - "../node_modules/three/src/core/Uniform.d.ts", - "../node_modules/three/src/extras/DataUtils.d.ts", - "../node_modules/three/src/extras/ImageUtils.d.ts", - "../node_modules/three/src/extras/PMREMGenerator.d.ts", - "../node_modules/three/src/extras/ShapeUtils.d.ts", - "../node_modules/three/src/extras/core/Curve.d.ts", - "../node_modules/three/src/extras/core/CurvePath.d.ts", - "../node_modules/three/src/extras/core/Font.d.ts", - "../node_modules/three/src/extras/core/Path.d.ts", - "../node_modules/three/src/extras/core/Shape.d.ts", - "../node_modules/three/src/extras/core/ShapePath.d.ts", - "../node_modules/three/src/extras/curves/ArcCurve.d.ts", - "../node_modules/three/src/extras/curves/CatmullRomCurve3.d.ts", - "../node_modules/three/src/extras/curves/CubicBezierCurve.d.ts", - "../node_modules/three/src/extras/curves/CubicBezierCurve3.d.ts", - "../node_modules/three/src/extras/curves/Curves.d.ts", - "../node_modules/three/src/extras/curves/EllipseCurve.d.ts", - "../node_modules/three/src/extras/curves/LineCurve.d.ts", - "../node_modules/three/src/extras/curves/LineCurve3.d.ts", - "../node_modules/three/src/extras/curves/QuadraticBezierCurve.d.ts", - "../node_modules/three/src/extras/curves/QuadraticBezierCurve3.d.ts", - "../node_modules/three/src/extras/curves/SplineCurve.d.ts", - "../node_modules/three/src/extras/objects/ImmediateRenderObject.d.ts", - "../node_modules/three/src/geometries/BoxBufferGeometry.d.ts", - "../node_modules/three/src/geometries/BoxGeometry.d.ts", - "../node_modules/three/src/geometries/CircleBufferGeometry.d.ts", - "../node_modules/three/src/geometries/CircleGeometry.d.ts", - "../node_modules/three/src/geometries/ConeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ConeGeometry.d.ts", - "../node_modules/three/src/geometries/CylinderBufferGeometry.d.ts", - "../node_modules/three/src/geometries/CylinderGeometry.d.ts", - "../node_modules/three/src/geometries/DodecahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/DodecahedronGeometry.d.ts", - "../node_modules/three/src/geometries/EdgesGeometry.d.ts", - "../node_modules/three/src/geometries/ExtrudeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ExtrudeGeometry.d.ts", - "../node_modules/three/src/geometries/Geometries.d.ts", - "../node_modules/three/src/geometries/IcosahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/IcosahedronGeometry.d.ts", - "../node_modules/three/src/geometries/LatheBufferGeometry.d.ts", - "../node_modules/three/src/geometries/LatheGeometry.d.ts", - "../node_modules/three/src/geometries/OctahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/OctahedronGeometry.d.ts", - "../node_modules/three/src/geometries/ParametricBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ParametricGeometry.d.ts", - "../node_modules/three/src/geometries/PlaneBufferGeometry.d.ts", - "../node_modules/three/src/geometries/PlaneGeometry.d.ts", - "../node_modules/three/src/geometries/PolyhedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/PolyhedronGeometry.d.ts", - "../node_modules/three/src/geometries/RingBufferGeometry.d.ts", - "../node_modules/three/src/geometries/RingGeometry.d.ts", - "../node_modules/three/src/geometries/ShapeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/ShapeGeometry.d.ts", - "../node_modules/three/src/geometries/SphereBufferGeometry.d.ts", - "../node_modules/three/src/geometries/SphereGeometry.d.ts", - "../node_modules/three/src/geometries/TetrahedronBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TetrahedronGeometry.d.ts", - "../node_modules/three/src/geometries/TextBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TextGeometry.d.ts", - "../node_modules/three/src/geometries/TorusBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TorusGeometry.d.ts", - "../node_modules/three/src/geometries/TorusKnotBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TorusKnotGeometry.d.ts", - "../node_modules/three/src/geometries/TubeBufferGeometry.d.ts", - "../node_modules/three/src/geometries/TubeGeometry.d.ts", - "../node_modules/three/src/geometries/WireframeGeometry.d.ts", - "../node_modules/three/src/helpers/ArrowHelper.d.ts", - "../node_modules/three/src/helpers/AxesHelper.d.ts", - "../node_modules/three/src/helpers/Box3Helper.d.ts", - "../node_modules/three/src/helpers/BoxHelper.d.ts", - "../node_modules/three/src/helpers/CameraHelper.d.ts", - "../node_modules/three/src/helpers/DirectionalLightHelper.d.ts", - "../node_modules/three/src/helpers/GridHelper.d.ts", - "../node_modules/three/src/helpers/HemisphereLightHelper.d.ts", - "../node_modules/three/src/helpers/PlaneHelper.d.ts", - "../node_modules/three/src/helpers/PointLightHelper.d.ts", - "../node_modules/three/src/helpers/PolarGridHelper.d.ts", - "../node_modules/three/src/helpers/SkeletonHelper.d.ts", - "../node_modules/three/src/helpers/SpotLightHelper.d.ts", - "../node_modules/three/src/lights/AmbientLight.d.ts", - "../node_modules/three/src/lights/AmbientLightProbe.d.ts", - "../node_modules/three/src/lights/DirectionalLight.d.ts", - "../node_modules/three/src/lights/DirectionalLightShadow.d.ts", - "../node_modules/three/src/lights/HemisphereLight.d.ts", - "../node_modules/three/src/lights/HemisphereLightProbe.d.ts", - "../node_modules/three/src/lights/Light.d.ts", - "../node_modules/three/src/lights/LightProbe.d.ts", - "../node_modules/three/src/lights/LightShadow.d.ts", - "../node_modules/three/src/lights/PointLight.d.ts", - "../node_modules/three/src/lights/PointLightShadow.d.ts", - "../node_modules/three/src/lights/RectAreaLight.d.ts", - "../node_modules/three/src/lights/SpotLight.d.ts", - "../node_modules/three/src/lights/SpotLightShadow.d.ts", - "../node_modules/three/src/loaders/AnimationLoader.d.ts", - "../node_modules/three/src/loaders/AudioLoader.d.ts", - "../node_modules/three/src/loaders/BufferGeometryLoader.d.ts", - "../node_modules/three/src/loaders/Cache.d.ts", - "../node_modules/three/src/loaders/CompressedTextureLoader.d.ts", - "../node_modules/three/src/loaders/CubeTextureLoader.d.ts", - "../node_modules/three/src/loaders/DataTextureLoader.d.ts", - "../node_modules/three/src/loaders/FileLoader.d.ts", - "../node_modules/three/src/loaders/FontLoader.d.ts", - "../node_modules/three/src/loaders/ImageBitmapLoader.d.ts", - "../node_modules/three/src/loaders/ImageLoader.d.ts", - "../node_modules/three/src/loaders/Loader.d.ts", - "../node_modules/three/src/loaders/LoaderUtils.d.ts", - "../node_modules/three/src/loaders/LoadingManager.d.ts", - "../node_modules/three/src/loaders/MaterialLoader.d.ts", - "../node_modules/three/src/loaders/ObjectLoader.d.ts", - "../node_modules/three/src/loaders/TextureLoader.d.ts", - "../node_modules/three/src/materials/LineBasicMaterial.d.ts", - "../node_modules/three/src/materials/LineDashedMaterial.d.ts", - "../node_modules/three/src/materials/Material.d.ts", - "../node_modules/three/src/materials/Materials.d.ts", - "../node_modules/three/src/materials/MeshBasicMaterial.d.ts", - "../node_modules/three/src/materials/MeshDepthMaterial.d.ts", - "../node_modules/three/src/materials/MeshDistanceMaterial.d.ts", - "../node_modules/three/src/materials/MeshLambertMaterial.d.ts", - "../node_modules/three/src/materials/MeshMatcapMaterial.d.ts", - "../node_modules/three/src/materials/MeshNormalMaterial.d.ts", - "../node_modules/three/src/materials/MeshPhongMaterial.d.ts", - "../node_modules/three/src/materials/MeshPhysicalMaterial.d.ts", - "../node_modules/three/src/materials/MeshStandardMaterial.d.ts", - "../node_modules/three/src/materials/MeshToonMaterial.d.ts", - "../node_modules/three/src/materials/PointsMaterial.d.ts", - "../node_modules/three/src/materials/RawShaderMaterial.d.ts", - "../node_modules/three/src/materials/ShaderMaterial.d.ts", - "../node_modules/three/src/materials/ShadowMaterial.d.ts", - "../node_modules/three/src/materials/SpriteMaterial.d.ts", - "../node_modules/three/src/math/Box2.d.ts", - "../node_modules/three/src/math/Box3.d.ts", - "../node_modules/three/src/math/Color.d.ts", - "../node_modules/three/src/math/Cylindrical.d.ts", - "../node_modules/three/src/math/Euler.d.ts", - "../node_modules/three/src/math/Frustum.d.ts", - "../node_modules/three/src/math/Interpolant.d.ts", - "../node_modules/three/src/math/Line3.d.ts", - "../node_modules/three/src/math/MathUtils.d.ts", - "../node_modules/three/src/math/Matrix3.d.ts", - "../node_modules/three/src/math/Matrix4.d.ts", - "../node_modules/three/src/math/Plane.d.ts", - "../node_modules/three/src/math/Quaternion.d.ts", - "../node_modules/three/src/math/Ray.d.ts", - "../node_modules/three/src/math/Sphere.d.ts", - "../node_modules/three/src/math/Spherical.d.ts", - "../node_modules/three/src/math/SphericalHarmonics3.d.ts", - "../node_modules/three/src/math/Triangle.d.ts", - "../node_modules/three/src/math/Vector2.d.ts", - "../node_modules/three/src/math/Vector3.d.ts", - "../node_modules/three/src/math/Vector4.d.ts", - "../node_modules/three/src/math/interpolants/CubicInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/DiscreteInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/LinearInterpolant.d.ts", - "../node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts", - "../node_modules/three/src/objects/Bone.d.ts", - "../node_modules/three/src/objects/Group.d.ts", - "../node_modules/three/src/objects/InstancedMesh.d.ts", - "../node_modules/three/src/objects/LOD.d.ts", - "../node_modules/three/src/objects/Line.d.ts", - "../node_modules/three/src/objects/LineLoop.d.ts", - "../node_modules/three/src/objects/LineSegments.d.ts", - "../node_modules/three/src/objects/Mesh.d.ts", - "../node_modules/three/src/objects/Points.d.ts", - "../node_modules/three/src/objects/Skeleton.d.ts", - "../node_modules/three/src/objects/SkinnedMesh.d.ts", - "../node_modules/three/src/objects/Sprite.d.ts", - "../node_modules/three/src/polyfills.d.ts", - "../node_modules/three/src/renderers/WebGL1Renderer.d.ts", - "../node_modules/three/src/renderers/WebGLCubeRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLMultisampleRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderTarget.d.ts", - "../node_modules/three/src/renderers/WebGLRenderer.d.ts", - "../node_modules/three/src/renderers/shaders/ShaderChunk.d.ts", - "../node_modules/three/src/renderers/shaders/ShaderLib.d.ts", - "../node_modules/three/src/renderers/shaders/UniformsLib.d.ts", - "../node_modules/three/src/renderers/shaders/UniformsUtils.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLAttributes.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLBindingStates.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCapabilities.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLClipping.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLCubeMaps.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLExtensions.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLGeometries.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLInfo.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLLights.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLObjects.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProgram.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLPrograms.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLProperties.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLRenderLists.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShader.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLShadowMap.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLState.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLTextures.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLUniforms.d.ts", - "../node_modules/three/src/renderers/webgl/WebGLUtils.d.ts", - "../node_modules/three/src/renderers/webxr/WebXR.d.ts", - "../node_modules/three/src/renderers/webxr/WebXRController.d.ts", - "../node_modules/three/src/renderers/webxr/WebXRManager.d.ts", - "../node_modules/three/src/scenes/Fog.d.ts", - "../node_modules/three/src/scenes/FogExp2.d.ts", - "../node_modules/three/src/scenes/Scene.d.ts", - "../node_modules/three/src/textures/CanvasTexture.d.ts", - "../node_modules/three/src/textures/CompressedTexture.d.ts", - "../node_modules/three/src/textures/CubeTexture.d.ts", - "../node_modules/three/src/textures/DataTexture.d.ts", - "../node_modules/three/src/textures/DataTexture2DArray.d.ts", - "../node_modules/three/src/textures/DataTexture3D.d.ts", - "../node_modules/three/src/textures/DepthTexture.d.ts", - "../node_modules/three/src/textures/Texture.d.ts", - "../node_modules/three/src/textures/VideoTexture.d.ts", - "../node_modules/typescript/lib/lib.dom.d.ts", - "../node_modules/typescript/lib/lib.es2015.collection.d.ts", - "../node_modules/typescript/lib/lib.es2015.core.d.ts", - "../node_modules/typescript/lib/lib.es2015.d.ts", - "../node_modules/typescript/lib/lib.es2015.generator.d.ts", - "../node_modules/typescript/lib/lib.es2015.iterable.d.ts", - "../node_modules/typescript/lib/lib.es2015.promise.d.ts", - "../node_modules/typescript/lib/lib.es2015.proxy.d.ts", - "../node_modules/typescript/lib/lib.es2015.reflect.d.ts", - "../node_modules/typescript/lib/lib.es2015.symbol.d.ts", - "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", - "../node_modules/typescript/lib/lib.es2016.array.include.d.ts", - "../node_modules/typescript/lib/lib.es2016.d.ts", - "../node_modules/typescript/lib/lib.es2017.d.ts", - "../node_modules/typescript/lib/lib.es2017.intl.d.ts", - "../node_modules/typescript/lib/lib.es2017.object.d.ts", - "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", - "../node_modules/typescript/lib/lib.es2017.string.d.ts", - "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", - "../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", - "../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", - "../node_modules/typescript/lib/lib.es2018.d.ts", - "../node_modules/typescript/lib/lib.es2018.intl.d.ts", - "../node_modules/typescript/lib/lib.es2018.promise.d.ts", - "../node_modules/typescript/lib/lib.es2018.regexp.d.ts", - "../node_modules/typescript/lib/lib.es2020.bigint.d.ts", - "../node_modules/typescript/lib/lib.es5.d.ts", - "../node_modules/typescript/lib/lib.esnext.intl.d.ts", - "./src/OrbitControls.ts", - "./src/constants.ts", - "./src/defs.ts", - "./src/entity-manager.ts", - "./src/globaltypes.ts", - "./src/index.ts", - "./src/math.ts", - "./src/noise.ts", - "./src/simplex-noise.ts", - "./src/spatial-hash-grid.ts", - "./src/spline.ts", - "./src/terrain-constants.ts", - "./src/terrain-height.ts" - ] - }, - "version": "4.2.3" -} \ No newline at end of file diff --git a/packages/client/src/index.ts b/trash/main.ts similarity index 92% rename from packages/client/src/index.ts rename to trash/main.ts index 12db860e..20eb7737 100644 --- a/packages/client/src/index.ts +++ b/trash/main.ts @@ -1,3 +1,7 @@ +/** + * THIS ISN"T USED KADAJETT + */ + import * as THREE from 'three'; // Not sure why latest three.js package is missing these. Might be making a huge mistake updating. lol @@ -6,15 +10,15 @@ import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; import { io } from 'socket.io-client'; import type { Socket } from 'socket.io-client'; -import {Constants} from 'shared'; -import type {Constants as IConstants} from 'shared'; +import {Constants} from 'quick-3d-mmo-shared'; +import type {Constants as IConstants} from 'quick-3d-mmo-shared'; const { EVENT_TYPES, STATE_TYPES } = Constants; const _CHARACTER_MODELS = { zombie: { base: 'mremireh_o_desbiens.fbx', - path: '../resources/characters/zombie/', + path: 'src/resources/characters/zombie/', animations: { idle: 'idle.fbx', walk: 'walk.fbx', @@ -25,7 +29,7 @@ const _CHARACTER_MODELS = { }, guard: { base: 'castle_guard_01.fbx', - path: '../resources/characters/guard/', + path: 'src/resources/characters/guard/', animations: { idle: 'Sword And Shield Idle.fbx', walk: 'Sword And Shield Walk.fbx', @@ -53,6 +57,7 @@ class FloatingName { } Init_() { + console.log("FloatingName Init_"); const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; this.element_ = document.createElement('canvas'); @@ -92,6 +97,7 @@ class OurLoadingManager { } load(file, cb) { + console.log("OurLoadingManager load()", file); this.files_.add(file); this.loader_.load(file, (result) => { @@ -110,6 +116,7 @@ class BasicCharacterControllerProxy { animations_: any; constructor(animations) { + console.log('new BasicCharacterControllerProxy', animations) this.animations_ = animations; } @@ -129,6 +136,7 @@ class AnimatedMesh { manager_: OurLoadingManager; constructor(params) { + console.log('new AnimatedMesh', params) this.params_ = params; this.group_ = new THREE.Group(); this.params_.scene.add(this.group_); @@ -162,9 +170,10 @@ class AnimatedMesh { } Load_() { + console.log("AnimatedMesh load_()") const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; // kadajett. Had to add param null. expected "manager" - const loader = new FBXLoader(null); + const loader = new FBXLoader(); loader.setPath(modelData.path); loader.load(modelData.base, (fbx) => { fbx.scale.setScalar(0.1); @@ -190,7 +199,7 @@ class AnimatedMesh { // LoadingManager seems to be broken when you attempt to load multiple // resources multiple times, only first onLoad is called. // So roll our own. - const loader = new FBXLoader(null); + const loader = new FBXLoader(); loader.setPath(modelData.path); this.manager_ = new OurLoadingManager(loader); @@ -234,6 +243,7 @@ class BasicCharacterController { _keys: [] constructor(params) { + console.log("new BasicCharacterController", params) this._Init(params); } @@ -359,7 +369,7 @@ class BasicCharacterController { this.position_.copy(controlObject.position); this.quaternion_.copy(controlObject.quaternion); - this.target_.Update(timeInSeconds); + this.target_.Update(timeInSeconds); } }; @@ -989,7 +999,7 @@ class Chatbox { 'keydown', (e) => this.OnKeyDown_(e), false); } - OnKeyDown_(evt) { + OnKeyDown_(evt: any) { if (evt.keyCode === 13) { evt.preventDefault(); const msg = this.element_.value; @@ -1000,7 +1010,7 @@ class Chatbox { } } - AddMessage(msg) { + AddMessage(msg: any) { const e = document.createElement('div'); e.className = 'chat-text'; e.innerText = '[' + msg.name + ']: ' + msg.text; @@ -1079,12 +1089,12 @@ class BasicMMODemo { const loader = new THREE.CubeTextureLoader(); const texture = loader.load([ - '../resources/posx.jpg', - '../resources/negx.jpg', - '../resources/posy.jpg', - '../resources/negy.jpg', - '../resources/posz.jpg', - '../resources/negz.jpg', + 'src/resources/posx.jpg', + 'src/resources/negx.jpg', + 'src/resources/posy.jpg', + 'src/resources/negy.jpg', + 'src/resources/posz.jpg', + 'src/resources/negz.jpg', ]); texture.encoding = THREE.sRGBEncoding; this.scene_.background = texture; @@ -1131,13 +1141,13 @@ class BasicMMODemo { SetupSocket_() { this.socket_ = io('ws://localhost:3000', { - reconnection: false, + reconnection: true, transports: ['websocket'], }); // The socket.io TS definition is wrong I think. This is a hack. - (this.socket_ as { on: (type: IConstants.EVENT_TYPES, cb: () => void) => void }).on(EVENT_TYPES.CONNECT, () => { - console.log(this.socket_.id); + (this.socket_ as any).on(EVENT_TYPES.CONNECT, () => { + console.log("BasicMMODemo.socket_.on: ", EVENT_TYPES.CONNECT); const randomName = this.GenerateRandomName_(); this.socket_.emit(EVENT_TYPES.LOGIN_COMMIT, randomName); }); @@ -1147,6 +1157,7 @@ class BasicMMODemo { }); this.socket_.onAny((e, d) => { + console.log("BasicMMODemo.socket_.onAny(): ", {e, d}) this.OnMessage_(e, d); }); } @@ -1157,6 +1168,7 @@ class BasicMMODemo { OnMessage_(e, d) { if (e == EVENT_TYPES.WORLD_PLAYER) { + debugger; this.playerID_ = d.id; const e = new PlayerEntity({ scene: this.scene_, diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..8191e16c --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + "node_modules", + "dist", + "**/*.test.ts", + "**/*.spec.ts" + ] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 6ccedb1c..c6304f6d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,19 @@ { "compilerOptions": { - /* Basic Options */ - "target": "ES6", - "module": "ES6", - "lib": [ - "ESNext" - ], - /* Strict Type-Checking Options */ - "strict": true, - /* Module Resolution Options */ - "moduleResolution": "node", - "esModuleInterop": true, - /* Advanced Options */ - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + /* Basic Options */ + "target": "es5", + "module": "commonjs", + "lib": ["ESNext"], + + /* Strict Type-Checking Options */ + "strict": true, + + /* Module Resolution Options */ + "moduleResolution": "node", + "esModuleInterop": true, + + /* Advanced Options */ + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true } } \ No newline at end of file diff --git a/yarn-error.log b/yarn-error.log index f7ef2778..ef2e6888 100644 --- a/yarn-error.log +++ b/yarn-error.log @@ -1,8 +1,8 @@ Arguments: - /home/kadajett/.nvm/versions/node/v15.11.0/bin/node /home/kadajett/.nvm/versions/node/v15.11.0/bin/yarn workspace client install + /home/kadajett/.nvm/versions/node/v15.11.0/bin/node /home/kadajett/.nvm/versions/node/v15.11.0/bin/yarn workspace quick-3d-mmo-shared build PATH: - /tmp/yarn--1617207041185-0.2755529015571232:/home/kadajett/dev/Quick_3D_MMORPG/node_modules/.bin:/home/kadajett/.config/yarn/link/node_modules/.bin:/home/kadajett/dev/Quick_3D_MMORPG/node_modules/.bin:/home/kadajett/.yarn/bin:/home/kadajett/.nvm/versions/node/v15.11.0/libexec/lib/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.nvm/versions/node/v15.11.0/lib/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.nvm/versions/node/v15.11.0/bin/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.vscode-server/bin/2b9aebd5354a3629c3aba0a5f5df49f43d6689f8/bin:/home/kadajett/.nvm/versions/node/v15.11.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222.0_x64__79rhkp1fndgsc:/mnt/c/Program Files (x86)/Razer Chroma SDK/bin:/mnt/c/Program Files/Razer Chroma SDK/bin:/mnt/c/Program Files (x86)/Razer/ChromaBroadcast/bin:/mnt/c/Program Files/Razer/ChromaBroadcast/bin:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/windows/system32/config/systemprofile/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/jerem/AppData/Local/Microsoft/WindowsApps:/mnt/c/Program Files/TortoiseSVN/bin:/mnt/c/Users/jerem/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/jerem/AppData/Local/GitHubDesktop/bin:/snap/bin + /tmp/yarn--1617453526231-0.22582618830997303:/home/kadajett/dev/Quick_3D_MMORPG/node_modules/.bin:/home/kadajett/.config/yarn/link/node_modules/.bin:/home/kadajett/dev/Quick_3D_MMORPG/node_modules/.bin:/home/kadajett/.yarn/bin:/home/kadajett/.nvm/versions/node/v15.11.0/libexec/lib/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.nvm/versions/node/v15.11.0/lib/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.nvm/versions/node/v15.11.0/bin/node_modules/npm/bin/node-gyp-bin:/home/kadajett/.vscode-server/bin/2b9aebd5354a3629c3aba0a5f5df49f43d6689f8/bin:/home/kadajett/.nvm/versions/node/v15.11.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files (x86)/Razer Chroma SDK/bin:/mnt/c/Program Files/Razer Chroma SDK/bin:/mnt/c/Program Files (x86)/Razer/ChromaBroadcast/bin:/mnt/c/Program Files/Razer/ChromaBroadcast/bin:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/windows/system32/config/systemprofile/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/jerem/AppData/Local/Microsoft/WindowsApps:/mnt/c/Program Files/TortoiseSVN/bin:/mnt/c/Users/jerem/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/jerem/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/jerem/AppData/Local/GitHubDesktop/bin Yarn version: 1.22.10 @@ -14,7 +14,7 @@ Platform: linux x64 Trace: - SyntaxError: /home/kadajett/dev/Quick_3D_MMORPG/packages/client/package.json: Unexpected token } in JSON at position 355 + SyntaxError: /home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/package.json: Unexpected token } in JSON at position 288 at JSON.parse () at /home/kadajett/.nvm/versions/node/v15.11.0/lib/node_modules/yarn/lib/cli.js:1625:59 at Generator.next () @@ -23,20 +23,27 @@ Trace: npm manifest: { + "name": "quick-3d-mmo", "private": true, + "version": "1.0.0", + "license": "MIT", + "main": "index.js", "workspaces": [ "packages/*" ], - "dependencies": { + "scripts": { + "server": "yarn workspace quick-3d-mmo-server", + "client": "yarn workspace quick-3d-mmo-client", + "shared": "yarn workspace quick-3d-mmo-shared" + }, + "devDependencies": { "typescript": "^4.2.3" }, - "scripts": { - "server": "yarn workspace server", - "client": "yarn workspace client", - "shared": "yarn workspace shared", - "start:server:dev": "yarn server start:dev", - "start:client:dev": "yarn client start:dev", - "start:shared:dev": "yarn shared start:dev" + "dependencies": { + "@babel/core": "^7.13.14", + "gl-matrix": "^3.3.0", + "webpack": "^5.30.0", + "webpack-cli": "^4.6.0" } } @@ -48,6 +55,224 @@ Lockfile: # yarn lockfile v1 + "@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + + "@babel/compat-data@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" + integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== + + "@babel/core@^7", "@babel/core@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06" + integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.13" + "@babel/helper-module-transforms" "^7.13.14" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + + "@babel/generator@^7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + dependencies: + "@babel/types" "^7.13.0" + jsesc "^2.5.1" + source-map "^0.5.0" + + "@babel/helper-compilation-targets@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" + integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== + dependencies: + "@babel/compat-data" "^7.13.12" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + + "@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + + "@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + + "@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== + dependencies: + "@babel/types" "^7.13.12" + + "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + dependencies: + "@babel/types" "^7.13.12" + + "@babel/helper-module-transforms@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" + integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" + + "@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + + "@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" + + "@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== + dependencies: + "@babel/types" "^7.13.12" + + "@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + + "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + + "@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + + "@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + + "@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + + "@babel/parser@^7.12.13", "@babel/parser@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" + integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== + + "@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + + "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" + integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.13" + "@babel/types" "^7.13.13" + debug "^4.1.0" + globals "^11.1.0" + + "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" + integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + + "@discoveryjs/json-ext@^0.5.0": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" + integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== + + "@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + + "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + + "@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -75,17 +300,229 @@ Lockfile: resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== - "@types/node@>=10.0.0": + "@types/eslint-scope@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" + integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + + "@types/eslint@*": + version "7.2.8" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.8.tgz#45cd802380fcc352e5680e1781d43c50916f12ee" + integrity sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + + "@types/estree@*": + version "0.0.47" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" + integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== + + "@types/estree@^0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + + "@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + + "@types/html-minifier-terser@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" + integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + + "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + + "@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + + "@types/minimatch@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + + "@types/node@*", "@types/node@>=10.0.0": version "14.14.37" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + "@types/three@^0.126.2": + version "0.126.2" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.126.2.tgz#68838cc92cc89c156c05be63e54efc91f58a5417" + integrity sha512-6JqTgijtfXcTJik8NtiNxr2L90ex6ElM00qilOGeUcrEsJLOdzLJSIkXHUYS+KPAYQYtRJQKD6XaXds3HjS+gg== + + "@webassemblyjs/ast@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" + integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + + "@webassemblyjs/floating-point-hex-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" + integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== + + "@webassemblyjs/helper-api-error@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" + integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== + + "@webassemblyjs/helper-buffer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" + integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== + + "@webassemblyjs/helper-numbers@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" + integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@xtuc/long" "4.2.2" + + "@webassemblyjs/helper-wasm-bytecode@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" + integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== + + "@webassemblyjs/helper-wasm-section@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" + integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + + "@webassemblyjs/ieee754@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" + integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== + dependencies: + "@xtuc/ieee754" "^1.2.0" + + "@webassemblyjs/leb128@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" + integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== + dependencies: + "@xtuc/long" "4.2.2" + + "@webassemblyjs/utf8@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" + integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== + + "@webassemblyjs/wasm-edit@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" + integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-wasm-section" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-opt" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/wast-printer" "1.11.0" + + "@webassemblyjs/wasm-gen@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" + integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + + "@webassemblyjs/wasm-opt@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" + integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + + "@webassemblyjs/wasm-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" + integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + + "@webassemblyjs/wast-printer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" + integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@xtuc/long" "4.2.2" + + "@webpack-cli/configtest@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.2.tgz#2a20812bfb3a2ebb0b27ee26a52eeb3e3f000836" + integrity sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA== + + "@webpack-cli/info@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.3.tgz#ef819d10ace2976b6d134c7c823a3e79ee31a92c" + integrity sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q== + dependencies: + envinfo "^7.7.3" + + "@webpack-cli/serve@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.1.tgz#911d1b3ff4a843304b9c3bacf67bb34672418441" + integrity sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw== + + "@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + + "@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + + abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - accepts@~1.3.4: + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== @@ -93,6 +530,31 @@ Lockfile: mime-types "~2.1.24" negotiator "0.6.2" + acorn@^8.0.4: + version "8.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" + integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== + + ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + + ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + + ajv@^6.1.0, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ansi-align@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" @@ -100,6 +562,26 @@ Lockfile: dependencies: string-width "^3.0.0" + ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + + ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + + ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + + ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -110,6 +592,18 @@ Lockfile: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + + ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -117,6 +611,14 @@ Lockfile: dependencies: color-convert "^2.0.1" + anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -125,6 +627,80 @@ Lockfile: normalize-path "^3.0.0" picomatch "^2.0.4" + arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= + dependencies: + arr-flatten "^1.0.1" + + arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + + arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + + arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + + array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + + array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + + array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + + array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + + array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + + array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= + + array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + + assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + + async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + + async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -132,6 +708,582 @@ Lockfile: dependencies: lodash "^4.17.14" + atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + + babel-code-frame@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz#1614a91b2ba0e3848559f410bbacd030726899c9" + integrity sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + + babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + + babel-core@^7: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-beta.3.tgz#3777e45c802e7f6c13c5c3a01c618a388fb0e252" + integrity sha512-zdng6WxI4cUjvstvFo/ke+hxohXCi/vxrMTM1S/bsAqnvKb+C+pHx78T3ZdJlWC3bGGxYqUnmM4p9VMzJ0uVVg== + dependencies: + babel-code-frame "7.0.0-beta.3" + babel-generator "7.0.0-beta.3" + babel-helpers "7.0.0-beta.3" + babel-template "7.0.0-beta.3" + babel-traverse "7.0.0-beta.3" + babel-types "7.0.0-beta.3" + babylon "7.0.0-beta.27" + convert-source-map "^1.1.0" + debug "^3.0.1" + json5 "^0.5.0" + lodash "^4.2.0" + micromatch "^2.3.11" + resolve "^1.3.2" + source-map "^0.5.0" + + babel-generator@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-7.0.0-beta.3.tgz#afa85e34c50ef52ccd0ef37f4c4b5e1df65cac04" + integrity sha512-Bok77tKwQZUVaLBRnDGDEaMZ4xEeyvzsgnCRxlVgfKmgn+vPxuka//ug3nrMmmgZ8TAMVPoXzeaAcs47lExrPg== + dependencies: + babel-types "7.0.0-beta.3" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + + babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + + babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-function-name@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz#e86dd2eb2c09e06e392e79e203fc02427b24c871" + integrity sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ== + dependencies: + babel-helper-get-function-arity "7.0.0-beta.3" + babel-template "7.0.0-beta.3" + babel-traverse "7.0.0-beta.3" + babel-types "7.0.0-beta.3" + + babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-get-function-arity@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz#61a47709318a31bc2db872f4be9b4c8447198be8" + integrity sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ== + dependencies: + babel-types "7.0.0-beta.3" + + babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + + babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-helpers@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-7.0.0-beta.3.tgz#1758004cb44f6e4d9b7a3adfaeaa82acfddc0c4c" + integrity sha512-zNX7FgdXT8645igxTyAVIArMbxUsFl1w3K+v+SKlGbDocIVjWMnRszRfgVwJflzI11yE0kY+fy6SNfulykW8CA== + dependencies: + babel-template "7.0.0-beta.3" + babel-traverse "7.0.0-beta.3" + babel-types "7.0.0-beta.3" + + babel-loader@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + + babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + + babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + + babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + + babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + + babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + + babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + + babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + + babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + + babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + + babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + + babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + + babel-preset-env@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + + babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + + babel-template@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-7.0.0-beta.3.tgz#ebb877b6070ce9912b0d0c22fcad3372165913a8" + integrity sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg== + dependencies: + babel-code-frame "7.0.0-beta.3" + babel-traverse "7.0.0-beta.3" + babel-types "7.0.0-beta.3" + babylon "7.0.0-beta.27" + lodash "^4.2.0" + + babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + + babel-traverse@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz#3cf0a45d53d934d85275d8770775d7944fc7c199" + integrity sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w== + dependencies: + babel-code-frame "7.0.0-beta.3" + babel-helper-function-name "7.0.0-beta.3" + babel-types "7.0.0-beta.3" + babylon "7.0.0-beta.27" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + + babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + + babel-types@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.3.tgz#cd927ca70e0ae8ab05f4aab83778cfb3e6eb20b4" + integrity sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + + babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + + babel@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4" + integrity sha1-0NHn2APpdHZb7qMjLU4VPA77kPQ= + + babylon@7.0.0-beta.27: + version "7.0.0-beta.27" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.27.tgz#b6edd30ef30619e2f630eb52585fdda84e6542cd" + integrity sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg== + + babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + backo2@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -152,16 +1304,84 @@ Lockfile: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + basic-auth@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= + batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + + big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + + binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + + body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + + bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + + boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + boxen@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" @@ -184,13 +1404,92 @@ Lockfile: balanced-match "^1.0.0" concat-map "0.0.1" - braces@~3.0.2: + braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + + braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + + braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" + browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + + browserslist@^4.14.5: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + dependencies: + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" + + buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + + buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + + bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + + bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + + cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -204,7 +1503,7 @@ Lockfile: normalize-url "^4.1.0" responselike "^1.0.2" - call-bind@^1.0.0: + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -212,11 +1511,49 @@ Lockfile: function-bind "^1.1.1" get-intrinsic "^1.0.2" - camelcase@^5.3.1: + camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + + camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + + caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001181: + version "1.0.30001205" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz#d79bf6a6fb13196b4bb46e5143a22ca0242e0ef8" + integrity sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og== + + chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + + chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -225,6 +1562,33 @@ Lockfile: ansi-styles "^4.1.0" supports-color "^7.1.0" + chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + + chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chokidar@^3.2.2: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -240,16 +1604,58 @@ Lockfile: optionalDependencies: fsevents "~2.3.1" + chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + + clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + cli-boxes@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + + clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -257,6 +1663,21 @@ Lockfile: dependencies: mimic-response "^1.0.0" + collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + + color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -264,21 +1685,71 @@ Lockfile: dependencies: color-name "~1.1.4" + color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - component-emitter@~1.3.0: + commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + + commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + + commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + + commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + + component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + + compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -296,11 +1767,73 @@ Lockfile: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" + connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + + content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + + content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + + convert-source-map@^1.1.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + + cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + + cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + cookie@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + + copy-webpack-plugin@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-8.1.0.tgz#0b53170db798ed301439536a02f2868ff63291a0" + integrity sha512-Soiq8kXI2AZkpw3dSp18u6oU2JonC7UKv3UdXsKOmT1A5QT46ku9+6c0Qy29JDbSavQJNN1/eKGpd3QNw+cZWg== + dependencies: + fast-glob "^3.2.5" + glob-parent "^5.1.1" + globby "^11.0.3" + normalize-path "^3.0.0" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + + core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + + core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + cors@~2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -321,7 +1854,7 @@ Lockfile: dependencies: cross-spawn "^6.0.5" - cross-spawn@^6.0.5: + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -346,27 +1879,75 @@ Lockfile: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - debug@^2.2.0: + css-loader@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.0.tgz#a9ecda190500863673ce4434033710404efbff00" + integrity sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw== + dependencies: + camelcase "^6.2.0" + cssesc "^3.0.0" + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.8" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.4" + + css-select@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + + css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + + cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" - debug@^3.1.1, debug@^3.2.6: + debug@^3.0.1, debug@^3.1.1, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" - debug@~4.3.1: + debug@^4.1.0, debug@^4.1.1, debug@~4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" + decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + + decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" @@ -374,16 +1955,168 @@ Lockfile: dependencies: mimic-response "^1.0.0" + deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + + define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + + define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + + define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + + del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + + depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + + destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + + detect-node@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" + integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== + + dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + + dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + + dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + + dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + + dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + + dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + + domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + + domelementtype@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + + domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + + domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + + dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -411,6 +2144,16 @@ Lockfile: minimist "^1.1.0" url-join "^2.0.5" + ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + + electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.649: + version "1.3.704" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.704.tgz#894205a237cbe0097d63da8f6d19e605dd13ab51" + integrity sha512-6cz0jvawlUe4h5AbfQWxPzb+8LzVyswGAWiGc32EJEmfj39HTQyNPkLXirc7+L4x5I6RgRkzua8Ryu5QZqc8cA== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -421,6 +2164,16 @@ Lockfile: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + + encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -429,9 +2182,9 @@ Lockfile: once "^1.4.0" engine.io-client@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.0.0.tgz#65733887c8999d280e1dd7f241779a2c66e9559e" - integrity sha512-e6GK0Fqvq45Nu/j7YdIVqXtDPvlsggAcfml3QiEiGdJ1qeh7IQU6knxSN3+yy9BmbnXtIfjo1hK4MFyHKdc9mQ== + version "5.0.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.0.1.tgz#9470fc6655c9789c5c0aa1a0e7e7d9ae9753a798" + integrity sha512-CQtGN3YwfvbxVwpPugcsHe5rHT4KgT49CEcQppNtu9N7WxbPN0MAG27lGaem7bvtCFtGNLSL+GEqXsFSz36jTg== dependencies: base64-arraybuffer "0.1.4" component-emitter "~1.3.0" @@ -463,28 +2216,348 @@ Lockfile: engine.io-parser "~4.0.0" ws "~7.4.2" - escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + enhanced-resolve@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + + enhanced-resolve@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" + integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + + enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + + entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + + entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + + envinfo@^7.7.3: + version "7.7.4" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" + integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== + + errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + + es-module-lexer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" + integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== + + escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + + escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + + escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + + eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + + esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + + estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + + estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + + esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + + etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + + event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + + eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + + events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + + eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + + execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + + execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + + expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= + dependencies: + is-posix-bracket "^0.1.0" + + expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= + dependencies: + fill-range "^2.1.0" + + express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + + extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + + extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + + extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= + dependencies: + is-extglob "^1.0.0" + + extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + + fast-glob@^3.1.1, fast-glob@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + + fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + + fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + + fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + dependencies: + reusify "^1.0.4" + + faye-websocket@^0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + + file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" - event-stream@=3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + + filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= + + fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" - eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" fill-range@^7.0.1: version "7.0.1" @@ -493,16 +2566,95 @@ Lockfile: dependencies: to-regex-range "^5.0.1" + finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + + find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + + find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + + find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + follow-redirects@^1.0.0: version "1.13.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + + for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= + dependencies: + for-in "^1.0.1" + + forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + + fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + + fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + + fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -513,6 +2665,16 @@ Lockfile: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + + get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -522,7 +2684,7 @@ Lockfile: has "^1.0.3" has-symbols "^1.0.1" - get-stream@^4.1.0: + get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -536,18 +2698,68 @@ Lockfile: dependencies: pump "^3.0.0" + get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + + get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + gl-matrix@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== - glob-parent@~5.1.0: + glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + + glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + dependencies: + is-glob "^2.0.0" + + glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + + glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" + glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + + glob@^7.0.3, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" @@ -555,6 +2767,44 @@ Lockfile: dependencies: ini "1.3.7" + globals@^10.0.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" + integrity sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA== + + globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + + globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + + globby@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + + globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -572,11 +2822,23 @@ Lockfile: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" - graceful-fs@^4.1.2: + graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + + has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" @@ -597,6 +2859,37 @@ Lockfile: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + + has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + + has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + + has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" @@ -609,17 +2902,120 @@ Lockfile: dependencies: function-bind "^1.1.1" - he@^1.1.1: + he@^1.1.1, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + + html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + + html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + + html-webpack-plugin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" + integrity sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + html-minifier-terser "^5.0.1" + lodash "^4.17.20" + pretty-error "^2.1.1" + tapable "^2.0.0" + + htmlparser2@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-proxy@^1.18.0: + http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + + http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + + http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + + http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + + http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + + http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + + http-proxy@^1.17.0, http-proxy@^1.18.0: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -649,21 +3045,89 @@ Lockfile: resolved "https://registry.yarnpkg.com/http/-/http-0.0.1-security.tgz#3aac09129d12dc2747bbce4157afde20ad1f7995" integrity sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g== + human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + + iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + + iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + + icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + + import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + + inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + + inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + + inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + ini@1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" @@ -674,6 +3138,74 @@ Lockfile: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + + interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + + invariant@^2.2.0, invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + + ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + + ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + + ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + + is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + + is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + + is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + + is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + + is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -681,6 +3213,11 @@ Lockfile: dependencies: binary-extensions "^2.0.0" + is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -688,7 +3225,80 @@ Lockfile: dependencies: ci-info "^2.0.0" - is-extglob@^2.1.1: + is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + + is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + + is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + + is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + + is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + + is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + + is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= + + is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= + dependencies: + is-primitive "^2.0.0" + + is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + + is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + + is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + + is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -703,7 +3313,21 @@ Lockfile: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - is-glob@^4.0.1, is-glob@~4.0.1: + is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + + is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -723,6 +3347,25 @@ Lockfile: resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= + dependencies: + kind-of "^3.0.2" + + is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + + is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -733,37 +3376,210 @@ Lockfile: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + + is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + + is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + is-path-inside@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + + is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= + + is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= + + is-regex@^1.0.4: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + + is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + + is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + + is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + is-yarn-global@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + + isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + + jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + + js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + + jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + + jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + + json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + + json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + + json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + + json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + + json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: - json-buffer "3.0.0" + json-buffer "3.0.0" + + killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + + kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + + kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + + kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== latest-version@^5.0.0: version "5.1.0" @@ -772,11 +3588,68 @@ Lockfile: dependencies: package-json "^6.3.0" - lodash@^4.17.14: + loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + + loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + + loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + + locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + + locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + + lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.2.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + + loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + + lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -787,40 +3660,171 @@ Lockfile: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - make-dir@^3.0.0: + lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + + make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" + map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= + map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + + math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + + media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + + memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + + memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + + merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + + merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + + merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + + methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + + micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + + micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + + micromatch@^4.0.0, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@1.46.0: version "1.46.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== - mime-types@~2.1.24: + "mime-db@>= 1.43.0 < 2": + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== + + mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: version "2.1.29" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== dependencies: mime-db "1.46.0" - mime@^1.6.0: + mime@1.6.0, mime@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mime@^2.4.4: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + + mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -833,7 +3837,15 @@ Lockfile: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - mkdirp@^0.5.5: + mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + + mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -845,6 +3857,11 @@ Lockfile: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -855,21 +3872,84 @@ Lockfile: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + + multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + + nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + + nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== + + nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= + node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + + node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + nodemon@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" @@ -893,6 +3973,13 @@ Lockfile: dependencies: abbrev "1" + normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -903,33 +3990,186 @@ Lockfile: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - object-assign@^4: + npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + + npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + + nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + + object-assign@^4, object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== - once@^1.3.1, once@^1.4.0: + object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + + object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + + object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + + object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + + object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + + obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + + on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + + on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" + onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + opener@^1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + + original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + + p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + + p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + + p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + + p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + + p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + + p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + + p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + package-json@^6.3.0: version "6.5.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" @@ -940,6 +4180,24 @@ Lockfile: registry-url "^5.0.0" semver "^6.2.0" + param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + + parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + parseqs@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" @@ -950,16 +4208,74 @@ Lockfile: resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== - path-key@^2.0.1: + parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + + pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + + pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + + path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + + path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + + path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + + path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + + path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.1.0: + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + + path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + + path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -967,12 +4283,53 @@ Lockfile: dependencies: through "~2.3" - picomatch@^2.0.4, picomatch@^2.2.1: + perf_hooks@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/perf_hooks/-/perf_hooks-0.0.1.tgz#253e7e18b71fcc0390fd3afb2cd7cf1685df040c" + integrity sha512-qG/D9iA4KDme+KF4vCObJy6Bouu3BlQnmJ8jPydVPm32NJBD9ZK1ZNgXSYaZKHkVC1sKSqUiLgFvAZPUiIEnBw== + + picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - portfinder@^1.0.25: + pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + + pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + + pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + + pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + + pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + + pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + + portfinder@^1.0.25, portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== @@ -981,11 +4338,104 @@ Lockfile: debug "^3.1.1" mkdirp "^0.5.5" + posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + + postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + + postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + + postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + + postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + + postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + + postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + + postcss@^8.2.8: + version "8.2.9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.9.tgz#fd95ff37b5cee55c409b3fdd237296ab4096fba3" + integrity sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.22" + source-map "^0.6.1" + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= + + pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + + private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + + process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + + proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + + prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + ps-tree@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" @@ -1006,6 +4456,16 @@ Lockfile: end-of-stream "^1.1.0" once "^1.3.1" + punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + + punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + pupa@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" @@ -1013,6 +4473,11 @@ Lockfile: dependencies: escape-goat "^2.0.0" + qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + qs@^6.4.0: version "6.10.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" @@ -1020,6 +4485,60 @@ Lockfile: dependencies: side-channel "^1.0.4" + querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + + querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + + queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + + randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + + randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + + range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + + raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + + raw-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -1030,6 +4549,37 @@ Lockfile: minimist "^1.2.0" strip-json-comments "~2.0.1" + readable-stream@^2.0.1, readable-stream@^2.0.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + + readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + + readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + readdirp@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" @@ -1037,6 +4587,64 @@ Lockfile: dependencies: picomatch "^2.2.1" + rechoir@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" + integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== + dependencies: + resolve "^1.9.0" + + regenerate@^1.2.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + + regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + + regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + + regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== + dependencies: + is-equal-shallow "^0.1.3" + + regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + + regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + + regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -1049,13 +4657,103 @@ Lockfile: resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: - rc "^1.2.8" + rc "^1.2.8" + + regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + + regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + + relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + + remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + + renderkid@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" + integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== + dependencies: + css-select "^2.0.2" + dom-converter "^0.2" + htmlparser2 "^3.10.1" + lodash "^4.17.20" + strip-ansi "^3.0.0" + + repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + + repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + + require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + + require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + + resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + + resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + + resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + + resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + + resolve@^1.3.2, resolve@^1.9.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -1063,11 +4761,101 @@ Lockfile: dependencies: lowercase-keys "^1.0.0" + ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + + retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + + reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + + rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + + run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + + safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + + safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + + schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + + schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + + schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + secure-compare@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= + select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + + selfsigned@^1.10.8: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -1075,7 +4863,7 @@ Lockfile: dependencies: semver "^6.3.0" - semver@^5.5.0, semver@^5.7.1: + semver@^5.3.0, semver@^5.5.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -1085,6 +4873,94 @@ Lockfile: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@^7.3.4: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + + send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + + serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + + serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + + serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + + set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + + set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + + setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + + setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + + shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -1118,20 +4994,55 @@ Lockfile: get-intrinsic "^1.0.2" object-inspect "^1.9.0" - signal-exit@^3.0.2: + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + + snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + + snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + + snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + socket.io-adapter@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz#43af9157c4609e74b8addc6867873ac7eb48fda2" integrity sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg== socket.io-client@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.0.0.tgz#643cc25e5b5bbe37be75ecd317156a3335bb495a" - integrity sha512-27yQxmXJAEYF19Ygyl8FPJ0if0wegpSmkIIbrWJeI7n7ST1JyH8bbD5v3fjjGY5cfCanACJ3dARUAyiVFNrlTQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.0.1.tgz#8f3bf4ce9282dda1741a4ed0f726b412944e012b" + integrity sha512-6AkaEG5zrVuSVW294cH1chioag9i1OqnCYjKwTc3EBGXbnyb98Lw7yMa40ifLjFj3y6fsFKsd0llbUZUCRf3Qw== dependencies: "@types/component-emitter" "^1.2.10" backo2 "~1.0.2" @@ -1150,10 +5061,10 @@ Lockfile: component-emitter "~1.3.0" debug "~4.3.1" - socket.io@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.0.0.tgz#ee484a95dc6a38698491aaf63b6ec1f3ceeac0a8" - integrity sha512-/c1riZMV/4yz7KEpaMhDQbwhJDIoO55whXaRKgyEBQrLU9zUHXo9rzeTMvTOqwL9mbKfHKdrXcMoCeQ/1YtMsg== + socket.io@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.0.1.tgz#d2e01cf3780d810b66182b3fbef08a04a4ccf924" + integrity sha512-g8eZB9lV0f4X4gndG0k7YZAywOg1VxYgCUspS4V+sDqsgI/duqd0AW84pKkbGj/wQwxrqrEq+VZrspRfTbHTAQ== dependencies: "@types/cookie" "^0.4.0" "@types/cors" "^2.8.8" @@ -1165,6 +5076,115 @@ Lockfile: socket.io-adapter "~2.2.0" socket.io-parser "~4.0.3" + sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" + + sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + dependencies: + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" + + source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + + source-map-js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" + integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== + + source-map-loader@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-2.0.1.tgz#b4fd0ae7fa7e7d3954300f383f2d6fcc230a4261" + integrity sha512-UzOTTQhoNPeTNzOxwFw220RSRzdGSyH4lpNyWjR7Qm34P4/N0W669YSUFdH07+YNeN75h765XLHmNsF/bm97RQ== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.2" + source-map-js "^0.6.2" + + source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + + source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + + source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + + source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + + source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + + source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + + spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + + spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + + split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + split@0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" @@ -1172,6 +5192,19 @@ Lockfile: dependencies: through "2" + static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + + "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" @@ -1184,7 +5217,7 @@ Lockfile: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.1.2.tgz#c5b7bc03fb2b11983ba3a72333dd0559e77e4738" integrity sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA== - string-width@^3.0.0: + string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -1202,7 +5235,28 @@ Lockfile: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" - strip-ansi@^5.1.0: + string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + + string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + + strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + + strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -1216,45 +5270,150 @@ Lockfile: dependencies: ansi-regex "^5.0.0" + strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + + strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + + strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - supports-color@^5.5.0: + style-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + + supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + + supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" - supports-color@^7.1.0: + supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + + supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" + tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + + tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + term-size@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - three@^0.124: - version "0.124.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.124.0.tgz#14ab1a26ba6c56e51190e1b55695cd3c1e69ea55" - integrity sha512-ROXp1Ly7YyF+jC910DQyAWj++Qlw2lQv0qwYLNQwdDbjk4bsOXAfGO92wYTMPNei1GMJUmCxSxc3MjGBTS09Rg== + terser-webpack-plugin@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673" + integrity sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q== + dependencies: + jest-worker "^26.6.2" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.5.1" + + terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + + terser@^5.5.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.1.tgz#a48eeac5300c0a09b36854bf90d9c26fb201973c" + integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + + three@^0.127.0: + version "0.127.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.127.0.tgz#c463f4d41b2c735dcf8e9e51a388815e80cd3791" + integrity sha512-wtgrn+mhYUbobxT7QN3GPdu3SRpSBQvwY6uOzLChWS7QE//f7paDU/+wlzbg+ngeIvBBqjBHSRuywTh8A99Jng== through@2, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + + to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + + to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + + to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -1262,6 +5421,21 @@ Lockfile: dependencies: is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + + toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + touch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" @@ -1269,6 +5443,22 @@ Lockfile: dependencies: nopt "~1.0.10" + trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + + ts-loader@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.1.0.tgz#d6292487df279c7cc79b6d3b70bb9d31682b693e" + integrity sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^4.0.0" + loader-utils "^2.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + tsc-watch@^4.2.9: version "4.2.9" resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.2.9.tgz#d93fc74233ca4ef7ee6b12d08c0fe6aca3e19044" @@ -1280,11 +5470,48 @@ Lockfile: string-argv "^0.1.1" strip-ansi "^6.0.0" + tsconfig-paths-webpack-plugin@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.1.tgz#e4dbf492a20dca9caab60086ddacb703afc2b726" + integrity sha512-n5CMlUUj+N5pjBhBACLq4jdr9cPTitySCjIosoQm0zwK99gmrcTGAfY9CwxRFT9+9OleNWXPRUcxsKP4AYExxQ== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.7.0" + tsconfig-paths "^3.9.0" + + tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + + tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + + tslib@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -1304,6 +5531,16 @@ Lockfile: dependencies: debug "^2.2.0" + union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + union@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" @@ -1311,6 +5548,11 @@ Lockfile: dependencies: qs "^6.4.0" + uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -1318,6 +5560,24 @@ Lockfile: dependencies: crypto-random-string "^2.0.0" + unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + + unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + + upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + update-notifier@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" @@ -1337,6 +5597,18 @@ Lockfile: semver-diff "^3.1.1" xdg-basedir "^4.0.0" + uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + + urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + url-join@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" @@ -1349,11 +5621,214 @@ Lockfile: dependencies: prepend-http "^2.0.0" - vary@^1: + url-parse@^1.4.3, url-parse@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + + url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + + use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + + utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + + utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + + uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + + v8-compile-cache@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + watchpack@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" + integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + + wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + + webpack-cli@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.6.0.tgz#27ae86bfaec0cf393fcfd58abdc5a229ad32fd16" + integrity sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.0.2" + "@webpack-cli/info" "^1.2.3" + "@webpack-cli/serve" "^1.3.1" + colorette "^1.2.1" + commander "^7.0.0" + enquirer "^2.3.6" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + v8-compile-cache "^2.2.0" + webpack-merge "^5.7.3" + + webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + + webpack-dev-server@^3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + + webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + + webpack-merge@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" + integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + + webpack-sources@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + + webpack@^5.28.0, webpack@^5.30.0: + version "5.30.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.30.0.tgz#07d87c182a060e0c2491062f3dc0edc85a29d884" + integrity sha512-Zr9NIri5yzpfmaMea2lSMV1UygbW0zQsSlGLMgKUm63ACXg6alhd1u4v5UBSBjzYKXJN6BNMGVM7w165e7NxYA== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.46" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/wasm-edit" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + acorn "^8.0.4" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.7.0" + es-module-lexer "^0.4.0" + eslint-scope "^5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.1" + watchpack "^2.0.0" + webpack-sources "^2.1.1" + + websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + + websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + + which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -1375,6 +5850,20 @@ Lockfile: dependencies: string-width "^4.0.0" + wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + + wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -1390,6 +5879,13 @@ Lockfile: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" + ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@~7.4.2: version "7.4.4" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" @@ -1400,7 +5896,46 @@ Lockfile: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + + yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + + yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + + yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + + yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/yarn.lock b/yarn.lock index 13b0d907..9afe82ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,224 @@ # yarn lockfile v1 +"@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" + integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== + +"@babel/core@^7", "@babel/core@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06" + integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.13" + "@babel/helper-module-transforms" "^7.13.14" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + dependencies: + "@babel/types" "^7.13.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" + integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== + dependencies: + "@babel/compat-data" "^7.13.12" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-transforms@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" + integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" + +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" + +"@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.13", "@babel/parser@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" + integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== + +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" + integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.13" + "@babel/types" "^7.13.13" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" + integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" + integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== + +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -29,22 +247,229 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== +"@types/eslint-scope@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" + integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "7.2.8" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.8.tgz#45cd802380fcc352e5680e1781d43c50916f12ee" + integrity sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.47" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" + integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== + +"@types/estree@^0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" + integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/node@>=10.0.0": +"@types/minimatch@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + +"@types/node@*", "@types/node@>=10.0.0": version "14.14.37" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== +"@types/three@^0.126.2": + version "0.126.2" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.126.2.tgz#68838cc92cc89c156c05be63e54efc91f58a5417" + integrity sha512-6JqTgijtfXcTJik8NtiNxr2L90ex6ElM00qilOGeUcrEsJLOdzLJSIkXHUYS+KPAYQYtRJQKD6XaXds3HjS+gg== + +"@webassemblyjs/ast@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" + integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + +"@webassemblyjs/floating-point-hex-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" + integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== + +"@webassemblyjs/helper-api-error@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" + integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== + +"@webassemblyjs/helper-buffer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" + integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== + +"@webassemblyjs/helper-numbers@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" + integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" + integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== + +"@webassemblyjs/helper-wasm-section@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" + integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + +"@webassemblyjs/ieee754@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" + integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" + integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" + integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== + +"@webassemblyjs/wasm-edit@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" + integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-wasm-section" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-opt" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/wast-printer" "1.11.0" + +"@webassemblyjs/wasm-gen@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" + integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + +"@webassemblyjs/wasm-opt@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" + integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + +"@webassemblyjs/wasm-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" + integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + +"@webassemblyjs/wast-printer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" + integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.2.tgz#2a20812bfb3a2ebb0b27ee26a52eeb3e3f000836" + integrity sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA== + +"@webpack-cli/info@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.3.tgz#ef819d10ace2976b6d134c7c823a3e79ee31a92c" + integrity sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.1.tgz#911d1b3ff4a843304b9c3bacf67bb34672418441" + integrity sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.4: +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== @@ -52,6 +477,31 @@ accepts@~1.3.4: mime-types "~2.1.24" negotiator "0.6.2" +acorn@^8.0.4: + version "8.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" + integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ansi-align@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" @@ -59,6 +509,26 @@ ansi-align@^3.0.0: dependencies: string-width "^3.0.0" +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -69,6 +539,18 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -76,6 +558,14 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -84,6 +574,68 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -91,6 +643,482 @@ async@^2.6.2: dependencies: lodash "^4.17.14" +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^7.0.0-beta.3: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-loader@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babel@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4" + integrity sha1-0NHn2APpdHZb7qMjLU4VPA77kPQ= + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + backo2@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -111,16 +1139,84 @@ base64id@2.0.0, base64id@~2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + basic-auth@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + boxen@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" @@ -143,13 +1239,83 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@~3.0.2: +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +browserslist@^4.14.5: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + dependencies: + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -163,7 +1329,7 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -call-bind@^1.0.0: +call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -171,11 +1337,49 @@ call-bind@^1.0.0: function-bind "^1.1.1" get-intrinsic "^1.0.2" -camelcase@^5.3.1: +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001181: + version "1.0.30001205" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz#d79bf6a6fb13196b4bb46e5143a22ca0242e0ef8" + integrity sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og== + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -192,6 +1396,25 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chokidar@^3.2.2: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -207,16 +1430,58 @@ chokidar@^3.2.2: optionalDependencies: fsevents "~2.3.1" +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + cli-boxes@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -224,6 +1489,21 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -231,21 +1511,71 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -component-emitter@~1.3.0: +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -263,11 +1593,73 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + cookie@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-8.1.0.tgz#0b53170db798ed301439536a02f2868ff63291a0" + integrity sha512-Soiq8kXI2AZkpw3dSp18u6oU2JonC7UKv3UdXsKOmT1A5QT46ku9+6c0Qy29JDbSavQJNN1/eKGpd3QNw+cZWg== + dependencies: + fast-glob "^3.2.5" + glob-parent "^5.1.1" + globby "^11.0.3" + normalize-path "^3.0.0" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + +core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + cors@~2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -288,7 +1680,7 @@ cross-env@^5.0.5: dependencies: cross-spawn "^6.0.5" -cross-spawn@^6.0.5: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -313,7 +1705,45 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -debug@^2.2.0: +css-loader@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.0.tgz#a9ecda190500863673ce4434033710404efbff00" + integrity sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw== + dependencies: + camelcase "^6.2.0" + cssesc "^3.0.0" + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.8" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.4" + +css-select@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -327,13 +1757,23 @@ debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@~4.3.1: +debug@^4.1.0, debug@^4.1.1, debug@~4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" @@ -341,16 +1781,168 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-node@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" + integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -378,6 +1970,16 @@ ecstatic@^3.3.2: minimist "^1.1.0" url-join "^2.0.5" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.649: + version "1.3.704" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.704.tgz#894205a237cbe0097d63da8f6d19e605dd13ab51" + integrity sha512-6cz0jvawlUe4h5AbfQWxPzb+8LzVyswGAWiGc32EJEmfj39HTQyNPkLXirc7+L4x5I6RgRkzua8Ryu5QZqc8cA== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -388,6 +1990,16 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -396,9 +2008,9 @@ end-of-stream@^1.1.0: once "^1.4.0" engine.io-client@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.0.0.tgz#65733887c8999d280e1dd7f241779a2c66e9559e" - integrity sha512-e6GK0Fqvq45Nu/j7YdIVqXtDPvlsggAcfml3QiEiGdJ1qeh7IQU6knxSN3+yy9BmbnXtIfjo1hK4MFyHKdc9mQ== + version "5.0.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.0.1.tgz#9470fc6655c9789c5c0aa1a0e7e7d9ae9753a798" + integrity sha512-CQtGN3YwfvbxVwpPugcsHe5rHT4KgT49CEcQppNtu9N7WxbPN0MAG27lGaem7bvtCFtGNLSL+GEqXsFSz36jTg== dependencies: base64-arraybuffer "0.1.4" component-emitter "~1.3.0" @@ -430,6 +2042,15 @@ engine.io@~5.0.0: engine.io-parser "~4.0.0" ws "~7.4.2" +enhanced-resolve@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + enhanced-resolve@^5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" @@ -438,11 +2059,95 @@ enhanced-resolve@^5.7.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +envinfo@^7.7.3: + version "7.7.4" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" + integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== + +errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +es-module-lexer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" + integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + event-stream@=3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" @@ -461,6 +2166,193 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expose-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-2.0.0.tgz#1c323577db3d16f7817e4652024f2c545b3f6a70" + integrity sha512-WBpSGlNkn7YwbU2us7O+h0XsoFrB43Y/VCNSpRV4OZFXXKgw8W800BgNxLV0S97N3+KGnFYSCAJi1AV86NO22w== + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1, fast-glob@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -468,16 +2360,88 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + follow-redirects@^1.0.0: version "1.13.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -488,6 +2452,16 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -497,7 +2471,7 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" -get-stream@^4.1.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -511,18 +2485,53 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + gl-matrix@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== -glob-parent@~5.1.0: +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.3, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" @@ -530,6 +2539,39 @@ global-dirs@^2.0.1: dependencies: ini "1.3.7" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globby@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -547,11 +2589,23 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" @@ -572,6 +2626,37 @@ has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" @@ -584,17 +2669,120 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -he@^1.1.1: +he@^1.1.1, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" + integrity sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + html-minifier-terser "^5.0.1" + lodash "^4.17.20" + pretty-error "^2.1.1" + tapable "^2.0.0" + +htmlparser2@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -http-proxy@^1.18.0: +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0, http-proxy@^1.18.0: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -624,21 +2812,89 @@ http@^0.0.1-security: resolved "https://registry.yarnpkg.com/http/-/http-0.0.1-security.tgz#3aac09129d12dc2747bbce4157afde20ad1f7995" integrity sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + ini@1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" @@ -649,6 +2905,74 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -656,6 +2980,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -663,7 +2992,63 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-extglob@^2.1.1: +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -678,7 +3063,14 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -698,6 +3090,13 @@ is-npm@^4.0.0: resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -708,31 +3107,146 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + is-path-inside@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + is-yarn-global@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -740,6 +3254,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -747,6 +3268,35 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + latest-version@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" @@ -754,11 +3304,68 @@ latest-version@^5.0.0: dependencies: package-json "^6.3.0" -lodash@^4.17.14: +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + +loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -769,40 +3376,147 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -make-dir@^3.0.0: +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.0, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@1.46.0: version "1.46.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== -mime-types@~2.1.24: +"mime-db@>= 1.43.0 < 2": + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== + +mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: version "2.1.29" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== dependencies: mime-db "1.46.0" -mime@^1.6.0: +mime@1.6.0, mime@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@^2.4.4: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -815,7 +3529,15 @@ minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mkdirp@^0.5.5: +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -827,6 +3549,11 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -837,21 +3564,84 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + nodemon@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" @@ -875,6 +3665,13 @@ nopt@~1.0.10: dependencies: abbrev "1" +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -885,33 +3682,178 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -object-assign@^4: +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +object-assign@^4, object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== -once@^1.3.1, once@^1.4.0: +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + opener@^1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + package-json@^6.3.0: version "6.5.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" @@ -922,6 +3864,14 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parseqs@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" @@ -932,16 +3882,74 @@ parseuri@0.0.6: resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== -path-key@^2.0.1: +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -949,12 +3957,53 @@ pause-stream@0.0.11: dependencies: through "~2.3" -picomatch@^2.0.4, picomatch@^2.2.1: +perf_hooks@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/perf_hooks/-/perf_hooks-0.0.1.tgz#253e7e18b71fcc0390fd3afb2cd7cf1685df040c" + integrity sha512-qG/D9iA4KDme+KF4vCObJy6Bouu3BlQnmJ8jPydVPm32NJBD9ZK1ZNgXSYaZKHkVC1sKSqUiLgFvAZPUiIEnBw== + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -portfinder@^1.0.25: +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +portfinder@^1.0.25, portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== @@ -963,11 +4012,99 @@ portfinder@^1.0.25: debug "^3.1.1" mkdirp "^0.5.5" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@^8.2.8: + version "8.2.9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.9.tgz#fd95ff37b5cee55c409b3fdd237296ab4096fba3" + integrity sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.22" + source-map "^0.6.1" + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + ps-tree@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" @@ -988,6 +4125,16 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + pupa@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" @@ -995,6 +4142,11 @@ pupa@^2.0.1: dependencies: escape-goat "^2.0.0" +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + qs@^6.4.0: version "6.10.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" @@ -1002,6 +4154,51 @@ qs@^6.4.0: dependencies: side-channel "^1.0.4" +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -1012,6 +4209,37 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +readable-stream@^2.0.1, readable-stream@^2.0.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + readdirp@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" @@ -1019,6 +4247,57 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +rechoir@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" + integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== + dependencies: + resolve "^1.9.0" + +regenerate@^1.2.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -1031,13 +4310,103 @@ registry-url@^5.0.0: resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: - rc "^1.2.8" + rc "^1.2.8" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" + integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== + dependencies: + css-select "^2.0.2" + dom-converter "^0.2" + htmlparser2 "^3.10.1" + lodash "^4.17.20" + strip-ansi "^3.0.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.9.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -1045,11 +4414,101 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + secure-compare@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.8: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -1057,7 +4516,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -semver@^5.5.0, semver@^5.7.1: +semver@^5.3.0, semver@^5.5.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -1067,6 +4526,101 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.4: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +serviceworker-webpack-plugin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/serviceworker-webpack-plugin/-/serviceworker-webpack-plugin-1.0.1.tgz#481863288487e92da01d49745336c72ef8a6136b" + integrity sha512-VgDEkZ3pA0HajsRaWtl5w6bLxAXx0Y+4dm7YeTcIxVmvC9YXvstex38HOBDuYETeDS5fUlBy/47gC0QYBrG0nw== + dependencies: + minimatch "^3.0.4" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -1100,20 +4654,55 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + socket.io-adapter@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz#43af9157c4609e74b8addc6867873ac7eb48fda2" integrity sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg== socket.io-client@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.0.0.tgz#643cc25e5b5bbe37be75ecd317156a3335bb495a" - integrity sha512-27yQxmXJAEYF19Ygyl8FPJ0if0wegpSmkIIbrWJeI7n7ST1JyH8bbD5v3fjjGY5cfCanACJ3dARUAyiVFNrlTQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.0.1.tgz#8f3bf4ce9282dda1741a4ed0f726b412944e012b" + integrity sha512-6AkaEG5zrVuSVW294cH1chioag9i1OqnCYjKwTc3EBGXbnyb98Lw7yMa40ifLjFj3y6fsFKsd0llbUZUCRf3Qw== dependencies: "@types/component-emitter" "^1.2.10" backo2 "~1.0.2" @@ -1132,10 +4721,10 @@ socket.io-parser@~4.0.3, socket.io-parser@~4.0.4: component-emitter "~1.3.0" debug "~4.3.1" -socket.io@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.0.0.tgz#ee484a95dc6a38698491aaf63b6ec1f3ceeac0a8" - integrity sha512-/c1riZMV/4yz7KEpaMhDQbwhJDIoO55whXaRKgyEBQrLU9zUHXo9rzeTMvTOqwL9mbKfHKdrXcMoCeQ/1YtMsg== +socket.io@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.0.1.tgz#d2e01cf3780d810b66182b3fbef08a04a4ccf924" + integrity sha512-g8eZB9lV0f4X4gndG0k7YZAywOg1VxYgCUspS4V+sDqsgI/duqd0AW84pKkbGj/wQwxrqrEq+VZrspRfTbHTAQ== dependencies: "@types/cookie" "^0.4.0" "@types/cors" "^2.8.8" @@ -1147,6 +4736,115 @@ socket.io@^4.0.0: socket.io-adapter "~2.2.0" socket.io-parser "~4.0.3" +sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" + +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + dependencies: + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" + +source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" + integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== + +source-map-loader@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-2.0.1.tgz#b4fd0ae7fa7e7d3954300f383f2d6fcc230a4261" + integrity sha512-UzOTTQhoNPeTNzOxwFw220RSRzdGSyH4lpNyWjR7Qm34P4/N0W669YSUFdH07+YNeN75h765XLHmNsF/bm97RQ== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.2" + source-map-js "^0.6.2" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + split@0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" @@ -1154,6 +4852,19 @@ split@0.3: dependencies: through "2" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" @@ -1166,7 +4877,7 @@ string-argv@^0.1.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.1.2.tgz#c5b7bc03fb2b11983ba3a72333dd0559e77e4738" integrity sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA== -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -1184,7 +4895,28 @@ string-width@^4.0.0, string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -strip-ansi@^5.1.0: +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -1203,26 +4935,61 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -supports-color@^5.5.0: +style-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -tapable@^2.2.0: +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== @@ -1232,6 +4999,36 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== +terser-webpack-plugin@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673" + integrity sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q== + dependencies: + jest-worker "^26.6.2" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.5.1" + +terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.5.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.1.tgz#a48eeac5300c0a09b36854bf90d9c26fb201973c" + integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + three@^0.127.0: version "0.127.0" resolved "https://registry.yarnpkg.com/three/-/three-0.127.0.tgz#c463f4d41b2c735dcf8e9e51a388815e80cd3791" @@ -1242,11 +5039,41 @@ through@2, through@~2.3, through@~2.3.1: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -1254,6 +5081,21 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + touch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" @@ -1261,6 +5103,17 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" +ts-loader@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.1.0.tgz#d6292487df279c7cc79b6d3b70bb9d31682b693e" + integrity sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^4.0.0" + loader-utils "^2.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + tsc-watch@^4.2.9: version "4.2.9" resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.2.9.tgz#d93fc74233ca4ef7ee6b12d08c0fe6aca3e19044" @@ -1291,11 +5144,29 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -1315,6 +5186,16 @@ undefsafe@^2.0.3: dependencies: debug "^2.2.0" +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + union@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" @@ -1322,6 +5203,11 @@ union@~0.5.0: dependencies: qs "^6.4.0" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -1329,6 +5215,24 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + update-notifier@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" @@ -1348,6 +5252,18 @@ update-notifier@^4.1.0: semver-diff "^3.1.1" xdg-basedir "^4.0.0" +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + url-join@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" @@ -1360,11 +5276,214 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -vary@^1: +url-parse@^1.4.3, url-parse@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +watchpack@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" + integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-cli@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.6.0.tgz#27ae86bfaec0cf393fcfd58abdc5a229ad32fd16" + integrity sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.0.2" + "@webpack-cli/info" "^1.2.3" + "@webpack-cli/serve" "^1.3.1" + colorette "^1.2.1" + commander "^7.0.0" + enquirer "^2.3.6" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + v8-compile-cache "^2.2.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" + integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack@^5.28.0, webpack@^5.30.0: + version "5.30.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.30.0.tgz#07d87c182a060e0c2491062f3dc0edc85a29d884" + integrity sha512-Zr9NIri5yzpfmaMea2lSMV1UygbW0zQsSlGLMgKUm63ACXg6alhd1u4v5UBSBjzYKXJN6BNMGVM7w165e7NxYA== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.46" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/wasm-edit" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + acorn "^8.0.4" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.7.0" + es-module-lexer "^0.4.0" + eslint-scope "^5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.1" + watchpack "^2.0.0" + webpack-sources "^2.1.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -1386,6 +5505,28 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +worker-loader@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-3.0.8.tgz#5fc5cda4a3d3163d9c274a4e3a811ce8b60dbb37" + integrity sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -1401,6 +5542,13 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@~7.4.2: version "7.4.4" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" @@ -1411,7 +5559,46 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 67e054a5d96918d0fd5516d2480c88f08ae4b499 Mon Sep 17 00:00:00 2001 From: Jeremy Stover Date: Sat, 3 Apr 2021 17:53:54 -0400 Subject: [PATCH 11/13] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cba86fb3..15e3218b 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ - Clone the repository - *From the root folder* - run `yarn`. The Yarn workspace settings will handle installing the packages for client and server. +- run `yarn shared build` - run `yarn server start:dev` - Ensure a browser is open to localhost:3000 _(Maybe. See below)_ - - If 3000 is taken unavailable, on most systems, you can run `PORT={NEW_PORT | 4444 | 1337} yarn client start{:dev}` - - Example `PORT=1337 yarn client start` + - Example `yarn client start:dev` - This should set the server to auto restart on changes. - The client will need to be manually refreshed, if you want it to display any changes. That's by design. Noone wants to relog every time they make a change. From 52dc3eb379660a7555984cd061c9e7a7798a422f Mon Sep 17 00:00:00 2001 From: Jeremy Stover Date: Sat, 3 Apr 2021 17:54:18 -0400 Subject: [PATCH 12/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15e3218b..6ab180f7 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - run `yarn`. The Yarn workspace settings will handle installing the packages for client and server. - run `yarn shared build` - run `yarn server start:dev` -- Ensure a browser is open to localhost:3000 _(Maybe. See below)_ +- Ensure a browser is open to localhost:7700 _(Maybe. See below)_ - Example `yarn client start:dev` - This should set the server to auto restart on changes. - The client will need to be manually refreshed, if you want it to display any changes. That's by design. Noone wants to relog every time they make a change. From 27e2a2212ec67385d10642e602c57f33ec23861c Mon Sep 17 00:00:00 2001 From: "Jeremy Stover (Kadajett)" Date: Sun, 4 Apr 2021 16:49:44 -0400 Subject: [PATCH 13/13] trying to fix backend logic issue --- packages/quick-3d-mmo-client/package.json | 1 + .../src/scripts/blood-effect.ts | 4 +- .../quick-3d-mmo-client/src/scripts/entity.ts | 7 ++- .../src/scripts/gltf-component.ts | 6 +- .../quick-3d-mmo-client/src/scripts/main.ts | 6 +- .../src/scripts/npc-entity.ts | 2 +- .../src/scripts/player-entity.ts | 9 +-- .../src/scripts/render-component.ts | 3 +- .../src/scripts/scenery-controller.ts | 1 + .../src/scripts/spatial-grid-controller.ts | 3 +- .../src/scripts/threejs_component.ts | 4 +- .../dist/scripts/world-client.js | 23 +++++--- .../dist/scripts/world-client.js.map | 2 +- .../dist/scripts/world-entity.js | 57 ++++--------------- .../dist/scripts/world-entity.js.map | 2 +- .../dist/scripts/world-manager.js | 1 + .../dist/scripts/world-manager.js.map | 2 +- packages/quick-3d-mmo-server/package.json | 4 +- .../src/scripts/world-client.ts | 23 ++++---- .../src/scripts/world-entity.ts | 11 +++- .../src/scripts/world-manager.ts | 4 +- .../quick-3d-mmo-shared/dist/constants.d.ts | 6 +- .../dist/constants.d.ts.map | 2 +- .../quick-3d-mmo-shared/dist/constants.js | 5 +- .../quick-3d-mmo-shared/dist/constants.js.map | 2 +- .../dist/entity-manager.d.ts.map | 2 +- .../dist/entity-manager.js | 1 + .../dist/entity-manager.js.map | 2 +- packages/quick-3d-mmo-shared/src/constants.ts | 4 ++ .../quick-3d-mmo-shared/src/entity-manager.ts | 3 +- .../quick-3d-mmo-shared/tsconfig.tsbuildinfo | 6 +- vscode-profile-2021-04-04-15-21-31.cpuprofile | 1 + yarn.lock | 5 ++ 33 files changed, 111 insertions(+), 103 deletions(-) create mode 100644 vscode-profile-2021-04-04-15-21-31.cpuprofile diff --git a/packages/quick-3d-mmo-client/package.json b/packages/quick-3d-mmo-client/package.json index e5f22c25..c23772ef 100644 --- a/packages/quick-3d-mmo-client/package.json +++ b/packages/quick-3d-mmo-client/package.json @@ -30,6 +30,7 @@ "@babel/core": "^7", "babel": "^6.23.0", "socket.io-client": "^4.0.0", + "stats.js": "^0.17.0", "three": "^0.127.0" }, "scripts": { diff --git a/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts b/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts index 5b0d62e7..bfc15c29 100644 --- a/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts +++ b/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts @@ -159,10 +159,10 @@ class BloodEffect extends Component { // Another hack const hc = e?.attacker?.GetComponent('HealthComponent'); - if(!hc) { + if(!hc?.stats_?.desc) { return; } - if (hc.stats_.desc.character.class != CLASS_TYPES_ENUM.SORCEROR) { + if (hc?.stats_?.desc?.character?.class != CLASS_TYPES_ENUM.SORCEROR) { this.EmitBloodFX_(); } else { this.EmitFireFX_(); diff --git a/packages/quick-3d-mmo-client/src/scripts/entity.ts b/packages/quick-3d-mmo-client/src/scripts/entity.ts index 4091ed45..b749904c 100644 --- a/packages/quick-3d-mmo-client/src/scripts/entity.ts +++ b/packages/quick-3d-mmo-client/src/scripts/entity.ts @@ -1,4 +1,6 @@ import * as THREE from 'three'; +import {Constants} from 'quick-3d-mmo-shared'; +const {UPDATE_POSITION} = Constants.EVENT_TYPES; class Entity { _name: any; @@ -84,9 +86,10 @@ class Entity { Broadcast(msg) { if (!(msg.topic in this._handlers)) { + return; } - + console.warn("Entity.ts: able to find broadcast topic: ", msg?.topic, msg, this._name) for (let curHandler of this._handlers[msg.topic]) { curHandler(msg); } @@ -95,7 +98,7 @@ class Entity { SetPosition(p) { this._position.copy(p); this.Broadcast({ - topic: 'update.position', + topic: UPDATE_POSITION, value: this._position, }); } diff --git a/packages/quick-3d-mmo-client/src/scripts/gltf-component.ts b/packages/quick-3d-mmo-client/src/scripts/gltf-component.ts index 5d9131df..7cb19117 100644 --- a/packages/quick-3d-mmo-client/src/scripts/gltf-component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/gltf-component.ts @@ -23,7 +23,7 @@ class StaticModelComponent extends Component { } InitComponent() { - this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + this._RegisterHandler(EVENT_TYPES.UPDATE_POSITION, (m) => { this._OnPosition(m); }); } _OnPosition(m) { @@ -117,7 +117,7 @@ class AnimatedModelComponent extends Component { } InitComponent() { - this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + this._RegisterHandler(EVENT_TYPES.UPDATE_POSITION, (m) => { this._OnPosition(m); }); } _OnPosition(m) { @@ -149,7 +149,7 @@ class AnimatedModelComponent extends Component { this._target.position.copy(this._parent._position); this.Broadcast({ - topic: 'update.position', + topic: EVENT_TYPES.UPDATE_POSITION, value: this._parent._position, }); diff --git a/packages/quick-3d-mmo-client/src/scripts/main.ts b/packages/quick-3d-mmo-client/src/scripts/main.ts index 4c3648cd..5ce8c087 100644 --- a/packages/quick-3d-mmo-client/src/scripts/main.ts +++ b/packages/quick-3d-mmo-client/src/scripts/main.ts @@ -138,7 +138,7 @@ class CrappyMMOAttempt { this.camera_.updateProjectionMatrix(); this.threejs_.setSize(window.innerWidth, window.innerHeight); } - + RAF_() { requestAnimationFrame((t) => { // console.log("RAF_()") @@ -150,9 +150,7 @@ class CrappyMMOAttempt { this.Step_(t - this.previousRAF_); this.previousRAF_ = t; - setTimeout(() => { - this.RAF_(); - }, 1); + this.RAF_(); }); } diff --git a/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts b/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts index 3ea3f2d2..da543606 100644 --- a/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts +++ b/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts @@ -55,7 +55,7 @@ class NPCController extends Component { InitComponent() { this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); - this._RegisterHandler('update.position', (m) => { this.OnPosition_(m); }); + this._RegisterHandler(EVENT_TYPES.UPDATE_POSITION, (m) => { this.OnPosition_(m); }); this._RegisterHandler('update.rotation', (m) => { this.OnRotation_(m); }); } diff --git a/packages/quick-3d-mmo-client/src/scripts/player-entity.ts b/packages/quick-3d-mmo-client/src/scripts/player-entity.ts index e7475d2f..a200bdf0 100644 --- a/packages/quick-3d-mmo-client/src/scripts/player-entity.ts +++ b/packages/quick-3d-mmo-client/src/scripts/player-entity.ts @@ -5,7 +5,7 @@ import { FiniteStateMachine } from './finite-state-machine'; import { IdleState, WalkState, RunState, AttackState, DanceState, DeathState } from './player-state'; import { Constants, Defs } from 'quick-3d-mmo-shared'; -const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, CHARACTER_MODELS } = {...Constants, ...Defs}; +const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, CHARACTER_MODELS, ENTITY_DRAW_DISTANCE } = {...Constants, ...Defs}; class CharacterFSM extends FiniteStateMachine { _proxy: any; @@ -72,7 +72,7 @@ class BasicCharacterController extends Component { InitComponent() { this._RegisterHandler(EVENT_TYPES.HEALTH_DEATH, (m) => { this.OnDeath_(m); }); this._RegisterHandler( - 'update.position', (m) => { this.OnUpdatePosition_(m); }); + EVENT_TYPES.UPDATE_POSITION, (m) => { this.OnUpdatePosition_(m); }); this._RegisterHandler( 'update.rotation', (m) => { this.OnUpdateRotation_(m); }); } @@ -167,13 +167,14 @@ class BasicCharacterController extends Component { const _IsAlive = (c) => { const h = c.entity.GetComponent('HealthComponent'); if (!h) { - return true; + c.entity.SetDead() + return false; } return h.Health > 0; }; const grid = this.GetComponent('SpatialGridController'); - const nearby = grid.FindNearbyEntities(5).filter(e => _IsAlive(e)); + const nearby = grid.FindNearbyEntities(ENTITY_DRAW_DISTANCE).filter(e => _IsAlive(e)); const collisions = []; for (let i = 0; i < nearby.length; ++i) { diff --git a/packages/quick-3d-mmo-client/src/scripts/render-component.ts b/packages/quick-3d-mmo-client/src/scripts/render-component.ts index 4f78f355..bd745515 100644 --- a/packages/quick-3d-mmo-client/src/scripts/render-component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/render-component.ts @@ -4,6 +4,7 @@ import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'; import { Component } from './entity'; import { Constants } from 'quick-3d-mmo-shared'; +import { EVENT_TYPES } from 'quick-3d-mmo-shared/src/constants'; const { KNOWN_ENTITIES } = { ...Constants }; @@ -41,7 +42,7 @@ class RenderComponent extends Component { } InitComponent() { - this._RegisterHandler('update.position', (m) => { this._OnPosition(m); }); + this._RegisterHandler(EVENT_TYPES.UPDATE_POSITION, (m) => { this._OnPosition(m); }); this._RegisterHandler('update.rotation', (m) => { this._OnRotation(m); }); } diff --git a/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts b/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts index 84c84775..dc42f205 100644 --- a/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts @@ -149,6 +149,7 @@ class SceneryController extends Component { } } + // @TODO this should be controlled manually. FindBiome_(terrain, pos) { const biome = terrain.GetBiomeAt(pos); diff --git a/packages/quick-3d-mmo-client/src/scripts/spatial-grid-controller.ts b/packages/quick-3d-mmo-client/src/scripts/spatial-grid-controller.ts index e1abfdb6..1235d500 100644 --- a/packages/quick-3d-mmo-client/src/scripts/spatial-grid-controller.ts +++ b/packages/quick-3d-mmo-client/src/scripts/spatial-grid-controller.ts @@ -1,3 +1,4 @@ +import { EVENT_TYPES } from 'quick-3d-mmo-shared/src/constants'; import { Component } from './entity'; class SpatialGridController extends Component { @@ -23,7 +24,7 @@ class SpatialGridController extends Component { this.client_ = this.grid_.NewClient(pos, [1, 1]); this.client_.entity = this.parent_; - this._RegisterHandler('update.position', (m) => this._OnPosition(m)); + this._RegisterHandler(EVENT_TYPES.UPDATE_POSITION, (m) => this._OnPosition(m)); } _OnPosition(msg) { diff --git a/packages/quick-3d-mmo-client/src/scripts/threejs_component.ts b/packages/quick-3d-mmo-client/src/scripts/threejs_component.ts index b881c6e3..1b9cc913 100644 --- a/packages/quick-3d-mmo-client/src/scripts/threejs_component.ts +++ b/packages/quick-3d-mmo-client/src/scripts/threejs_component.ts @@ -110,12 +110,12 @@ class ThreeJSController extends Component { const fov = 60; const aspect = 1920 / 1080; const near = 1.0; - const far = 10000.0; + const far = 5000.0; this.camera_ = new THREE.PerspectiveCamera(fov, aspect, near, far); this.camera_.position.set(25, 10, 25); this.scene_ = new THREE.Scene(); - this.scene_.fog = new THREE.FogExp2(0x89b2eb, 0.00002); + this.scene_.fog = new THREE.FogExp2(0x89b2eb, 0.00005); let light = new THREE.DirectionalLight(0x8088b3, 0.7); light.position.set(-10, 500, 10); diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-client.js b/packages/quick-3d-mmo-server/dist/scripts/world-client.js index aa402f54..445a8357 100644 --- a/packages/quick-3d-mmo-server/dist/scripts/world-client.js +++ b/packages/quick-3d-mmo-server/dist/scripts/world-client.js @@ -15,7 +15,7 @@ var _timeout; import { quat, vec3 } from 'gl-matrix'; import { SocketWrapper } from './world-server.js'; import { Constants, EntityManager as aEntityManager } from 'quick-3d-mmo-shared'; -const { _TIMEOUT, EVENT_TYPES, EntityManager, STATE_TYPES } = Object.assign(Object.assign({}, Constants), aEntityManager); +const { _TIMEOUT, EVENT_TYPES, EntityManager, STATE_TYPES, ENTITY_DRAW_DISTANCE } = Object.assign(Object.assign({}, Constants), aEntityManager); class WorldClient { constructor(client, entity) { _timeout.set(this, void 0); @@ -34,9 +34,10 @@ class WorldClient { entity.parent_ = this; } Destroy() { - this.client.Disconnect(); + var _a, _b, _c, _d; + (_b = (_a = this.client) === null || _a === void 0 ? void 0 : _a.Disconnect) === null || _b === void 0 ? void 0 : _b.call(_a); this.client = null; - this.entity.Destroy(); + (_d = (_c = this.entity) === null || _c === void 0 ? void 0 : _c.Destroy) === null || _d === void 0 ? void 0 : _d.call(_c); this.entity = null; } OnDeath() { } @@ -69,7 +70,7 @@ class WorldClient { OnInventoryChanged_(inventory) { this.entity.UpdateInventory(inventory); // Todo: Merge this into entityCache path. - const nearby = this.entity.FindNear(50, true); + const nearby = this.entity.FindNear(ENTITY_DRAW_DISTANCE, true); for (let n of nearby) { n.parent_.client.Send(EVENT_TYPES.WORLD_INVENTORY, [this.entity.ID, inventory]); } @@ -82,7 +83,7 @@ class WorldClient { this.BroadcastChat(chatMessage); } BroadcastChat(chatMessage) { - const nearby = this.entity.FindNear(50, true); + const nearby = this.entity.FindNear(ENTITY_DRAW_DISTANCE, true); for (let i = 0; i < nearby.length; ++i) { const n = nearby[i]; // This is different from chat.msg? @@ -114,9 +115,10 @@ class WorldNetworkClient extends WorldClient { } OnUpdateClientState_() { const _Filter = (e) => { + console.log(e, this.entity); return e.ID != this.entity.ID; }; - const nearby = this.entity.FindNear(500).filter(e => _Filter(e)); + const nearby = this.entity.FindNear(50).filter(e => _Filter(e)); const updates = [{ id: this.entity.ID, stats: this.entity.CreateStatsPacket_(), @@ -186,7 +188,7 @@ class AIState_JustSitThere extends AIState { const _IsPlayer = (e) => { return !e.isAI; }; - const nearby = this.entity.FindNear(50.0).filter(e => e.Health > 0).filter(_IsPlayer); + const nearby = this.entity.FindNear(ENTITY_DRAW_DISTANCE).filter(e => e.Health > 0).filter(_IsPlayer); if (nearby.length > 0) { this.parent_.SetState(new AIState_FollowToAttack(nearby[0])); } @@ -229,10 +231,15 @@ class AIState_FollowToAttack extends AIState { } } Update(timeElapsed) { - if (!this.target_.Valid || this.target_.Health == 0) { + var _a, _b; + if (!this.target_.Valid) { this.parent_.SetState(new AIState_JustSitThere(this.target_)); return; } + else if (this.target_.Health == 0) { + this.parent_.SetState(new AIState_JustSitThere(this.target_)); + return (_b = (_a = this.parent_) === null || _a === void 0 ? void 0 : _a.SetDead) === null || _b === void 0 ? void 0 : _b.call(_a); + } this.UpdateMovement_(timeElapsed); } } diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-client.js.map b/packages/quick-3d-mmo-server/dist/scripts/world-client.js.map index 01791e9c..a04763c7 100644 --- a/packages/quick-3d-mmo-server/dist/scripts/world-client.js.map +++ b/packages/quick-3d-mmo-server/dist/scripts/world-client.js.map @@ -1 +1 @@ -{"version":3,"file":"world-client.js","sourceRoot":"","sources":["../../src/scripts/world-client.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"world-client.js","sourceRoot":"","sources":["../../src/scripts/world-client.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-entity.js b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js index c53cc44e..693d1adb 100644 --- a/packages/quick-3d-mmo-server/dist/scripts/world-entity.js +++ b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js @@ -14,7 +14,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( var _onAction, _time, _cooldown, _timeElapsed; import { quat, vec3 } from 'gl-matrix'; import { Constants, Defs } from 'quick-3d-mmo-shared'; -const { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, WEAPONS_DATA } = Object.assign(Object.assign({}, Constants), Defs); +const { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, WEAPONS_DATA, ENTITY_DRAW_DISTANCE } = Object.assign(Object.assign({}, Constants), Defs); class Action_Attack { constructor(time, cooldown, onAction) { _onAction.set(this, void 0); @@ -142,8 +142,14 @@ class WorldEntity { }); } OnActionAttack_Fired() { + var _a, _b, _c, _d; + if (((_c = (_b = (_a = this === null || this === void 0 ? void 0 : this.characterDefinition_) === null || _a === void 0 ? void 0 : _a.stats) === null || _b === void 0 ? void 0 : _b.health) !== null && _c !== void 0 ? _c : -1) <= 0) { + console.log("Deadman attacked, this"); + debugger; + return; + } // wheee hardcoded :( - const nearby = this.FindNear(50.0); + const nearby = this.FindNear(ENTITY_DRAW_DISTANCE); const _Filter = (c) => { if (c.Health == 0) { return false; @@ -152,8 +158,8 @@ class WorldEntity { return dist <= this.characterDefinition_.attack.range; }; const attackable = nearby.filter(_Filter); - if(attackable?.[0]) { - const target = attackable[0]; + for (let a of attackable) { + const target = a; const dirToTarget = vec3.create(); vec3.sub(dirToTarget, target.position_, this.position_); vec3.normalize(dirToTarget, dirToTarget); @@ -162,11 +168,11 @@ class WorldEntity { vec3.normalize(forward, forward); const dot = vec3.dot(forward, dirToTarget); if (dot < 0.9 || dot > 1.1) { - return; + continue; } // Calculate damage, use equipped weapon + whatever, this will be bad. let damage = 0; - console.log(this?.accountInfo_?.name, 'attacking: ' + target.accountInfo_.name); + console.log((_d = this === null || this === void 0 ? void 0 : this.characterDefinition_) === null || _d === void 0 ? void 0 : _d.name, ' attacking: ' + target.characterDefinition_.name); if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { damage = (this.stats_.strength / 5.0); // TS hack. Should move this definition up. @@ -187,45 +193,6 @@ class WorldEntity { target.OnDamage(this, damage); this.onEvent_(EVENT_TYPES.ATTACK_DAMAGE, { target: target, damage: damage }); } - - /** - * This would attack multiple targets at once for every character. Replace this with a targeting system. - */ - // for (let a of attackable) { - // const target = a; - // const dirToTarget = vec3.create(); - // vec3.sub(dirToTarget, target.position_, this.position_); - // vec3.normalize(dirToTarget, dirToTarget); - // const forward = vec3.fromValues(0, 0, 1); - // vec3.transformQuat(forward, forward, this.rotation_); - // vec3.normalize(forward, forward); - // const dot = vec3.dot(forward, dirToTarget); - // if (dot < 0.9 || dot > 1.1) { - // continue; - // } - // // Calculate damage, use equipped weapon + whatever, this will be bad. - // let damage = 0; - // console.log(this?.accountInfo_?.name, 'attacking: ' + target.accountInfo_.name); - // if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { - // damage = (this.stats_.strength / 5.0); - // // TS hack. Should move this definition up. - // const equipped = this.characterInfo_.inventory['inventory-equip-1']; - // const weaponsData = WEAPONS_DATA; - // if (equipped) { - // console.log(' equipped: ' + equipped); - // const weapon = weaponsData[equipped]; - // if (weapon) { - // damage *= weapon.damage * 10; - // } - // } - // } - // else { - // damage = (this.stats_.wisdomness / 10.0); - // } - // console.log(' damage: ' + damage); - // target.OnDamage(this, damage); - // this.onEvent_(EVENT_TYPES.ATTACK_DAMAGE, { target: target, damage: damage }); - // } } onEvent_(eventType, data) { console.error("This is the fake error Jeremy put in to see if this undefined onEvent_ function was ever called."); diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-entity.js.map b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js.map index 86992b1d..61d92080 100644 --- a/packages/quick-3d-mmo-server/dist/scripts/world-entity.js.map +++ b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js.map @@ -1 +1 @@ -{"version":3,"file":"world-entity.js","sourceRoot":"","sources":["../../src/scripts/world-entity.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"world-entity.js","sourceRoot":"","sources":["../../src/scripts/world-entity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-manager.js b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js index ebf4bb9e..34353988 100644 --- a/packages/quick-3d-mmo-server/dist/scripts/world-manager.js +++ b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js @@ -49,6 +49,7 @@ class WorldManager { this.terrain_ = new HeightGenerator(); this.spawners_ = []; this.tickTimer_ = 0.0; + console.log("new WorldManager(); Generating World"); // Hack for (let x = -40; x <= 40; ++x) { for (let z = -40; z <= 40; ++z) { diff --git a/packages/quick-3d-mmo-server/dist/scripts/world-manager.js.map b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js.map index 76157c7d..c6bbd8d3 100644 --- a/packages/quick-3d-mmo-server/dist/scripts/world-manager.js.map +++ b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js.map @@ -1 +1 @@ -{"version":3,"file":"world-manager.js","sourceRoot":"","sources":["../../src/scripts/world-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"world-manager.js","sourceRoot":"","sources":["../../src/scripts/world-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/package.json b/packages/quick-3d-mmo-server/package.json index b6be5180..10d34ad1 100644 --- a/packages/quick-3d-mmo-server/package.json +++ b/packages/quick-3d-mmo-server/package.json @@ -7,8 +7,10 @@ "scripts": { "build": "tsc --build", "build:watch": "tsc --build --watch", + "start:watch": "concurrently 'yarn build:watch' 'nodemon dist/index.js'", "start": "yarn build && node dist/index.js", - "debug": "concurrently 'yarn build:watch' 'nodemon --inspect-brk dist/index.js'" + "debug-brk": "concurrently 'yarn build:watch' 'nodemon --inspect-brk dist/index.js'", + "debug": "concurrently 'yarn build:watch' 'nodemon --inspect dist/index.js'" }, "dependencies": { "gl-matrix": "^3.3.0", diff --git a/packages/quick-3d-mmo-server/src/scripts/world-client.ts b/packages/quick-3d-mmo-server/src/scripts/world-client.ts index d5895120..eaeea3c9 100644 --- a/packages/quick-3d-mmo-server/src/scripts/world-client.ts +++ b/packages/quick-3d-mmo-server/src/scripts/world-client.ts @@ -5,7 +5,7 @@ import { SocketWrapper } from './world-server.js'; import { Constants, EntityManager as aEntityManager } from 'quick-3d-mmo-shared'; -const { _TIMEOUT, EVENT_TYPES, EntityManager, STATE_TYPES } = { ...Constants, ...aEntityManager }; +const { _TIMEOUT, EVENT_TYPES, EntityManager, STATE_TYPES, ENTITY_DRAW_DISTANCE } = { ...Constants, ...aEntityManager }; class WorldClient { entity: WorldEntity; @@ -38,10 +38,10 @@ class WorldClient { } Destroy() { - this.client.Disconnect(); + this.client?.Disconnect?.(); this.client = null; - this.entity.Destroy(); + this.entity?.Destroy?.(); this.entity = null; } @@ -85,7 +85,7 @@ class WorldClient { this.entity.UpdateInventory(inventory); // Todo: Merge this into entityCache path. - const nearby = this.entity.FindNear(50, true); + const nearby = this.entity.FindNear(ENTITY_DRAW_DISTANCE, true); for (let n of nearby) { n.parent_.client.Send(EVENT_TYPES.WORLD_INVENTORY, [this.entity.ID, inventory]); @@ -102,7 +102,7 @@ class WorldClient { } BroadcastChat(chatMessage) { - const nearby = this.entity.FindNear(50, true); + const nearby = this.entity.FindNear(ENTITY_DRAW_DISTANCE, true); for (let i = 0; i < nearby.length; ++i) { const n = nearby[i]; @@ -146,18 +146,18 @@ class WorldNetworkClient extends WorldClient { OnUpdateClientState_() { const _Filter = (e) => { + console.log(e, this.entity) return e.ID != this.entity.ID; }; - const nearby = this.entity.FindNear(500).filter(e => _Filter(e)); - + const nearby = this.entity.FindNear(50).filter(e => _Filter(e)); + const updates = [{ id: this.entity.ID, stats: this.entity.CreateStatsPacket_(), events: this.entity.CreateEventsPacket_(), }]; const newCache_ = {}; - for (let n of nearby) { // We could easily trim this down based on what we know // this client saw last. Maybe do it later. @@ -241,7 +241,7 @@ class AIState_JustSitThere extends AIState { const _IsPlayer = (e) => { return !e.isAI; }; - const nearby = this.entity.FindNear(50.0).filter(e => e.Health > 0).filter(_IsPlayer); + const nearby = this.entity.FindNear(ENTITY_DRAW_DISTANCE).filter(e => e.Health > 0).filter(_IsPlayer); if (nearby.length > 0) { this.parent_.SetState(new AIState_FollowToAttack(nearby[0])); @@ -296,9 +296,12 @@ class AIState_FollowToAttack extends AIState { } Update(timeElapsed: number) { - if (!this.target_.Valid || this.target_.Health == 0) { + if (!this.target_.Valid) { this.parent_.SetState(new AIState_JustSitThere(this.target_)); return; + } else if(this.target_.Health == 0) { + this.parent_.SetState(new AIState_JustSitThere(this.target_)); + return this.parent_?.SetDead?.() } this.UpdateMovement_(timeElapsed); diff --git a/packages/quick-3d-mmo-server/src/scripts/world-entity.ts b/packages/quick-3d-mmo-server/src/scripts/world-entity.ts index 0090253d..9b6d148f 100644 --- a/packages/quick-3d-mmo-server/src/scripts/world-entity.ts +++ b/packages/quick-3d-mmo-server/src/scripts/world-entity.ts @@ -4,7 +4,7 @@ import { Constants, Defs } from 'quick-3d-mmo-shared'; // import { IWorldEntity } from 'shared/src/globaltypes'; import type { WorldClient } from "./world-client.js"; -const { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, WEAPONS_DATA } = { ...Constants, ...Defs }; +const { STATE_TYPES, EVENT_TYPES, ATTACK_TYPES, WEAPONS_DATA, ENTITY_DRAW_DISTANCE } = { ...Constants, ...Defs }; class Action_Attack { #onAction: any; @@ -177,8 +177,13 @@ class WorldEntity { } OnActionAttack_Fired() { + if((this?.characterDefinition_?.stats?.health ?? -1) <= 0) { + console.log("Deadman attacked, this") + debugger; + return; + } // wheee hardcoded :( - const nearby = this.FindNear(50.0); + const nearby = this.FindNear(ENTITY_DRAW_DISTANCE); const _Filter = (c: { Health: number, position_: vec3 }) => { if (c.Health == 0) { @@ -209,7 +214,7 @@ class WorldEntity { // Calculate damage, use equipped weapon + whatever, this will be bad. let damage = 0; - console.log('attacking: ' + target.accountInfo_.name); + console.log(this?.characterDefinition_?.name,' attacking: ' + target.characterDefinition_.name); if (this.characterDefinition_.attack.type == ATTACK_TYPES.MELEE) { damage = (this.stats_.strength / 5.0); diff --git a/packages/quick-3d-mmo-server/src/scripts/world-manager.ts b/packages/quick-3d-mmo-server/src/scripts/world-manager.ts index 871ad2e5..d3aa29cc 100644 --- a/packages/quick-3d-mmo-server/src/scripts/world-manager.ts +++ b/packages/quick-3d-mmo-server/src/scripts/world-manager.ts @@ -84,7 +84,7 @@ class WorldManager { this.spawners_ = []; this.tickTimer_ = 0.0; - + console.log("new WorldManager(); Generating World") // Hack for (let x = -40; x <= 40; ++x) { for (let z = -40; z <= 40; ++z) { @@ -177,7 +177,7 @@ class WorldManager { UpdateEntities_(timeElapsed) { const dead = []; const alive = []; - + for (let i = 0; i < this.entities_.length; ++i) { const e = this.entities_[i]; diff --git a/packages/quick-3d-mmo-shared/dist/constants.d.ts b/packages/quick-3d-mmo-shared/dist/constants.d.ts index 7493fa09..4408a40d 100644 --- a/packages/quick-3d-mmo-shared/dist/constants.d.ts +++ b/packages/quick-3d-mmo-shared/dist/constants.d.ts @@ -6,6 +6,7 @@ declare enum STATE_TYPES { RUN = "run", WALK = "walk" } +declare const ENTITY_DRAW_DISTANCE = 200; declare enum ANIM_TYPES { ATTACK = "Attack", DANCE = "Dance", @@ -40,7 +41,8 @@ declare enum EVENT_TYPES { CONNECT = "connect", NETWORK_UPDATE = "network.update", EVENTS_NETWORK = "events.network", - INPUT_PICKED = "input.picked" + INPUT_PICKED = "input.picked", + UPDATE_POSITION = "update.position" } declare type IEVENT_TYPES = Record; declare enum KNOWN_ENTITIES { @@ -98,5 +100,5 @@ declare enum DOM_IDS { QUEST_UI = "quest-ui" } export type { IEVENT_TYPES }; -export { _TIMEOUT, ATTACK_TYPES, CLASS_TYPES_ENUM, CLASS_TYPES, DOM_IDS, EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, WEAPON_TYPES_ENUM, ANIM_TYPES, }; +export { _TIMEOUT, ATTACK_TYPES, CLASS_TYPES_ENUM, CLASS_TYPES, DOM_IDS, EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, WEAPON_TYPES_ENUM, ANIM_TYPES, ENTITY_DRAW_DISTANCE, }; //# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/constants.d.ts.map b/packages/quick-3d-mmo-shared/dist/constants.d.ts.map index 5910579d..65ac0d72 100644 --- a/packages/quick-3d-mmo-shared/dist/constants.d.ts.map +++ b/packages/quick-3d-mmo-shared/dist/constants.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,aAAK,WAAW;IACZ,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,aAAK,UAAU;IACX,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,aAAK,WAAW;IACZ,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,qBAAqB,0BAA0B;IAC/C,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAChC;AAED,aAAK,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEhD,aAAK,cAAc;IACf,QAAQ,aAAa;IACrB,oBAAoB,wBAAwB;IAC5C,6BAA6B,gCAAgC;IAC7D,gBAAgB,qBAAqB;IACrC,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,EAAE,OAAO;IACT,OAAO,YAAY;IACnB,MAAM,WAAW;CACpB;AAED,aAAK,gBAAgB;IACjB,gBAAgB,4BAA4B;IAC5C,cAAc,kBAAkB;IAChC,sBAAsB,yBAAyB;IAC/C,aAAa,iBAAiB;IAC9B,kBAAkB,sBAAsB;IACxC,kBAAkB,sBAAsB;CAC3C;AAED,aAAK,eAAe;IAChB,cAAc,eAAe;IAC7B,YAAY,qBAAqB;CACpC;AAED,aAAK,gBAAgB;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;CACpB;AAED,aAAK,iBAAiB;IAClB,GAAG,gBAAgB;IACnB,MAAM,mBAAmB;IACzB,KAAK,kBAAkB;CAC1B;AAED,QAAA,MAAM,WAAW,oBAAwD,CAAC;AAE1E,aAAK,YAAY;IACb,KAAK,UAAU;CAClB;AAED,QAAA,MAAM,QAAQ,EAAC,MAAc,CAAC;AAE9B,aAAK,OAAO;IACR,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB;AAED,YAAY,EACR,YAAY,EACf,CAAA;AAED,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,UAAU,GACb,CAAC"} \ No newline at end of file +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,aAAK,WAAW;IACZ,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,QAAA,MAAM,oBAAoB,MAAQ,CAAC;AAEnC,aAAK,UAAU;IACX,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,aAAK,WAAW;IACZ,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,qBAAqB,0BAA0B;IAC/C,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;CACtC;AAED,aAAK,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEhD,aAAK,cAAc;IACf,QAAQ,aAAa;IACrB,oBAAoB,wBAAwB;IAC5C,6BAA6B,gCAAgC;IAC7D,gBAAgB,qBAAqB;IACrC,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,EAAE,OAAO;IACT,OAAO,YAAY;IACnB,MAAM,WAAW;CACpB;AAED,aAAK,gBAAgB;IACjB,gBAAgB,4BAA4B;IAC5C,cAAc,kBAAkB;IAChC,sBAAsB,yBAAyB;IAC/C,aAAa,iBAAiB;IAC9B,kBAAkB,sBAAsB;IACxC,kBAAkB,sBAAsB;CAC3C;AAED,aAAK,eAAe;IAChB,cAAc,eAAe;IAC7B,YAAY,qBAAqB;CACpC;AAED,aAAK,gBAAgB;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;CACpB;AAED,aAAK,iBAAiB;IAClB,GAAG,gBAAgB;IACnB,MAAM,mBAAmB;IACzB,KAAK,kBAAkB;CAC1B;AAED,QAAA,MAAM,WAAW,oBAAwD,CAAC;AAE1E,aAAK,YAAY;IACb,KAAK,UAAU;CAClB;AAED,QAAA,MAAM,QAAQ,EAAC,MAAc,CAAC;AAE9B,aAAK,OAAO;IACR,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB;AAED,YAAY,EACR,YAAY,EACf,CAAA;AAED,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,oBAAoB,GACvB,CAAC"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/constants.js b/packages/quick-3d-mmo-shared/dist/constants.js index 49877fae..18c4b37e 100644 --- a/packages/quick-3d-mmo-shared/dist/constants.js +++ b/packages/quick-3d-mmo-shared/dist/constants.js @@ -1,6 +1,6 @@ "use strict"; exports.__esModule = true; -exports.ANIM_TYPES = exports.WEAPON_TYPES_ENUM = exports.STATE_TYPES = exports.NAMED_COMPONENTS = exports.KNOWN_ENTITIES = exports.INVENTORY_TYPES = exports.EVENT_TYPES = exports.DOM_IDS = exports.CLASS_TYPES = exports.CLASS_TYPES_ENUM = exports.ATTACK_TYPES = exports._TIMEOUT = void 0; +exports.ENTITY_DRAW_DISTANCE = exports.ANIM_TYPES = exports.WEAPON_TYPES_ENUM = exports.STATE_TYPES = exports.NAMED_COMPONENTS = exports.KNOWN_ENTITIES = exports.INVENTORY_TYPES = exports.EVENT_TYPES = exports.DOM_IDS = exports.CLASS_TYPES = exports.CLASS_TYPES_ENUM = exports.ATTACK_TYPES = exports._TIMEOUT = void 0; var STATE_TYPES; (function (STATE_TYPES) { STATE_TYPES["ATTACK"] = "attack"; @@ -11,6 +11,8 @@ var STATE_TYPES; STATE_TYPES["WALK"] = "walk"; })(STATE_TYPES || (STATE_TYPES = {})); exports.STATE_TYPES = STATE_TYPES; +var ENTITY_DRAW_DISTANCE = 200.0; +exports.ENTITY_DRAW_DISTANCE = ENTITY_DRAW_DISTANCE; var ANIM_TYPES; (function (ANIM_TYPES) { ANIM_TYPES["ATTACK"] = "Attack"; @@ -49,6 +51,7 @@ var EVENT_TYPES; EVENT_TYPES["NETWORK_UPDATE"] = "network.update"; EVENT_TYPES["EVENTS_NETWORK"] = "events.network"; EVENT_TYPES["INPUT_PICKED"] = "input.picked"; + EVENT_TYPES["UPDATE_POSITION"] = "update.position"; })(EVENT_TYPES || (EVENT_TYPES = {})); exports.EVENT_TYPES = EVENT_TYPES; var KNOWN_ENTITIES; diff --git a/packages/quick-3d-mmo-shared/dist/constants.js.map b/packages/quick-3d-mmo-shared/dist/constants.js.map index 5d6514d9..acd38780 100644 --- a/packages/quick-3d-mmo-shared/dist/constants.js.map +++ b/packages/quick-3d-mmo-shared/dist/constants.js.map @@ -1 +1 @@ -{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,IAAK,WAOJ;AAPD,WAAK,WAAW;IACZ,gCAAiB,CAAA;IACjB,8BAAe,CAAA;IACf,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,0BAAW,CAAA;IACX,4BAAa,CAAA;AACjB,CAAC,EAPI,WAAW,KAAX,WAAW,QAOf;AA0HG,kCAAW;AAxHf,IAAM,oBAAoB,GAAG,KAAK,CAAC;AA2H/B,oDAAoB;AAzHxB,IAAK,UAOJ;AAPD,WAAK,UAAU;IACX,+BAAiB,CAAA;IACjB,6BAAe,CAAA;IACf,6BAAe,CAAA;IACf,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,2BAAa,CAAA;AACjB,CAAC,EAPI,UAAU,KAAV,UAAU,QAOd;AAiHG,gCAAU;AA/Gd,IAAK,WA4BJ;AA5BD,WAAK,WAAW;IACZ,8CAA+B,CAAA;IAC/B,gCAAiB,CAAA;IACjB,8CAA+B,CAAA;IAC/B,4CAA6B,CAAA;IAC7B,oCAAqB,CAAA;IACrB,8DAA+C,CAAA;IAC/C,8CAA+B,CAAA;IAC/B,4CAA6B,CAAA;IAC7B,4CAA6B,CAAA;IAC7B,8CAA+B,CAAA;IAC/B,kDAAmC,CAAA;IACnC,sDAAuC,CAAA;IACvC,gDAAiC,CAAA;IACjC,0CAA2B,CAAA;IAC3B,4CAA6B,CAAA;IAC7B,sDAAuC,CAAA;IACvC,8CAA+B,CAAA;IAC/B,8CAA+B,CAAA;IAC/B,kDAAmC,CAAA;IACnC,4CAA6B,CAAA;IAC7B,0CAA2B,CAAA;IAC3B,4CAA6B,CAAA;IAC7B,kCAAmB,CAAA;IACnB,gDAAiC,CAAA;IACjC,gDAAiC,CAAA;IACjC,4CAA6B,CAAA;IAC7B,kDAAmC,CAAA;AACvC,CAAC,EA5BI,WAAW,KAAX,WAAW,QA4Bf;AA6EG,kCAAW;AAzEf,IAAK,cAYJ;AAZD,WAAK,cAAc;IACf,uCAAqB,CAAA;IACrB,8DAA4C,CAAA;IAC5C,+EAA6D,CAAA;IAC7D,uDAAqC,CAAA;IACrC,uCAAqB,CAAA;IACrB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;IACnB,2BAAS,CAAA;IACT,qCAAmB,CAAA;IACnB,mCAAiB,CAAA;AACrB,CAAC,EAZI,cAAc,KAAd,cAAc,QAYlB;AA+DG,wCAAc;AA7DlB,IAAK,gBAOJ;AAPD,WAAK,gBAAgB;IACjB,gEAA4C,CAAA;IAC5C,oDAAgC,CAAA;IAChC,mEAA+C,CAAA;IAC/C,kDAA8B,CAAA;IAC9B,4DAAwC,CAAA;IACxC,4DAAwC,CAAA;AAC5C,CAAC,EAPI,gBAAgB,KAAhB,gBAAgB,QAOpB;AAuDG,4CAAgB;AArDpB,IAAK,eAGJ;AAHD,WAAK,eAAe;IAChB,gDAA6B,CAAA;IAC7B,oDAAiC,CAAA;AACrC,CAAC,EAHI,eAAe,KAAf,eAAe,QAGnB;AAgDG,0CAAe;AA9CnB,IAAK,gBAKJ;AALD,WAAK,gBAAgB;IACjB,uCAAmB,CAAA;IACnB,yCAAqB,CAAA;IACrB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;AACrB,CAAC,EALI,gBAAgB,KAAhB,gBAAgB,QAKpB;AAqCG,4CAAgB;AAnCpB,IAAK,iBAIJ;AAJD,WAAK,iBAAiB;IAClB,wCAAmB,CAAA;IACnB,8CAAyB,CAAA;IACzB,4CAAuB,CAAA;AAC3B,CAAC,EAJI,iBAAiB,KAAjB,iBAAiB,QAIrB;AAuCG,8CAAiB;AArCrB,IAAM,WAAW,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;AA8BtE,kCAAW;AA5Bf,IAAK,YAEJ;AAFD,WAAK,YAAY;IACb,+BAAe,CAAA;AACnB,CAAC,EAFI,YAAY,KAAZ,YAAY,QAEhB;AAwBG,oCAAY;AAtBhB,IAAM,QAAQ,GAAU,KAAK,CAAC;AAqB1B,4BAAQ;AAnBZ,IAAK,OAYJ;AAZD,WAAK,OAAO;IACR,oCAAyB,CAAA;IACzB,gDAAqC,CAAA;IACrC,oCAAyB,CAAA;IACzB,gDAAqC,CAAA;IACrC,4CAAiC,CAAA;IACjC,gDAAqC,CAAA;IACrC,sCAA2B,CAAA;IAC3B,gCAAqB,CAAA;IACrB,wCAA6B,CAAA;IAC7B,8BAAmB,CAAA;IACnB,gCAAqB,CAAA;AACzB,CAAC,EAZI,OAAO,KAAP,OAAO,QAYX;AAWG,0BAAO"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts.map b/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts.map index 247018f2..66c9ab93 100644 --- a/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts.map +++ b/packages/quick-3d-mmo-shared/dist/entity-manager.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,EAAE,CAAC;IACjB,SAAS,EAAE,GAAG,EAAE,CAAC;;IAQjB,aAAa;IAMb,GAAG,CAAC,CAAC,KAAA;IAIL,MAAM,CAAC,EAAE,KAAA;IAIT,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAcR,SAAS,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAkBd,MAAM,CAAC,WAAW,KAAA;CAyBnB;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,EAAE,CAAC;IACjB,SAAS,EAAE,GAAG,EAAE,CAAC;;IAQjB,aAAa;IAMb,GAAG,CAAC,CAAC,KAAA;IAIL,MAAM,CAAC,EAAE,KAAA;IAIT,GAAG,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAcR,SAAS,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAkBd,MAAM,CAAC,WAAW,KAAA;CA0BnB;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/dist/entity-manager.js b/packages/quick-3d-mmo-shared/dist/entity-manager.js index 870b4e92..e50f4e2d 100644 --- a/packages/quick-3d-mmo-shared/dist/entity-manager.js +++ b/packages/quick-3d-mmo-shared/dist/entity-manager.js @@ -48,6 +48,7 @@ var EntityManager = /** @class */ (function () { var alive = []; for (var i = 0; i < this._entities.length; ++i) { var e = this._entities[i]; + debugger; e.Update(timeElapsed); if (e.dead_) { dead.push(e); diff --git a/packages/quick-3d-mmo-shared/dist/entity-manager.js.map b/packages/quick-3d-mmo-shared/dist/entity-manager.js.map index bffbe3a2..cc9548d5 100644 --- a/packages/quick-3d-mmo-shared/dist/entity-manager.js.map +++ b/packages/quick-3d-mmo-shared/dist/entity-manager.js.map @@ -1 +1 @@ -{"version":3,"file":"entity-manager.js","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":";;;AAAA;IAKE;QACE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,qCAAa,GAAb;QACE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAEf,OAAO,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,2BAAG,GAAH,UAAI,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,8BAAM,GAAN,UAAO,EAAE;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,2BAAG,GAAH,UAAI,CAAC,EAAE,CAAC;QACN,6CAA6C;QAC7C,IAAI,CAAC,CAAC,EAAE;YACN,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;SAC1B;QACD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEvB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAElB,CAAC,CAAC,UAAU,EAAE,CAAC;IACjB,CAAC;IAED,iCAAS,GAAT,UAAU,CAAC,EAAE,CAAC;QACZ,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,CAAC,EAAE;YACN,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,EAAE;gBACV,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;IACH,CAAC;IAED,8BAAM,GAAN,UAAO,WAAW;QAChB,IAAM,IAAI,GAAU,EAAE,CAAC;QACvB,IAAM,KAAK,GAAU,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC9C,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAE5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,KAAK,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACd;iBAAM;gBACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACf;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACpC,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEjC,CAAC,CAAC,OAAO,EAAE,CAAC;SACb;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACH,oBAAC;AAAD,CAAC,AAlFD,IAkFC;AAEQ,sCAAa"} \ No newline at end of file +{"version":3,"file":"entity-manager.js","sourceRoot":"","sources":["../src/entity-manager.ts"],"names":[],"mappings":";;;AAAA;IAKE;QACE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,qCAAa,GAAb;QACE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAEf,OAAO,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,2BAAG,GAAH,UAAI,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,8BAAM,GAAN,UAAO,EAAE;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,2BAAG,GAAH,UAAI,CAAC,EAAE,CAAC;QACN,6CAA6C;QAC7C,IAAI,CAAC,CAAC,EAAE;YACN,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;SAC1B;QACD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEvB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAElB,CAAC,CAAC,UAAU,EAAE,CAAC;IACjB,CAAC;IAED,iCAAS,GAAT,UAAU,CAAC,EAAE,CAAC;QACZ,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,CAAC,EAAE;YACN,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,EAAE;gBACV,OAAO;aACR;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;IACH,CAAC;IAED,8BAAM,GAAN,UAAO,WAAW;QAChB,IAAM,IAAI,GAAU,EAAE,CAAC;QACvB,IAAM,KAAK,GAAU,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAE9C,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5B,QAAQ,CAAC;YACT,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,KAAK,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACd;iBAAM;gBACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACf;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACpC,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEjC,CAAC,CAAC,OAAO,EAAE,CAAC;SACb;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IACH,oBAAC;AAAD,CAAC,AAnFD,IAmFC;AAEQ,sCAAa"} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/src/constants.ts b/packages/quick-3d-mmo-shared/src/constants.ts index 9d1b3ea1..fe028615 100644 --- a/packages/quick-3d-mmo-shared/src/constants.ts +++ b/packages/quick-3d-mmo-shared/src/constants.ts @@ -7,6 +7,8 @@ enum STATE_TYPES { WALK = 'walk', } +const ENTITY_DRAW_DISTANCE = 200.0; + enum ANIM_TYPES { ATTACK = 'Attack', DANCE = 'Dance', @@ -43,6 +45,7 @@ enum EVENT_TYPES { NETWORK_UPDATE = 'network.update', EVENTS_NETWORK = 'events.network', INPUT_PICKED = 'input.picked', + UPDATE_POSITION = 'update.position', } type IEVENT_TYPES = Record; @@ -127,4 +130,5 @@ export { STATE_TYPES, WEAPON_TYPES_ENUM, ANIM_TYPES, + ENTITY_DRAW_DISTANCE, }; \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/src/entity-manager.ts b/packages/quick-3d-mmo-shared/src/entity-manager.ts index f1b14606..72916da7 100644 --- a/packages/quick-3d-mmo-shared/src/entity-manager.ts +++ b/packages/quick-3d-mmo-shared/src/entity-manager.ts @@ -59,8 +59,9 @@ class EntityManager { const dead: any[] = []; const alive: any[] = []; for (let i = 0; i < this._entities.length; ++i) { - const e = this._entities[i]; + const e = this._entities[i]; + debugger; e.Update(timeElapsed); if (e.dead_) { diff --git a/packages/quick-3d-mmo-shared/tsconfig.tsbuildinfo b/packages/quick-3d-mmo-shared/tsconfig.tsbuildinfo index 452d1210..a00ef0b5 100644 --- a/packages/quick-3d-mmo-shared/tsconfig.tsbuildinfo +++ b/packages/quick-3d-mmo-shared/tsconfig.tsbuildinfo @@ -1332,8 +1332,8 @@ "affectsGlobalScope": false }, "./src/constants.ts": { - "version": "85de1f4dd061627f46104f72f569d1eb903dee8f783c9289b48ef1a9c94d412e", - "signature": "25d6ccf18e59c02f65eac6ccbc9e6498df501355a65115b0774494f6500a4e58", + "version": "64551640d8b7a02d1fc06a22c5660f0cbd95d15b304479c729c4b30959534065", + "signature": "6ebbd7706ea9e894376b52482fc9a5857904335717c121773a41ec7f0d5dadc7", "affectsGlobalScope": false }, "./src/defs.ts": { @@ -1342,7 +1342,7 @@ "affectsGlobalScope": false }, "./src/entity-manager.ts": { - "version": "c4a6b397135b13b084b68dc4ad59cee1aca23c00881166821853dc992b8b0f0c", + "version": "336ec87d13b29a2aebc2f1a27bec5004e6b26ee06cf9ba4de14e4d650375fcc1", "signature": "3ac8d504e820eaf7bd25ad6659d53ceadc4e36151fa23535649e5b85ced046a6", "affectsGlobalScope": false }, diff --git a/vscode-profile-2021-04-04-15-21-31.cpuprofile b/vscode-profile-2021-04-04-15-21-31.cpuprofile new file mode 100644 index 00000000..b6f70e5d --- /dev/null +++ b/vscode-profile-2021-04-04-15-21-31.cpuprofile @@ -0,0 +1 @@ +{"nodes":[{"id":1,"callFrame":{"functionName":"(root)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[2,10,12,44,49],"locationId":0},{"id":2,"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":484,"columnNumber":24},"hitCount":9,"children":[3,68,107],"positionTicks":[{"line":485,"ticks":2,"startLocationId":2,"endLocationId":3},{"line":486,"ticks":2,"startLocationId":3,"endLocationId":4},{"line":500,"ticks":4,"startLocationId":5,"endLocationId":6},{"line":491,"ticks":1,"startLocationId":7,"endLocationId":8}],"locationId":1},{"id":3,"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":504,"columnNumber":24},"hitCount":15,"children":[4,46,64,100,109],"positionTicks":[{"line":555,"ticks":1,"startLocationId":10,"endLocationId":11},{"line":238,"ticks":1,"startLocationId":12,"endLocationId":13},{"line":512,"ticks":1,"startLocationId":14,"endLocationId":15},{"line":557,"ticks":12,"startLocationId":16,"endLocationId":17}],"locationId":9},{"id":4,"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":73,"columnNumber":19},"hitCount":10,"children":[5,69,79],"positionTicks":[{"line":170,"ticks":1,"startLocationId":19,"endLocationId":20},{"line":76,"ticks":4,"startLocationId":21,"endLocationId":22},{"line":75,"ticks":5,"startLocationId":23,"endLocationId":21}],"locationId":18},{"id":5,"callFrame":{"functionName":"Update_","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":79,"columnNumber":11},"hitCount":0,"children":[6],"locationId":24},{"id":6,"callFrame":{"functionName":"Update","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":98,"columnNumber":10},"hitCount":24,"children":[7,50,56],"positionTicks":[{"line":104,"ticks":24,"startLocationId":26,"endLocationId":27}],"locationId":25},{"id":7,"callFrame":{"functionName":"TickClientState_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":106,"columnNumber":20},"hitCount":1,"children":[8],"positionTicks":[{"line":115,"ticks":1,"startLocationId":29,"endLocationId":30}],"locationId":28},{"id":8,"callFrame":{"functionName":"UpdateClientState_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":97,"columnNumber":22},"hitCount":1,"children":[9],"positionTicks":[{"line":99,"ticks":1,"startLocationId":32,"endLocationId":33}],"locationId":31},{"id":9,"callFrame":{"functionName":"OnUpdateClientState_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":115,"columnNumber":24},"hitCount":17,"children":[83,101],"positionTicks":[{"line":126,"ticks":17,"startLocationId":35,"endLocationId":36}],"locationId":34},{"id":83,"callFrame":{"functionName":"Send","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":45,"columnNumber":8},"hitCount":0,"children":[84],"locationId":37},{"id":84,"callFrame":{"functionName":"emit","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":79,"columnNumber":8},"hitCount":0,"children":[85],"locationId":38},{"id":85,"callFrame":{"functionName":"packet","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":156,"columnNumber":10},"hitCount":0,"children":[86],"locationId":39},{"id":86,"callFrame":{"functionName":"_packet","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":152,"columnNumber":11},"hitCount":0,"children":[87],"locationId":40},{"id":87,"callFrame":{"functionName":"writeToEngine","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":156,"columnNumber":30},"hitCount":0,"children":[88],"locationId":41},{"id":88,"callFrame":{"functionName":"write","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":399,"columnNumber":7},"hitCount":0,"children":[89],"locationId":42},{"id":89,"callFrame":{"functionName":"sendPacket","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":412,"columnNumber":12},"hitCount":0,"children":[90],"locationId":43},{"id":90,"callFrame":{"functionName":"flush","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":447,"columnNumber":7},"hitCount":0,"children":[91],"locationId":44},{"id":91,"callFrame":{"functionName":"send","scriptId":"194","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","lineNumber":67,"columnNumber":6},"hitCount":0,"children":[92],"locationId":45},{"id":92,"callFrame":{"functionName":"encodePacket","scriptId":"179","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io-parser/lib/encodePacket.js","lineNumber":2,"columnNumber":21},"hitCount":0,"children":[93],"locationId":46},{"id":93,"callFrame":{"functionName":"send","scriptId":"194","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","lineNumber":75,"columnNumber":17},"hitCount":0,"children":[94],"locationId":47},{"id":94,"callFrame":{"functionName":"send","scriptId":"198","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","lineNumber":331,"columnNumber":6},"hitCount":0,"children":[95],"locationId":48},{"id":95,"callFrame":{"functionName":"send","scriptId":"213","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/sender.js","lineNumber":259,"columnNumber":6},"hitCount":0,"children":[96],"locationId":49},{"id":96,"callFrame":{"functionName":"toBuffer","scriptId":"208","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","lineNumber":84,"columnNumber":17},"hitCount":0,"children":[97],"locationId":50},{"id":97,"callFrame":{"functionName":"from","scriptId":"18","url":"node:buffer","lineNumber":295,"columnNumber":27},"hitCount":0,"children":[98],"locationId":51},{"id":98,"callFrame":{"functionName":"fromString","scriptId":"18","url":"node:buffer","lineNumber":431,"columnNumber":19},"hitCount":1,"positionTicks":[{"line":433,"ticks":1,"startLocationId":53,"endLocationId":54}],"locationId":52},{"id":101,"callFrame":{"functionName":"FindNear","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":212,"columnNumber":12},"hitCount":1,"children":[102,103],"positionTicks":[{"line":215,"ticks":1,"startLocationId":56,"endLocationId":57}],"locationId":55},{"id":102,"callFrame":{"functionName":"_Filter","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":215,"columnNumber":28},"hitCount":1,"positionTicks":[{"line":217,"ticks":1,"startLocationId":59,"endLocationId":60}],"locationId":58},{"id":103,"callFrame":{"functionName":"SpatialHashGrid.FindNear","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":52,"columnNumber":50},"hitCount":1,"positionTicks":[{"line":62,"ticks":1,"startLocationId":62,"endLocationId":63}],"locationId":61},{"id":50,"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":127,"columnNumber":19},"hitCount":237,"children":[51],"positionTicks":[{"line":134,"ticks":2,"startLocationId":65,"endLocationId":66},{"line":210,"ticks":3,"startLocationId":67,"endLocationId":68},{"line":12,"ticks":6,"startLocationId":69,"endLocationId":70},{"line":9,"ticks":5,"startLocationId":71,"endLocationId":72},{"line":2,"ticks":9,"startLocationId":73,"endLocationId":74},{"line":132,"ticks":1,"startLocationId":75,"endLocationId":76},{"line":103,"ticks":25,"startLocationId":77,"endLocationId":78},{"line":5,"ticks":11,"startLocationId":79,"endLocationId":80},{"line":102,"ticks":3,"startLocationId":81,"endLocationId":77},{"line":131,"ticks":5,"startLocationId":82,"endLocationId":75},{"line":209,"ticks":2,"startLocationId":83,"endLocationId":67},{"line":199,"ticks":2,"startLocationId":84,"endLocationId":85},{"line":170,"ticks":36,"startLocationId":86,"endLocationId":87},{"line":285,"ticks":30,"startLocationId":88,"endLocationId":89},{"line":227,"ticks":22,"startLocationId":90,"endLocationId":91},{"line":104,"ticks":2,"startLocationId":78,"endLocationId":92},{"line":133,"ticks":10,"startLocationId":76,"endLocationId":65},{"line":171,"ticks":2,"startLocationId":87,"endLocationId":93},{"line":229,"ticks":3,"startLocationId":94,"endLocationId":95},{"line":284,"ticks":4,"startLocationId":96,"endLocationId":88},{"line":197,"ticks":51,"startLocationId":97,"endLocationId":98},{"line":139,"ticks":3,"startLocationId":99,"endLocationId":100}],"locationId":64},{"id":51,"callFrame":{"functionName":"Update","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":100,"columnNumber":10},"hitCount":0,"children":[52,65],"locationId":101},{"id":52,"callFrame":{"functionName":"__classPrivateFieldSet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":0,"columnNumber":79},"hitCount":59,"positionTicks":[{"line":2,"ticks":10,"startLocationId":103,"endLocationId":104},{"line":5,"ticks":49,"startLocationId":105,"endLocationId":106}],"locationId":102},{"id":65,"callFrame":{"functionName":"__classPrivateFieldGet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":7,"columnNumber":79},"hitCount":48,"positionTicks":[{"line":12,"ticks":10,"startLocationId":108,"endLocationId":109},{"line":9,"ticks":38,"startLocationId":110,"endLocationId":111}],"locationId":107},{"id":56,"callFrame":{"functionName":"UpdateSpawners_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":122,"columnNumber":19},"hitCount":3,"positionTicks":[{"line":37,"ticks":3,"startLocationId":113,"endLocationId":114}],"locationId":112},{"id":69,"callFrame":{"functionName":"now","scriptId":"138","url":"node:perf_hooks","lineNumber":435,"columnNumber":5},"hitCount":0,"children":[70],"locationId":115},{"id":70,"callFrame":{"functionName":"now","scriptId":"138","url":"node:perf_hooks","lineNumber":168,"columnNumber":12},"hitCount":0,"children":[71],"locationId":116},{"id":71,"callFrame":{"functionName":"hrtime","scriptId":"22","url":"node:internal/process/per_thread","lineNumber":57,"columnNumber":17},"hitCount":1,"children":[72],"positionTicks":[{"line":75,"ticks":1,"startLocationId":118,"endLocationId":119}],"locationId":117},{"id":72,"callFrame":{"functionName":"hrtime","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":3,"positionTicks":[{"line":59,"ticks":3,"startLocationId":121,"endLocationId":122}],"locationId":120},{"id":79,"callFrame":{"functionName":"Schedule_","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":72,"columnNumber":13},"hitCount":0,"children":[80],"locationId":123},{"id":80,"callFrame":{"functionName":"setTimeout","scriptId":"55","url":"node:timers","lineNumber":133,"columnNumber":19},"hitCount":0,"children":[81],"locationId":124},{"id":81,"callFrame":{"functionName":"insert","scriptId":"57","url":"node:internal/timers","lineNumber":349,"columnNumber":15},"hitCount":0,"children":[82],"locationId":125},{"id":82,"callFrame":{"functionName":"getLibuvNow","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"positionTicks":[{"line":350,"ticks":1,"startLocationId":127,"endLocationId":128}],"locationId":126},{"id":46,"callFrame":{"functionName":"","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":148,"columnNumber":40},"hitCount":0,"children":[47],"locationId":129},{"id":47,"callFrame":{"functionName":"resetPingTimeout","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":163,"columnNumber":18},"hitCount":0,"children":[48],"locationId":130},{"id":48,"callFrame":{"functionName":"setTimeout","scriptId":"55","url":"node:timers","lineNumber":133,"columnNumber":19},"hitCount":0,"locationId":124},{"id":64,"callFrame":{"functionName":"peek","scriptId":"56","url":"node:internal/linkedlist","lineNumber":8,"columnNumber":13},"hitCount":1,"positionTicks":[{"line":10,"ticks":1,"startLocationId":132,"endLocationId":133}],"locationId":131},{"id":100,"callFrame":{"functionName":"emitBeforeScript","scriptId":"23","url":"node:internal/async_hooks","lineNumber":471,"columnNumber":25},"hitCount":3,"positionTicks":[{"line":473,"ticks":3,"startLocationId":135,"endLocationId":136}],"locationId":134},{"id":109,"callFrame":{"functionName":"TickClientState_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":106,"columnNumber":20},"hitCount":1,"positionTicks":[{"line":107,"ticks":1,"startLocationId":137,"endLocationId":138}],"locationId":28},{"id":68,"callFrame":{"functionName":"peek","scriptId":"58","url":"node:internal/priority_queue","lineNumber":44,"columnNumber":6},"hitCount":1,"positionTicks":[{"line":46,"ticks":1,"startLocationId":140,"endLocationId":141}],"locationId":139},{"id":107,"callFrame":{"functionName":"pushAsyncContext","scriptId":"23","url":"node:internal/async_hooks","lineNumber":501,"columnNumber":25},"hitCount":1,"positionTicks":[{"line":502,"ticks":1,"startLocationId":143,"endLocationId":144}],"locationId":142},{"id":10,"callFrame":{"functionName":"processTicksAndRejections","scriptId":"24","url":"node:internal/process/task_queues","lineNumber":65,"columnNumber":34},"hitCount":1,"children":[11,37,105,108],"positionTicks":[{"line":526,"ticks":1,"startLocationId":146,"endLocationId":147}],"locationId":145},{"id":11,"callFrame":{"functionName":"runMicrotasks","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":22,"locationId":148},{"id":37,"callFrame":{"functionName":"","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":211,"columnNumber":42},"hitCount":0,"children":[38],"locationId":149},{"id":38,"callFrame":{"functionName":"_onpacket","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":215,"columnNumber":13},"hitCount":1,"children":[39,53],"positionTicks":[{"line":220,"ticks":1,"startLocationId":151,"endLocationId":152}],"locationId":150},{"id":39,"callFrame":{"functionName":"onevent","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":243,"columnNumber":11},"hitCount":0,"children":[40,45,67],"locationId":153},{"id":40,"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":29,"columnNumber":130},"hitCount":0,"children":[41],"locationId":154},{"id":41,"callFrame":{"functionName":"WorldClient.client.onMessage","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":26,"columnNumber":32},"hitCount":0,"children":[42],"locationId":155},{"id":42,"callFrame":{"functionName":"OnMessage_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":48,"columnNumber":14},"hitCount":1,"children":[43,99],"positionTicks":[{"line":52,"ticks":1,"startLocationId":157,"endLocationId":158}],"locationId":156},{"id":43,"callFrame":{"functionName":"UpdateTransform","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":116,"columnNumber":19},"hitCount":2,"children":[61],"positionTicks":[{"line":126,"ticks":1,"startLocationId":160,"endLocationId":161},{"line":119,"ticks":1,"startLocationId":162,"endLocationId":163}],"locationId":159},{"id":61,"callFrame":{"functionName":"UpdateGridClient_","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":128,"columnNumber":21},"hitCount":1,"children":[62],"positionTicks":[{"line":130,"ticks":1,"startLocationId":165,"endLocationId":166}],"locationId":164},{"id":62,"callFrame":{"functionName":"SpatialHashGrid.UpdateClient","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":38,"columnNumber":54},"hitCount":0,"children":[63],"locationId":167},{"id":63,"callFrame":{"functionName":"SpatialHashGrid._Insert","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":74,"columnNumber":49},"hitCount":3,"positionTicks":[{"line":80,"ticks":1,"startLocationId":169,"endLocationId":170},{"line":91,"ticks":1,"startLocationId":171,"endLocationId":172},{"line":23,"ticks":1,"startLocationId":173,"endLocationId":174}],"locationId":168},{"id":99,"callFrame":{"functionName":"__classPrivateFieldSet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":0,"columnNumber":79},"hitCount":1,"positionTicks":[{"line":2,"ticks":1,"startLocationId":103,"endLocationId":104}],"locationId":102},{"id":45,"callFrame":{"functionName":"dispatch","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":419,"columnNumber":12},"hitCount":2,"positionTicks":[{"line":421,"ticks":2,"startLocationId":176,"endLocationId":177}],"locationId":175},{"id":67,"callFrame":{"functionName":"debug","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":63,"columnNumber":16},"hitCount":1,"positionTicks":[{"line":66,"ticks":1,"startLocationId":179,"endLocationId":180}],"locationId":178},{"id":53,"callFrame":{"functionName":"debug","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":63,"columnNumber":16},"hitCount":0,"children":[54],"locationId":178},{"id":54,"callFrame":{"functionName":"get","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":122,"columnNumber":8},"hitCount":0,"children":[55],"locationId":181},{"id":55,"callFrame":{"functionName":"enabled","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":197,"columnNumber":17},"hitCount":1,"positionTicks":[{"line":199,"ticks":1,"startLocationId":183,"endLocationId":184}],"locationId":182},{"id":105,"callFrame":{"functionName":"afterWriteTick","scriptId":"51","url":"node:internal/streams/writable","lineNumber":487,"columnNumber":23},"hitCount":0,"children":[106],"locationId":185},{"id":106,"callFrame":{"functionName":"afterWrite","scriptId":"51","url":"node:internal/streams/writable","lineNumber":492,"columnNumber":19},"hitCount":1,"positionTicks":[{"line":494,"ticks":1,"startLocationId":187,"endLocationId":188}],"locationId":186},{"id":108,"callFrame":{"functionName":"emitBeforeScript","scriptId":"23","url":"node:internal/async_hooks","lineNumber":471,"columnNumber":25},"hitCount":1,"positionTicks":[{"line":473,"ticks":1,"startLocationId":135,"endLocationId":136}],"locationId":134},{"id":12,"callFrame":{"functionName":"onStreamRead","scriptId":"66","url":"node:internal/stream_base_commons","lineNumber":166,"columnNumber":21},"hitCount":3,"children":[13,113],"positionTicks":[{"line":168,"ticks":1,"startLocationId":190,"endLocationId":191},{"line":173,"ticks":2,"startLocationId":192,"endLocationId":193}],"locationId":189},{"id":13,"callFrame":{"functionName":"Readable.push","scriptId":"47","url":"node:internal/streams/readable","lineNumber":225,"columnNumber":34},"hitCount":0,"children":[14],"locationId":194},{"id":14,"callFrame":{"functionName":"readableAddChunk","scriptId":"47","url":"node:internal/streams/readable","lineNumber":234,"columnNumber":25},"hitCount":1,"children":[15],"positionTicks":[{"line":253,"ticks":1,"startLocationId":196,"endLocationId":197}],"locationId":195},{"id":15,"callFrame":{"functionName":"addChunk","scriptId":"47","url":"node:internal/streams/readable","lineNumber":302,"columnNumber":17},"hitCount":0,"children":[16,112],"locationId":198},{"id":16,"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":326,"columnNumber":43},"hitCount":0,"children":[17],"locationId":199},{"id":17,"callFrame":{"functionName":"socketOnData","scriptId":"198","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","lineNumber":898,"columnNumber":21},"hitCount":0,"children":[18],"locationId":200},{"id":18,"callFrame":{"functionName":"Writable.write","scriptId":"51","url":"node:internal/streams/writable","lineNumber":292,"columnNumber":35},"hitCount":1,"children":[19],"positionTicks":[{"line":316,"ticks":1,"startLocationId":202,"endLocationId":203}],"locationId":201},{"id":19,"callFrame":{"functionName":"writeOrBuffer","scriptId":"51","url":"node:internal/streams/writable","lineNumber":370,"columnNumber":22},"hitCount":0,"children":[20],"locationId":204},{"id":20,"callFrame":{"functionName":"_write","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":72,"columnNumber":8},"hitCount":0,"children":[21],"locationId":205},{"id":21,"callFrame":{"functionName":"startLoop","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":123,"columnNumber":11},"hitCount":1,"children":[22,75],"positionTicks":[{"line":131,"ticks":1,"startLocationId":207,"endLocationId":208}],"locationId":206},{"id":22,"callFrame":{"functionName":"getData","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":336,"columnNumber":9},"hitCount":1,"children":[23,34],"positionTicks":[{"line":347,"ticks":1,"startLocationId":210,"endLocationId":211}],"locationId":209},{"id":23,"callFrame":{"functionName":"dataMessage","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":406,"columnNumber":13},"hitCount":0,"children":[24,25],"locationId":212},{"id":24,"callFrame":{"functionName":"toString","scriptId":"18","url":"node:buffer","lineNumber":782,"columnNumber":45},"hitCount":1,"children":[57],"positionTicks":[{"line":783,"ticks":1,"startLocationId":214,"endLocationId":215}],"locationId":213},{"id":57,"callFrame":{"functionName":"utf8Slice","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":4,"positionTicks":[{"line":785,"ticks":4,"startLocationId":217,"endLocationId":218}],"locationId":216},{"id":25,"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":326,"columnNumber":43},"hitCount":0,"children":[26],"locationId":199},{"id":26,"callFrame":{"functionName":"receiverOnMessage","scriptId":"198","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","lineNumber":823,"columnNumber":26},"hitCount":1,"children":[27],"positionTicks":[{"line":825,"ticks":1,"startLocationId":220,"endLocationId":221}],"locationId":219},{"id":27,"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":326,"columnNumber":43},"hitCount":0,"children":[28],"locationId":199},{"id":28,"callFrame":{"functionName":"onData","scriptId":"194","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","lineNumber":56,"columnNumber":8},"hitCount":0,"children":[29],"locationId":222},{"id":29,"callFrame":{"functionName":"onData","scriptId":"177","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","lineNumber":94,"columnNumber":8},"hitCount":1,"children":[30],"positionTicks":[{"line":96,"ticks":1,"startLocationId":224,"endLocationId":225}],"locationId":223},{"id":30,"callFrame":{"functionName":"onPacket","scriptId":"177","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","lineNumber":84,"columnNumber":10},"hitCount":0,"children":[31],"locationId":226},{"id":31,"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":326,"columnNumber":43},"hitCount":0,"children":[32],"locationId":199},{"id":32,"callFrame":{"functionName":"onPacket","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":82,"columnNumber":10},"hitCount":2,"children":[33,35,58],"positionTicks":[{"line":92,"ticks":1,"startLocationId":228,"endLocationId":229},{"line":112,"ticks":1,"startLocationId":230,"endLocationId":231}],"locationId":227},{"id":33,"callFrame":{"functionName":"debug","scriptId":"191","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/node_modules/debug/src/common.js","lineNumber":63,"columnNumber":16},"hitCount":2,"positionTicks":[{"line":64,"ticks":2,"startLocationId":233,"endLocationId":234}],"locationId":232},{"id":35,"callFrame":{"functionName":"resetPingTimeout","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":163,"columnNumber":18},"hitCount":1,"children":[36,66],"positionTicks":[{"line":166,"ticks":1,"startLocationId":235,"endLocationId":236}],"locationId":130},{"id":36,"callFrame":{"functionName":"clearTimeout","scriptId":"55","url":"node:timers","lineNumber":172,"columnNumber":21},"hitCount":2,"positionTicks":[{"line":174,"ticks":1,"startLocationId":238,"endLocationId":239},{"line":176,"ticks":1,"startLocationId":240,"endLocationId":241}],"locationId":237},{"id":66,"callFrame":{"functionName":"setTimeout","scriptId":"55","url":"node:timers","lineNumber":133,"columnNumber":19},"hitCount":2,"children":[73],"positionTicks":[{"line":159,"ticks":2,"startLocationId":242,"endLocationId":243}],"locationId":124},{"id":73,"callFrame":{"functionName":"insert","scriptId":"57","url":"node:internal/timers","lineNumber":349,"columnNumber":15},"hitCount":1,"children":[74,104],"positionTicks":[{"line":360,"ticks":1,"startLocationId":244,"endLocationId":245}],"locationId":125},{"id":74,"callFrame":{"functionName":"remove","scriptId":"56","url":"node:internal/linkedlist","lineNumber":14,"columnNumber":15},"hitCount":1,"positionTicks":[{"line":15,"ticks":1,"startLocationId":247,"endLocationId":248}],"locationId":246},{"id":104,"callFrame":{"functionName":"getLibuvNow","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"positionTicks":[{"line":350,"ticks":1,"startLocationId":127,"endLocationId":128}],"locationId":126},{"id":58,"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":326,"columnNumber":43},"hitCount":1,"children":[59],"positionTicks":[{"line":372,"ticks":1,"startLocationId":249,"endLocationId":250}],"locationId":199},{"id":59,"callFrame":{"functionName":"ondata","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":184,"columnNumber":10},"hitCount":0,"children":[60],"locationId":251},{"id":60,"callFrame":{"functionName":"add","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":101,"columnNumber":7},"hitCount":1,"children":[76,78],"positionTicks":[{"line":117,"ticks":1,"startLocationId":253,"endLocationId":254}],"locationId":252},{"id":76,"callFrame":{"functionName":"Emitter.emit","scriptId":"220","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/component-emitter/index.js","lineNumber":131,"columnNumber":33},"hitCount":1,"children":[77],"positionTicks":[{"line":136,"ticks":1,"startLocationId":256,"endLocationId":257}],"locationId":255},{"id":77,"callFrame":{"functionName":"ondecoded","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":198,"columnNumber":13},"hitCount":1,"positionTicks":[{"line":212,"ticks":1,"startLocationId":259,"endLocationId":260}],"locationId":258},{"id":78,"callFrame":{"functionName":"decodeString","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":143,"columnNumber":16},"hitCount":2,"positionTicks":[{"line":150,"ticks":1,"startLocationId":262,"endLocationId":263},{"line":145,"ticks":1,"startLocationId":264,"endLocationId":265}],"locationId":261},{"id":34,"callFrame":{"functionName":"_unmask","scriptId":"208","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","lineNumber":53,"columnNumber":16},"hitCount":1,"positionTicks":[{"line":58,"ticks":1,"startLocationId":267,"endLocationId":268}],"locationId":266},{"id":75,"callFrame":{"functionName":"getInfo","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":160,"columnNumber":9},"hitCount":1,"children":[110],"positionTicks":[{"line":230,"ticks":1,"startLocationId":270,"endLocationId":271}],"locationId":269},{"id":110,"callFrame":{"functionName":"consume","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":87,"columnNumber":9},"hitCount":0,"children":[111],"locationId":272},{"id":111,"callFrame":{"functionName":"slice","scriptId":"18","url":"node:buffer","lineNumber":1115,"columnNumber":39},"hitCount":1,"positionTicks":[{"line":1121,"ticks":1,"startLocationId":274,"endLocationId":275}],"locationId":273},{"id":112,"callFrame":{"functionName":"listenerCount","scriptId":"13","url":"node:events","lineNumber":644,"columnNumber":22},"hitCount":1,"positionTicks":[{"line":646,"ticks":1,"startLocationId":277,"endLocationId":278}],"locationId":276},{"id":113,"callFrame":{"functionName":"FastBuffer","scriptId":"19","url":"node:internal/buffer","lineNumber":957,"columnNumber":13},"hitCount":1,"positionTicks":[{"line":959,"ticks":1,"startLocationId":280,"endLocationId":281}],"locationId":279},{"id":44,"callFrame":{"functionName":"(garbage collector)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":3,"locationId":282},{"id":49,"callFrame":{"functionName":"(program)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":10126,"locationId":283}],"startTime":111094213360,"endTime":111106058461,"samples":[9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,24,33,22,34,36,42,43,44,45,48,2,3,32,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,55,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,56,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,12,57,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,57,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,60,63,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,32,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,64,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,2,65,4,49,2,49,49,3,66,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,67,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,68,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,72,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,74,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,2,49,49,75,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,52,50,49,49,49,49,49,49,2,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,77,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,78,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,82,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,57,49,73,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,76,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,3,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,98,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,50,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,14,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,50,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,6,49,49,49,49,49,49,49,49,50,52,49,49,50,49,49,49,49,49,49,49,49,49,49,65,49,49,49,50,50,3,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,71,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,50,50,49,49,49,49,65,49,49,49,49,49,50,49,50,3,4,49,49,49,49,49,49,49,49,49,49,49,49,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,49,49,66,49,50,50,49,49,49,49,49,50,49,49,49,49,49,49,50,50,49,49,49,49,50,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,3,49,49,49,49,49,50,65,49,49,49,52,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,50,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,4,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,72,49,49,49,49,50,50,50,49,49,49,50,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,6,50,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,65,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,99,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,50,49,49,49,49,49,65,65,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,50,49,50,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,49,63,49,49,49,49,49,49,49,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,44,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,44,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,43,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,65,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,29,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,50,50,49,49,49,49,49,49,50,49,49,49,49,50,50,49,50,49,49,49,49,49,50,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,50,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,10,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,3,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,43,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,4,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,4,49,49,49,56,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,3,50,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,52,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,50,100,50,49,49,49,49,49,52,49,49,49,49,49,49,65,7,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,2,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,52,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,52,49,49,49,49,49,49,49,49,49,49,6,49,49,49,49,49,65,49,102,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,50,52,49,49,49,49,49,50,49,52,50,49,49,49,49,49,50,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,65,49,49,49,49,49,49,52,49,49,49,49,49,50,6,50,49,49,49,49,49,65,49,52,52,49,49,50,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,50,6,49,49,49,49,49,12,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,2,65,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,50,3,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,50,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,3,49,49,49,49,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,50,50,49,49,49,50,50,49,49,49,49,49,49,49,8,49,50,49,49,49,49,49,49,49,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,103,49,49,49,49,49,49,50,4,49,49,49,49,49,49,49,50,50,49,49,49,49,50,50,49,49,49,49,49,50,49,50,49,49,49,49,49,49,50,49,49,49,49,49,50,49,49,49,49,49,49,49,49,3,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,2,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,6,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,50,52,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,4,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,36,104,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,78,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,65,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,50,2,49,49,49,49,49,49,49,49,3,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,4,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,65,49,65,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,65,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,50,50,49,49,49,49,49,6,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,65,49,49,49,50,49,49,49,50,50,49,49,49,50,49,52,49,49,49,49,49,49,49,65,52,49,49,49,49,49,49,52,52,49,49,49,49,49,52,49,49,49,49,49,49,50,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,50,52,52,49,49,49,50,49,49,49,49,49,106,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,101,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,107,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,50,50,49,49,49,49,49,50,49,100,49,49,49,49,49,49,49,65,65,49,49,49,49,49,50,49,49,49,49,49,65,49,49,49,49,49,65,50,49,49,49,49,49,49,108,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,3,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,56,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,3,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,50,49,49,49,49,49,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,50,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,58,49,38,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,109,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,63,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,3,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,100,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,49,72,49,49,49,49,49,49,4,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,57,49,49,63,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,35,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,111,49,45,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,6,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,49,49,49,18,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,50,49,49,49,49,49,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,4,50,49,49,49,49,49,49,52,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,112,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,21,49,2,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,61,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,50,49,49,49,49,49,49,49,113,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,12,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,6,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,26,49,49,65,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,52,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,65,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49],"timeDeltas":[24165,1171,1070,1099,1102,1099,1124,1095,1157,1123,1076,1078,1106,1101,1091,1115,1080,1110,1075,1072,1077,1073,1080,1093,1077,1085,1089,1074,1075,1085,1072,1072,1074,1075,1108,1076,1079,1082,1118,1101,1077,1083,1071,1072,1077,1071,1073,1072,1075,840,122,113,1078,1087,1200,1139,1093,1108,1097,1081,1085,1080,1097,1091,1087,1086,1087,1082,1084,1109,1113,1097,1103,1080,1093,1082,1192,1084,1083,1084,1080,1084,1074,1083,1084,1200,1106,1098,1098,1102,1085,1082,1081,1084,1083,1085,1092,1077,1082,1080,1083,1110,1096,1113,1073,1094,1081,1087,1082,1086,1085,1089,1086,1086,1098,1192,1085,1090,1088,1094,1086,1088,1085,1086,1199,1194,1191,1085,1080,1080,1084,1121,1136,1064,1072,1208,1092,1081,1122,1113,1267,1188,1187,1079,1081,1080,1115,1116,1095,1199,1197,1073,1086,1082,1083,1109,1155,1183,1084,1230,1062,1126,1055,1086,1088,1140,1204,1191,1080,1081,1079,1082,1141,1197,1189,1188,1138,1088,1086,1082,1195,1084,1193,1132,1086,1113,1084,1080,1134,1104,1083,1207,1093,1086,1085,1079,1083,1088,1168,1084,1103,1083,1207,1074,1082,1085,1102,1104,1089,1181,1136,1171,1084,1079,1082,1085,1197,1084,1142,1199,1083,1110,1089,1092,1069,1075,1073,1087,1083,1083,1231,1089,1082,1083,1082,1082,1110,1095,1093,1111,1090,1097,1084,1089,1077,1091,1084,1084,1085,1210,1175,1089,1092,1090,1198,1076,1077,1205,1153,1082,1082,1150,1079,1082,1192,1192,1102,1100,1095,1088,1083,1084,1087,1084,1199,1087,1085,1078,1089,1085,1085,1109,1099,1076,1088,1148,1187,1084,1085,1084,1084,1141,1080,1080,1147,1195,1110,1097,1091,1090,1082,1082,1071,1141,1219,1091,1087,1082,1083,1082,1082,1104,1090,1089,1096,1178,1089,1084,1085,1085,1084,1082,1086,1143,1090,1150,1094,1104,1095,1085,1090,1086,1068,1154,1204,1088,1083,1082,1082,1086,1083,1090,1098,1091,1107,1154,1093,1082,1086,1086,1196,1128,1151,1157,1082,1082,1089,1115,1096,1071,1089,1084,1176,1149,1086,1081,1086,1082,1081,1080,1087,1086,1102,1091,1086,1131,1086,1079,1186,1195,1123,1194,1072,1081,1085,1084,1084,1112,1086,1085,1198,1082,1081,1082,1081,1083,1087,1178,1193,1188,1078,1078,1112,1116,1092,1069,1202,1194,1129,1075,1083,1085,1145,1210,1087,1104,1159,1096,1088,1090,1089,1188,1191,1199,1076,1082,1079,1080,1106,1133,1217,1100,1060,1090,1089,1081,1082,1107,1109,1226,1155,1181,1122,1107,1128,1085,1101,1092,1083,1100,1193,1102,1084,1078,1082,1143,1080,1084,1190,1195,1082,1094,1099,1105,1102,1073,1090,1081,1086,1093,1083,1086,1086,1079,1086,1085,1131,1107,1100,1099,1083,1084,1082,1086,1090,1087,1082,1083,1083,1085,1084,1085,1118,1104,1097,1087,1072,1084,1086,1085,1075,1089,1084,1088,1102,1089,1090,1100,1095,1085,1108,1080,1091,1090,1080,1112,1088,1086,1081,1083,1147,1081,1089,1097,1092,1088,1092,1087,1082,1087,1083,1083,1085,1131,1192,1125,1082,1086,1107,1098,1092,1075,1201,1204,1072,1081,1080,1087,1083,1085,1083,1081,1144,1125,1098,1116,1081,1084,1083,1084,1086,1085,1146,1198,1085,1084,1082,1080,1115,1106,1091,1088,1087,1202,1073,1086,1083,1083,1083,1087,1080,1081,1152,1118,1108,1077,1078,1088,1088,1081,1084,1082,1087,1083,1082,1082,1130,1085,1139,1052,1095,1111,1082,1081,1199,1077,1085,1082,1083,1081,1081,1082,1085,1097,1110,1108,1084,1082,1084,1087,1086,1083,1083,1083,1081,1150,1087,1084,1083,1131,1105,1089,1090,1084,1086,1133,1192,1084,1084,1082,1081,1082,1085,1084,1103,1101,1088,1083,1086,1079,1085,1083,1082,1177,1084,1190,1193,1077,1083,1122,1093,1093,1088,1081,1204,1091,1134,1079,1087,1083,1125,1086,1193,1198,1088,1111,1071,1070,1089,1081,1079,1085,1082,1193,1181,1079,1110,1077,1119,1109,1088,1100,1123,1212,1102,1084,1082,1148,1191,1210,1124,1086,1082,1080,1097,1092,1125,1110,1082,1085,1087,1081,1085,1138,1083,1088,1190,1191,1195,1103,1093,1089,1089,1082,1112,1254,1212,1086,1082,1080,1079,1188,1235,1240,1115,1092,1088,1083,1193,1213,1221,1087,1082,1081,1085,1148,1150,1206,1098,1137,1083,1087,1090,1084,1085,1197,1207,1083,1078,1081,1084,1082,1138,1100,1126,1114,1082,1174,1083,1088,1079,1082,1195,1201,1081,1183,1104,1078,1091,1133,1082,1091,1186,1214,1073,1080,1078,1081,1084,1215,1208,1197,1086,1091,1104,1093,1133,1208,1198,1101,1078,1083,1085,1137,1140,1210,1221,1098,1117,1117,1114,1190,1194,1182,1073,1081,1083,1110,1107,1080,1081,1078,1082,1116,1109,1116,1087,1081,1084,1079,1083,1082,1111,1085,1107,1083,1080,1102,1119,1095,1090,1083,1068,1089,1084,1094,1148,1083,1080,1083,1087,1197,1187,1099,1108,1158,1069,1085,1132,1086,1198,1166,1164,1072,1080,1081,1133,1086,1117,1094,1105,1090,1154,1081,1085,1085,1089,1120,1138,1191,1192,1037,1082,1103,1103,1091,1071,1090,1183,1211,1077,1081,1082,1082,1100,1085,1189,1163,1104,1112,1093,1090,1082,1086,1084,1085,1195,1093,1175,1088,1087,1174,1084,1100,1105,1097,1095,1076,1087,1086,1086,1082,1085,1195,1078,1197,1171,1083,1098,1105,1081,1084,1082,1184,1207,1072,1081,1081,1086,1095,1084,1193,1190,1105,1101,1073,1095,1072,1088,1196,1187,1077,1197,1080,1080,1080,1149,1083,1101,1093,1098,1087,1165,1085,1086,1146,1080,1197,1200,1164,1079,1076,1080,1117,1127,1060,1070,1201,1204,1067,1082,1080,1113,1204,1088,1192,1182,1081,1138,1089,1091,1171,1198,1187,1101,1083,1079,1106,1144,1210,1196,1163,1083,1137,1081,1072,1084,1190,1201,1126,1085,1083,1083,1150,1188,1190,1196,1090,1111,1097,1104,1216,1190,1196,1028,1079,1081,1081,1143,1223,1205,1178,1095,1130,1082,1097,1078,1088,1074,1089,1211,1076,1082,1083,1083,1111,1188,1109,1094,1095,1079,1086,1082,1089,1195,1084,1083,1081,1084,1085,1082,1082,1086,1114,1092,1093,1197,1193,1199,1075,1084,1082,1084,1083,1082,1082,1193,1094,1123,1141,1084,1084,1093,1085,1113,1084,1083,1088,1099,1124,1085,1079,1085,1105,1097,1086,1186,1175,1098,1086,1081,1084,1081,1083,1083,1081,1140,1129,1090,1102,1092,1079,1086,1085,1087,1081,1068,1144,1202,1077,1080,1085,1080,1108,1098,1080,1088,1205,1141,1081,1084,1086,1085,1084,1085,1081,1140,1198,1123,1101,1089,1081,1086,1080,1084,1135,1192,1090,1083,1080,1083,1082,1082,1110,1103,1103,1169,1122,1084,1085,1085,1083,1083,1084,1082,1195,1195,1078,1128,1103,1096,1080,1082,1075,1197,1169,1088,1079,1085,1080,1086,1085,1070,1111,1097,1105,1091,1087,1078,1087,1083,1084,1084,1084,1184,1201,1080,1081,1093,1102,1109,1085,1079,1131,1203,1105,1085,1079,1083,1084,1085,1189,1124,1089,1111,1107,1087,1081,1083,1101,1086,1087,1139,1195,1102,1077,1087,1081,1088,1112,1107,1080,1084,1226,1067,1083,1086,1086,1085,1085,1192,1178,1181,1092,1102,1097,1087,1085,1198,1078,1083,1181,1085,1079,1081,1081,1151,1088,1094,1125,1108,1083,1081,1084,1081,1085,1189,1188,1197,1133,1079,1104,1154,1089,1106,1096,1089,1086,1109,1081,1082,1080,1082,1080,1139,1081,1193,1191,1085,1106,1110,1094,1088,1085,1202,1184,1121,1076,1080,1078,1082,1215,1208,1096,1105,1086,1087,1083,1093,1187,1190,1198,1129,1078,1080,1079,1081,1178,1100,1101,1071,1100,1083,1088,1080,1085,1092,1154,1191,1129,1189,1085,1081,1088,1094,1088,1084,1192,1077,1191,1091,1083,1080,1131,1111,1081,1081,1082,1084,1100,1086,1087,1084,1086,1086,1155,1204,1089,1194,1086,1080,1081,1105,1090,1110,1089,1148,1095,1183,1085,1082,1083,1139,1192,1189,1185,1070,1072,1086,1098,1084,1090,1197,1089,1201,1085,1083,1131,1082,1083,1083,1191,1196,1076,1100,1075,1087,1083,1140,1082,1204,1195,1083,1080,1080,1080,1106,1084,1089,1135,1045,1086,1091,1089,1090,1109,1083,1081,1194,1186,1076,1087,1082,1087,1113,1102,1081,1089,1080,1086,1086,1082,1127,1086,1082,1084,1080,1083,1084,1119,1092,1086,1085,1086,1088,1084,1112,1079,1084,1079,1072,1086,1085,1103,1101,1107,1105,1085,1088,1080,1084,1084,1086,1088,1086,1082,1082,1082,1087,1093,1106,1100,1082,1085,1086,1084,1085,1199,1083,1079,1078,1080,1150,1215,1089,1117,1089,1078,1083,1112,1140,1201,1185,1087,1083,1081,1083,1109,1121,1159,1086,1078,1089,1213,1074,1068,1087,1080,1131,1177,1151,1197,1103,1078,1083,1145,1085,1094,1087,1078,1201,1141,1081,1082,1109,1113,1083,1084,1086,1086,1097,1104,1087,1080,1086,1080,1080,1117,1213,1195,1078,1081,1083,1078,1080,1120,1114,1094,1204,1190,1080,1083,1081,1081,1201,1228,1214,1086,1082,1099,1113,1087,1133,1184,1209,1078,1078,1080,1077,1112,1079,1079,1084,1079,1086,1113,1116,1092,1092,1077,1200,1190,1195,1132,1076,1086,1080,1141,1113,1110,1071,1074,1090,1086,1086,1085,1079,1081,1082,1190,1188,1079,1195,1086,1094,1106,1098,1112,1088,1078,1086,1084,1089,1084,1083,1081,1081,1081,1083,1084,1118,1088,1100,1086,1081,1082,1085,1080,1080,1087,1086,1104,1087,1080,1080,1116,1129,1058,1085,1089,1085,1081,1081,1083,1084,1086,1111,1083,1082,1084,1097,1103,1087,1089,1068,1089,1085,1079,1105,1091,1125,1069,1091,1090,1083,1110,1113,1103,1083,1086,1083,1105,1117,1082,1067,1085,1083,1103,1084,1084,1081,1118,1094,1100,1083,1082,1091,1095,1085,1083,1092,1088,1084,1084,1080,1083,1088,1095,1073,1097,1085,1089,1086,1083,1084,1084,1084,1087,1087,1085,1086,1152,1109,1083,1089,1080,1087,1081,1084,1085,1085,1083,1080,1080,1084,1083,1086,1119,1084,1103,1098,1082,1101,1091,1087,1094,1089,1088,1081,1087,1086,1085,1121,1095,1090,1094,1091,1083,1088,1086,1082,1084,1089,1098,1082,1071,1088,1095,1246,1086,1102,1081,1084,1084,1084,1085,1179,1142,1087,1083,1082,1082,1092,1114,1113,1101,1171,1085,1089,1085,1084,1082,1084,1088,1082,1126,1201,1090,1123,1104,1090,1076,1089,1071,1089,1082,1086,1086,1114,1081,1084,1082,1087,1129,1099,1114,1092,1086,1085,1084,1082,1083,1085,1085,1084,1083,1083,1082,1130,1127,1117,1085,1082,1088,1078,1084,1084,1086,1086,1094,1088,1085,1088,1105,1107,1097,1103,1074,1093,1088,1086,1085,1087,1083,1083,1082,1081,1086,1084,1115,1087,1103,1108,1085,1080,1083,1082,1084,1081,1082,1086,1082,1086,1086,1105,1108,1104,1102,1087,1084,1082,1069,1089,1085,1084,1089,1083,1083,1086,1090,1108,1091,1090,1080,1086,1086,1087,1092,1083,1083,1080,1081,1085,1084,1086,1111,1095,1086,1080,1086,1085,1085,1086,1083,1081,1112,1085,1082,1087,1082,1122,1114,1095,1079,1086,1087,1080,1120,1139,1089,1083,1083,1085,1079,1113,1099,1123,1099,1081,1087,1112,1090,1083,1105,1111,1079,1115,1107,1100,1116,1092,1141,1139,1054,1111,1113,1134,1102,1086,1103,1110,1111,1111,1131,1087,1067,1106,1124,1109,1082,1087,1111,1086,1083,1088,1078,1086,1087,1088,1093,1087,1114,1087,1093,1076,1087,1101,1115,1092,1094,1073,1085,1078,1100,1103,1086,1100,1093,1078,1092,1114,1087,1080,1080,1082,1114,1089,1089,1081,1082,1081,1100,1088,1093,1092,1082,1086,1085,1084,1081,1082,1079,1084,1083,1080,1115,1081,1110,1134,1053,1069,1087,1097,1115,1086,1084,1078,1084,1083,1110,1084,1110,1124,1066,1092,1098,1096,1081,1084,1086,1085,1106,1138,1084,1087,1089,1092,1100,1089,1089,1083,1080,1085,1189,1187,1185,1082,1080,1078,1080,1168,1214,1093,1126,1072,1084,1070,1083,1078,1087,1083,1114,1213,1198,1083,1082,1081,1096,1096,1087,1208,1085,1086,1083,1107,1081,1110,1080,1088,1112,1085,1087,1123,1058,1089,1088,1085,1083,1134,1194,1082,1196,1133,1081,1110,1111,1081,1100,1086,1087,1089,1084,1179,1085,1085,1085,1084,1086,1086,1080,1145,1189,1092,1117,1097,1081,1086,1082,1081,1147,1191,1106,1082,1083,1085,1080,1083,1144,1130,1092,1095,1130,1086,1084,1089,1086,1083,1083,1073,1143,1145,1148,1085,1124,1090,1092,1083,1067,1149,1191,1114,1085,1081,1083,1082,1085,1082,1084,1111,1107,1072,1090,1093,1087,1082,1086,1085,1086,1081,1084,1181,1127,1079,1108,1101,1101,1093,1076,1090,1085,1092,1146,1082,1085,1080,1085,1086,1083,1091,1103,1093,1088,1090,1113,1085,1088,1083,1081,1083,1083,1083,1164,1200,1096,1119,1098,1095,1086,1086,1069,1165,1200,1080,1080,1083,1083,1081,1084,1080,1110,1110,1103,1083,1092,1082,1085,1084,1085,1078,1089,1070,1094,1083,1087,1134,1095,1125,1091,1083,1080,1082,1081,1084,1091,1079,1088,1086,1080,1083,1100,1101,1079,1090,1146,1167,1083,1085,1082,1082,1082,1083,1082,1081,1085,1090,1122,1143,1107,1082,1084,1090,1084,1084,1086,1085,1084,1081,1082,1083,1082,1117,1092,1092,1083,1068,1100,1214,1083,1085,1081,1085,1087,1084,1080,1081,1117,1102,1091,1086,1084,1082,1087,1085,1086,1085,1083,1083,1083,1163,1118,1101,1105,1090,1087,1084,1085,1088,1086,1161,1090,1089,1086,1091,1083,1084,1099,1107,1092,1093,1085,1085,1089,1081,1088,1099,1087,1084,1077,1090,1082,1175,1127,1098,1084,1072,1085,1185,1084,1082,1175,1084,1084,1085,1085,1085,1087,1132,1100,1087,1092,1124,1085,1078,1084,1084,1082,1080,1085,1086,1083,1198,1141,1093,1086,1085,1083,1083,1192,1137,1085,1092,1093,1086,1087,1093,1088,1126,1096,1114,1100,1121,1069,1086,1086,1088,1086,1089,1089,1082,1088,1086,1101,1111,1098,1096,1084,1089,1086,1083,1080,1082,1090,1085,1105,1090,1084,1084,1124,1105,1084,1088,1087,1082,1088,1085,1086,1087,1092,1092,1086,1081,1075,1124,1111,1115,1091,1088,1089,1091,1091,1088,1077,1088,1096,1088,1086,1090,1112,1110,1075,1093,1080,1074,1084,1084,1082,1083,1081,1080,1083,1080,1081,1096,1119,1083,1099,1080,1085,1086,1082,1086,1084,1084,1081,1085,1086,1080,1092,1131,1112,1101,1087,1082,1084,1082,1085,1083,1087,1085,1088,1082,1081,1083,1100,1094,1102,1091,1081,1094,1083,1172,1112,1088,1082,1084,1082,1083,1083,1095,1108,1092,1088,1083,1087,1082,1082,1083,1194,1087,1082,1079,1202,1079,1089,1105,1087,1208,1082,1084,1200,1088,1080,1083,1131,1131,1198,1063,1082,1088,1104,1092,1097,1070,1085,1140,1194,1078,1194,1094,1080,1080,1081,1083,1134,1105,1083,1097,1084,1083,1085,1084,1082,1091,1092,1083,1082,1100,1098,1085,1151,1087,1139,1100,1091,1096,1124,1080,1090,1094,1116,1045,1086,1084,1086,1093,1096,1097,1186,1216,1075,1079,1081,1084,1166,1132,1150,1112,1162,1083,1113,1112,1068,1086,1164,1206,1163,1087,1083,1085,1084,1192,1187,1207,1093,1115,1087,1085,1170,1082,1195,1087,1079,1080,1083,1085,1083,1128,1084,1128,1126,1119,1098,1083,1108,1082,1082,1086,1109,1111,1079,1102,1107,1084,1126,1110,1102,1087,1081,1084,1082,1088,1083,1190,1078,1082,1083,1176,1197,1086,1125,1129,1083,1085,1086,1145,1189,1205,1198,1096,1081,1078,1107,1131,1129,1119,1098,1082,1144,1082,1081,1167,1084,1085,1094,1227,1238,1085,1087,1081,1126,1128,1082,1111,1218,1104,1081,1127,1130,1109,1085,1182,1211,1080,1088,1110,1098,1200,1193,1199,1073,1078,1079,1082,1081,1105,1210,1213,1109,1093,1111,1118,1084,1102,1201,1195,1099,1080,1079,1083,1184,1105,1084,1191,1092,1105,1087,1085,1159,1087,1198,1193,1160,1077,1082,1080,1083,1083,1188,1106,1135,1097,1105,1081,1084,1086,1192,1084,1141,1199,1122,1080,1078,1087,1108,1094,1089,1215,1080,1163,1082,1079,1079,1082,1083,1189,1187,1090,1084,1097,1106,1085,1204,1172,1081,1199,1106,1084,1081,1084,1081,1086,1076,1087,1107,1106,1092,1085,1082,1084,1082,1086,1082,1085,1083,1082,1080,1083,1091,1097,1117,1100,1083,1083,1085,1185,1187,1154,1083,1104,1081,1084,1188,1201,1090,1111,1071,1080,1083,1083,1079,1199,1198,1189,1102,1080,1080,1083,1087,1118,1113,1083,1176,1089,1096,1084,1086,1089,1079,1084,1199,1193,1162,1080,1089,1112,1098,1084,1075,1089,1084,1086,1086,1131,1081,1082,1081,1080,1081,1192,1120,1085,1094,1109,1086,1083,1087,1087,1095,1133,1079,1198,1143,1074,1156,1039,1098,1086,1086,1077,1205,1081,1084,1079,1082,1086,1169,1188,1083,1081,1117,1085,1089,1093,1086,1133,1089,1078,1195,1103,1168,1082,1083,1083,1131,1094,1091,1091,1084,1086,1085,1083,1081,1082,1081,1086,1080,1194,1193,1198,1096,1085,1077,1131,1196,1084,1202,1156,1082,1083,1087,1164,1210,1086,1193,1110,1090,1090,1083,1204,1193,1071,1195,1083,1081,1080,1086,1152,1106,1207,1097,1090,1086,1080,1082,1089,1182,1202,1199,1135,1087,1079,1100,1201,1134,1098,1087,1191,1074,1087,1080,1081,1186,1125,1119,1085,1085,1121,1107,1115,1099,1091,1094,1075,1204,1084,1131,1076,1080,1084,1084,1086,1083,1081,1133,1088,1089,1087,1085,1083,1082,1134,1201,1072,1192,1165,1078,1079,1078,1093,1122,1089,1179,1218,1078,1079,1079,1084,1086,1121,1200,1192,1096,1084,1094,1152,1092,1058,1196,1082,1192,1113,1111,1084,1083,1106,1084,1106,1135,1137,1089,1106,1084,1153,1158,1146,1207,1228,1106,1111,1107,1188,1190,1110,1089,1097,1120,1135,1102,1195,1175,1171,1084,1082,1080,1109,1232,1086,1200,1124,1088,1118,1105,1110,1113,1188,1107,1209,1112,1081,1111,1121,1219,1193,1109,1104,1081,1074,1136,1113,1180,1210,1204,1100,1109,1184,1099,1108,1129,1201,1083,1106,1143,1162,1191,1182,1210,1081,1081,1105,1167,1217,1211,1134,1087,1088,1083,1128,1083,1111,1116,1085,1087,1079,1079,1081,1105,1085,1108,1085,1069,1093,1082,1112,1088,1086,1080,1108,1106,1081,1084,1083,1078,1095,1111,1076,1084,1086,1089,1079,1082,1188,1170,1188,1116,1072,1080,1080,1092,1103,1087,1183,1228,1074,1080,1080,1083,1154,1189,1187,1197,1069,1078,1093,1114,1060,1191,1204,1197,1071,1081,1078,1080,1083,1188,1185,1172,1082,1104,1091,1097,1187,1082,1201,1200,1036,1083,1078,1135,1216,1196,1170,1112,1109,1089,1086,1086,1086,1191,1191,1204,1046,1100,1083,1102,1183,1185,1117,1092,1088,1085,1086,1111,1111,1084,1152,1080,1208,1084,1079,1079,1081,1136,1110,1082,1086,1085,1084,1076,1084,1082,1086,1079,1123,1217,1209,1201,1099,1137,1105,1167,1228,1198,1075,1084,1082,1080,1146,1187,1085,1197,1121,1091,1091,1093,1146,1079,1197,1193,1112,1078,1078,1141,1190,1198,1213,1170,1056,1090,1094,1188,1110,1209,1088,1081,1108,1188,1097,1207,1202,1218,1111,1106,1114,1115,1087,1189,1189,1090,1079,1110,1082,1107,1162,1214,1196,1092,1097,1085,1086,1085,1084,1085,1187,1199,1071,1080,1082,1080,1167,1085,1094,1105,1082,1198,1071,1083,1079,1126,1048,1082,1106,1083,1089,1082,1101,1163,1111,1115,1106,1083,1077,1087,1084,1096,1082,1083,1083,1109,1085,1080,1084,1149,1095,1111,1083,1086,1080,1085,1124,1084,1099,1085,1081,1084,1085,1091,1150,1100,1084,1075,1089,1088,1083,1073,1087,1081,1127,1085,1083,1083,1082,1110,1103,1081,1133,1088,1091,1134,1087,1082,1079,1174,1196,1084,1208,1075,1093,1097,1087,1093,1090,1087,1087,1086,1109,1169,1086,1081,1131,1084,1204,1096,1132,1070,1085,1084,1082,1112,1107,1212,1212,1263,1015,1078,1081,1193,1122,1081,1085,1199,1109,1079,1079,1101,1085,1186,1197,1084,1172,1080,1080,1097,1117,1116,1213,1108,1114,1107,1084,1104,1129,1222,1200,1205,1082,1105,1123,1085,1086,1068,1083,1209,1211,1084,1082,1080,1127,1182,1194,1212,1188,1003,1089,1088,1182,1223,1236,1088,1079,1081,1083,1137,1229,1223,1103,1096,1098,1078,1120,1207,1197,1188,1073,1083,1103,1114,1207,1287,1149,1119,1071,1143,1111,1217,1057,1194,1088,1081,1113,1108,1109,1133,1102,1083,1079,1107,1125,1059,1107,1088,1088,1109,1114,1084,1082,1109,1112,1054,1084,1109,1070,1123,1113,1086,1087,1086,1083,1137,1082,1149,1165,1103,1107,1185,1195,1113,1092,1082,1189,1088,1075,1084,1188,1082,1080,1112,1086,1167,1084,1073,1093,1100,1089,1120,1089,1077,1085,1190,1201,1193,1069,1091,1080,1080,1103,1143,1090,1071,1115,1165,1185,1083,1083,1148,1186,1105,1186,1182,1108,1139,1122,1110,1191,1201,1118,1102,1107,1110,1109,1203,1223,1140,1106,1112,1091,1096,1090,1088,1068,1093,1085,1177,1081,1081,1078,1106,1111,1188,1187,1094,1103,1082,1080,1086,1150,1164,1191,1200,1097,1080,1144,1199,1229,1198,1141,1068,1065,1190,1082,1188,1200,1142,1081,1086,1081,1080,1189,1078,1193,1112,1095,1087,1082,1084,1083,1079,1084,1192,1194,1075,1081,1079,1079,1083,1100,1096,1080,1070,1208,1166,1073,1105,1108,1189,1108,1184,1216,1080,1106,1111,1090,1114,1210,1087,1128,1107,1106,1110,1143,1202,1118,1231,1069,1083,1107,1084,1096,1210,1216,1199,1082,1080,1081,1108,1200,1116,1220,1127,1085,1102,1111,1225,1221,1233,1112,1086,1123,1186,1226,1226,1104,1106,1112,1102,1126,1112,1202,1074,1124,1078,1083,1107,1106,1183,1199,1090,1102,1081,1127,1135,1088,1198,1216,1167,1067,1110,1107,1106,1221,1230,1275,1114,1113,1072,1082,1090,1069,1088,1199,1111,1082,1081,1081,1111,1233,1101,1109,1089,1131,1136,1110,1099,1192,1194,1070,1160,1088,1082,1079,1081,1079,1110,1088,1092,1090,1197,1079,1078,1078,1091,1236,1173,1197,1096,1081,1082,1083,1088,1083,1088,1197,1191,1109,1080,1083,1084,1084,1083,1193,1197,1085,1111,1094,1085,1093,1081,1082,1089,1085,1192,1123,1085,1083,1082,1082,1146,1083,1100,1092,1070,1156,1102,1082,1082,1160,1192,1086,1197,1082,1081,1078,1083,1090,1094,1096,1078,1205,1205,1098,1083,1083,1083,1082,1191,1201,1060,1081,1091,1109,1087,1088,1147,1086,1191,1205,1123,1082,1083,1081,1083,1081,1083,1088,1108,1091,1101,1081,1087,1081,1082,1086,1085,1085,1191,1204,1140,1078,1095,1105,1091,1087,1199,1198,1149,1081,1080,1081,1190,1087,1194,1196,1102,1092,1100,1092,1086,1087,1078,1084,1089,1196,1099,1083,1079,1082,1083,1189,1090,1100,1092,1085,1121,1080,1138,1080,1081,1085,1190,1088,1199,1084,1082,1098,1105,1092,1072,1146,1199,1087,1082,1079,1085,1083,1083,1088,1196,1197,1089,1093,1092,1097,1085,1088,1085,1088,1112,1088,1084,1122,1108,1081,1108,1108,1129,1097,1080,1089,1232,1083,1111,1111,1130,1190,1214,1184,1081,1079,1088,1097,1088,1107,1215,1193,1074,1081,1079,1101,1196,1226,1238,1121,1112,1138,1091,1082,1133,1107,1137,1183,1119,1106,1182,1186,1183,1196,1103,1117,1110,1078,1090,1195,1199,1094,1082,1080,1080,1127,1215,1207,1221,1086,1080,1097,1087,1121,1233,1212,1086,1083,1081,1106,1209,1229,1210,1120,1081,1095,1126,1086,1090,1081,1082,1085,1206,1080,1080,1079,1133,1185,1085,1079,1092,1123,1119,1092,1078,1087,1081,1081,1132,1211,1213,1116,1080,1081,1081,1097,1107,1116,1201,1102,1083,1080,1104,1128,1216,1113,1210,1081,1081,1103,1094,1103,1086,1197,1078,1216,1076,1084,1083,1113,1138,1188,1201,1068,1094,1127,1086,1086,1086,1084,1200,1086,1167,1078,1084,1081,1083,1084,1084,1084,1088,1094,1084,1096,1071,1087,1083,1085,1084,1081,1083,1082,1080,1082,1086,1082,1162,1105,1091,1094,1060,1085,1082,1081,1085,1140,1151,1084,1087,1081,1089,1123,1094,1086,1086,1085,1090,1100,1090,1084,1080,1085,1083,1081,1085,1080,1115,1107,1085,1086,1082,1084,1085,1079,1083,1084,1078,1079,1135,1136,1086,1140,1096,1085,1087,1087,1069,1090,1162,1123,1083,1080,1082,1083,1086,1084,1085,1110,1092,1094,1090,1081,1083,1082,1086,1082,1082,1081,1081,1082,1135,1148,1098,1092,1086,1082,1070,1112,1085,1085,1087,1085,1091,1090,1079,1083,1082,1129,1092,1082,1085,1200,1110,1085,1080,1085,1081,1087,1070,1084,1131,1081,1118,1147,1092,1086,1087,1086,1086,1085,1123,1088,1199,1080,1082,1079,1087,1102,1102,1096,1101,1085,1079,1083,1084,1107,1082,1087,1083,1083,1085,1080,1082,1153,1085,1085,1084,1082,1081,1087,1084,1087,1132,1189,1088,1080,1081,1083,1125,1088,1073,1092,1083,1085,1083,1085,1085,1081,1085,1082,1081,1086,1089,1118,1097,1078,1093,1089,1089,1076,1088,1080,1085,1086,1082,1069,1088,1085,1094,1195,1112,1092,1088,1090,1076,1090,1092,1113,1107,1088,1083,1083,1083,1090,1121,1111,1114,1080,1089,1096,1085,1086,1082,1090,1081,1082,1089,1145,1189,1143,1087,1087,1094,1085,1085,1084,1080,1197,1130,1080,1083,1085,1087,1093,1118,1110,1105,1104,1081,1082,1083,1085,1118,1086,1084,1086,1082,1083,1085,1109,1115,1128,1073,1089,1079,1089,1084,1087,1088,1091,1080,1086,1083,1083,1092,1101,1111,1082,1088,655,429,1096,1079,1081,1086,1086,1082,1084,1084,1075,1081,1129,1099,1092,1149,1087,1081,1084,1080,1083,1081,1083,1086,1080,1093,1112,1117,1095,1103,1087,1080,1115,1100,1085,1085,1083,1085,1087,1108,1104,1083,1100,1102,1088,1087,1088,1084,1086,1084,1085,1085,1188,1079,1194,1200,1078,1098,1104,1081,1130,1196,1208,1093,1081,1082,1080,1083,1085,1084,1085,1083,1099,1121,1078,1084,1084,1085,1085,1084,1085,1081,1079,1131,1194,1085,1077,1085,1137,1112,1073,1093,1074,1085,1175,1124,1082,1085,1081,1083,1084,1082,1086,1129,1102,1078,1091,1085,1086,1089,1087,1086,1080,1080,1143,1087,1158,1084,1105,1100,1098,1080,1085,1069,1149,1203,1081,1080,1091,1085,1083,1084,1081,1117,1104,1099,1085,1085,1086,1085,1083,1082,1081,1079,1082,1143,1193,1087,1101,1106,1086,1097,1078,1070,1088,1082,1089,1077,1082,1082,1085,1080,1082,1091,1193,1084,1089,1196,1080,1083,1082,1082,1087,1083,1087,1143,1194,1094,1086,1119,1091,1087,1088,1071,1087,1080,1082,1179,1086,1083,1084,1079,1082,1085,1128,1093,1084,1208,1073,1078,1081,1132,1086,1190,1195,1175,1064,1075,1090,1127,1095,1080,1206,1210,1073,1078,1080,1083,1135,1190,1088,1204,1130,1082,1128,1082,1082,1166,1197,1194,1078,1079,1081,1084,1148,1090,1186,1196,1110,1114,1083,1176,1085,1196,1193,1076,1079,1077,1110,1110,1083,1108,1110,1100,1103,1100,1102,1086,1110,1083,1162,1198,1189,1190,1062,1082,1104,1145,1093,1120,1104,1081,1190,1082,1081,1078,1169,1191,1081,1202,1120,1078,1085,1087,1101,1112,1242,1200,1099,1081,1083,1086,1083,1183,1117,1203,1105,1082,1107,1097,1082,1082,1088,1203,1198,1122,1071,1081,1081,1081,1196,1195,1190,1100,1080,1084,1134,1086,1085,1190,1206,1130,1075,1080,1081,1115,1229,1109,1175,1087,1067,1078,1110,1084,1212,1204,1197,1098,1080,1078,1109,1129,1135,1111,1095,1083,1084,1080,1084,1111,1140,1103,1082,1106,1058,1105,1131,1086,1104,1092,1082,1112,1129,1116,1083,1082,1089,1080,1109,1133,1109,1083,1084,1100,1088,1112,1116,1087,1083,1079,1079,1084,1109,1136,1109,1081,1113,1081,1124,1121,1064,1087,1079,1084,1110,1127,1133,1082,1108,1082,1081,1113,1129,1097,1122,1114,1141,1081,1084,1079,1089,1081,1108,1131,1117,1079,1091,1092,1082,1112,1079,1083,1087,1111,1128,1116,1079,1079,1108,1112,1111,1277,1224,1150,1111,1081,1110,1083,1172,1186,1190,1164,1083,1080,1081,1136,1112,1110,1123,1085,1098,1098,1085,1076,1085,1118,1105,1195,1156,1159,1112,1083,1088,1089,1098,1081,1070,1178,1197,1076,1081,1079,1081,1131,1187,1195,1078,1133,1090,1097,1091,1080,1215,1218,1183,1085,1080,1079,1127,1109,1227,1210,1100,1091,1085,1118,1129,1202,1220,1172,1080,1080,1082,1175,1234,1093,1203,1089,1113,1078,1110,1113,1208,1212,1110,1081,1112,1130,1204,1207,1203,1117,1066,1096,1111,1216,1141,1198,1120,1081,1080,1104,1209,1130,1255,1133,1080,1111,1103,1110,1201,1086,1087,1198,1080,1083,1085,1186,1087,1189,1197,1079,1110,1077,1096,1085,1194,1200,1196,1073,1081,1080,1104,1081,1085,1085,1103,1109,1086,1088,1086,1084,1087,1081,1128,1198,1084,1193,1083,1098,1090,1084,1124,1058,1081,1196,1205,1152,1082,1080,1084,1112,1190,1088,1194,1212,1139,1121,1088,1087,1079,1074,1201,1082,1093,1084,1079,1080,1138,1113,1225,1081,1128,1089,1082,1086,1078,1155,1075,1189,1084,1198,1072,1085,1080,1085,1087,1106,1084,1167,1211,1082,1082,1083,1083,1088,1080,1082,1193,1196,1099,1087,1133,1079,1083,1072,1083,1192,1195,1112,1056,1113,1056,1193,1112,1190,1125,1119,1087,1083,1086,1164,1189,1085,1194,1102,1079,1083,1175,1192,1087,1089,1099,1094,1080,1082,1085,1086,1087,1079,1082,1067,1085,1087,1080,1085,1117,1079,1085,1088,1153,1161,1188,1201,1082,1083,1079,1129,1084,1085,1188,1196,1123,1086,1086,1080,1085,1085,1085,1192,1142,1088,1080,1085,1083,1083,1086,1098,1081,1071,1204,1188,1075,1080,1080,1140,1087,1182,1208,1097,1087,1085,1116,1079,1086,1071,1085,1070,1130,1203,1075,1081,1080,1079,1084,1085,1087,1129,1076,1087,1171,1086,1083,1085,1136,1088,1195,1194,1086,1083,1084,1081,1148,1076,1078,1083,1186,1214,1055,1084,1085,1088,1077,1083,1089,1079,1084,1126,1114,1089,1080,1082,1084,1082,1083,1081,1079,1081,1084,1197,1081,1084,1091,1101,1087,1198,1201,1184,1071,1083,1083,1082,1190,1195,1195,1031,1082,1116,1111,1087,1087,1082,1084,1086,1082,1192,1087,1082,1082,1081,1083,1162,1112,1099,1087,1086,1082,1081,1079,1084,1085,1088,1085,1086,1083,1079,1080,1081,1212,1018,1085,1081,1085,1086,1085,1189,1202,1083,1080,1082,1086,1083,1089,1100,1091,1084,1084,1093,1084,1084,1086,1087,1107,1068,1083,1081,1081,1094,1125,1097,1098,1083,1079,1089,1084,1082,1084,1083,1087,1085,1081,1087,1086,1104,1110,1089,1087,1083,1069,1093,1081,1113,1056,1088,1087,1091,1082,1081,1086,1125,1094,1087,1086,1088,1087,1088,1080,1085,1086,1085,1077,1080,1167,1201,1123,1087,1085,1077,1076,1091,1075,1088,1083,1085,1083,1089,1084,1079,1083,1107,1118,1092,1085,1086,1090,1075,1086,1086,1082,1083,1087,1079,1084,1081,1097,1118,1113,1085,1083,1085,1087,1084,1082,1083,1082,1136,1192,1112,1081,1087,1134,1097,1079,1080,1140,1152,1133,1079,1080,1083,1084,1083,1083,1080,1088,1115,1097,1090,1082,1085,1086,1082,1083,1081,1082,1131,1195,1098,1077,1085,1120,1103,1086,1089,1070,1158,1080,1088,1085,1084,1082,1086,1086,1082,1083,1086,1107,1087,1086,1119,1082,1083,1088,1083,1081,1083,1081,1132,1197,1102,1093,1125,1108,1085,1082,1084,1141,1196,1087,1082,1083,1085,1081,1085,1084,1084,1110,1087,1086,1132,1090,1079,1083,1086,1086,1084,1084,1164,1200,1086,1085,1138,1085,1087,1082,1085,1152,1200,1077,1081,1081,1083,1080,1085,1084,1200,1118,1088,1086,1086,1084,1138,1081,1085,1190,1192,1089,1079,1081,1086,1087,1115,1082,1076,1199,1202,1062,1074,1084,1171,1191,1197,1106,1122,1087,1087,1121,1081,1086,1155,1206,1175,1072,1080,1086,1080,1086,1085,1202,1115,1092,1124,1085,1081,1086,1083,1200,1185,1203,1071,1081,1107,1096,1208,1234,1105,1102,1080,1096,1116,1138,1078,1187,1191,1166,1082,1080,1081,1185,1115,1105,1102,1083,1116,1086,1082,1084,1085,1086,1188,1190,1197,1071,1084,1078,1114,1105,1096,1080,1188,1205,1062,1086,1081,1131,1076,1148,1080,1155,1191,1115,1101,1080,1085,1187,1203,1204,1070,1075,1079,1080,1083,1085,1191,1194,1124,1108,1082,1080,1072,1088,1081,1085,1194,1198,1089,1083,1080,1084,1084,1103,1088,1074,1150,1209,1083,1087,1080,1083,1080,1083,1084,1083,1141,1199,1103,1101,1081,1089,1082,1090,1085,1141,1202,1085,1083,1081,1078,1083,1072,1106,1119,1083,1089,1081,1084,1083,1079,1082,1082,1081,1084,1087,1079,1179,1091,1154,1086,1161,1083,1081,1085,1085,1086,1193,1089,1081,1078,1084,1085,1084,1112,1092,1086,1208,1082,1087,1085,1085,1085,1084,1086,1195,1084,1204,1091,1119,1089,1070,1094,1084,1089,1165,1190,1081,1081,1084,1083,1085,1083,1087,1112,1096,1089,1087,1082,1086,1080,1085,1083,1084,1085,1080,1165,1189,1083,1102,1106,1085,1144,1086,1148,1086,1175,1081,1084,1082,1086,1086,1083,1086,1094,1116,1083,1090,1083,1081,1084,1086,1083,1083,1083,1187,1185,1092,1084,1088,1111,1094,1084,1068,1089,1190,1170,1083,1082,1079,1088,1138,1082,1080,1090,1123,1082,1135,1083,1084,1081,1086,1086,1082,1130,1198,1125,1081,1089,1082,1112,1081,1087,1077,1083,1198,1117,1084,1080,1080,1133,1085,1085,1193,1092,1123,1089,1086,1084,1089,1082,1084,1085,1184,1202,1082,1083,1082,1305,1089,1100,1083,1093,1085,1083,1085,1089,1086,1084,1085,1198,1199,1121,1083,1083,1138,1078,1090,1079,1197,1200,1068,1081,1136,1103,1171,1216,1216,1116,1132,1131,1084,1083,1228,1208,1163,1089,1084,1137,1212,1227,1199,1140,1125,1114,1065,1083,1177,1209,1071,1112,1097,1105,1189,1244,1222,1093,1058,1085,1133,1113,1150,1080,1213,1157,1077,1091,1163,1202,1228,1188,1049,1113,1101,1100,1115,1079,1074,1087,1189,1096,1078,1079,1079,1114,1238,1209,1204,1127,1091,1079,1080,1192,1185,1195,1069,1080,1078,1080,1179,1227,1207,1119,1099,1082,1084,1085,1208,1247,1202,1109,1074,1079,1138,1180,1128,1228,1114,1094,1087,1084,1113,1221,1199,1074,1082,1102,1108,1110,1196,1205,1210,1125,1095,1108,1209,1081,1211,1224,1073,1082,1082,1081,1084,1208,1212,1090,1095,1103,1085,1086,1112,1084,1117,1189,1199,1086,1085,1105,1117,1159,1091,1082,1138,1109,1055,1084,1068,1089,1139,1160,1216,1216,1087,1083,1080,1088,1093,1114,1114,1191,1168,1086,1111,1083,1128,1087,1210,1235,1081,1101,1084,1137,1107,1084,1082,1084,1112,1142,1100,1081,1082,1143,1224,1126,1244,1091,1102,1090,1126,1138,1086,1112,1210,1116,1129,1056,1078,1157,1198,1194,1083,1110,1086,1086,1147,1114,1081,1185,1196,1084,1085,1115,1109,1079,1111,1094,1104,1081,1096,1129,1105,1083,1191,1090,1196,1193,1075,1081,1116,1085,1119,1106,1085,1085,1083,1198,1109,1078,1084,1083,1138,1089,1193,1196,1080,1091,1090,1082,1194,1191,1193,1160,1069,1082,1080,1081,1137,1164,1199,1149,1092,1101,1103,1105,1067,1080,1079,1082,1086,1109,1099,1083,1081,1136,1081,1067,1148,1091,1193,1193,1071,1082,1080,1108,1235,1224,1112,1114,1081,1084,1092,1088,1082,1079,1083,1116,1175,1088,1084,1085,1080,1128,1200,1122,1240,1138,1124,1078,1070,1195,1222,1185,1074,1082,1109,1132,1108,1083,1107,1083,1100,1125,1107,1084,1111,1301,1101,1183,1173,1081,1107,1240,1207,1181,1111,1067,1108,1103,1068,1110,1229,1209,1173,1107,1080,1135,1198,1206,1126,1129,1136,1083,1123,1188,1192,1199,1109,1082,1103,1132,1203,1118,1221,1069,1096,1086,1110,1142,1191,1073,1163,1195,1070,1082,1082,1145,1215,1241,1118,1105,1083,1081,1084,1113,1112,1084,1083,1080,1088,1082,1086,1084,1083,1086,1117,1099,1077,1121,1106,1089,1084,1081,1086,1114,1140,1142,1103,1080,1082,1101,1118,1092,1081,1081,1081,1119,1110,1082,1083,1080,1085,1107,1088,1083,1094,1111,1097,1074,1088,1087,1083,1089,1082,1082,1081,1107,1108,1100,1114,1086,1137,1114,1093,1071,1076,1084,1084,1087,1189,1197,1192,1072,1083,1080,1112,1150,1090,1120,1207,1105,1081,1086,1085,1188,1233,1212,1121,1082,1082,1096,1198,1106,1151,1263,1035,1081,1081,1084,1157,1235,1206,1130,1092,1085,1137,1077,1094,1118,1205,1199,1087,1108,1205,1224,1222,1122,1072,1083,1084,1109,1083,1085,1083,1198,1202,1075,1084,1081,1088,1084,1082,1082,1176,1091,1120,1080,1083,1085,1088,1084,1086,1193,1193,1160,1072,1083,1153,1086,1086,1104,1085,1088,1083,1083,1086,1081,1117,1056,1082,1199,1195,1199,1078,1081,1112,1087,1083,1083,1198,1201,1163,1078,1081,1078,1081,1189,1195,1136,1066,1101,1082,1087,1107,1113,1193,1202,1144,1081,1082,1078,1109,1194,1093,1083,1107,1083,1092,1085,1082,1080,1142,1083,1083,1193,1196,1108,1081,1081,1091,1106,1085,1094,1086,1109,1060,1232,1043,1109,1078,1084,1084,1211,1204,1078,1139,1080,1136,1082,1113,1211,1195,1132,1078,1079,1136,1145,1226,1210,1093,1097,1111,1118,1065,1088,1194,1204,1152,1079,1081,1080,1082,1081,1114,1140,1096,1085,1084,1090,1084,1112,1163,1212,1218,1189,1081,1079,1101,1090,1090,1084,1084,1212,1201,1086,1084,1079,1084,1109,1113,1108,1112,1203,1083,1102,1087,1118,1123,1217,1196,1093,1080,1103,1105,1110,1137,1078,1115,1089,1091,1089,1083,1082,1084,1132,1088,1189,1130,1197,1075,1080,1080,1117,1087,1088,1085,1083,1218,1119,1082,1081,1084,1150,1136,1182,1194,1096,1076,1110,1066,1096,1080,1108,1136,1113,1081,1139,1126,1135,1081,1177,1166,1226,1084,1075,1087,1088,1095,1090,1204,1080,1083,1178,1084,1109,1130,1200,1188,1086,1108,1086,1107,1114,1088,1200,1184,1126,1081,1107,1084,1083,1080,1106,1110,1095,1076,1086,1140,1150,1110,1141,1114,1204,1083,1192,1076,1082,1117,1052,1118,1073,1086,1086,1198,1201,1073,1080,1079,1081,1088,1211,1213,1183,1109,1108,1078,1084,1210,1226,1282,1070,1088,1104,1073,1080,1111,1131,1107,1087,1106,1081,1108,1113,1086,1083,1084,1082,1078,1110,1154,1089,1110,1086,1083,1122,1114,1082,1087,1089,1074,1083,1085,1106,1111,1087,1089,1083,1084,1115,1103,1083,1087,1080,1115,1110,1084,1084,1081,1082,1183,1156,1114,1087,1085,1104,1108,1089,1086,1212,1087,1080,1082,1084,1107,1199,1190,1161,1113,1083,1134,1093,1138,1058,1112,1083,1207,1098,1083,1108,1109,1179,1207,1114,1117,1111,1094,1081,1088,1082,1192,1186,1188,1082,1079,1078,1106,1201,1092,1112,1134,1082,1083,1110,1083,1085,1170,1166,1184,1193,1079,1081,1080,1085,1086,1113,1084,1083,1195,1133,1083,1081,1079,1195,1201,1190,1145,1111,1079,1084,1091,1081,1191,1207,1178,1082,1115,1081,1164,1228,1226,1099,1105,1111,1099,1089,1085,1208,1112,1246,1080,1084,1106,1112,1082,1080,1142,1225,1087,1095,1086,1113,1057,1085,1087,1082,1197,1146,1083,1081,1081,1081,1111,1116,1103,1093,1092,1081,1146,1111,1084,1082,1085,1078,1081,1106,1138,1086,1084,1090,1082,1089,1111,1217,1184,1096,1078,1082,1080,1112,1164,1115,1202,1226,1105,1126,1084,1131,1129,1130,1107,1117,1047,1100,1113,1140,1072,1111,1114,1095,1089,1112,1177,1084,1087,1146,1083,1191,1084,1191,1110,1080,1082,1085,1127,1059,1084,1085,1211,1093,1100,1080,1083,1082,1139,1234,1154,1208,1116,1113,1083,1090,1088,1109,1217,1199,1089,1083,1174,1083,1209,1217,1085,1082,1097,1081,1084,1183,1207,1217,1117,1112,1084,1083,1133,1110,1206,1200,1099,1118,1062,1114,1218,1210,1203,1071,1084,1080,1080,1160,1113,1143,1210,1106,1101,1079,1085,1079,1074,1085,1107,1132,1110,1049,1085,1079,1113,1105,1091,1089,1082,1124,1207,1084,1080,1082,1084,1084,1141,1133,1204,1210,1090,1099,1088,1086,1117,1193,1199,1075,1107,1082,1084,1082,1083,1080,1191,1088,1088,1096,1083,1082,1083,1085,1106,1203,1188,1212,1108,1142,1111,1058,1086,1088,1088,1086,1204,1084,1088,1103,1222,1237,1102,1089,1144,1084,1108,1107,1118,1060,1085,1127,1195,1117,1085,1082,1079,1132,1189,1222,1123,1085,1086,1096,1110,1061,1091,1094,1119,1079,1086,1083,1140,1107,1145,1176,1088,1088,1089,1089,1084,1100,1087,1082,1087,1179,1190,1189,1181,1108,1101,1087,1114,1068,1141,1135,1221,1076,1103,1107,1109,1212,1111,1215,1096,1103,1115,1082,1126,1065,1079,1203,1198,1063,1080,1137,1161,1189,1121,1189,1085,1111,1110,1096,1112,1085,1213,1197,1079,1078,1081,1110,1083,1232,1207,1183,1094,1089,1102,1109,1138,1211,1080,1085,1088,1113,1078,1108,1149,1081,1208,1147,1065,1090,1071,1074,1086,1147,1190,1131,1186,1109,1081,1081,1112,1077,1129,1067,1089,1082,1204,1083,1082,1083,1080,1082,1113,1188,1187,1198,1087,1105,1076,1091,1081,1085,1085,1197,1156,1080,1083,1080,1113,1077,1084,1085,1085,1089,1090,1090,1113,1083,1079,1097,1080,1084,1085,1110,1083,1087,1074,1108,1086,1115,1079,1086,1078,1084,1084,1086,1080,1094,1081,1082,1108,1082,1117,1087,1099,1085,1079,1193,1110,1088,1113,1057,1083,1085,1084,1084,1084,1080,1096,1094,1100,1062,1095,1073,1085,1087,1091,1082,1080,1086,1086,1085,1087,1088,1084,1100,1111,1060,1069,1091,1084,1088,1086,1106,1086,1084,1087,1084,1088,1092,1095,1091,1091,1081,1084,1110,1116,1089,1084,1079,1081,1117,1113,1092,1086,1096,1108,1059,1113,1205,1191,1188,1084,1082,1081,1115,1052,1206,1200,1150,1111,1061,1108,1131,1085,1208,1205,1186,1073,1107,1108,1080,1189,1112,1137,1123,1091,1094,1116,1221,1186,1184,1077,1119,1113,1080,1122,1118,1108,1085,1098,1108,1069,1110,1081,1083,1080,1154,1084,1212,1220,1113,1082,1085,1089,1097,1081,1117,1217,1192,1087,1081,1083,1085,1186,1189,1188,1100,1083,1085,1095,1081,1111,1209,1197,1147,1089,1082,1142,1081,1198,1141,1126,1088,1094,1091,1085,1085,1203,1186,1198,1118,1081,1082,1087,1079,1190,1206,1134,1098,1112,1103,1084,1085,1188,1188,1190,1078,1081,1085,1107,1082,1112,1112,1067,1087,1084,1113,1084,1081,1109,1118,1186,1199,1186,1123,1085,1146,1100,1166,1095,1107,1206,1092,1082,1106,1257,1183,1214,1175,1088,1082,1111,1112,1121,1109,1087,1197,1084,1086,1110,1088,1083,1088,1207,1189,1130,1083,1084,1099,1084,1086,1201,1191,1159,1076,1085,1086,1196,1213,1173,1095,1097,1091,1090,1084,1094,1197,1182,1075,1084,1082,1087,1083,1084,1080,1082,1083,1092,1087,1078,1083,1162,1084,1082,1166,1138,1085,1195,1077,1132,1085,1091,1083,1093,1082,1086,1077,1085,1135,1208,1085,1078,1083,1146,1193,1187,1208,1092,1101,1091,1193,1106,1091,1084,1085,1191,1104,1084,1081,1149,1183,1085,1091,1095,1083,1086,1081,1081,1082,1083,1189,1079,1191,1171,1075,1103,1110,1073,1123,1085,1071,1087,1082,1137,1107,1080,1082,1137,1115,1081,1214,1115,1104,1108,1084,1088,1086,1189,1083,1191,1196,1082,1115,1108,1164,1085,1084,1096,1091,1108,1083,1088,1081,1081,1084,1188,1189,1074,1206,1110,1084,1126,1091,1119,1084,1086,1199,1114,1105,1083,1081,1155,1204,1119,1200,1123,1113,1127,1106,1044,1189,1197,1143,1079,1084,1081,1141,1134,1132,1108,1242,1120,1106,1083,1084,1202,1211,1174,1087,1082,1081,1133,1186,1223,1110,1091,1085,1105,1083,1111,1212,1212,1089,1137,1079,1108,1109,1082,1069,1083,1085,1091,1099,1082,1087,1079,1084,1087,1131,1144,1189,1197,1103,1080,1087,1143,1082,1095,1078,1072,1211,1154,1077,1079,1080,1136,1183,1188,1193,1083,1086,1086,1095,1085,1081,1196,1197,1143,1069,1082,1137,1255,1185,1162,1150,1110,1097,1082,1114,1226,1195,1147,1074,1080,1133,1223,1188,1186,1129,1108,1150,1092,1107,1110,1193,1197,1075,1081,1081,1092,1185,1213,1220,1115,1085,1112,1095,1084,1159,1216,1091,1137,1077,1084,1110,1107,1082,1068,1189,1196,1087,1099,1083,1084,1088,1082,1085,1193,1196,1078,1106,1082,1085,1190,1086,1115,1093,1093,1076,1085,1083,1081,1135,1081,1082,1212,1218,1102,1135,1039,1176,1139,1116,1054,1203,1140,1092,1107,1141,1139,1201,1205,1121,1109,1082,1116,1101,1083,1113,1216,1178,1110,1110,1081,1169,1087,1081,1212,1151,1089,1094,1089,1117,1085,1098,1212,1194,1047,1081,1085,1080,1183,1212,1211,1087,1098,1085,1088,1158,1103,1085,1110,1114,1082,1084,1081,1101,1086,1116,1087,1114,1085,1083,1087,1175,1086,1108,1112,1085,1130,1135,1220,1135,1081,1115,1096,1083,1088,1082,1211,1284,1090,1078,1136,1205,1188,1198,1104,1095,1102,1120,1106,1101,1083,1104,1093,1075,1107,1085,1083,1081,1160,1179,1151,1083,1130,1084,1082,1109,1285,1108,1206,1168,1133,1106,1107,1087,1205,1118,1104,1115,1064,1118,1099,1178,1082,1082,1085,1082,1110,1084,1108,1109,1083,1149,1036,1073,1114,1208,1131,1075,1115,1150,1151,1209,1225,1084,1084,1110,1077,1123,1107,1133,1194,1153,1083,1086,1102,1240,1085,1188,1203,1090,1085,1088,1107,1130,1211,1196,1131,1076,1082,1106,1134,1139,1073,1136,1131,1071,1098,1111,1145,1159,1205,1171,1136,1071,1079,1111,1109,1077,1221,1212,1145,1104,1062,1079,1083,1165,1113,1180,1130,1105,1112,1118,1049,1108,1121,1084,1154,1087,1086,1082,1082,1083,1126,1102,1086,1189,1196,1129,1081,1083,1086,1096,1090,1112,1209,1195,1100,1087,1080,1083,1193,1141,1113,1120,1111,1144,1028,1105,1114,1197,1182,1193,1101,1105,1135,1081,1188,1198,1220,1115,1114,1081,1113,1056,1207,1217,1088,1081,1081,1084,1081,1207,1208,1199,1088,1110,1109,1108,1086,1081,1085,1213,1201,1086,1128,1085,1107,1190,1205,1109,1112,1081,1095,1115,1212,1156,1145,1164,1082,1084,1159,1245,1186,1077,1090,1092,1083,1086,1071,1227,1205,1210,1123,1075,1080,1084,1084,1111,1089,1092,1093,1109,1086,1091,1083,1081,1086,1085,1081,1082,1182,1178,1079,1113,1162,1091,1084,1086,1086,1080,1106,1113,1083,1083,1086,1080,1105,1133,1100,1085,1094,1087,1084,1114,1114,1081,1166,1208,1207,1196,1075,1110,1085,1116,1172,1096,1116,1086,1082,1108,1093,1090,1083,1151,1183,1209,1177,1091,1087,1088,1103,1077,1109,1198,1197,1072,1081,1084,1084,1143,1191,1110,1085,1095,1103,1089,1081,1085,1071,1204,1191,1187,1094,1080,1078,1081,1142,1083,1084,1091,1119,1111,1128,1084,1081,1082,1088,1158,1133,1199,1165,1108,1079,1083,1105,1108,1086,1102,1117,1091,1083,1084,1083,1083,1087,1081,1088,1082,1086,1084,1097,1084,1086,1086,1082,1084,1082,1090,1082,1078,1083,1080,1084,1091,1089,1098,1090,1121,1049,1077,1084,1079,1083,1087,1088,1075,1083,1080,1090,1082,1087,1093,1086,1086,1086,1085,1089,1080,1084,1120,1086,1083,1084,1086,1092,1149,1101,1081,1087,1087,1080,1086,1194,1148,1082,1196,1121,1080,1087,1083,1083,1094,1084,1084,1204,1234,1020,1079,1083,1135,1194,1194,1191,1080,1092,1089,1098,1086,1086,1084,1194,1195,1081,1083,1082,1085,1107,1191,1093,1200,1143,1080,1079,1158,1091,1195,1191,1194,1072,1079,1080,1101,1212,1192,1160,1060,1087,1086,1086,1143,1193,1191,1194,1075,1081,1132,1093,1153,1196,1082,1094,1086,1085,1080,1086,1088,1082,1085,1188,1215,1189,1083,1087,1085,1114,1115,1112,1088,1081,1202,1071,1079,1081,1087,1142,1193,1189,1182,1108,1083,1112,1065,1084,1190,1234,1083,1089,1088,1079,1144,1207,1113,1215,1087,1086,1106,1086,1135,1203,1193,1204,1107,1104,1129,1105,1200,1187,1164,1113,1092,1118,1087,1190,1209,1172,1117,1074,1107,1186,1194,1121,1180,1074,1084,1146,1103,1104,1188,1076,1221,1138,1080,1127,1130,1107,1081,1109,1110,1095,1115,1110,1091,1111,1222,1195,1206,1092,1080,1110,1093,1113,1112,1110,1296,992,1080,1086,1112,1140,1205,1187,1210,1115,1079,1109,1214,1150,1138,1068,1113,1069,1092,1068,1181,1061,1083,1083,1080,1083,1200,1084,1083,1081,1090,1097,1083,1072,1202,1200,1076,1081,1083,1084,1086,1083,1088,1085,1085,1090,1098,1086,1084,1081,1082,1086,1199,1081,1191,1187,1075,1081,1088,1085,1085,1098,1082,1110,1212,1107,1105,1086,1104,1169,1192,1205,1139,1117,1130,1130,1112,1082,1177,1202,1080,1084,1078,1081,1199,1085,1205,1207,1089,1080,1091,1091,1085,1157,1197,1192,1075,1081,1081,1107,1214,1185,1222,1116,1107,1094,1088,1088,1132,1193,1078,1087,1081,1084,1081,1080,1110,1109,1086,1094,1089,1095,1079,1092,1080,1068,1090,1182,1193,1189,1209,1082,1085,1085,1084,1125,1086,1083,1197,1073,1081,1081,1083,1088,1138,1190,1189,1196,1076,1080,1089,1087,1082,1200,1179,1180,1081,1079,1082,1082,1135,1083,1208,1085,1083,1092,1087,1113,1105,1087,1193,1079,1190,1200,1069,1105,1132,1130,1108,1197,1103,1105,1056,1104,1085,1089,1176,1113,1106,1193,1133,1103,1063,1109,1113,1117,1107,1193,1204,1065,1079,1114,1164,1078,1214,1216,1094,1082,1116,1080,1096,1095,1113,1082,1194,1124,1080,1079,1081,1112,1082,1199,1219,1083,1082,1090,1086,1115,1059,1173,1207,1189,1080,1079,1081,1111,1076,1109,1116,1114,1096,1088,1099,1065,1083,1083,1083,1199,1201,1089,1192,1080,1104,1109,1164,1019,1082,1078,1086,1083,1093,1110,1108,1134,1108,1086,1083,1084,1115,1130,1098,1119,1052,1090,1099,1090,1097,1119,1138,1052,1114,1110,1117,1064,1091,1102,1118,1088,1110,1130,1091,1082,1108,1107,1108,1244,1061,1221,1084,1150,1102,1079,1086,1073,1205,1082,1190,1105,1082,1080,1129,1172,1086,1191,1192,1098,1074,1088,1083,1181,1192,1198,1131,1071,1080,1080,1082,1113,1083,1136,1126,1095,1084,1083,1079,1082,1084,1194,1196,1187,1144,1070,1080,1107,1107,1174,1085,1090,1205,1128,1082,1110,1139,1191,1113,1279,1057,1084,1085,1096,1097,1079,1109,1090,1235,1115,1105,1081,1080,1084,1197,1212,1216,1110,1090,1087,1084,1083,1199,1085,1214,1082,1082,1080,1115,1078,1083,1083,1081,1088,1095,1104,1090,1081,1083,1083,1086,1200,1194,1085,1168,1086,1084,1092,1113,1056,1083,1146,1079,1191,1114,1080,1080,1134,1086,1133,1202,1087,1082,1093,1098,1110,1190,1077,1085,1082,1080,1180,1010,1144,1112,1133,1131,1082,1154,1086,1174,1091,1106,1086,1081,1151,1201,1082,1079,1082,1089,1083,1080,1086,1118,1084,1084,1083,1076,1088,1120,1105,1083,1087,1079,1103,1113,1086,1196,1116,1053,1082,1107,1107,1084,1110,1201,1196,1194,1067,1100,1087,1156,1202,1151,1098,1060,1080,1070,1085,1085,1080,1193,1198,1195,1131,1079,1081,1092,1095,1084,1084,1176,1195,1119,1086,1083,1082,1083,1081,1211,1231,1089,1095,1083,1083,1199,1194,1191,1154,1072,1106,1108,1199,1117,1196,1203,1113,1143,1051,1103,1216,1195,1192,1074,1082,1081,1086,1159,1184,1216,1149,1077,1095,1085,1105,1083,1192,1191,1163,1081,1105,1113,1174,1220,1187,1097,1074,1089,1081,1178,1191,1188,1198,1070,1081,1109,1116,1083,1103,1112,1110,1132,1065,1085,1086,1081,1086,1078,1087,1081,1083,1083,1109,1108,1085,1088,1161,1131,1094,1084,1075,1092,1196,1092,1083,1084,1081,1086,1195,1156,1077,1086,1098,1082,1090,1082,1082,1085,1131,1188,1078,1204,1107,1085,1084,1084,1080,1105,1082,1089,1197,1116,1083,1107,1141,1194,1196,1191,1118,1107,1095,1087,1089,1079,1211,1211,1085,1082,1107,1148,1219,1198,1216,1122,1071,1111,1091,1087,1086,1088,1108,1087,1121,1083,1132,1083,1129,1101,1106,1088,1083,1099,1079,1083,1160,1099,1081,1085,1070,1086,1194,1198,1086,1127,1088,1101,1105,1088,1074,1090,1214,1079,1080,1079,1098,1137,1195,1212,1177,1092,1090,1089,1085,1086,1211,1133,1068,1144,1083,1086,1196,1160,1075,1190,1094,1087,1089,1090,1084,1083,1080,1080,1189,1196,1123,1079,1081,1083,1083,1120,1087,1095,1081,1083,1088,1086,1082,1085,1118,1065,1098,1116,1105,1084,1086,1105,1091,1097,1087,1083,1083,1086,1088,1083,1083,1083,1087,1083,1085,1086,1093,1156,1087,1087,1074,1094,1111,1063,1102,1087,1082,1117,1057,1085,1085,1086,1070,1117,1089,1062,1087,1090,864,229,1073,1088,1086,1085,1087,1082,1104,1093,1087,1093,1100,1088,1082,1083,1195,1189,1181,1037,1079,1083,1110,1120,1087,1082,1145,1112,1085,1100,1087,1082,1087,1187,1134,1085,1198,1098,1084,1087,1084,1088,1090,1082,1133,1191,1151,1072,1080,1112,1295,1088,1081,1082,1094,1087,1111,1102,1084,1133,1193,1185,1188,1075,1081,1085,1187,1083,1084,1085,1086,1112,1131,1088,1078,1083,1089,1115,1212,1193,1164,1082,1080,1086,1091,1083,1089,1098,1082,1083,1206,1066,1109,1112,1184,1166,1082,1081,1087,1082,1087,1112,1067,1082,1195,1184,1077,1194,1084,1076,1079,1081,1106,1087,1085,1080,1175,1076,1108,1086,1083,1083,1084,1081,1082,1085,1108,1145,1189,1087,1081,1081,1101,1082,1087,1191,1188,1116,1078,1081,1084,1084,1084,1082,1083,1087,1192,1113,1078,1082,1082,1112,1084,1082,1079,1077,1082,1192,1086,1081,1082,1080,1118,1082,1078,1199,1202,1066,1080,1083,1083,1085,1086,1083,1191,1083,1084,1097,1090,1070,1090,1070,1206,1195,1194,1112,1072,1081,1084,1085,1086,1090,1089,1082,1084,1083,1170,1089,1085,1084,1148,1185,1189,1145,1074,1107,1090,1115,1086,1085,1090,1076,1090,1193,1125,1111,1112,1161,1192,1178,1080,1109,1119,1105,1091,1081,1139,1192,1189,1096,1080,1082,1115,1275,1189,1087,1081,1099,1083,1087,1134,1134,1194,1205,1122,1074,1079,1083,1110,1228,1114,1134,1112,1079,1084,1083,1084,1112,1203,1198,1209,1084,1082,1086,1084,1084,1092,1092,1079,1086,1199,1078,1081,1086,1103,1111,1187,1205,1218,1116,1108,1115,1091,1096,1093,1201,1178,1076,1102,1108,1083,1086,1188,1186,1114,1056,1094,1088,1106,1113,1195,1085,1213,1123,1086,1085,1116,1082,1104,1081,1208,1094,1104,1085,1110,1159,1176,1233,1205,1085,1105,1135,1124,1112,1110,1203,1095,1111,1081,1085,1193,1206,1232,1154,1112,1130,1141,1088,1110,1109,1108,1133,1084,1105,1111,1149,1090,1179,1208,1092,1109,1084,1083,1082,1082,1196,1104,1081,1171,1105,1084,1137,1165,1091,1080,1184,1194,1076,1082,1082,1089,1091,1063,1174,1215,1208,1086,1081,1083,1105,1200,1194,1195,1079,1079,1124,1062,1079,1193,1083,1080,1083,1085,1107,1110,1081,1158,1090,1087,1085,1086,1095,1080,1114,1080,1085,1115,1142,1056,1148,1159,1226,1086,1106,1088,1114,1096,1090,1148,1200,1084,1085,1077,1081,1141,1090,1084,1189,1100,1095,1089,1099,1080,1089,1084,1082,1083,1189,1100,1087,1085,1084,1089,1080,1082,1087,1111,1075,1094,1204,1084,1082,1085,1178,1086,1082,1082,1081,1190,1091,1079,1100,1084,1087,1071,1086,1187,1211,1080,1078,1080,1083,1091,1084,1089,1084,1117,1086,1087,1155,1085,1085,1083,1142,1186,1085,1079,1140,1088,1087,1085,1099,1082,1086,1192,1193,1184,1069,1088,1085,1085,1185,1186,1200,1022,1082,1110,1086,1082,1090,1077,1083,1190,1196,1100,1082,1081,1078,1085,1086,1090,1107,1089,1086,1205,1084,1082,1078,1086,1083,1087,1083,1081,1081,1086,1088,1097,1095,1088,1083,1082,1200,1193,1194,1073,1081,1084,1079,1085,1082,1088,1088,1107,1058,1103,1083,1083,1088,1083,1085,1079,1150,1088,1193,1089,1081,1092,1100,1084,1082,1082,1080,1191,1200,1096,1084,1085,1086,1082,1082,1081,1161,1105,1087,1173,1086,1087,1081,1086,1116,1194,1200,1134,1084,1090,1086,1093,1109,1081,1078,1084,1082,1098,1085,1085,1083,1136,1108,1161,1194,1088,1085,1112,1083,1086,1085,1178,1191,1086,1188,1099,1080,1083,1085,1091,1082,1158,1091,1090,1081,1158,1081,1084,1082,1121,1182,1189,1150,1113,1091,1084,1096,1097,1082,1088,1070,1208,1168,1077,1078,1082,1082,1090,1081,1087,1087,1084,1112,1075,1084,1086,1083,1087,1081,1071,1084,1198,1190,1118,1085,1082,1080,1108,1098,1080,1075,1147,1152,1116,1085,1082,1081,1085,1082,1086,1091,1195,1111,1098,1089,1087,1085,1081,1088,1080,1083,1081,1086,1092,1083,1081,1081,1094,1095,1087,1084,1082,1070,1090,1085,1084,1083,1081,1086,1085,1087,1090,1086,1110,1091,1089,1093,1145,1084,1083,1083,1087,1188,1193,1192,1078,1082,1089,1105,1087,1068,1091,1079,1088,1207,1080,1078,1084,1083,1151,1079,1081,1082,1121,1111,1080,1084,1092,1087,1142,1082,1197,1194,1167,1055,1087,1088,1085,1101,1102,1083,1205,1092,1083,1081,1082,1083,1135,1081,1084,1085,1087,1211,1093,1091,1090,1091,1193,1191,1192,1134,1087,1082,1085,1079,1084,1089,1088,1091,1099,1085,1166,1080,1094,1085,1084,1168,1088,1147,1198,1088,1085,1083,1099,1096,1091,1081,1090,1084,1180,1113,1091,1080,1081,1084,1085,1084,1086,1093,1095,1088,1089,1085,1087,1084,1085,1083,1082,1082,1149,1198,1087,1084,1088,1108,1088,1088,1208,1172,1153,1080,1083,1081,1082,1189,1189,1081,1087,1087,1108,1092,1085,1084,1084,1084,1083,1151,1235,1054,1083,1082,1082,1089,1099,1102,1076,1145,1230,1051,1082,1082,1083,1086,1084,1086,1199,1095,1129,1057,1109,1088,1084,1079,1072,1090,1143,1084,1086,1092,1076,1086,1091,1089,1085,1118,1088,1088,1093,1102,1084,1085,1086,1091,1089,1086,1085,1087,1093,1093,1145,1066,1091,1091,1071,1076,1090,1089,1084,1071,1090,1085,1083,1086,1086,1102,1107,1091,1089,1086,1076,1086,1081,1086,1100,1068,1087,1082,1087,1089,1083,1128,1090,1086,1104,1085,1086,1087,1085,1085,1083,1084,1085,1087,1090,1083,1122,1096,1088,1087,1085,1083,1084,1086,1129,1199,1094,1072,1085,1093,1085,1092,1098,1081,1089,1086,1084,1084,1084,1085,1086,1098,1084,1091,1081,1070,1144,1137,1014,1081,1084,1080,1084,1085,1085,1083,1085,1194,1077,1083,1083,1082,1103,1100,1092,1093,1182,1212,1104,1077,1081,1083,1091,1194,1089,1191,1200,1099,1078,1091,1135,1086,1195,1215,1135,1085,1083,1083,1087,1089,1081,1249,1042,1084,1093,1087,1079,1082,1136,1195,1203,1194,1147,1164,1084,1084,1098,1133,1062,1085,1095,1087,1089,1088,1082,1085,1094,1091,1097,1087,1086,1207,1105,1080,1142,1149,1192,1193,1136,1079,1085,1082,1138,1083,1081,1192,1144,1104,1087,1084,1085,1113,1176,1184,1189,1092,1101,1080,1110,1089,1084,1122,1094,1091,1089,1150,1112,1112,1083,1193,1189,1148,1139,1083,1102,1114,1095,1084,1093,1079,1092,1206,1075,1103,1084,1113,1231,1199,1221,1072,1082,1093,1093,1092,1097,1201,1082,1200,1082,1081,1083,1133,1133,1145,1061,1194,1102,1097,1084,1085,1201,1199,1181,1139,1068,1081,1083,1107,1087,1197,1083,1098,1114,1077,1086,1090,1083,1129,1192,1188,1029,1088,1138,1089,1082,1108,1097,1090,1082,1068,1095,1081,1183,1198,1194,1161,1114,1128,1112,1108,1155,1095,1093,1071,1114,1059,1084,1073,1080,1110,1204,1192,1221,1091,1083,1084,1108,1088,1086,1086,1198,1106,1083,1079,1082,1083,1139,1212,1226,1108,1080,1141,1083,1078,1089,1084,1084,1192,1135,1190,1110,1083,1082,1080,1083,1195,1110,1086,1080,1072,1102,1137,1113,1156,1081,1193,1081,1192,1166,1080,1086,1109,1091,1085,1085,1081,1084,1085,1200,1073,1082,1085,1150,1083,1082,1191,1119,1071,1087,1088,1089,1192,1190,1082,1152,1077,1080,1084,1086,1089,1087,1106,1090,1089,1095,1075,1086,1256,1085,1080,1082,1085,1149,1086,1086,1197,1108,1088,1083,1085,1068,1173,1188,1183,1188,1076,1080,1088,1083,1085,1085,1098,1090,1087,1199,1187,1188,1118,1070,1081,1077,1081,1106,1115,1061,1208,1102,1084,1083,1085,1094,1163,1115,1186,1184,1085,1079,1082,1089,1112,1092,1107,1082,1076,1215,1105,1193,1211,1084,1083,1084,1083,1089,1086,1109,1211,1125,1074,1087,1087,1181,1190,1077,1112,1109,1082,1184,1112,1117,1089,1209,1097,1087,1083,1141,1149,1201,1111,1081,1086,1080,1139,1088,1111,1108,1190,1113,1084,1083,1070,1140,1191,1217,1206,1083,1082,1084,1083,1084,1088,1118,1100,1087,1090,1087,1082,1082,1085,1085,1138,1193,1209,1089,1083,1085,1164,1088,1084,1079,1083,1195,1141,1083,1079,1082,1081,1177,1196,1088,1086,1085,1104,1088,1089,1083,1106,1105,1093,1091,1106,1090,1080,1088,1103,1092,1088,1112,1093,1090,1082,1090,1109,1084,1057,1100,1064,1104,1058,1089,1085,1082,1098,1098,1114,1136,1205,1198,1054,1076,1145,1083,1212,1199,1110,1054,1082,1104,1083,1088,1172,1135,1157,1187,1185,1049,1079,1080,1087,1090,1084,1203,1106,1105,1057,1087,1083,1083,1085,1093,1084,1079,1084,1091,1086,1084,1092,1079,1082,1120,1090,1104,1081,1084,1084,1081,1104,1083,1085,1092,1084,1095,1090,1121,1098,1097,1082,1081,1096,1076],"$vscode":{"rootPath":"/home/kadajett/dev/Quick_3D_MMORPG","locations":[{"callFrame":{"functionName":"(root)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":484,"columnNumber":24},"locations":[{"lineNumber":485,"columnNumber":25,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":484,"columnNumber":0},"locations":[{"lineNumber":485,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":485,"columnNumber":0},"locations":[{"lineNumber":486,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":486,"columnNumber":0},"locations":[{"lineNumber":487,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":499,"columnNumber":0},"locations":[{"lineNumber":500,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":500,"columnNumber":0},"locations":[{"lineNumber":501,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":490,"columnNumber":0},"locations":[{"lineNumber":491,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTimers","scriptId":"57","url":"node:internal/timers","lineNumber":491,"columnNumber":0},"locations":[{"lineNumber":492,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":504,"columnNumber":24},"locations":[{"lineNumber":505,"columnNumber":25,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":554,"columnNumber":0},"locations":[{"lineNumber":555,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":555,"columnNumber":0},"locations":[{"lineNumber":556,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":237,"columnNumber":0},"locations":[{"lineNumber":238,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":238,"columnNumber":0},"locations":[{"lineNumber":239,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":511,"columnNumber":0},"locations":[{"lineNumber":512,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":512,"columnNumber":0},"locations":[{"lineNumber":513,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":556,"columnNumber":0},"locations":[{"lineNumber":557,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listOnTimeout","scriptId":"57","url":"node:internal/timers","lineNumber":557,"columnNumber":0},"locations":[{"lineNumber":558,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":73,"columnNumber":19},"locations":[{"lineNumber":74,"columnNumber":20,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":169,"columnNumber":0},"locations":[{"lineNumber":170,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":170,"columnNumber":0},"locations":[{"lineNumber":171,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":75,"columnNumber":0},"locations":[{"lineNumber":76,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":76,"columnNumber":0},"locations":[{"lineNumber":77,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":74,"columnNumber":0},"locations":[{"lineNumber":75,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"Update_","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":79,"columnNumber":11},"locations":[{"lineNumber":80,"columnNumber":12,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"Update","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":98,"columnNumber":10},"locations":[{"lineNumber":99,"columnNumber":11,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"Update","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":103,"columnNumber":0},"locations":[{"lineNumber":104,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"Update","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":104,"columnNumber":0},"locations":[{"lineNumber":105,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"TickClientState_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":106,"columnNumber":20},"locations":[{"lineNumber":107,"columnNumber":21,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"TickClientState_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":114,"columnNumber":0},"locations":[{"lineNumber":115,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"TickClientState_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":115,"columnNumber":0},"locations":[{"lineNumber":116,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateClientState_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":97,"columnNumber":22},"locations":[{"lineNumber":98,"columnNumber":23,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateClientState_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":98,"columnNumber":0},"locations":[{"lineNumber":99,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateClientState_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":99,"columnNumber":0},"locations":[{"lineNumber":100,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"OnUpdateClientState_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":115,"columnNumber":24},"locations":[{"lineNumber":116,"columnNumber":25,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"OnUpdateClientState_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":125,"columnNumber":0},"locations":[{"lineNumber":126,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"OnUpdateClientState_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":126,"columnNumber":0},"locations":[{"lineNumber":127,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"Send","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":45,"columnNumber":8},"locations":[{"lineNumber":46,"columnNumber":9,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"emit","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":79,"columnNumber":8},"locations":[{"lineNumber":80,"columnNumber":9,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"packet","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":156,"columnNumber":10},"locations":[{"lineNumber":157,"columnNumber":11,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"_packet","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":152,"columnNumber":11},"locations":[{"lineNumber":153,"columnNumber":12,"source":{"name":"node_modules/socket.io/dist/client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","sourceReference":0}}]},{"callFrame":{"functionName":"writeToEngine","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":156,"columnNumber":30},"locations":[{"lineNumber":157,"columnNumber":31,"source":{"name":"node_modules/socket.io/dist/client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","sourceReference":0}}]},{"callFrame":{"functionName":"write","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":399,"columnNumber":7},"locations":[{"lineNumber":400,"columnNumber":8,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"sendPacket","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":412,"columnNumber":12},"locations":[{"lineNumber":413,"columnNumber":13,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"flush","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":447,"columnNumber":7},"locations":[{"lineNumber":448,"columnNumber":8,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"send","scriptId":"194","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","lineNumber":67,"columnNumber":6},"locations":[{"lineNumber":68,"columnNumber":7,"source":{"name":"node_modules/engine.io/lib/transports/websocket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","sourceReference":0}}]},{"callFrame":{"functionName":"encodePacket","scriptId":"179","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io-parser/lib/encodePacket.js","lineNumber":2,"columnNumber":21},"locations":[{"lineNumber":3,"columnNumber":22,"source":{"name":"node_modules/engine.io-parser/lib/encodePacket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io-parser/lib/encodePacket.js","sourceReference":0}}]},{"callFrame":{"functionName":"send","scriptId":"194","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","lineNumber":75,"columnNumber":17},"locations":[{"lineNumber":76,"columnNumber":18,"source":{"name":"node_modules/engine.io/lib/transports/websocket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","sourceReference":0}}]},{"callFrame":{"functionName":"send","scriptId":"198","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","lineNumber":331,"columnNumber":6},"locations":[{"lineNumber":332,"columnNumber":7,"source":{"name":"node_modules/ws/lib/websocket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","sourceReference":0}}]},{"callFrame":{"functionName":"send","scriptId":"213","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/sender.js","lineNumber":259,"columnNumber":6},"locations":[{"lineNumber":260,"columnNumber":7,"source":{"name":"node_modules/ws/lib/sender.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/sender.js","sourceReference":0}}]},{"callFrame":{"functionName":"toBuffer","scriptId":"208","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","lineNumber":84,"columnNumber":17},"locations":[{"lineNumber":85,"columnNumber":18,"source":{"name":"node_modules/ws/lib/buffer-util.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","sourceReference":0}}]},{"callFrame":{"functionName":"from","scriptId":"18","url":"node:buffer","lineNumber":295,"columnNumber":27},"locations":[{"lineNumber":296,"columnNumber":28,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"fromString","scriptId":"18","url":"node:buffer","lineNumber":431,"columnNumber":19},"locations":[{"lineNumber":432,"columnNumber":20,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"fromString","scriptId":"18","url":"node:buffer","lineNumber":432,"columnNumber":0},"locations":[{"lineNumber":433,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"fromString","scriptId":"18","url":"node:buffer","lineNumber":433,"columnNumber":0},"locations":[{"lineNumber":434,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"FindNear","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":212,"columnNumber":12},"locations":[{"lineNumber":213,"columnNumber":13,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"FindNear","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":214,"columnNumber":0},"locations":[{"lineNumber":215,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"FindNear","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":215,"columnNumber":0},"locations":[{"lineNumber":216,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"_Filter","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":215,"columnNumber":28},"locations":[{"lineNumber":216,"columnNumber":29,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"_Filter","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":216,"columnNumber":0},"locations":[{"lineNumber":217,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"_Filter","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":217,"columnNumber":0},"locations":[{"lineNumber":218,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid.FindNear","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":52,"columnNumber":50},"locations":[{"lineNumber":53,"columnNumber":51,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid.FindNear","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":61,"columnNumber":0},"locations":[{"lineNumber":62,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid.FindNear","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":62,"columnNumber":0},"locations":[{"lineNumber":63,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":127,"columnNumber":19},"locations":[{"lineNumber":128,"columnNumber":20,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":133,"columnNumber":0},"locations":[{"lineNumber":134,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":134,"columnNumber":0},"locations":[{"lineNumber":135,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":209,"columnNumber":0},"locations":[{"lineNumber":210,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":210,"columnNumber":0},"locations":[{"lineNumber":211,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":11,"columnNumber":0},"locations":[{"lineNumber":12,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":12,"columnNumber":0},"locations":[{"lineNumber":13,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":8,"columnNumber":0},"locations":[{"lineNumber":9,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":9,"columnNumber":0},"locations":[{"lineNumber":10,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":1,"columnNumber":0},"locations":[{"lineNumber":2,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":2,"columnNumber":0},"locations":[{"lineNumber":3,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":131,"columnNumber":0},"locations":[{"lineNumber":132,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":132,"columnNumber":0},"locations":[{"lineNumber":133,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":102,"columnNumber":0},"locations":[{"lineNumber":103,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":103,"columnNumber":0},"locations":[{"lineNumber":104,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":4,"columnNumber":0},"locations":[{"lineNumber":5,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":5,"columnNumber":0},"locations":[{"lineNumber":6,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":101,"columnNumber":0},"locations":[{"lineNumber":102,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":130,"columnNumber":0},"locations":[{"lineNumber":131,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":208,"columnNumber":0},"locations":[{"lineNumber":209,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":198,"columnNumber":0},"locations":[{"lineNumber":199,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":199,"columnNumber":0},"locations":[{"lineNumber":200,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":169,"columnNumber":0},"locations":[{"lineNumber":170,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":170,"columnNumber":0},"locations":[{"lineNumber":171,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":284,"columnNumber":0},"locations":[{"lineNumber":285,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":285,"columnNumber":0},"locations":[{"lineNumber":286,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":226,"columnNumber":0},"locations":[{"lineNumber":227,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":227,"columnNumber":0},"locations":[{"lineNumber":228,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":104,"columnNumber":0},"locations":[{"lineNumber":105,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":171,"columnNumber":0},"locations":[{"lineNumber":172,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":228,"columnNumber":0},"locations":[{"lineNumber":229,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":229,"columnNumber":0},"locations":[{"lineNumber":230,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":283,"columnNumber":0},"locations":[{"lineNumber":284,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":196,"columnNumber":0},"locations":[{"lineNumber":197,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":197,"columnNumber":0},"locations":[{"lineNumber":198,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":138,"columnNumber":0},"locations":[{"lineNumber":139,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateEntities_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":139,"columnNumber":0},"locations":[{"lineNumber":140,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"Update","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":100,"columnNumber":10},"locations":[{"lineNumber":101,"columnNumber":11,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldSet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":0,"columnNumber":79},"locations":[{"lineNumber":1,"columnNumber":80,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldSet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":1,"columnNumber":0},"locations":[{"lineNumber":2,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldSet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":2,"columnNumber":0},"locations":[{"lineNumber":3,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldSet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":4,"columnNumber":0},"locations":[{"lineNumber":5,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldSet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":5,"columnNumber":0},"locations":[{"lineNumber":6,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldGet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":7,"columnNumber":79},"locations":[{"lineNumber":8,"columnNumber":80,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldGet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":11,"columnNumber":0},"locations":[{"lineNumber":12,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldGet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":12,"columnNumber":0},"locations":[{"lineNumber":13,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldGet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":8,"columnNumber":0},"locations":[{"lineNumber":9,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"__classPrivateFieldGet","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":9,"columnNumber":0},"locations":[{"lineNumber":10,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateSpawners_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":122,"columnNumber":19},"locations":[{"lineNumber":123,"columnNumber":20,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateSpawners_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":36,"columnNumber":0},"locations":[{"lineNumber":37,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateSpawners_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":37,"columnNumber":0},"locations":[{"lineNumber":38,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"now","scriptId":"138","url":"node:perf_hooks","lineNumber":435,"columnNumber":5},"locations":[{"lineNumber":436,"columnNumber":6,"source":{"name":"perf_hooks","path":"perf_hooks","sourceReference":236194351,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"now","scriptId":"138","url":"node:perf_hooks","lineNumber":168,"columnNumber":12},"locations":[{"lineNumber":169,"columnNumber":13,"source":{"name":"perf_hooks","path":"perf_hooks","sourceReference":236194351,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"hrtime","scriptId":"22","url":"node:internal/process/per_thread","lineNumber":57,"columnNumber":17},"locations":[{"lineNumber":58,"columnNumber":18,"source":{"name":"internal/process/per_thread","path":"internal/process/per_thread","sourceReference":597182789,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"hrtime","scriptId":"22","url":"node:internal/process/per_thread","lineNumber":74,"columnNumber":0},"locations":[{"lineNumber":75,"columnNumber":1,"source":{"name":"internal/process/per_thread","path":"internal/process/per_thread","sourceReference":597182789,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"hrtime","scriptId":"22","url":"node:internal/process/per_thread","lineNumber":75,"columnNumber":0},"locations":[{"lineNumber":76,"columnNumber":1,"source":{"name":"internal/process/per_thread","path":"internal/process/per_thread","sourceReference":597182789,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"hrtime","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"hrtime","scriptId":"0","url":"","lineNumber":58,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"hrtime","scriptId":"0","url":"","lineNumber":59,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"Schedule_","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":72,"columnNumber":13},"locations":[{"lineNumber":73,"columnNumber":14,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"setTimeout","scriptId":"55","url":"node:timers","lineNumber":133,"columnNumber":19},"locations":[{"lineNumber":134,"columnNumber":20,"source":{"name":"timers","path":"timers","sourceReference":63821857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"insert","scriptId":"57","url":"node:internal/timers","lineNumber":349,"columnNumber":15},"locations":[{"lineNumber":350,"columnNumber":16,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"getLibuvNow","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"getLibuvNow","scriptId":"0","url":"","lineNumber":349,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"getLibuvNow","scriptId":"0","url":"","lineNumber":350,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":148,"columnNumber":40},"locations":[{"lineNumber":149,"columnNumber":41,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"resetPingTimeout","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":163,"columnNumber":18},"locations":[{"lineNumber":164,"columnNumber":19,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"peek","scriptId":"56","url":"node:internal/linkedlist","lineNumber":8,"columnNumber":13},"locations":[{"lineNumber":9,"columnNumber":14,"source":{"name":"internal/linkedlist","path":"internal/linkedlist","sourceReference":628905440,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"peek","scriptId":"56","url":"node:internal/linkedlist","lineNumber":9,"columnNumber":0},"locations":[{"lineNumber":10,"columnNumber":1,"source":{"name":"internal/linkedlist","path":"internal/linkedlist","sourceReference":628905440,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"peek","scriptId":"56","url":"node:internal/linkedlist","lineNumber":10,"columnNumber":0},"locations":[{"lineNumber":11,"columnNumber":1,"source":{"name":"internal/linkedlist","path":"internal/linkedlist","sourceReference":628905440,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitBeforeScript","scriptId":"23","url":"node:internal/async_hooks","lineNumber":471,"columnNumber":25},"locations":[{"lineNumber":472,"columnNumber":26,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitBeforeScript","scriptId":"23","url":"node:internal/async_hooks","lineNumber":472,"columnNumber":0},"locations":[{"lineNumber":473,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitBeforeScript","scriptId":"23","url":"node:internal/async_hooks","lineNumber":473,"columnNumber":0},"locations":[{"lineNumber":474,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"TickClientState_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":106,"columnNumber":0},"locations":[{"lineNumber":107,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"TickClientState_","scriptId":"142","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","lineNumber":107,"columnNumber":0},"locations":[{"lineNumber":108,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-manager.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-manager.js","sourceReference":0}}]},{"callFrame":{"functionName":"peek","scriptId":"58","url":"node:internal/priority_queue","lineNumber":44,"columnNumber":6},"locations":[{"lineNumber":45,"columnNumber":7,"source":{"name":"internal/priority_queue","path":"internal/priority_queue","sourceReference":1938215230,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"peek","scriptId":"58","url":"node:internal/priority_queue","lineNumber":45,"columnNumber":0},"locations":[{"lineNumber":46,"columnNumber":1,"source":{"name":"internal/priority_queue","path":"internal/priority_queue","sourceReference":1938215230,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"peek","scriptId":"58","url":"node:internal/priority_queue","lineNumber":46,"columnNumber":0},"locations":[{"lineNumber":47,"columnNumber":1,"source":{"name":"internal/priority_queue","path":"internal/priority_queue","sourceReference":1938215230,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"pushAsyncContext","scriptId":"23","url":"node:internal/async_hooks","lineNumber":501,"columnNumber":25},"locations":[{"lineNumber":502,"columnNumber":26,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"pushAsyncContext","scriptId":"23","url":"node:internal/async_hooks","lineNumber":501,"columnNumber":0},"locations":[{"lineNumber":502,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"pushAsyncContext","scriptId":"23","url":"node:internal/async_hooks","lineNumber":502,"columnNumber":0},"locations":[{"lineNumber":503,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTicksAndRejections","scriptId":"24","url":"node:internal/process/task_queues","lineNumber":65,"columnNumber":34},"locations":[{"lineNumber":66,"columnNumber":35,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTicksAndRejections","scriptId":"24","url":"node:internal/process/task_queues","lineNumber":525,"columnNumber":0},"locations":[{"lineNumber":526,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"processTicksAndRejections","scriptId":"24","url":"node:internal/process/task_queues","lineNumber":526,"columnNumber":0},"locations":[{"lineNumber":527,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"runMicrotasks","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":211,"columnNumber":42},"locations":[{"lineNumber":212,"columnNumber":43,"source":{"name":"node_modules/socket.io/dist/client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","sourceReference":0}}]},{"callFrame":{"functionName":"_onpacket","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":215,"columnNumber":13},"locations":[{"lineNumber":216,"columnNumber":14,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"_onpacket","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":219,"columnNumber":0},"locations":[{"lineNumber":220,"columnNumber":1,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"_onpacket","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":220,"columnNumber":0},"locations":[{"lineNumber":221,"columnNumber":1,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"onevent","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":243,"columnNumber":11},"locations":[{"lineNumber":244,"columnNumber":12,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"136","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","lineNumber":29,"columnNumber":130},"locations":[{"lineNumber":30,"columnNumber":131,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-server.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-server.js","sourceReference":0}}]},{"callFrame":{"functionName":"WorldClient.client.onMessage","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":26,"columnNumber":32},"locations":[{"lineNumber":27,"columnNumber":33,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"OnMessage_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":48,"columnNumber":14},"locations":[{"lineNumber":49,"columnNumber":15,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"OnMessage_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":51,"columnNumber":0},"locations":[{"lineNumber":52,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"OnMessage_","scriptId":"140","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","lineNumber":52,"columnNumber":0},"locations":[{"lineNumber":53,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-client.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateTransform","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":116,"columnNumber":19},"locations":[{"lineNumber":117,"columnNumber":20,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateTransform","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":125,"columnNumber":0},"locations":[{"lineNumber":126,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateTransform","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":126,"columnNumber":0},"locations":[{"lineNumber":127,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateTransform","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":118,"columnNumber":0},"locations":[{"lineNumber":119,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateTransform","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":119,"columnNumber":0},"locations":[{"lineNumber":120,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateGridClient_","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":128,"columnNumber":21},"locations":[{"lineNumber":129,"columnNumber":22,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateGridClient_","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":129,"columnNumber":0},"locations":[{"lineNumber":130,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"UpdateGridClient_","scriptId":"144","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","lineNumber":130,"columnNumber":0},"locations":[{"lineNumber":131,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-server/dist/scripts/world-entity.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-server/dist/scripts/world-entity.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid.UpdateClient","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":38,"columnNumber":54},"locations":[{"lineNumber":39,"columnNumber":55,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid._Insert","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":74,"columnNumber":49},"locations":[{"lineNumber":75,"columnNumber":50,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid._Insert","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":79,"columnNumber":0},"locations":[{"lineNumber":80,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid._Insert","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":80,"columnNumber":0},"locations":[{"lineNumber":81,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid._Insert","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":90,"columnNumber":0},"locations":[{"lineNumber":91,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid._Insert","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":91,"columnNumber":0},"locations":[{"lineNumber":92,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid._Insert","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":22,"columnNumber":0},"locations":[{"lineNumber":23,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"SpatialHashGrid._Insert","scriptId":"242","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","lineNumber":23,"columnNumber":0},"locations":[{"lineNumber":24,"columnNumber":1,"source":{"name":"packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/packages/quick-3d-mmo-shared/dist/spatial-hash-grid.js","sourceReference":0}}]},{"callFrame":{"functionName":"dispatch","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":419,"columnNumber":12},"locations":[{"lineNumber":420,"columnNumber":13,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"dispatch","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":420,"columnNumber":0},"locations":[{"lineNumber":421,"columnNumber":1,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"dispatch","scriptId":"232","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","lineNumber":421,"columnNumber":0},"locations":[{"lineNumber":422,"columnNumber":1,"source":{"name":"node_modules/socket.io/dist/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"debug","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":63,"columnNumber":16},"locations":[{"lineNumber":64,"columnNumber":17,"source":{"name":"node_modules/socket.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"debug","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":65,"columnNumber":0},"locations":[{"lineNumber":66,"columnNumber":1,"source":{"name":"node_modules/socket.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"debug","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":66,"columnNumber":0},"locations":[{"lineNumber":67,"columnNumber":1,"source":{"name":"node_modules/socket.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"get","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":122,"columnNumber":8},"locations":[{"lineNumber":123,"columnNumber":9,"source":{"name":"node_modules/socket.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"enabled","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":197,"columnNumber":17},"locations":[{"lineNumber":198,"columnNumber":18,"source":{"name":"node_modules/socket.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"enabled","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":198,"columnNumber":0},"locations":[{"lineNumber":199,"columnNumber":1,"source":{"name":"node_modules/socket.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"enabled","scriptId":"229","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","lineNumber":199,"columnNumber":0},"locations":[{"lineNumber":200,"columnNumber":1,"source":{"name":"node_modules/socket.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"afterWriteTick","scriptId":"51","url":"node:internal/streams/writable","lineNumber":487,"columnNumber":23},"locations":[{"lineNumber":488,"columnNumber":24,"source":{"name":"internal/streams/writable","path":"internal/streams/writable","sourceReference":1863443349,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"afterWrite","scriptId":"51","url":"node:internal/streams/writable","lineNumber":492,"columnNumber":19},"locations":[{"lineNumber":493,"columnNumber":20,"source":{"name":"internal/streams/writable","path":"internal/streams/writable","sourceReference":1863443349,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"afterWrite","scriptId":"51","url":"node:internal/streams/writable","lineNumber":493,"columnNumber":0},"locations":[{"lineNumber":494,"columnNumber":1,"source":{"name":"internal/streams/writable","path":"internal/streams/writable","sourceReference":1863443349,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"afterWrite","scriptId":"51","url":"node:internal/streams/writable","lineNumber":494,"columnNumber":0},"locations":[{"lineNumber":495,"columnNumber":1,"source":{"name":"internal/streams/writable","path":"internal/streams/writable","sourceReference":1863443349,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"onStreamRead","scriptId":"66","url":"node:internal/stream_base_commons","lineNumber":166,"columnNumber":21},"locations":[{"lineNumber":167,"columnNumber":22,"source":{"name":"internal/stream_base_commons","path":"internal/stream_base_commons","sourceReference":733809357,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"onStreamRead","scriptId":"66","url":"node:internal/stream_base_commons","lineNumber":167,"columnNumber":0},"locations":[{"lineNumber":168,"columnNumber":1,"source":{"name":"internal/stream_base_commons","path":"internal/stream_base_commons","sourceReference":733809357,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"onStreamRead","scriptId":"66","url":"node:internal/stream_base_commons","lineNumber":168,"columnNumber":0},"locations":[{"lineNumber":169,"columnNumber":1,"source":{"name":"internal/stream_base_commons","path":"internal/stream_base_commons","sourceReference":733809357,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"onStreamRead","scriptId":"66","url":"node:internal/stream_base_commons","lineNumber":172,"columnNumber":0},"locations":[{"lineNumber":173,"columnNumber":1,"source":{"name":"internal/stream_base_commons","path":"internal/stream_base_commons","sourceReference":733809357,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"onStreamRead","scriptId":"66","url":"node:internal/stream_base_commons","lineNumber":173,"columnNumber":0},"locations":[{"lineNumber":174,"columnNumber":1,"source":{"name":"internal/stream_base_commons","path":"internal/stream_base_commons","sourceReference":733809357,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.push","scriptId":"47","url":"node:internal/streams/readable","lineNumber":225,"columnNumber":34},"locations":[{"lineNumber":226,"columnNumber":35,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"47","url":"node:internal/streams/readable","lineNumber":234,"columnNumber":25},"locations":[{"lineNumber":235,"columnNumber":26,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"47","url":"node:internal/streams/readable","lineNumber":252,"columnNumber":0},"locations":[{"lineNumber":253,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"47","url":"node:internal/streams/readable","lineNumber":253,"columnNumber":0},"locations":[{"lineNumber":254,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"addChunk","scriptId":"47","url":"node:internal/streams/readable","lineNumber":302,"columnNumber":17},"locations":[{"lineNumber":303,"columnNumber":18,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":326,"columnNumber":43},"locations":[{"lineNumber":327,"columnNumber":44,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"socketOnData","scriptId":"198","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","lineNumber":898,"columnNumber":21},"locations":[{"lineNumber":899,"columnNumber":22,"source":{"name":"node_modules/ws/lib/websocket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","sourceReference":0}}]},{"callFrame":{"functionName":"Writable.write","scriptId":"51","url":"node:internal/streams/writable","lineNumber":292,"columnNumber":35},"locations":[{"lineNumber":293,"columnNumber":36,"source":{"name":"internal/streams/writable","path":"internal/streams/writable","sourceReference":1863443349,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Writable.write","scriptId":"51","url":"node:internal/streams/writable","lineNumber":315,"columnNumber":0},"locations":[{"lineNumber":316,"columnNumber":1,"source":{"name":"internal/streams/writable","path":"internal/streams/writable","sourceReference":1863443349,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Writable.write","scriptId":"51","url":"node:internal/streams/writable","lineNumber":316,"columnNumber":0},"locations":[{"lineNumber":317,"columnNumber":1,"source":{"name":"internal/streams/writable","path":"internal/streams/writable","sourceReference":1863443349,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"writeOrBuffer","scriptId":"51","url":"node:internal/streams/writable","lineNumber":370,"columnNumber":22},"locations":[{"lineNumber":371,"columnNumber":23,"source":{"name":"internal/streams/writable","path":"internal/streams/writable","sourceReference":1863443349,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"_write","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":72,"columnNumber":8},"locations":[{"lineNumber":73,"columnNumber":9,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"startLoop","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":123,"columnNumber":11},"locations":[{"lineNumber":124,"columnNumber":12,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"startLoop","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":130,"columnNumber":0},"locations":[{"lineNumber":131,"columnNumber":1,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"startLoop","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":131,"columnNumber":0},"locations":[{"lineNumber":132,"columnNumber":1,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"getData","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":336,"columnNumber":9},"locations":[{"lineNumber":337,"columnNumber":10,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"getData","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":346,"columnNumber":0},"locations":[{"lineNumber":347,"columnNumber":1,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"getData","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":347,"columnNumber":0},"locations":[{"lineNumber":348,"columnNumber":1,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"dataMessage","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":406,"columnNumber":13},"locations":[{"lineNumber":407,"columnNumber":14,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"toString","scriptId":"18","url":"node:buffer","lineNumber":782,"columnNumber":45},"locations":[{"lineNumber":783,"columnNumber":46,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"toString","scriptId":"18","url":"node:buffer","lineNumber":782,"columnNumber":0},"locations":[{"lineNumber":783,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"toString","scriptId":"18","url":"node:buffer","lineNumber":783,"columnNumber":0},"locations":[{"lineNumber":784,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"utf8Slice","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"utf8Slice","scriptId":"0","url":"","lineNumber":784,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"utf8Slice","scriptId":"0","url":"","lineNumber":785,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"receiverOnMessage","scriptId":"198","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","lineNumber":823,"columnNumber":26},"locations":[{"lineNumber":824,"columnNumber":27,"source":{"name":"node_modules/ws/lib/websocket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","sourceReference":0}}]},{"callFrame":{"functionName":"receiverOnMessage","scriptId":"198","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","lineNumber":824,"columnNumber":0},"locations":[{"lineNumber":825,"columnNumber":1,"source":{"name":"node_modules/ws/lib/websocket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","sourceReference":0}}]},{"callFrame":{"functionName":"receiverOnMessage","scriptId":"198","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","lineNumber":825,"columnNumber":0},"locations":[{"lineNumber":826,"columnNumber":1,"source":{"name":"node_modules/ws/lib/websocket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/websocket.js","sourceReference":0}}]},{"callFrame":{"functionName":"onData","scriptId":"194","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","lineNumber":56,"columnNumber":8},"locations":[{"lineNumber":57,"columnNumber":9,"source":{"name":"node_modules/engine.io/lib/transports/websocket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transports/websocket.js","sourceReference":0}}]},{"callFrame":{"functionName":"onData","scriptId":"177","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","lineNumber":94,"columnNumber":8},"locations":[{"lineNumber":95,"columnNumber":9,"source":{"name":"node_modules/engine.io/lib/transport.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","sourceReference":0}}]},{"callFrame":{"functionName":"onData","scriptId":"177","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","lineNumber":95,"columnNumber":0},"locations":[{"lineNumber":96,"columnNumber":1,"source":{"name":"node_modules/engine.io/lib/transport.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","sourceReference":0}}]},{"callFrame":{"functionName":"onData","scriptId":"177","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","lineNumber":96,"columnNumber":0},"locations":[{"lineNumber":97,"columnNumber":1,"source":{"name":"node_modules/engine.io/lib/transport.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","sourceReference":0}}]},{"callFrame":{"functionName":"onPacket","scriptId":"177","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","lineNumber":84,"columnNumber":10},"locations":[{"lineNumber":85,"columnNumber":11,"source":{"name":"node_modules/engine.io/lib/transport.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/transport.js","sourceReference":0}}]},{"callFrame":{"functionName":"onPacket","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":82,"columnNumber":10},"locations":[{"lineNumber":83,"columnNumber":11,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"onPacket","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":91,"columnNumber":0},"locations":[{"lineNumber":92,"columnNumber":1,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"onPacket","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":92,"columnNumber":0},"locations":[{"lineNumber":93,"columnNumber":1,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"onPacket","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":111,"columnNumber":0},"locations":[{"lineNumber":112,"columnNumber":1,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"onPacket","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":112,"columnNumber":0},"locations":[{"lineNumber":113,"columnNumber":1,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"debug","scriptId":"191","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/node_modules/debug/src/common.js","lineNumber":63,"columnNumber":16},"locations":[{"lineNumber":64,"columnNumber":17,"source":{"name":"node_modules/engine.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"debug","scriptId":"191","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/node_modules/debug/src/common.js","lineNumber":63,"columnNumber":0},"locations":[{"lineNumber":64,"columnNumber":1,"source":{"name":"node_modules/engine.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"debug","scriptId":"191","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/node_modules/debug/src/common.js","lineNumber":64,"columnNumber":0},"locations":[{"lineNumber":65,"columnNumber":1,"source":{"name":"node_modules/engine.io/node_modules/debug/src/common.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/node_modules/debug/src/common.js","sourceReference":0}}]},{"callFrame":{"functionName":"resetPingTimeout","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":165,"columnNumber":0},"locations":[{"lineNumber":166,"columnNumber":1,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"resetPingTimeout","scriptId":"195","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","lineNumber":166,"columnNumber":0},"locations":[{"lineNumber":167,"columnNumber":1,"source":{"name":"node_modules/engine.io/lib/socket.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/engine.io/lib/socket.js","sourceReference":0}}]},{"callFrame":{"functionName":"clearTimeout","scriptId":"55","url":"node:timers","lineNumber":172,"columnNumber":21},"locations":[{"lineNumber":173,"columnNumber":22,"source":{"name":"timers","path":"timers","sourceReference":63821857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"clearTimeout","scriptId":"55","url":"node:timers","lineNumber":173,"columnNumber":0},"locations":[{"lineNumber":174,"columnNumber":1,"source":{"name":"timers","path":"timers","sourceReference":63821857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"clearTimeout","scriptId":"55","url":"node:timers","lineNumber":174,"columnNumber":0},"locations":[{"lineNumber":175,"columnNumber":1,"source":{"name":"timers","path":"timers","sourceReference":63821857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"clearTimeout","scriptId":"55","url":"node:timers","lineNumber":175,"columnNumber":0},"locations":[{"lineNumber":176,"columnNumber":1,"source":{"name":"timers","path":"timers","sourceReference":63821857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"clearTimeout","scriptId":"55","url":"node:timers","lineNumber":176,"columnNumber":0},"locations":[{"lineNumber":177,"columnNumber":1,"source":{"name":"timers","path":"timers","sourceReference":63821857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"setTimeout","scriptId":"55","url":"node:timers","lineNumber":158,"columnNumber":0},"locations":[{"lineNumber":159,"columnNumber":1,"source":{"name":"timers","path":"timers","sourceReference":63821857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"setTimeout","scriptId":"55","url":"node:timers","lineNumber":159,"columnNumber":0},"locations":[{"lineNumber":160,"columnNumber":1,"source":{"name":"timers","path":"timers","sourceReference":63821857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"insert","scriptId":"57","url":"node:internal/timers","lineNumber":359,"columnNumber":0},"locations":[{"lineNumber":360,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"insert","scriptId":"57","url":"node:internal/timers","lineNumber":360,"columnNumber":0},"locations":[{"lineNumber":361,"columnNumber":1,"source":{"name":"internal/timers","path":"internal/timers","sourceReference":1346664857,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"remove","scriptId":"56","url":"node:internal/linkedlist","lineNumber":14,"columnNumber":15},"locations":[{"lineNumber":15,"columnNumber":16,"source":{"name":"internal/linkedlist","path":"internal/linkedlist","sourceReference":628905440,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"remove","scriptId":"56","url":"node:internal/linkedlist","lineNumber":14,"columnNumber":0},"locations":[{"lineNumber":15,"columnNumber":1,"source":{"name":"internal/linkedlist","path":"internal/linkedlist","sourceReference":628905440,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"remove","scriptId":"56","url":"node:internal/linkedlist","lineNumber":15,"columnNumber":0},"locations":[{"lineNumber":16,"columnNumber":1,"source":{"name":"internal/linkedlist","path":"internal/linkedlist","sourceReference":628905440,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":371,"columnNumber":0},"locations":[{"lineNumber":372,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":372,"columnNumber":0},"locations":[{"lineNumber":373,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"ondata","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":184,"columnNumber":10},"locations":[{"lineNumber":185,"columnNumber":11,"source":{"name":"node_modules/socket.io/dist/client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","sourceReference":0}}]},{"callFrame":{"functionName":"add","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":101,"columnNumber":7},"locations":[{"lineNumber":102,"columnNumber":8,"source":{"name":"node_modules/socket.io-parser/dist/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"add","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":116,"columnNumber":0},"locations":[{"lineNumber":117,"columnNumber":1,"source":{"name":"node_modules/socket.io-parser/dist/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"add","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":117,"columnNumber":0},"locations":[{"lineNumber":118,"columnNumber":1,"source":{"name":"node_modules/socket.io-parser/dist/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"Emitter.emit","scriptId":"220","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/component-emitter/index.js","lineNumber":131,"columnNumber":33},"locations":[{"lineNumber":132,"columnNumber":34,"source":{"name":"node_modules/component-emitter/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/component-emitter/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"Emitter.emit","scriptId":"220","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/component-emitter/index.js","lineNumber":135,"columnNumber":0},"locations":[{"lineNumber":136,"columnNumber":1,"source":{"name":"node_modules/component-emitter/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/component-emitter/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"Emitter.emit","scriptId":"220","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/component-emitter/index.js","lineNumber":136,"columnNumber":0},"locations":[{"lineNumber":137,"columnNumber":1,"source":{"name":"node_modules/component-emitter/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/component-emitter/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"ondecoded","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":198,"columnNumber":13},"locations":[{"lineNumber":199,"columnNumber":14,"source":{"name":"node_modules/socket.io/dist/client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","sourceReference":0}}]},{"callFrame":{"functionName":"ondecoded","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":211,"columnNumber":0},"locations":[{"lineNumber":212,"columnNumber":1,"source":{"name":"node_modules/socket.io/dist/client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","sourceReference":0}}]},{"callFrame":{"functionName":"ondecoded","scriptId":"218","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","lineNumber":212,"columnNumber":0},"locations":[{"lineNumber":213,"columnNumber":1,"source":{"name":"node_modules/socket.io/dist/client.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io/dist/client.js","sourceReference":0}}]},{"callFrame":{"functionName":"decodeString","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":143,"columnNumber":16},"locations":[{"lineNumber":144,"columnNumber":17,"source":{"name":"node_modules/socket.io-parser/dist/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"decodeString","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":149,"columnNumber":0},"locations":[{"lineNumber":150,"columnNumber":1,"source":{"name":"node_modules/socket.io-parser/dist/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"decodeString","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":150,"columnNumber":0},"locations":[{"lineNumber":151,"columnNumber":1,"source":{"name":"node_modules/socket.io-parser/dist/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"decodeString","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":144,"columnNumber":0},"locations":[{"lineNumber":145,"columnNumber":1,"source":{"name":"node_modules/socket.io-parser/dist/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"decodeString","scriptId":"219","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","lineNumber":145,"columnNumber":0},"locations":[{"lineNumber":146,"columnNumber":1,"source":{"name":"node_modules/socket.io-parser/dist/index.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/socket.io-parser/dist/index.js","sourceReference":0}}]},{"callFrame":{"functionName":"_unmask","scriptId":"208","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","lineNumber":53,"columnNumber":16},"locations":[{"lineNumber":54,"columnNumber":17,"source":{"name":"node_modules/ws/lib/buffer-util.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","sourceReference":0}}]},{"callFrame":{"functionName":"_unmask","scriptId":"208","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","lineNumber":57,"columnNumber":0},"locations":[{"lineNumber":58,"columnNumber":1,"source":{"name":"node_modules/ws/lib/buffer-util.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","sourceReference":0}}]},{"callFrame":{"functionName":"_unmask","scriptId":"208","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","lineNumber":58,"columnNumber":0},"locations":[{"lineNumber":59,"columnNumber":1,"source":{"name":"node_modules/ws/lib/buffer-util.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/buffer-util.js","sourceReference":0}}]},{"callFrame":{"functionName":"getInfo","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":160,"columnNumber":9},"locations":[{"lineNumber":161,"columnNumber":10,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"getInfo","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":229,"columnNumber":0},"locations":[{"lineNumber":230,"columnNumber":1,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"getInfo","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":230,"columnNumber":0},"locations":[{"lineNumber":231,"columnNumber":1,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"consume","scriptId":"211","url":"file:///home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","lineNumber":87,"columnNumber":9},"locations":[{"lineNumber":88,"columnNumber":10,"source":{"name":"node_modules/ws/lib/receiver.js","path":"/home/kadajett/dev/Quick_3D_MMORPG/node_modules/ws/lib/receiver.js","sourceReference":0}}]},{"callFrame":{"functionName":"slice","scriptId":"18","url":"node:buffer","lineNumber":1115,"columnNumber":39},"locations":[{"lineNumber":1116,"columnNumber":40,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"slice","scriptId":"18","url":"node:buffer","lineNumber":1120,"columnNumber":0},"locations":[{"lineNumber":1121,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"slice","scriptId":"18","url":"node:buffer","lineNumber":1121,"columnNumber":0},"locations":[{"lineNumber":1122,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listenerCount","scriptId":"13","url":"node:events","lineNumber":644,"columnNumber":22},"locations":[{"lineNumber":645,"columnNumber":23,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listenerCount","scriptId":"13","url":"node:events","lineNumber":645,"columnNumber":0},"locations":[{"lineNumber":646,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"listenerCount","scriptId":"13","url":"node:events","lineNumber":646,"columnNumber":0},"locations":[{"lineNumber":647,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"FastBuffer","scriptId":"19","url":"node:internal/buffer","lineNumber":957,"columnNumber":13},"locations":[{"lineNumber":958,"columnNumber":14,"source":{"name":"internal/buffer","path":"internal/buffer","sourceReference":919131247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"FastBuffer","scriptId":"19","url":"node:internal/buffer","lineNumber":958,"columnNumber":0},"locations":[{"lineNumber":959,"columnNumber":1,"source":{"name":"internal/buffer","path":"internal/buffer","sourceReference":919131247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"FastBuffer","scriptId":"19","url":"node:internal/buffer","lineNumber":959,"columnNumber":0},"locations":[{"lineNumber":960,"columnNumber":1,"source":{"name":"internal/buffer","path":"internal/buffer","sourceReference":919131247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"(garbage collector)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"(program)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]}]}} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 9afe82ea..9bf2038b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4860,6 +4860,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +stats.js@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/stats.js/-/stats.js-0.17.0.tgz#b1c3dc46d94498b578b7fd3985b81ace7131cc7d" + integrity sha1-scPcRtlEmLV4t/05hbgaznExzH0= + "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"