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/.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/.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/README.md b/README.md new file mode 100644 index 00000000..6ab180f7 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# 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 +- *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: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. + +
+What are Yarn Workspaces? +

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

+
diff --git a/client/shared/defs.mjs b/client/shared/defs.mjs deleted file mode 100644 index c1530d07..00000000 --- a/client/shared/defs.mjs +++ /dev/null @@ -1,157 +0,0 @@ - - -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 _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 diff --git a/client/shared/math.mjs b/client/shared/math.mjs deleted file mode 100644 index 08d5f86f..00000000 --- a/client/shared/math.mjs +++ /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/client/shared/noise.mjs b/client/shared/noise.mjs deleted file mode 100644 index 044a0e81..00000000 --- a/client/shared/noise.mjs +++ /dev/null @@ -1,45 +0,0 @@ -import {simplex} from './simplex-noise.mjs'; - - -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; - - 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 - } -})(); diff --git a/client/shared/spatial-hash-grid.mjs b/client/shared/spatial-hash-grid.mjs deleted file mode 100644 index 82ca7437..00000000 --- a/client/shared/spatial-hash-grid.mjs +++ /dev/null @@ -1,161 +0,0 @@ - -import {math} from './math.mjs'; - - -export const spatial_hash_grid = (() => { - - 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; - } - } - - return { - SpatialHashGrid: SpatialHashGrid, - }; - -})(); \ No newline at end of file diff --git a/client/shared/terrain-constants.mjs b/client/shared/terrain-constants.mjs deleted file mode 100644 index 50d7b1fa..00000000 --- a/client/shared/terrain-constants.mjs +++ /dev/null @@ -1,31 +0,0 @@ - - -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; - - 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 - }, - } -})(); diff --git a/client/shared/terrain-height.mjs b/client/shared/terrain-height.mjs deleted file mode 100644 index 457784eb..00000000 --- a/client/shared/terrain-height.mjs +++ /dev/null @@ -1,23 +0,0 @@ - -import {terrain_constants} from './terrain-constants.mjs'; -import {noise} from './noise.mjs'; - - -export const terrain_height = (() => { - - - 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 diff --git a/client/src/attacker-controller.js b/client/src/attacker-controller.js deleted file mode 100644 index 24513597..00000000 --- a/client/src/attacker-controller.js +++ /dev/null @@ -1,34 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; - - -export const attack_controller = (() => { - - class AttackController extends entity.Component { - constructor() { - super(); - this.action_ = null; - } - - InitComponent() { - this._RegisterHandler('player.action', (m) => { this._OnAnimAction(m); }); - } - - _OnAnimAction(m) { - if (m.action != 'attack') { - this.action_ = m.action; - return; - } else if (m.action != this.action_) { - this.action_ = m.action; - this.Broadcast({ - topic: 'action.attack', - }); - } - } - }; - - return { - AttackController: AttackController, - }; -})(); \ No newline at end of file diff --git a/client/src/blood-effect.js b/client/src/blood-effect.js deleted file mode 100644 index ca498bd6..00000000 --- a/client/src/blood-effect.js +++ /dev/null @@ -1,227 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {particle_system} from "./particle-system.js"; -import {entity} from "./entity.js"; - -export const blood_effect = (() => { - - class BloodEffectEmitter extends particle_system.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 particle_system.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 entity.Component { - constructor(params) { - super(); - this.params_ = params; - - this.bloodFX_ = new particle_system.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', - }); - } - - Destroy() { - this.bloodFX_.Destroy(); - this.fireFX_.Destroy(); - } - - InitComponent() { - this._RegisterHandler('events.network', (m) => { this.OnEvents_(m); }); - this._RegisterHandler('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 != 'attack') { - continue; - } - - // Another hack - const hc = e.attacker.GetComponent('HealthComponent'); - - if (hc.stats_.desc.character.class != 'sorceror') { - this.EmitBloodFX_(); - } else { - this.EmitFireFX_(); - } - } - } - - EmitFireFX_() { - 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); - } - } - - return { - BloodEffect: BloodEffect, - }; -})(); \ No newline at end of file diff --git a/client/src/entity-manager.js b/client/src/entity-manager.js deleted file mode 100644 index 92dad5f7..00000000 --- a/client/src/entity-manager.js +++ /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/client/src/equip-weapon-component.js b/client/src/equip-weapon-component.js deleted file mode 100644 index fbf16515..00000000 --- a/client/src/equip-weapon-component.js +++ /dev/null @@ -1,129 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; - -import {defs} from '/shared/defs.mjs'; - -import {FBXLoader} from 'https://cdn.jsdelivr.net/npm/three@0.124/examples/jsm/loaders/FBXLoader.js'; - - -export const equip_weapon_component = (() => { - - class EquipWeapon extends entity.Component { - constructor(params) { - super(); - this.params_ = params; - this.target_ = null; - this.name_ = null; - - const classType = this.params_.desc.character.class; - const modelData = defs.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)); - } - - _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('database').GetComponent( - 'InventoryDatabaseController'); - return database.Find(name); - } - - _OnEquip(msg) { - if (msg.value == this.name_) { - return; - } - - if (this.target_) { - this._UnloadModels(); - } - const inventory = this.GetComponent('InventoryController'); - 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: 'load.weapon', - model: this.target_, - bones: this._bones, - }); - }); - } - }; - - return { - EquipWeapon: EquipWeapon, - }; -})(); \ No newline at end of file diff --git a/client/src/finite-state-machine.js b/client/src/finite-state-machine.js deleted file mode 100644 index e816bd21..00000000 --- a/client/src/finite-state-machine.js +++ /dev/null @@ -1,42 +0,0 @@ - - -export const finite_state_machine = (() => { - - 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); - } - } - }; - - return { - FiniteStateMachine: FiniteStateMachine - }; - -})(); \ No newline at end of file diff --git a/client/src/floating-name.js b/client/src/floating-name.js deleted file mode 100644 index 13c21a6e..00000000 --- a/client/src/floating-name.js +++ /dev/null @@ -1,87 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; - -import {defs} from '/shared/defs.mjs'; - - -export const floating_name = (() => { - - class FloatingName extends entity.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( - 'load.character', (m) => { this.CreateSprite_(m); }); - this._RegisterHandler( - 'health.death', (m) => { this.OnDeath_(m); }); - } - - OnDeath_() { - this.Destroy(); - } - - CreateSprite_(msg) { - if (!this.visible_) { - return; - } - const modelData = defs.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_); - } - }; - - return { - FloatingName: FloatingName, - }; -})(); \ No newline at end of file diff --git a/client/src/gltf-component.js b/client/src/gltf-component.js deleted file mode 100644 index 17f17ca8..00000000 --- a/client/src/gltf-component.js +++ /dev/null @@ -1,236 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -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 {entity} from './entity.js'; - - -export const gltf_component = (() => { - - class StaticModelComponent extends entity.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 entity.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: '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); - }); - } - - 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.js b/client/src/health-component.js deleted file mode 100644 index be78ac71..00000000 --- a/client/src/health-component.js +++ /dev/null @@ -1,121 +0,0 @@ -import {entity} from "./entity.js"; - - -export const health_component = (() => { - - class HealthComponent extends entity.Component { - constructor(params) { - super(); - this.stats_ = params; - } - - InitComponent() { - this._RegisterHandler( - 'health.damage', (m) => this.OnDamage_(m)); - this._RegisterHandler( - 'stats.network', (m) => this.OnNetworkUpdate_(m)); - this._RegisterHandler( - '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('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; - } - - _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( - 'level-up-spawner').GetComponent('LevelUpComponentSpawner'); - spawner.Spawn(this.Parent.Position); - - this.Broadcast({ - topic: 'health.levelGained', - value: this.stats_.level, - }); - - this.UpdateUI_(); - } - - _OnDeath() { - this.Broadcast({ - topic: 'health.death', - }); - } - - OnHealthChanged_() { - if (this.stats_.health == 0) { - this._OnDeath(); - } - - this.Broadcast({ - topic: '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_(); - } - }; - - return { - HealthComponent: HealthComponent, - }; - -})(); \ No newline at end of file diff --git a/client/src/inventory-controller.js b/client/src/inventory-controller.js deleted file mode 100644 index 6ff9d505..00000000 --- a/client/src/inventory-controller.js +++ /dev/null @@ -1,213 +0,0 @@ -import {entity} from './entity.js'; - - -export const inventory_controller = (() => { - - 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 = ''; - } - } - }; - - - class InventoryController extends entity.Component { - 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)); - } - - 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: '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('database').GetComponent( - 'InventoryDatabaseController'); - return database.Find(name); - } - - SetItemAtSlot_(slot, itemName) { - const oldValue = this.inventory_[slot].value; - - this.inventory_[slot].value = itemName; - - 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; - } - }; - - - 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 diff --git a/client/src/level-up-component.js b/client/src/level-up-component.js deleted file mode 100644 index 17e1630e..00000000 --- a/client/src/level-up-component.js +++ /dev/null @@ -1,64 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {particle_system} from "./particle-system.js"; -import {entity} from "./entity.js"; - -export const level_up_component = (() => { - - class LevelUpComponentSpawner extends entity.Component { - constructor(params) { - super(); - this._params = params; - } - - Spawn(pos) { - const e = new entity.Entity(); - e.SetPosition(pos); - e.AddComponent(new LevelUpComponent(this._params)); - this.Manager.Add(e); - - return e; - } - }; - - class LevelUpComponent extends entity.Component { - constructor(params) { - super(); - this._params = params; - - 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); - } - - 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 diff --git a/client/src/load-controller.js b/client/src/load-controller.js deleted file mode 100644 index e8c11eaf..00000000 --- a/client/src/load-controller.js +++ /dev/null @@ -1,105 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -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"; - - -export const load_controller = (() => { - - class LoadController extends entity.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 = {...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/loading-manager.js b/client/src/loading-manager.js deleted file mode 100644 index 6f615ec5..00000000 --- a/client/src/loading-manager.js +++ /dev/null @@ -1,32 +0,0 @@ - - -export const loading_manager = (() => { - - // 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(); - } - }); - } - }; - - return { - OurLoadingManager: OurLoadingManager, - }; -})(); \ No newline at end of file diff --git a/client/src/main.js b/client/src/main.js deleted file mode 100644 index d7803d0d..00000000 --- a/client/src/main.js +++ /dev/null @@ -1,170 +0,0 @@ -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.js deleted file mode 100644 index 2e8b49bd..00000000 --- a/client/src/network-controller.js +++ /dev/null @@ -1,168 +0,0 @@ -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 entity.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("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); - }); - } - - 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, - }); - - console.log('entering world: ' + d.id); - this.playerID_ = d.id; - } else if (e == 'world.update') { - const updates = d; - - const spawner = this.FindEntity('spawners').GetComponent( - 'NetworkEntitySpawner'); - - const ui = this.FindEntity('ui').GetComponent('UIController'); - - 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); - - npc.Broadcast({ - topic: 'network.update', - transform: u.transform, - stats: u.stats, - events: events, - }); - } - } 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; - } - - e.Broadcast({ - topic: 'network.inventory', - inventory: d[1], - }); - } - } - }; - - return { - NetworkController: NetworkController - }; -})(); \ No newline at end of file diff --git a/client/src/network-entity-controller.js b/client/src/network-entity-controller.js deleted file mode 100644 index e2200b98..00000000 --- a/client/src/network-entity-controller.js +++ /dev/null @@ -1,111 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; - - -export const network_entity_controller = (() => { - - class NetworkEntityController extends entity.Component { - constructor() { - super(); - this.transformUpdates_ = []; - this.targetFrame_ = null; - this.lastFrame_ = null; - this.lastUpdate_ = 0.0; - } - - InitComponent() { - this._RegisterHandler( - '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: 'stats.network', - value: msg.stats, - }); - } - - 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(); - } - - 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]); - } - } - }; - - return { - NetworkEntityController: NetworkEntityController, - }; -})(); \ No newline at end of file diff --git a/client/src/network-player-controller.js b/client/src/network-player-controller.js deleted file mode 100644 index ecfb7c68..00000000 --- a/client/src/network-player-controller.js +++ /dev/null @@ -1,93 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; - - - -export const network_player_controller = (() => { - - class NetworkEntityController extends entity.Component { - constructor() { - super(); - this.updateTimer_ = 0.0; - this.loaded_ = false; - } - - InitComponent() { - this._RegisterHandler( - 'load.character', (m) => { this.OnLoaded_(m); }); - this._RegisterHandler( - '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('InventoryController').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: 'stats.network', - value: msg.stats, - }); - } - - if (msg.events) { - if (msg.events.length > 0) { - this.Broadcast({ - topic: '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()); - } - } - }; - - return { - NetworkEntityController: NetworkEntityController, - }; -})(); \ No newline at end of file diff --git a/client/src/npc-entity.js b/client/src/npc-entity.js deleted file mode 100644 index d93b43ff..00000000 --- a/client/src/npc-entity.js +++ /dev/null @@ -1,175 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; -import {player_entity} from './player-entity.js' - -import {defs} from '/shared/defs.mjs'; - - -export const npc_entity = (() => { - - class NPCController extends entity.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('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 == 'attack' && this.stateMachine_._currentState.Name != 'attack') { - this.Broadcast({ - topic: 'action.attack', - }); - } - - this.stateMachine_.SetState(s); - } - - OnDeath_(msg) { - this.SetState('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 = 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'); - - this.target_.visible = true; - - this.stateMachine_ = new player_entity.CharacterFSM( - new player_entity.BasicCharacterControllerProxy(this.animations_)); - - if (this.queuedState_) { - this.stateMachine_.SetState(this.queuedState_) - this.queuedState_ = null; - } else { - this.stateMachine_.SetState('idle'); - } - - this.Broadcast({ - topic: '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); - } - } - }; - - return { - NPCController: NPCController, - }; - -})(); \ No newline at end of file diff --git a/client/src/particle-system.js b/client/src/particle-system.js deleted file mode 100644 index c0919e95..00000000 --- a/client/src/particle-system.js +++ /dev/null @@ -1,327 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -export const particle_system = (() => { - - 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_(); - } - }; - - return { - ParticleEmitter: ParticleEmitter, - ParticleSystem: ParticleSystem, - }; -})(); \ No newline at end of file diff --git a/client/src/player-entity.js b/client/src/player-entity.js deleted file mode 100644 index f3bf579f..00000000 --- a/client/src/player-entity.js +++ /dev/null @@ -1,289 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; -import {finite_state_machine} from './finite-state-machine.js'; -import {player_state} from './player-state.js'; - -import {defs} from '/shared/defs.mjs'; - - -export const player_entity = (() => { - - 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_; - } - }; - - class BasicCharacterController extends entity.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('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('death'); - } - - 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'); - - this.target_.visible = true; - - this.stateMachine_ = new CharacterFSM( - new BasicCharacterControllerProxy(this.animations_)); - - this.stateMachine_.SetState('idle'); - - this.Broadcast({ - topic: 'load.character', - model: this.target_, - bones: this.bones_, - }); - - this.FindEntity('ui').GetComponent('UIController').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 = ((pos.x - e.Position.x) ** 2 + (pos.z - e.Position.z) ** 2) ** 0.5; - - // 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; - } - - 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 != '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; - } - - 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 diff --git a/client/src/player-input.js b/client/src/player-input.js deleted file mode 100644 index 91d4f52d..00000000 --- a/client/src/player-input.js +++ /dev/null @@ -1,142 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from "./entity.js"; - - -export const player_input = (() => { - - class PickableComponent extends entity.Component { - constructor() { - super(); - } - - InitComponent() { - } - }; - - class BasicCharacterControllerInput extends entity.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); - - 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('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: '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; - } - } - }; - - return { - BasicCharacterControllerInput: BasicCharacterControllerInput, - PickableComponent: PickableComponent, - }; - -})(); \ No newline at end of file diff --git a/client/src/player-state.js b/client/src/player-state.js deleted file mode 100644 index 1d3098d3..00000000 --- a/client/src/player-state.js +++ /dev/null @@ -1,312 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - - -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; - - 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(_) { - } - }; - - class DanceState extends State { - constructor(parent) { - super(parent); - - this._action = null; - - this._FinishedCallback = () => { - this._Finished(); - } - } - - get Name() { - return 'dance'; - } - - Enter(prevState) { - this._action = this._parent._proxy.animations['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('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 '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'; - } - - 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(); - } 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.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('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.25, 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('attack'); - } else if (input._keys.backspace) { - this._parent.SetState('dance'); - } - } - }; - - return { - State: State, - DanceState: DanceState, - AttackState: AttackState, - IdleState: IdleState, - WalkState: WalkState, - RunState: RunState, - DeathState: DeathState, - }; - -})(); \ No newline at end of file diff --git a/client/src/quadtree.js b/client/src/quadtree.js deleted file mode 100644 index 8b256f71..00000000 --- a/client/src/quadtree.js +++ /dev/null @@ -1,174 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.112.1/build/three.module.js'; - - -export const quadtree = (function() { - - 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; - } - } - - return { - QuadTree: QuadTree, - CubeQuadTree: CubeQuadTree, - } -})(); diff --git a/client/src/quest-component.js b/client/src/quest-component.js deleted file mode 100644 index e8d14b0f..00000000 --- a/client/src/quest-component.js +++ /dev/null @@ -1,40 +0,0 @@ -import {entity} from "./entity.js"; - - -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 { - constructor() { - super(); - - const e = document.getElementById('quest-ui'); - e.style.visibility = 'hidden'; - } - - InitComponent() { - this._RegisterHandler('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('ui').GetComponent('UIController'); - ui.AddQuest(quest); - } - }; - - return { - QuestComponent: QuestComponent, - }; -})(); \ No newline at end of file diff --git a/client/src/render-component.js b/client/src/render-component.js deleted file mode 100644 index a9b74c6e..00000000 --- a/client/src/render-component.js +++ /dev/null @@ -1,166 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -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 {entity} from './entity.js'; - - -export const render_component = (() => { - - class RenderComponent extends entity.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('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('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) { - } - }; - - - return { - RenderComponent: RenderComponent, - }; - -})(); \ No newline at end of file diff --git a/client/src/scenery-controller.js b/client/src/scenery-controller.js deleted file mode 100644 index 25248e71..00000000 --- a/client/src/scenery-controller.js +++ /dev/null @@ -1,276 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; -import {render_component} from './render-component.js'; -import {spatial_grid_controller} from './spatial-grid-controller.js'; - -import {math} from '/shared/math.mjs'; -import {noise} from '/shared/noise.mjs'; - - -export const scenery_controller = (() => { - - 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 entity.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_ = []; - } - - 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.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); - } - } - - 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.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); - - 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('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_(); - } - }; - - return { - SceneryController: SceneryController, - }; -})(); \ No newline at end of file diff --git a/client/src/sorceror-effect.js b/client/src/sorceror-effect.js deleted file mode 100644 index 2a0731f1..00000000 --- a/client/src/sorceror-effect.js +++ /dev/null @@ -1,123 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {particle_system} from "./particle-system.js"; -import {entity} from "./entity.js"; - -export const sorceror_effect = (() => { - - class SorcerorEffectEmitter extends particle_system.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 entity.Component { - constructor(params) { - super(); - this.params_ = params; - - this.particles_ = new particle_system.ParticleSystem({ - camera: params.camera, - parent: params.scene, - texture: './resources/textures/fire.png', - }); - } - - Destroy() { - this.particles_.Destroy(); - } - - InitComponent() { - this._RegisterHandler('action.attack', (m) => { this.OnAttack_(m); }); - this._RegisterHandler('load.character', (m) => this.OnCharacterLoaded_(m)); - } - - 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); - } - } - - Update(timeElapsed) { - this.particles_.Update(timeElapsed); - } - } - - return { - SorcerorEffect: SorcerorEffect, - }; -})(); \ No newline at end of file diff --git a/client/src/spatial-grid-controller.js b/client/src/spatial-grid-controller.js deleted file mode 100644 index 41dda3a7..00000000 --- a/client/src/spatial-grid-controller.js +++ /dev/null @@ -1,45 +0,0 @@ -import {entity} from './entity.js'; - - -export const spatial_grid_controller = (() => { - - class SpatialGridController extends entity.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 diff --git a/client/src/spawners.js b/client/src/spawners.js deleted file mode 100644 index 10719ac9..00000000 --- a/client/src/spawners.js +++ /dev/null @@ -1,143 +0,0 @@ -import {entity} from './entity.js'; - -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 {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'; - - -export const spawners = (() => { - - class PlayerSpawner extends entity.Component { - constructor(params) { - super(); - this.params_ = params; - } - - Spawn(playerParams) { - const params = { - 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, - })); - 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, - })); - if (playerParams.character.class == 'sorceror') { - player.AddComponent( - new sorceror_effect.SorcerorEffect(params)); - } - this.Manager.Add(player, 'player'); - - return player; - } - }; - - class NetworkEntitySpawner extends entity.Component { - constructor(params) { - super(); - this.params_ = params; - } - - 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, - })); - 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})); - } - npc.AddComponent( - new equip_weapon_component.EquipWeapon({desc: desc})); - npc.AddComponent(new inventory_controller.InventoryController()); - npc.AddComponent(new blood_effect.BloodEffect({ - 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); - - return npc; - } - } - - return { - PlayerSpawner: PlayerSpawner, - NetworkEntitySpawner: NetworkEntitySpawner, - }; -})(); \ No newline at end of file diff --git a/client/src/terrain-builder-threaded.js b/client/src/terrain-builder-threaded.js deleted file mode 100644 index 91fea96a..00000000 --- a/client/src/terrain-builder-threaded.js +++ /dev/null @@ -1,171 +0,0 @@ - -import {terrain_chunk} from './terrain-chunk.js'; - - -export const terrain_builder_threaded = (function() { - - 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 terrain_chunk.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); - } - } - - Update() { - if (!this.Busy) { - this._RecycleChunks(this._old); - this._old = []; - } - } - } - - return { - TerrainChunkRebuilder_Threaded: _TerrainChunkRebuilder_Threaded - } -})(); diff --git a/client/src/terrain-builder.js b/client/src/terrain-builder.js deleted file mode 100644 index b51d4697..00000000 --- a/client/src/terrain-builder.js +++ /dev/null @@ -1,100 +0,0 @@ -import {terrain_chunk} from './terrain-chunk.js'; - - -export const terrain_builder = (function() { - - 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 terrain_chunk.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(); - } - } - } - - return { - TerrainChunkRebuilder: _TerrainChunkRebuilder - } -})(); diff --git a/client/src/terrain-chunk.js b/client/src/terrain-chunk.js deleted file mode 100644 index 8f84aba7..00000000 --- a/client/src/terrain-chunk.js +++ /dev/null @@ -1,64 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - - -export const terrain_chunk = (function() { - - 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(); - } - } - - return { - TerrainChunk: TerrainChunk - } -})(); diff --git a/client/src/terrain.js b/client/src/terrain.js deleted file mode 100644 index 5bcde5ce..00000000 --- a/client/src/terrain.js +++ /dev/null @@ -1,291 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from './entity.js'; -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/noise.mjs'; - - -export const terrain = (function() { - - class TerrainChunkManager extends entity.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.js b/client/src/test.js deleted file mode 100644 index 2b935e15..00000000 --- a/client/src/test.js +++ /dev/null @@ -1,5 +0,0 @@ - - - - -// We got nothing. \ No newline at end of file diff --git a/client/src/texture-splatter.js b/client/src/texture-splatter.js deleted file mode 100644 index 21b6bb63..00000000 --- a/client/src/texture-splatter.js +++ /dev/null @@ -1,157 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - - -import {math} from '/shared/math.mjs'; -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.js b/client/src/textures.js deleted file mode 100644 index d71ca257..00000000 --- a/client/src/textures.js +++ /dev/null @@ -1,91 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - - -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.js b/client/src/third-person-camera.js deleted file mode 100644 index cc7c6513..00000000 --- a/client/src/third-person-camera.js +++ /dev/null @@ -1,56 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; -import {entity} from './entity.js'; - - -export const third_person_camera = (() => { - - class ThirdPersonCamera extends entity.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('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.js b/client/src/threejs_component.js deleted file mode 100644 index d7b26b8c..00000000 --- a/client/src/threejs_component.js +++ /dev/null @@ -1,193 +0,0 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; - -import {entity} from "./entity.js"; - -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 entity.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 = '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/client/src/ui-controller.js b/client/src/ui-controller.js deleted file mode 100644 index d76aeecf..00000000 --- a/client/src/ui-controller.js +++ /dev/null @@ -1,161 +0,0 @@ -import {entity} from './entity.js'; - - -export const ui_controller = (() => { - - class UIController extends entity.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); - } - - 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 = ''; - } - 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 != '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('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) { - } - }; - - return { - UIController: UIController, - }; - -})(); \ 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 new file mode 100644 index 00000000..0d73b269 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "quick-3d-mmo", + "private": true, + "version": "1.0.0", + "license": "MIT", + "main": "index.js", + "workspaces": [ + "packages/*" + ], + "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" + }, + "dependencies": { + "@babel/core": "^7.13.14", + "gl-matrix": "^3.3.0", + "webpack": "^5.30.0", + "webpack-cli": "^4.6.0" + } +} 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/client/LICENSE b/packages/quick-3d-mmo-client/LICENSE similarity index 100% rename from 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/quick-3d-mmo-client/dist/scripts/attacker-controller.js b/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js new file mode 100644 index 00000000..16879b94 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/attacker-controller.js @@ -0,0 +1,27 @@ +import { Component } from './entity'; +import { Constants } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/blood-effect.js b/packages/quick-3d-mmo-client/dist/scripts/blood-effect.js new file mode 100644 index 00000000..14a42ea0 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/blood-effect.js @@ -0,0 +1,183 @@ +import * as THREE from 'three'; +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; +import { Constants } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/entity.js b/packages/quick-3d-mmo-client/dist/scripts/entity.js new file mode 100644 index 00000000..54fd913a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/entity.js @@ -0,0 +1,128 @@ +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/finite-state-machine.js b/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js new file mode 100644 index 00000000..99e67905 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/finite-state-machine.js @@ -0,0 +1,29 @@ +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/floating-name.js b/packages/quick-3d-mmo-client/dist/scripts/floating-name.js new file mode 100644 index 00000000..5e71ca60 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/floating-name.js @@ -0,0 +1,67 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +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) { + 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 }; +//# 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/quick-3d-mmo-client/dist/scripts/gltf-component.js b/packages/quick-3d-mmo-client/dist/scripts/gltf-component.js new file mode 100644 index 00000000..4b7d35a5 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/gltf-component.js @@ -0,0 +1,196 @@ +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 '@quick-3d-mmo/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 }; +//# 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":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;AAElC,MAAM,oBAAqB,SAAQ,SAAS;IAG1C,YAAY,MAAM;QAChB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,WAAW,CAAC,CAAC;QACX,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACrC;IACH,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;IACH,CAAC;IAED,SAAS,CAAC,GAAG;QACX,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAChC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YAC5C,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACvD,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;SACvC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACxB,IAAI,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,YAAY,KAAK,CAAC,EAAE;gBAClC,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;aAC1B;YAED,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;gBACvB,IAAI,CAAC,EAAE;oBACL,IAAI,OAAO,EAAE;wBACX,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC;qBACjB;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;wBACzB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;qBACpC;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;wBACzB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;qBACpC;iBACF;aACF;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,SAAS,EAAE;gBAC3C,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;aAC9C;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE;gBACxC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;aACxC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,EAAE;gBACrC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;aAClC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,aAAa;IACpB,CAAC;CACF;AAAA,CAAC;AAGF,MAAM,sBAAuB,SAAQ,SAAS;IAK5C,YAAY,MAAM;QAChB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,WAAW,CAAC,CAAC;QACX,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC;SAChC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;IACH,CAAC;IAED,SAAS,CAAC,GAAG,EAAE,UAAU;QACvB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,CAAC;YACb,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAChC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YAC5C,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACvD,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;SACvC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACxB,IAAI,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,YAAY,KAAK,CAAC,EAAE;gBAClC,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;aAC1B;YAED,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;gBACvB,IAAI,CAAC,EAAE;oBACL,IAAI,OAAO,EAAE;wBACX,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC;qBACjB;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;wBACzB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;qBACpC;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;wBACzB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;qBACpC;iBACF;aACF;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,SAAS,EAAE;gBAC3C,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;aAC9C;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE;gBACxC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;aACxC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,EAAE;gBACrC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;aAClC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE5C,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC;YACb,KAAK,EAAE,WAAW,CAAC,cAAc;YACjC,KAAK,EAAE,IAAI,CAAC,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;SACnC;IACH,CAAC;CACF;AAAA,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,CAAA"} \ 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/quick-3d-mmo-client/dist/scripts/health-bar.js b/packages/quick-3d-mmo-client/dist/scripts/health-bar.js new file mode 100644 index 00000000..0d08bcc4 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/health-bar.js @@ -0,0 +1,107 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Math as math } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/health-component.js b/packages/quick-3d-mmo-client/dist/scripts/health-component.js new file mode 100644 index 00000000..fbe82d2a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/health-component.js @@ -0,0 +1,90 @@ +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 { + 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 }; +//# 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/quick-3d-mmo-client/dist/scripts/index.js b/packages/quick-3d-mmo-client/dist/scripts/index.js new file mode 100644 index 00000000..8dee7b94 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/index.js @@ -0,0 +1,938 @@ +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 '@quick-3d-mmo/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(); +}); +//# 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/quick-3d-mmo-client/dist/scripts/inventory-controller.js b/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js new file mode 100644 index 00000000..de3331dd --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/inventory-controller.js @@ -0,0 +1,172 @@ +import { Constants } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/level-up-component.js b/packages/quick-3d-mmo-client/dist/scripts/level-up-component.js new file mode 100644 index 00000000..1de7aae1 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/level-up-component.js @@ -0,0 +1,49 @@ +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, }; +//# 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/quick-3d-mmo-client/dist/scripts/load-controller.js b/packages/quick-3d-mmo-client/dist/scripts/load-controller.js new file mode 100644 index 00000000..597f8288 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/load-controller.js @@ -0,0 +1,85 @@ +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/loading-manager.js b/packages/quick-3d-mmo-client/dist/scripts/loading-manager.js new file mode 100644 index 00000000..a7f1d6c4 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/loading-manager.js @@ -0,0 +1,23 @@ +// 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 }; +//# 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/quick-3d-mmo-client/dist/scripts/main.js b/packages/quick-3d-mmo-client/dist/scripts/main.js new file mode 100644 index 00000000..08db0995 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/main.js @@ -0,0 +1,132 @@ +import { GUI } from '@quick-3d-mmo/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 '@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 { + 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(); +}); +//# 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":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,IAAI,cAAc,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7H,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,+DAAQ,SAAS,GAAK,IAAI,GAAK,cAAc,GAAK,gBAAgB,CAAE,CAAC;AAEtK,MAAM,gBAAgB;IASpB;QACE,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,WAAW;QACT,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,EAAE,CAAC;QAE1C,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;QACvE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE;YAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAC9B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,UAAU;QACR,IAAI,CAAC,UAAU,GAAG;YAChB,OAAO,EAAE,EACR;SACF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,gBAAgB;QACd,MAAM,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEvC,OAAO;QACP,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;QAC/E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC;QACjF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC;QAEnF,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,CAAC;QACxB,EAAE,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;QAE/C,MAAM,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAEzD,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC,YAAY,CAAC,IAAI,mBAAmB,CAAC;YACrC,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC,YAAY,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAElD,MAAM,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC;YACzC,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,IAAI,EAAE,IAAI,CAAC,KAAK;SACjB,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC;YACrC,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,YAAY,CAAC,IAAI,oBAAoB,CAAC;YAC5C,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAG1D,MAAM,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;QAC9B,QAAQ,CAAC,YAAY,CAAC,IAAI,2BAA2B,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE3D,OAAO;QACP,KAAK,IAAI,CAAC,IAAI,YAAY,EAAE;YAC1B,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,6BAA6B,CAAC,CAAC,OAAO,CACzE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;IACH,CAAC;IAED,WAAW;QACT,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,MAAM,EAAE,CAAC;QACpC,cAAc,CAAC,YAAY,CAAC,IAAI,uBAAuB,CAAC;YACtD,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC3E,CAAC;IAED,eAAe;QACb,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI;QACF,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;gBAC9B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;aACvB;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YAClC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YAEtB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC;QAE/D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;CACF;AAGD,IAAI,IAAI,GAAG,IAAI,CAAC;AAEhB,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC/C,IAAI,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAChC,CAAC,CAAC,CAAC"} \ 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/quick-3d-mmo-client/dist/scripts/network-controller.js b/packages/quick-3d-mmo-client/dist/scripts/network-controller.js new file mode 100644 index 00000000..8acd2222 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-controller.js @@ -0,0 +1,136 @@ +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'; +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/network-entity-controller.js b/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js new file mode 100644 index 00000000..d6af6767 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-entity-controller.js @@ -0,0 +1,91 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/network-player-controller.js b/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js new file mode 100644 index 00000000..06ec282a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/network-player-controller.js @@ -0,0 +1,69 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/npc-entity.js b/packages/quick-3d-mmo-client/dist/scripts/npc-entity.js new file mode 100644 index 00000000..611c2ebb --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/npc-entity.js @@ -0,0 +1,139 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { CharacterFSM, BasicCharacterControllerProxy } from './player-entity'; +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) { + 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 }; +//# 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/quick-3d-mmo-client/dist/scripts/particle-system.js b/packages/quick-3d-mmo-client/dist/scripts/particle-system.js new file mode 100644 index 00000000..7152f4a2 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/particle-system.js @@ -0,0 +1,257 @@ +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/player-entity.js b/packages/quick-3d-mmo-client/dist/scripts/player-entity.js new file mode 100644 index 00000000..6ecd0285 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-entity.js @@ -0,0 +1,223 @@ +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 '@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) { + 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, }; +//# 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/quick-3d-mmo-client/dist/scripts/player-input.js b/packages/quick-3d-mmo-client/dist/scripts/player-input.js new file mode 100644 index 00000000..9b3ca581 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-input.js @@ -0,0 +1,123 @@ +import * as THREE from 'three'; +import { Constants } from '@quick-3d-mmo/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, }; +//# 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/quick-3d-mmo-client/dist/scripts/player-state.js b/packages/quick-3d-mmo-client/dist/scripts/player-state.js new file mode 100644 index 00000000..99ba8bc0 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/player-state.js @@ -0,0 +1,253 @@ +import * as THREE from 'three'; +import { Constants } from '@quick-3d-mmo/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, }; +//# 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/quick-3d-mmo-client/dist/scripts/quadtree.js b/packages/quick-3d-mmo-client/dist/scripts/quadtree.js new file mode 100644 index 00000000..510e9eb1 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/quadtree.js @@ -0,0 +1,130 @@ +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/quest-component.js b/packages/quick-3d-mmo-client/dist/scripts/quest-component.js new file mode 100644 index 00000000..a4e0d0aa --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/quest-component.js @@ -0,0 +1,31 @@ +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!'; +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/render-component.js b/packages/quick-3d-mmo-client/dist/scripts/render-component.js new file mode 100644 index 00000000..2e5ea490 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/render-component.js @@ -0,0 +1,136 @@ +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 '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/scenery-controller.js b/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js new file mode 100644 index 00000000..41f00533 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/scenery-controller.js @@ -0,0 +1,227 @@ +import * as THREE from 'three'; +import { Entity, Component } from './entity'; +import { RenderComponent } from './render-component'; +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: './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: './trees/FBX/', + names: { + Bark: 'Tree_Bark.jpg', + Leaves: 'Leaves_Blue.png' + }, + scale: 0.1, + biomes: ['forest'], + collision: true, + }, + rock1: { + base: 'Rock_1.fbx', + resourcePath: './nature/FBX/', + names: {}, + scale: 0.025, + biomes: ['arid', 'desert'], + }, + rockMoss1: { + base: 'Rock_Moss_1.fbx', + resourcePath: './nature/FBX/', + names: {}, + scale: 0.025, + biomes: ['forest'], + }, + plant1: { + base: 'Plant_1.fbx', + resourcePath: './nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest', 'arid'], + }, + grass1: { + base: 'Grass_1.fbx', + resourcePath: './nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest', 'arid'], + }, + flowers1: { + base: 'Flowers.fbx', + resourcePath: './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: '../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: './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 }; +//# 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/quick-3d-mmo-client/dist/scripts/sorceror-effect.js b/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js new file mode 100644 index 00000000..821a0150 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/sorceror-effect.js @@ -0,0 +1,96 @@ +import * as THREE from 'three'; +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; +import { Constants } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js b/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js new file mode 100644 index 00000000..b12224d8 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/spatial-grid-controller.js @@ -0,0 +1,31 @@ +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/spawners.js b/packages/quick-3d-mmo-client/dist/scripts/spawners.js new file mode 100644 index 00000000..dd8687f4 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/spawners.js @@ -0,0 +1,116 @@ +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 { EquipWeapon } 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 '@quick-3d-mmo/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 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 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 }; +//# 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/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js new file mode 100644 index 00000000..b9b9e7a6 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded-worker.js @@ -0,0 +1,267 @@ +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, + }; + } +} +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/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/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js new file mode 100644 index 00000000..5508b8ac --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder-threaded.js @@ -0,0 +1,133 @@ +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/terrain-builder.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js new file mode 100644 index 00000000..4762082f --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-builder.js @@ -0,0 +1,80 @@ +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 }; +//# 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/quick-3d-mmo-client/dist/scripts/terrain-chunk.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js new file mode 100644 index 00000000..f0b2fd2f --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-chunk.js @@ -0,0 +1,44 @@ +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 }; +//# 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/client/src/terrain-shader.js b/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js similarity index 97% rename from client/src/terrain-shader.js rename to packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js index a69be331..b1fc0d16 100644 --- a/client/src/terrain-shader.js +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain-shader.js @@ -1,6 +1,4 @@ -export const terrain_shader = (function() { - - const _VS_1 = ` +const VS1 = ` // Triplanar Attributes in vec4 weights1; @@ -13,17 +11,14 @@ out vec4 vWeights2; `; - - - const _VS_2 = ` +const VS2 = ` vCoords = transformed.xyz; vWeights1 = weights1; vWeights2 = weights2; `; - - const _VS = ` +const VS = ` // Attributes in vec3 coords; @@ -51,9 +46,7 @@ void main(){ vWeights2 = weights2; } `; - - - const _PS = ` +const PS = ` precision highp float; precision highp int; @@ -258,9 +251,7 @@ void main() { } `; - - - const _PS_1 = ` +const PS1 = ` precision mediump sampler2DArray; @@ -424,8 +415,7 @@ vec4 _TriplanarN(vec3 pos, vec3 normal, float texSlice, sampler2DArray tex) { } `; - - const _PS_2 = ` +const PS2 = ` { vec3 worldPosition = vCoords; @@ -462,14 +452,5 @@ 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, }; +//# 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/quick-3d-mmo-client/dist/scripts/terrain.js b/packages/quick-3d-mmo-client/dist/scripts/terrain.js new file mode 100644 index 00000000..0def3a8a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/terrain.js @@ -0,0 +1,227 @@ +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 '@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) { + 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 }; +//# 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/quick-3d-mmo-client/dist/scripts/test.js b/packages/quick-3d-mmo-client/dist/scripts/test.js new file mode 100644 index 00000000..7569a1d1 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/test.js @@ -0,0 +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/quick-3d-mmo-client/dist/scripts/texture-splatter.js b/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js new file mode 100644 index 00000000..084af44c --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/texture-splatter.js @@ -0,0 +1,120 @@ +import * as THREE from 'three'; +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); +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 }; +//# 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":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE9E,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,mCAAQ,MAAM,GAAK,gBAAgB,CAAE,CAAC;AAE1E,MAAM,qBAAqB,GAAG,YAAY,GAAG,IAAI,CAAC;AAElD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEzC,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACjD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACxC,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEjD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAGzC,MAAM,eAAe;IAInB,YAAY,MAAM;QAChB,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;YAErB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,IAAI,CAAC,aAAa,GAAG;YACnB,IAAI,YAAY,CAAC,WAAW,CAAC;YAC7B,IAAI,YAAY,CAAC,WAAW,CAAC;SAC9B,CAAC;QAEF,OAAO;QACP,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE3C,QAAQ;QACR,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3C,kEAAkE;QAClE,8CAA8C;QAE9C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAE9B,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAExC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAEvB,IAAI,CAAC,GAAG,GAAG,EAAE;YACX,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;SACjE;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAE5D,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC;QAEtC,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;YACjC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;YAClC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;YACnC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;YACjC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;YACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;YACrC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;YACnC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;SACvC,CAAC;QAEF,SAAS,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;gBACnB,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;aACxB;YACD,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAA,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC3B,aAAa,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,GAAG,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3C,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAEpC,IAAI,CAAC,GAAG,GAAG,EAAE;gBACX,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC5C,aAAa,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;aACxC;SACF;aAAM;YACL,IAAI,CAAC,GAAG,KAAK,EAAE;gBACb,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACzC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;aACnC;YAED,IAAI,CAAC,GAAG,GAAG,EAAE;gBACX,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBACrC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;aACnC;SACF;QAED,4BAA4B;QAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAE3B,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;YACnB,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC5B;QACD,IAAI,KAAK,GAAG,IAAI,EAAE;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC;SACb;QACD,MAAM,aAAa,GAAG,GAAG,GAAG,KAAK,CAAC;QAElC,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;YACnB,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC;SACnC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,CAAC,QAAQ;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAED,OAAO,EACL,eAAe,EAChB,CAAA"} \ 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/quick-3d-mmo-client/dist/scripts/textures.js b/packages/quick-3d-mmo-client/dist/scripts/textures.js new file mode 100644 index 00000000..0072d72a --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/textures.js @@ -0,0 +1,69 @@ +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 }; +//# 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":"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"} \ 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/quick-3d-mmo-client/dist/scripts/third-person-camera.js b/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js new file mode 100644 index 00000000..a42a590d --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/third-person-camera.js @@ -0,0 +1,40 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/threejs_component.js b/packages/quick-3d-mmo-client/dist/scripts/threejs_component.js new file mode 100644 index 00000000..b6f180b1 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/threejs_component.js @@ -0,0 +1,165 @@ +import * as THREE from 'three'; +import { Constants } from '@quick-3d-mmo/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 }; +//# 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/quick-3d-mmo-client/dist/scripts/ui-controller.js b/packages/quick-3d-mmo-client/dist/scripts/ui-controller.js new file mode 100644 index 00000000..47e300a4 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/ui-controller.js @@ -0,0 +1,132 @@ +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 { + 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 }; +//# 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/quick-3d-mmo-client/dist/scripts/utils.js b/packages/quick-3d-mmo-client/dist/scripts/utils.js new file mode 100644 index 00000000..25322980 --- /dev/null +++ b/packages/quick-3d-mmo-client/dist/scripts/utils.js @@ -0,0 +1,21 @@ +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; + } + }; +})(); +//# 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..c23772ef --- /dev/null +++ b/packages/quick-3d-mmo-client/package.json @@ -0,0 +1,41 @@ +{ + "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", + "stats.js": "^0.17.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/client/index.html b/packages/quick-3d-mmo-client/src/index.html similarity index 84% rename from client/index.html rename to packages/quick-3d-mmo-client/src/index.html index 7bbf637d..dbecf1a6 100644 --- a/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/client/resources/background-2.jpg b/packages/quick-3d-mmo-client/src/resources/background-2.jpg similarity index 100% rename from client/resources/background-2.jpg rename to packages/quick-3d-mmo-client/src/resources/background-2.jpg diff --git a/client/resources/background-3.png b/packages/quick-3d-mmo-client/src/resources/background-3.png similarity index 100% rename from client/resources/background-3.png rename to packages/quick-3d-mmo-client/src/resources/background-3.png diff --git a/client/resources/background.jpg b/packages/quick-3d-mmo-client/src/resources/background.jpg similarity index 100% rename from client/resources/background.jpg rename to packages/quick-3d-mmo-client/src/resources/background.jpg diff --git a/client/resources/characters/guard.glb b/packages/quick-3d-mmo-client/src/resources/characters/guard.glb similarity index 100% rename from client/resources/characters/guard.glb rename to packages/quick-3d-mmo-client/src/resources/characters/guard.glb diff --git a/client/resources/characters/paladin.glb b/packages/quick-3d-mmo-client/src/resources/characters/paladin.glb similarity index 100% rename from client/resources/characters/paladin.glb rename to packages/quick-3d-mmo-client/src/resources/characters/paladin.glb diff --git a/client/resources/characters/readme.txt b/packages/quick-3d-mmo-client/src/resources/characters/readme.txt similarity index 100% rename from client/resources/characters/readme.txt rename to packages/quick-3d-mmo-client/src/resources/characters/readme.txt diff --git a/client/resources/characters/sorceror.glb b/packages/quick-3d-mmo-client/src/resources/characters/sorceror.glb similarity index 100% rename from client/resources/characters/sorceror.glb rename to packages/quick-3d-mmo-client/src/resources/characters/sorceror.glb diff --git a/client/resources/characters/warrok.glb b/packages/quick-3d-mmo-client/src/resources/characters/warrok.glb similarity index 100% rename from client/resources/characters/warrok.glb rename to packages/quick-3d-mmo-client/src/resources/characters/warrok.glb diff --git a/client/resources/characters/zombie-guy.glb b/packages/quick-3d-mmo-client/src/resources/characters/zombie-guy.glb similarity index 100% rename from client/resources/characters/zombie-guy.glb rename to packages/quick-3d-mmo-client/src/resources/characters/zombie-guy.glb diff --git a/client/resources/characters/zombie.glb b/packages/quick-3d-mmo-client/src/resources/characters/zombie.glb similarity index 100% rename from client/resources/characters/zombie.glb rename to packages/quick-3d-mmo-client/src/resources/characters/zombie.glb diff --git a/client/resources/icons/readme.txt b/packages/quick-3d-mmo-client/src/resources/icons/readme.txt similarity index 100% rename from client/resources/icons/readme.txt rename to packages/quick-3d-mmo-client/src/resources/icons/readme.txt diff --git a/client/resources/icons/ui/backpack.png b/packages/quick-3d-mmo-client/src/resources/icons/ui/backpack.png similarity index 100% rename from client/resources/icons/ui/backpack.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/backpack.png diff --git a/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 client/resources/icons/ui/health-bar.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/health-bar.png diff --git a/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 client/resources/icons/ui/inventory-character.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/inventory-character.png diff --git a/client/resources/icons/ui/skills.png b/packages/quick-3d-mmo-client/src/resources/icons/ui/skills.png similarity index 100% rename from client/resources/icons/ui/skills.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/skills.png diff --git a/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 client/resources/icons/ui/tied-scroll.png rename to packages/quick-3d-mmo-client/src/resources/icons/ui/tied-scroll.png diff --git a/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 client/resources/icons/weapons/hammer-64.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/hammer-64.png diff --git a/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 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/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 client/resources/icons/weapons/pointy-sword.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/pointy-sword.png diff --git a/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 client/resources/icons/weapons/thor-hammer.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/thor-hammer.png diff --git a/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 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/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 client/resources/icons/weapons/war-axe.png rename to packages/quick-3d-mmo-client/src/resources/icons/weapons/war-axe.png diff --git a/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 client/resources/nature/Blends/BirchTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_1.blend diff --git a/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 client/resources/nature/Blends/BirchTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_2.blend diff --git a/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 client/resources/nature/Blends/BirchTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_3.blend diff --git a/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 client/resources/nature/Blends/BirchTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_4.blend diff --git a/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 client/resources/nature/Blends/BirchTree_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BirchTree_5.blend diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/Blends/BushBerries_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BushBerries_1.blend diff --git a/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 client/resources/nature/Blends/BushBerries_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/BushBerries_2.blend diff --git a/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 client/resources/nature/Blends/Bush_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_1.blend diff --git a/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 client/resources/nature/Blends/Bush_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Bush_2.blend diff --git a/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 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/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 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/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 client/resources/nature/Blends/CactusFlower_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlower_1.blend diff --git a/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 client/resources/nature/Blends/CactusFlowers_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_2.blend diff --git a/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 client/resources/nature/Blends/CactusFlowers_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_3.blend diff --git a/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 client/resources/nature/Blends/CactusFlowers_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_4.blend diff --git a/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 client/resources/nature/Blends/CactusFlowers_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CactusFlowers_5.blend diff --git a/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 client/resources/nature/Blends/Cactus_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_1.blend diff --git a/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 client/resources/nature/Blends/Cactus_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_2.blend diff --git a/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 client/resources/nature/Blends/Cactus_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_3.blend diff --git a/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 client/resources/nature/Blends/Cactus_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_4.blend diff --git a/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 client/resources/nature/Blends/Cactus_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Cactus_5.blend diff --git a/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 client/resources/nature/Blends/CommonTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_1.blend diff --git a/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 client/resources/nature/Blends/CommonTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_2.blend diff --git a/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 client/resources/nature/Blends/CommonTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_3.blend diff --git a/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 client/resources/nature/Blends/CommonTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_4.blend diff --git a/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 client/resources/nature/Blends/CommonTree_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/CommonTree_5.blend diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/Blends/Corn_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Corn_1.blend diff --git a/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 client/resources/nature/Blends/Corn_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Corn_2.blend diff --git a/client/resources/nature/Blends/Flowers.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Flowers.blend similarity index 100% rename from client/resources/nature/Blends/Flowers.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Flowers.blend diff --git a/client/resources/nature/Blends/Grass.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass.blend similarity index 100% rename from client/resources/nature/Blends/Grass.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass.blend diff --git a/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 client/resources/nature/Blends/Grass_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass_2.blend diff --git a/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 client/resources/nature/Blends/Grass_Short.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Grass_Short.blend diff --git a/client/resources/nature/Blends/Lilypad.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Lilypad.blend similarity index 100% rename from client/resources/nature/Blends/Lilypad.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Lilypad.blend diff --git a/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 client/resources/nature/Blends/PalmTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_1.blend diff --git a/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 client/resources/nature/Blends/PalmTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_2.blend diff --git a/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 client/resources/nature/Blends/PalmTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_3.blend diff --git a/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 client/resources/nature/Blends/PalmTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PalmTree_4.blend diff --git a/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 client/resources/nature/Blends/PineTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_1.blend diff --git a/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 client/resources/nature/Blends/PineTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_2.blend diff --git a/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 client/resources/nature/Blends/PineTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_3.blend diff --git a/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 client/resources/nature/Blends/PineTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_4.blend diff --git a/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 client/resources/nature/Blends/PineTree_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/PineTree_5.blend diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/Blends/Plant_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_1.blend diff --git a/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 client/resources/nature/Blends/Plant_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_2.blend diff --git a/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 client/resources/nature/Blends/Plant_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_3.blend diff --git a/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 client/resources/nature/Blends/Plant_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_4.blend diff --git a/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 client/resources/nature/Blends/Plant_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Plant_5.blend diff --git a/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 client/resources/nature/Blends/Rock_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_1.blend diff --git a/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 client/resources/nature/Blends/Rock_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_2.blend diff --git a/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 client/resources/nature/Blends/Rock_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_3.blend diff --git a/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 client/resources/nature/Blends/Rock_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_4.blend diff --git a/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 client/resources/nature/Blends/Rock_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_5.blend diff --git a/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 client/resources/nature/Blends/Rock_6.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_6.blend diff --git a/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 client/resources/nature/Blends/Rock_7.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Rock_7.blend diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/client/resources/nature/Blends/TreeStump.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump.blend similarity index 100% rename from client/resources/nature/Blends/TreeStump.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump.blend diff --git a/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 client/resources/nature/Blends/TreeStump_Moss.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump_Moss.blend diff --git a/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 client/resources/nature/Blends/TreeStump_Snow.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/TreeStump_Snow.blend diff --git a/client/resources/nature/Blends/Wheat.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/Wheat.blend similarity index 100% rename from client/resources/nature/Blends/Wheat.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Wheat.blend diff --git a/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 client/resources/nature/Blends/Willow_1.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_1.blend diff --git a/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 client/resources/nature/Blends/Willow_2.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_2.blend diff --git a/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 client/resources/nature/Blends/Willow_3.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_3.blend diff --git a/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 client/resources/nature/Blends/Willow_4.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_4.blend diff --git a/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 client/resources/nature/Blends/Willow_5.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/Willow_5.blend diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/client/resources/nature/Blends/WoodLog.blend b/packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog.blend similarity index 100% rename from client/resources/nature/Blends/WoodLog.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog.blend diff --git a/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 client/resources/nature/Blends/WoodLog_Moss.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog_Moss.blend diff --git a/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 client/resources/nature/Blends/WoodLog_Snow.blend rename to packages/quick-3d-mmo-client/src/resources/nature/Blends/WoodLog_Snow.blend diff --git a/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 client/resources/nature/FBX/BirchTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_1.fbx diff --git a/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 client/resources/nature/FBX/BirchTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_2.fbx diff --git a/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 client/resources/nature/FBX/BirchTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_3.fbx diff --git a/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 client/resources/nature/FBX/BirchTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_4.fbx diff --git a/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 client/resources/nature/FBX/BirchTree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BirchTree_5.fbx diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/FBX/BushBerries_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BushBerries_1.fbx diff --git a/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 client/resources/nature/FBX/BushBerries_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/BushBerries_2.fbx diff --git a/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 client/resources/nature/FBX/Bush_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_1.fbx diff --git a/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 client/resources/nature/FBX/Bush_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Bush_2.fbx diff --git a/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 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/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 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/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 client/resources/nature/FBX/CactusFlower_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlower_1.fbx diff --git a/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 client/resources/nature/FBX/CactusFlowers_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_2.fbx diff --git a/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 client/resources/nature/FBX/CactusFlowers_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_3.fbx diff --git a/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 client/resources/nature/FBX/CactusFlowers_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_4.fbx diff --git a/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 client/resources/nature/FBX/CactusFlowers_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CactusFlowers_5.fbx diff --git a/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 client/resources/nature/FBX/Cactus_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_1.fbx diff --git a/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 client/resources/nature/FBX/Cactus_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_2.fbx diff --git a/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 client/resources/nature/FBX/Cactus_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_3.fbx diff --git a/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 client/resources/nature/FBX/Cactus_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_4.fbx diff --git a/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 client/resources/nature/FBX/Cactus_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Cactus_5.fbx diff --git a/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 client/resources/nature/FBX/CommonTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_1.fbx diff --git a/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 client/resources/nature/FBX/CommonTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_2.fbx diff --git a/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 client/resources/nature/FBX/CommonTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_3.fbx diff --git a/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 client/resources/nature/FBX/CommonTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_4.fbx diff --git a/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 client/resources/nature/FBX/CommonTree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/CommonTree_5.fbx diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/FBX/Corn_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Corn_1.fbx diff --git a/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 client/resources/nature/FBX/Corn_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Corn_2.fbx diff --git a/client/resources/nature/FBX/Flowers.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Flowers.fbx similarity index 100% rename from client/resources/nature/FBX/Flowers.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Flowers.fbx diff --git a/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 client/resources/nature/FBX/Grass_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_1.fbx diff --git a/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 client/resources/nature/FBX/Grass_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_2.fbx diff --git a/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 client/resources/nature/FBX/Grass_Short.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Grass_Short.fbx diff --git a/client/resources/nature/FBX/Lilypad.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Lilypad.fbx similarity index 100% rename from client/resources/nature/FBX/Lilypad.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Lilypad.fbx diff --git a/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 client/resources/nature/FBX/PalmTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_1.fbx diff --git a/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 client/resources/nature/FBX/PalmTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_2.fbx diff --git a/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 client/resources/nature/FBX/PalmTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_3.fbx diff --git a/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 client/resources/nature/FBX/PalmTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PalmTree_4.fbx diff --git a/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 client/resources/nature/FBX/PineTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_1.fbx diff --git a/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 client/resources/nature/FBX/PineTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_2.fbx diff --git a/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 client/resources/nature/FBX/PineTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_3.fbx diff --git a/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 client/resources/nature/FBX/PineTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_4.fbx diff --git a/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 client/resources/nature/FBX/PineTree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/PineTree_5.fbx diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/FBX/Plant_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_1.fbx diff --git a/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 client/resources/nature/FBX/Plant_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_2.fbx diff --git a/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 client/resources/nature/FBX/Plant_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_3.fbx diff --git a/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 client/resources/nature/FBX/Plant_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_4.fbx diff --git a/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 client/resources/nature/FBX/Plant_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Plant_5.fbx diff --git a/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 client/resources/nature/FBX/Rock_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_1.fbx diff --git a/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 client/resources/nature/FBX/Rock_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_2.fbx diff --git a/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 client/resources/nature/FBX/Rock_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_3.fbx diff --git a/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 client/resources/nature/FBX/Rock_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_4.fbx diff --git a/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 client/resources/nature/FBX/Rock_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_5.fbx diff --git a/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 client/resources/nature/FBX/Rock_6.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_6.fbx diff --git a/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 client/resources/nature/FBX/Rock_7.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Rock_7.fbx diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/client/resources/nature/FBX/TreeStump.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump.fbx similarity index 100% rename from client/resources/nature/FBX/TreeStump.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump.fbx diff --git a/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 client/resources/nature/FBX/TreeStump_Moss.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump_Moss.fbx diff --git a/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 client/resources/nature/FBX/TreeStump_Snow.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/TreeStump_Snow.fbx diff --git a/client/resources/nature/FBX/Wheat.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/Wheat.fbx similarity index 100% rename from client/resources/nature/FBX/Wheat.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Wheat.fbx diff --git a/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 client/resources/nature/FBX/Willow_1.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_1.fbx diff --git a/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 client/resources/nature/FBX/Willow_2.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_2.fbx diff --git a/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 client/resources/nature/FBX/Willow_3.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_3.fbx diff --git a/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 client/resources/nature/FBX/Willow_4.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_4.fbx diff --git a/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 client/resources/nature/FBX/Willow_5.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/Willow_5.fbx diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/client/resources/nature/FBX/WoodLog.fbx b/packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog.fbx similarity index 100% rename from client/resources/nature/FBX/WoodLog.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog.fbx diff --git a/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 client/resources/nature/FBX/WoodLog_Moss.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog_Moss.fbx diff --git a/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 client/resources/nature/FBX/WoodLog_Snow.fbx rename to packages/quick-3d-mmo-client/src/resources/nature/FBX/WoodLog_Snow.fbx diff --git a/client/resources/nature/License.txt b/packages/quick-3d-mmo-client/src/resources/nature/License.txt similarity index 100% rename from client/resources/nature/License.txt rename to packages/quick-3d-mmo-client/src/resources/nature/License.txt diff --git a/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 client/resources/nature/OBJ/BirchTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_1.mtl diff --git a/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 client/resources/nature/OBJ/BirchTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_1.obj diff --git a/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 client/resources/nature/OBJ/BirchTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_2.mtl diff --git a/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 client/resources/nature/OBJ/BirchTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_2.obj diff --git a/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 client/resources/nature/OBJ/BirchTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_3.mtl diff --git a/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 client/resources/nature/OBJ/BirchTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_3.obj diff --git a/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 client/resources/nature/OBJ/BirchTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_4.mtl diff --git a/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 client/resources/nature/OBJ/BirchTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_4.obj diff --git a/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 client/resources/nature/OBJ/BirchTree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_5.mtl diff --git a/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 client/resources/nature/OBJ/BirchTree_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BirchTree_5.obj diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/OBJ/BushBerries_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_1.mtl diff --git a/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 client/resources/nature/OBJ/BushBerries_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_1.obj diff --git a/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 client/resources/nature/OBJ/BushBerries_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_2.mtl diff --git a/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 client/resources/nature/OBJ/BushBerries_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/BushBerries_2.obj diff --git a/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 client/resources/nature/OBJ/Bush_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_1.mtl diff --git a/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 client/resources/nature/OBJ/Bush_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_1.obj diff --git a/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 client/resources/nature/OBJ/Bush_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_2.mtl diff --git a/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 client/resources/nature/OBJ/Bush_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Bush_2.obj diff --git a/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 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/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 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/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 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/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 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/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 client/resources/nature/OBJ/CactusFlower_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlower_1.mtl diff --git a/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 client/resources/nature/OBJ/CactusFlower_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlower_1.obj diff --git a/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 client/resources/nature/OBJ/CactusFlowers_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_2.mtl diff --git a/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 client/resources/nature/OBJ/CactusFlowers_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_2.obj diff --git a/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 client/resources/nature/OBJ/CactusFlowers_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_3.mtl diff --git a/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 client/resources/nature/OBJ/CactusFlowers_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_3.obj diff --git a/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 client/resources/nature/OBJ/CactusFlowers_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_4.mtl diff --git a/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 client/resources/nature/OBJ/CactusFlowers_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_4.obj diff --git a/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 client/resources/nature/OBJ/CactusFlowers_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_5.mtl diff --git a/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 client/resources/nature/OBJ/CactusFlowers_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CactusFlowers_5.obj diff --git a/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 client/resources/nature/OBJ/Cactus_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_1.mtl diff --git a/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 client/resources/nature/OBJ/Cactus_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_1.obj diff --git a/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 client/resources/nature/OBJ/Cactus_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_2.mtl diff --git a/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 client/resources/nature/OBJ/Cactus_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_2.obj diff --git a/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 client/resources/nature/OBJ/Cactus_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_3.mtl diff --git a/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 client/resources/nature/OBJ/Cactus_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_3.obj diff --git a/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 client/resources/nature/OBJ/Cactus_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_4.mtl diff --git a/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 client/resources/nature/OBJ/Cactus_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_4.obj diff --git a/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 client/resources/nature/OBJ/Cactus_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_5.mtl diff --git a/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 client/resources/nature/OBJ/Cactus_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Cactus_5.obj diff --git a/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 client/resources/nature/OBJ/CommonTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_1.mtl diff --git a/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 client/resources/nature/OBJ/CommonTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_1.obj diff --git a/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 client/resources/nature/OBJ/CommonTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_2.mtl diff --git a/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 client/resources/nature/OBJ/CommonTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_2.obj diff --git a/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 client/resources/nature/OBJ/CommonTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_3.mtl diff --git a/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 client/resources/nature/OBJ/CommonTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_3.obj diff --git a/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 client/resources/nature/OBJ/CommonTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_4.mtl diff --git a/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 client/resources/nature/OBJ/CommonTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_4.obj diff --git a/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 client/resources/nature/OBJ/CommonTree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_5.mtl diff --git a/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 client/resources/nature/OBJ/CommonTree_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/CommonTree_5.obj diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/OBJ/Corn_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_1.mtl diff --git a/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 client/resources/nature/OBJ/Corn_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_1.obj diff --git a/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 client/resources/nature/OBJ/Corn_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_2.mtl diff --git a/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 client/resources/nature/OBJ/Corn_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Corn_2.obj diff --git a/client/resources/nature/OBJ/Flowers.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Flowers.mtl similarity index 100% rename from client/resources/nature/OBJ/Flowers.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Flowers.mtl diff --git a/client/resources/nature/OBJ/Flowers.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Flowers.obj similarity index 100% rename from client/resources/nature/OBJ/Flowers.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Flowers.obj diff --git a/client/resources/nature/OBJ/Grass.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass.mtl similarity index 100% rename from client/resources/nature/OBJ/Grass.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass.mtl diff --git a/client/resources/nature/OBJ/Grass.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass.obj similarity index 100% rename from client/resources/nature/OBJ/Grass.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass.obj diff --git a/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 client/resources/nature/OBJ/Grass_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_2.mtl diff --git a/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 client/resources/nature/OBJ/Grass_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_2.obj diff --git a/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 client/resources/nature/OBJ/Grass_Short.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_Short.mtl diff --git a/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 client/resources/nature/OBJ/Grass_Short.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Grass_Short.obj diff --git a/client/resources/nature/OBJ/Lilypad.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Lilypad.mtl similarity index 100% rename from client/resources/nature/OBJ/Lilypad.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Lilypad.mtl diff --git a/client/resources/nature/OBJ/Lilypad.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Lilypad.obj similarity index 100% rename from client/resources/nature/OBJ/Lilypad.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Lilypad.obj diff --git a/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 client/resources/nature/OBJ/PalmTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_1.mtl diff --git a/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 client/resources/nature/OBJ/PalmTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_1.obj diff --git a/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 client/resources/nature/OBJ/PalmTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_2.mtl diff --git a/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 client/resources/nature/OBJ/PalmTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_2.obj diff --git a/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 client/resources/nature/OBJ/PalmTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_3.mtl diff --git a/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 client/resources/nature/OBJ/PalmTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_3.obj diff --git a/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 client/resources/nature/OBJ/PalmTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_4.mtl diff --git a/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 client/resources/nature/OBJ/PalmTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PalmTree_4.obj diff --git a/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 client/resources/nature/OBJ/PineTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_1.mtl diff --git a/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 client/resources/nature/OBJ/PineTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_1.obj diff --git a/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 client/resources/nature/OBJ/PineTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_2.mtl diff --git a/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 client/resources/nature/OBJ/PineTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_2.obj diff --git a/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 client/resources/nature/OBJ/PineTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_3.mtl diff --git a/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 client/resources/nature/OBJ/PineTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_3.obj diff --git a/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 client/resources/nature/OBJ/PineTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_4.mtl diff --git a/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 client/resources/nature/OBJ/PineTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_4.obj diff --git a/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 client/resources/nature/OBJ/PineTree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_5.mtl diff --git a/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 client/resources/nature/OBJ/PineTree_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/PineTree_5.obj diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/nature/OBJ/Plant_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_1.mtl diff --git a/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 client/resources/nature/OBJ/Plant_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_1.obj diff --git a/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 client/resources/nature/OBJ/Plant_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_2.mtl diff --git a/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 client/resources/nature/OBJ/Plant_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_2.obj diff --git a/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 client/resources/nature/OBJ/Plant_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_3.mtl diff --git a/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 client/resources/nature/OBJ/Plant_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_3.obj diff --git a/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 client/resources/nature/OBJ/Plant_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_4.mtl diff --git a/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 client/resources/nature/OBJ/Plant_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_4.obj diff --git a/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 client/resources/nature/OBJ/Plant_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_5.mtl diff --git a/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 client/resources/nature/OBJ/Plant_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Plant_5.obj diff --git a/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 client/resources/nature/OBJ/Rock_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_1.mtl diff --git a/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 client/resources/nature/OBJ/Rock_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_1.obj diff --git a/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 client/resources/nature/OBJ/Rock_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_2.mtl diff --git a/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 client/resources/nature/OBJ/Rock_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_2.obj diff --git a/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 client/resources/nature/OBJ/Rock_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_3.mtl diff --git a/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 client/resources/nature/OBJ/Rock_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_3.obj diff --git a/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 client/resources/nature/OBJ/Rock_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_4.mtl diff --git a/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 client/resources/nature/OBJ/Rock_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_4.obj diff --git a/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 client/resources/nature/OBJ/Rock_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_5.mtl diff --git a/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 client/resources/nature/OBJ/Rock_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_5.obj diff --git a/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 client/resources/nature/OBJ/Rock_6.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_6.mtl diff --git a/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 client/resources/nature/OBJ/Rock_6.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_6.obj diff --git a/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 client/resources/nature/OBJ/Rock_7.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_7.mtl diff --git a/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 client/resources/nature/OBJ/Rock_7.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Rock_7.obj diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/client/resources/nature/OBJ/TreeStump.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump.mtl similarity index 100% rename from client/resources/nature/OBJ/TreeStump.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump.mtl diff --git a/client/resources/nature/OBJ/TreeStump.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump.obj similarity index 100% rename from client/resources/nature/OBJ/TreeStump.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump.obj diff --git a/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 client/resources/nature/OBJ/TreeStump_Moss.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Moss.mtl diff --git a/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 client/resources/nature/OBJ/TreeStump_Moss.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Moss.obj diff --git a/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 client/resources/nature/OBJ/TreeStump_Snow.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Snow.mtl diff --git a/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 client/resources/nature/OBJ/TreeStump_Snow.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/TreeStump_Snow.obj diff --git a/client/resources/nature/OBJ/Wheat.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Wheat.mtl similarity index 100% rename from client/resources/nature/OBJ/Wheat.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Wheat.mtl diff --git a/client/resources/nature/OBJ/Wheat.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/Wheat.obj similarity index 100% rename from client/resources/nature/OBJ/Wheat.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Wheat.obj diff --git a/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 client/resources/nature/OBJ/Willow_1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_1.mtl diff --git a/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 client/resources/nature/OBJ/Willow_1.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_1.obj diff --git a/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 client/resources/nature/OBJ/Willow_2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_2.mtl diff --git a/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 client/resources/nature/OBJ/Willow_2.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_2.obj diff --git a/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 client/resources/nature/OBJ/Willow_3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_3.mtl diff --git a/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 client/resources/nature/OBJ/Willow_3.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_3.obj diff --git a/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 client/resources/nature/OBJ/Willow_4.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_4.mtl diff --git a/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 client/resources/nature/OBJ/Willow_4.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_4.obj diff --git a/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 client/resources/nature/OBJ/Willow_5.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_5.mtl diff --git a/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 client/resources/nature/OBJ/Willow_5.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/Willow_5.obj diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/client/resources/nature/OBJ/WoodLog.mtl b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog.mtl similarity index 100% rename from client/resources/nature/OBJ/WoodLog.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog.mtl diff --git a/client/resources/nature/OBJ/WoodLog.obj b/packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog.obj similarity index 100% rename from client/resources/nature/OBJ/WoodLog.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog.obj diff --git a/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 client/resources/nature/OBJ/WoodLog_Moss.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Moss.mtl diff --git a/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 client/resources/nature/OBJ/WoodLog_Moss.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Moss.obj diff --git a/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 client/resources/nature/OBJ/WoodLog_Snow.mtl rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Snow.mtl diff --git a/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 client/resources/nature/OBJ/WoodLog_Snow.obj rename to packages/quick-3d-mmo-client/src/resources/nature/OBJ/WoodLog_Snow.obj diff --git a/client/resources/nature/Preview.jpg b/packages/quick-3d-mmo-client/src/resources/nature/Preview.jpg similarity index 100% rename from client/resources/nature/Preview.jpg rename to packages/quick-3d-mmo-client/src/resources/nature/Preview.jpg diff --git a/client/resources/nature2/Blends/BigBush.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/BigBush.blend similarity index 100% rename from client/resources/nature2/Blends/BigBush.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/BigBush.blend diff --git a/client/resources/nature2/Blends/BigTreeWithLeaves.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/BigTreeWithLeaves.blend similarity index 100% rename from client/resources/nature2/Blends/BigTreeWithLeaves.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/BigTreeWithLeaves.blend diff --git a/client/resources/nature2/Blends/BushTexture.png b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/BushTexture.png similarity index 100% rename from client/resources/nature2/Blends/BushTexture.png rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/BushTexture.png diff --git a/client/resources/nature2/Blends/Cloud1.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud1.blend similarity index 100% rename from client/resources/nature2/Blends/Cloud1.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud1.blend diff --git a/client/resources/nature2/Blends/Cloud1.blend1 b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud1.blend1 similarity index 100% rename from client/resources/nature2/Blends/Cloud1.blend1 rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud1.blend1 diff --git a/client/resources/nature2/Blends/Cloud2.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud2.blend similarity index 100% rename from client/resources/nature2/Blends/Cloud2.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud2.blend diff --git a/client/resources/nature2/Blends/Cloud3.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud3.blend similarity index 100% rename from client/resources/nature2/Blends/Cloud3.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/Cloud3.blend diff --git a/client/resources/nature2/Blends/EveryModel.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/EveryModel.blend similarity index 100% rename from client/resources/nature2/Blends/EveryModel.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/EveryModel.blend diff --git a/client/resources/nature2/Blends/MoreNature.blend1 b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/MoreNature.blend1 similarity index 100% rename from client/resources/nature2/Blends/MoreNature.blend1 rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/MoreNature.blend1 diff --git a/client/resources/nature2/Blends/SmallBush.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/SmallBush.blend similarity index 100% rename from client/resources/nature2/Blends/SmallBush.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/SmallBush.blend diff --git a/client/resources/nature2/Blends/SmallTreeWithLeave.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/SmallTreeWithLeave.blend similarity index 100% rename from client/resources/nature2/Blends/SmallTreeWithLeave.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/SmallTreeWithLeave.blend diff --git a/client/resources/nature2/Blends/TreeNoLeavesBig.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesBig.blend similarity index 100% rename from client/resources/nature2/Blends/TreeNoLeavesBig.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesBig.blend diff --git a/client/resources/nature2/Blends/TreeNoLeavesBig.blend1 b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesBig.blend1 similarity index 100% rename from client/resources/nature2/Blends/TreeNoLeavesBig.blend1 rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesBig.blend1 diff --git a/client/resources/nature2/Blends/TreeNoLeavesSmall.blend b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesSmall.blend similarity index 100% rename from client/resources/nature2/Blends/TreeNoLeavesSmall.blend rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesSmall.blend diff --git a/client/resources/nature2/Blends/TreeNoLeavesSmall.blend1 b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesSmall.blend1 similarity index 100% rename from client/resources/nature2/Blends/TreeNoLeavesSmall.blend1 rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeNoLeavesSmall.blend1 diff --git a/client/resources/nature2/Blends/TreeTexture.png b/packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeTexture.png similarity index 100% rename from client/resources/nature2/Blends/TreeTexture.png rename to packages/quick-3d-mmo-client/src/resources/nature2/Blends/TreeTexture.png diff --git a/client/resources/nature2/GLTF/Cloud1.glb b/packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud1.glb similarity index 100% rename from client/resources/nature2/GLTF/Cloud1.glb rename to packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud1.glb diff --git a/client/resources/nature2/GLTF/Cloud2.glb b/packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud2.glb similarity index 100% rename from client/resources/nature2/GLTF/Cloud2.glb rename to packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud2.glb diff --git a/client/resources/nature2/GLTF/Cloud3.glb b/packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud3.glb similarity index 100% rename from client/resources/nature2/GLTF/Cloud3.glb rename to packages/quick-3d-mmo-client/src/resources/nature2/GLTF/Cloud3.glb diff --git a/client/resources/nature2/License.txt b/packages/quick-3d-mmo-client/src/resources/nature2/License.txt similarity index 100% rename from client/resources/nature2/License.txt rename to packages/quick-3d-mmo-client/src/resources/nature2/License.txt diff --git a/client/resources/nature2/OBJ/BigBush.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigBush.mtl similarity index 100% rename from client/resources/nature2/OBJ/BigBush.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigBush.mtl diff --git a/client/resources/nature2/OBJ/BigBush.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigBush.obj similarity index 100% rename from client/resources/nature2/OBJ/BigBush.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigBush.obj diff --git a/client/resources/nature2/OBJ/BigTreeWithLeaves.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigTreeWithLeaves.mtl similarity index 100% rename from client/resources/nature2/OBJ/BigTreeWithLeaves.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigTreeWithLeaves.mtl diff --git a/client/resources/nature2/OBJ/BigTreeWithLeaves.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigTreeWithLeaves.obj similarity index 100% rename from client/resources/nature2/OBJ/BigTreeWithLeaves.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/BigTreeWithLeaves.obj diff --git a/client/resources/nature2/OBJ/Cloud1.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud1.mtl similarity index 100% rename from client/resources/nature2/OBJ/Cloud1.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud1.mtl diff --git a/client/resources/nature2/OBJ/Cloud1.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud1.obj similarity index 100% rename from client/resources/nature2/OBJ/Cloud1.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud1.obj diff --git a/client/resources/nature2/OBJ/Cloud2.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud2.mtl similarity index 100% rename from client/resources/nature2/OBJ/Cloud2.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud2.mtl diff --git a/client/resources/nature2/OBJ/Cloud2.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud2.obj similarity index 100% rename from client/resources/nature2/OBJ/Cloud2.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud2.obj diff --git a/client/resources/nature2/OBJ/Cloud3.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud3.mtl similarity index 100% rename from client/resources/nature2/OBJ/Cloud3.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud3.mtl diff --git a/client/resources/nature2/OBJ/Cloud3.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud3.obj similarity index 100% rename from client/resources/nature2/OBJ/Cloud3.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/Cloud3.obj diff --git a/client/resources/nature2/OBJ/EveryModel.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/EveryModel.mtl similarity index 100% rename from client/resources/nature2/OBJ/EveryModel.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/EveryModel.mtl diff --git a/client/resources/nature2/OBJ/EveryModel.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/EveryModel.obj similarity index 100% rename from client/resources/nature2/OBJ/EveryModel.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/EveryModel.obj diff --git a/client/resources/nature2/OBJ/SmallBush.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallBush.mtl similarity index 100% rename from client/resources/nature2/OBJ/SmallBush.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallBush.mtl diff --git a/client/resources/nature2/OBJ/SmallBush.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallBush.obj similarity index 100% rename from client/resources/nature2/OBJ/SmallBush.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallBush.obj diff --git a/client/resources/nature2/OBJ/SmallTreeWithLeave.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallTreeWithLeave.mtl similarity index 100% rename from client/resources/nature2/OBJ/SmallTreeWithLeave.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallTreeWithLeave.mtl diff --git a/client/resources/nature2/OBJ/SmallTreeWithLeave.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallTreeWithLeave.obj similarity index 100% rename from client/resources/nature2/OBJ/SmallTreeWithLeave.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/SmallTreeWithLeave.obj diff --git a/client/resources/nature2/OBJ/TreeNoLeavesBig.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesBig.mtl similarity index 100% rename from client/resources/nature2/OBJ/TreeNoLeavesBig.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesBig.mtl diff --git a/client/resources/nature2/OBJ/TreeNoLeavesBig.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesBig.obj similarity index 100% rename from client/resources/nature2/OBJ/TreeNoLeavesBig.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesBig.obj diff --git a/client/resources/nature2/OBJ/TreeNoLeavesSmall.mtl b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesSmall.mtl similarity index 100% rename from client/resources/nature2/OBJ/TreeNoLeavesSmall.mtl rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesSmall.mtl diff --git a/client/resources/nature2/OBJ/TreeNoLeavesSmall.obj b/packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesSmall.obj similarity index 100% rename from client/resources/nature2/OBJ/TreeNoLeavesSmall.obj rename to packages/quick-3d-mmo-client/src/resources/nature2/OBJ/TreeNoLeavesSmall.obj diff --git a/client/resources/terrain/README.txt b/packages/quick-3d-mmo-client/src/resources/terrain/README.txt similarity index 100% rename from client/resources/terrain/README.txt rename to packages/quick-3d-mmo-client/src/resources/terrain/README.txt diff --git a/client/resources/terrain/bark1-albedo.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/bark1-albedo.jpg similarity index 100% rename from client/resources/terrain/bark1-albedo.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/bark1-albedo.jpg diff --git a/client/resources/terrain/bark1-albedo.png b/packages/quick-3d-mmo-client/src/resources/terrain/bark1-albedo.png similarity index 100% rename from client/resources/terrain/bark1-albedo.png rename to packages/quick-3d-mmo-client/src/resources/terrain/bark1-albedo.png diff --git a/client/resources/terrain/bark1-normal3.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/bark1-normal3.jpg similarity index 100% rename from client/resources/terrain/bark1-normal3.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/bark1-normal3.jpg diff --git a/client/resources/terrain/bark1-normal3.png b/packages/quick-3d-mmo-client/src/resources/terrain/bark1-normal3.png similarity index 100% rename from client/resources/terrain/bark1-normal3.png rename to packages/quick-3d-mmo-client/src/resources/terrain/bark1-normal3.png diff --git a/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 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/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 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/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 client/resources/terrain/grass1-albedo-512.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/grass1-albedo-512.jpg diff --git a/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 client/resources/terrain/grass1-albedo3-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/grass1-albedo3-1024.png diff --git a/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 client/resources/terrain/grass1-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/grass1-normal-1024.jpg diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/terrain/sandyground-albedo-1024.png rename to packages/quick-3d-mmo-client/src/resources/terrain/sandyground-albedo-1024.png diff --git a/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 client/resources/terrain/sandyground-normal-1024.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/sandyground-normal-1024.jpg diff --git a/client/resources/terrain/simplex-noise.png b/packages/quick-3d-mmo-client/src/resources/terrain/simplex-noise.png similarity index 100% rename from client/resources/terrain/simplex-noise.png rename to packages/quick-3d-mmo-client/src/resources/terrain/simplex-noise.png diff --git a/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 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/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 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/client/resources/terrain/space-negx.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-negx.jpg similarity index 100% rename from client/resources/terrain/space-negx.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-negx.jpg diff --git a/client/resources/terrain/space-negy.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-negy.jpg similarity index 100% rename from client/resources/terrain/space-negy.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-negy.jpg diff --git a/client/resources/terrain/space-negz.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-negz.jpg similarity index 100% rename from client/resources/terrain/space-negz.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-negz.jpg diff --git a/client/resources/terrain/space-posx.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-posx.jpg similarity index 100% rename from client/resources/terrain/space-posx.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-posx.jpg diff --git a/client/resources/terrain/space-posy.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-posy.jpg similarity index 100% rename from client/resources/terrain/space-posy.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-posy.jpg diff --git a/client/resources/terrain/space-posz.jpg b/packages/quick-3d-mmo-client/src/resources/terrain/space-posz.jpg similarity index 100% rename from client/resources/terrain/space-posz.jpg rename to packages/quick-3d-mmo-client/src/resources/terrain/space-posz.jpg diff --git a/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 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/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 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/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 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/client/resources/textures/ball.png b/packages/quick-3d-mmo-client/src/resources/textures/ball.png similarity index 100% rename from client/resources/textures/ball.png rename to packages/quick-3d-mmo-client/src/resources/textures/ball.png diff --git a/client/resources/textures/fire.png b/packages/quick-3d-mmo-client/src/resources/textures/fire.png similarity index 100% rename from client/resources/textures/fire.png rename to packages/quick-3d-mmo-client/src/resources/textures/fire.png diff --git a/client/resources/textures/whitePuff14.png b/packages/quick-3d-mmo-client/src/resources/textures/whitePuff14.png similarity index 100% rename from client/resources/textures/whitePuff14.png rename to packages/quick-3d-mmo-client/src/resources/textures/whitePuff14.png diff --git a/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 client/resources/trees/Blends/Birch_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_1.blend diff --git a/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 client/resources/trees/Blends/Birch_10.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_10.blend diff --git a/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 client/resources/trees/Blends/Birch_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_2.blend diff --git a/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 client/resources/trees/Blends/Birch_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_3.blend diff --git a/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 client/resources/trees/Blends/Birch_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_4.blend diff --git a/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 client/resources/trees/Blends/Birch_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_5.blend diff --git a/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 client/resources/trees/Blends/Birch_6.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_6.blend diff --git a/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 client/resources/trees/Blends/Birch_7.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_7.blend diff --git a/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 client/resources/trees/Blends/Birch_8.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_8.blend diff --git a/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 client/resources/trees/Blends/Birch_9.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Birch_9.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_1.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_10.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_10.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_2.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_3.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_4.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_5.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_6.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_6.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_7.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_7.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_8.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_8.blend diff --git a/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 client/resources/trees/Blends/DeadBirch_9.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadBirch_9.blend diff --git a/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 client/resources/trees/Blends/DeadTree_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_1.blend diff --git a/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 client/resources/trees/Blends/DeadTree_10.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_10.blend diff --git a/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 client/resources/trees/Blends/DeadTree_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_2.blend diff --git a/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 client/resources/trees/Blends/DeadTree_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_3.blend diff --git a/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 client/resources/trees/Blends/DeadTree_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_4.blend diff --git a/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 client/resources/trees/Blends/DeadTree_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_5.blend diff --git a/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 client/resources/trees/Blends/DeadTree_6.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_6.blend diff --git a/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 client/resources/trees/Blends/DeadTree_7.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_7.blend diff --git a/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 client/resources/trees/Blends/DeadTree_8.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_8.blend diff --git a/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 client/resources/trees/Blends/DeadTree_9.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/DeadTree_9.blend diff --git a/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 client/resources/trees/Blends/Pine_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_1.blend diff --git a/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 client/resources/trees/Blends/Pine_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_2.blend diff --git a/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 client/resources/trees/Blends/Pine_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_3.blend diff --git a/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 client/resources/trees/Blends/Pine_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_4.blend diff --git a/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 client/resources/trees/Blends/Pine_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Pine_5.blend diff --git a/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 client/resources/trees/Blends/Tree_1.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_1.blend diff --git a/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 client/resources/trees/Blends/Tree_10.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_10.blend diff --git a/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 client/resources/trees/Blends/Tree_2.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_2.blend diff --git a/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 client/resources/trees/Blends/Tree_3.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_3.blend diff --git a/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 client/resources/trees/Blends/Tree_4.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_4.blend diff --git a/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 client/resources/trees/Blends/Tree_5.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_5.blend diff --git a/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 client/resources/trees/Blends/Tree_6.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_6.blend diff --git a/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 client/resources/trees/Blends/Tree_7.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_7.blend diff --git a/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 client/resources/trees/Blends/Tree_8.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_8.blend diff --git a/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 client/resources/trees/Blends/Tree_9.blend rename to packages/quick-3d-mmo-client/src/resources/trees/Blends/Tree_9.blend diff --git a/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 client/resources/trees/FBX/Birch_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_1.fbx diff --git a/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 client/resources/trees/FBX/Birch_10.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_10.fbx diff --git a/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 client/resources/trees/FBX/Birch_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_2.fbx diff --git a/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 client/resources/trees/FBX/Birch_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_3.fbx diff --git a/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 client/resources/trees/FBX/Birch_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_4.fbx diff --git a/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 client/resources/trees/FBX/Birch_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_5.fbx diff --git a/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 client/resources/trees/FBX/Birch_6.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_6.fbx diff --git a/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 client/resources/trees/FBX/Birch_7.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_7.fbx diff --git a/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 client/resources/trees/FBX/Birch_8.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_8.fbx diff --git a/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 client/resources/trees/FBX/Birch_9.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Birch_9.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_1.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_10.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_10.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_2.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_3.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_4.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_5.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_6.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_6.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_7.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_7.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_8.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_8.fbx diff --git a/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 client/resources/trees/FBX/DeadBirch_9.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadBirch_9.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_1.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_10.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_10.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_2.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_3.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_4.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_5.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_6.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_6.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_7.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_7.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_8.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_8.fbx diff --git a/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 client/resources/trees/FBX/DeadTree_9.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/DeadTree_9.fbx diff --git a/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 client/resources/trees/FBX/Pine_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_1.fbx diff --git a/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 client/resources/trees/FBX/Pine_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_2.fbx diff --git a/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 client/resources/trees/FBX/Pine_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_3.fbx diff --git a/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 client/resources/trees/FBX/Pine_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_4.fbx diff --git a/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 client/resources/trees/FBX/Pine_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Pine_5.fbx diff --git a/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 client/resources/trees/FBX/Tree_1.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_1.fbx diff --git a/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 client/resources/trees/FBX/Tree_10.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_10.fbx diff --git a/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 client/resources/trees/FBX/Tree_2.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_2.fbx diff --git a/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 client/resources/trees/FBX/Tree_3.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_3.fbx diff --git a/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 client/resources/trees/FBX/Tree_4.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_4.fbx diff --git a/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 client/resources/trees/FBX/Tree_5.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_5.fbx diff --git a/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 client/resources/trees/FBX/Tree_6.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_6.fbx diff --git a/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 client/resources/trees/FBX/Tree_7.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_7.fbx diff --git a/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 client/resources/trees/FBX/Tree_8.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_8.fbx diff --git a/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 client/resources/trees/FBX/Tree_9.fbx rename to packages/quick-3d-mmo-client/src/resources/trees/FBX/Tree_9.fbx diff --git a/client/resources/trees/License.txt b/packages/quick-3d-mmo-client/src/resources/trees/License.txt similarity index 100% rename from client/resources/trees/License.txt rename to packages/quick-3d-mmo-client/src/resources/trees/License.txt diff --git a/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 client/resources/trees/OBJ/Birch_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_1.mtl diff --git a/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 client/resources/trees/OBJ/Birch_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_1.obj diff --git a/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 client/resources/trees/OBJ/Birch_10.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_10.mtl diff --git a/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 client/resources/trees/OBJ/Birch_10.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_10.obj diff --git a/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 client/resources/trees/OBJ/Birch_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_2.mtl diff --git a/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 client/resources/trees/OBJ/Birch_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_2.obj diff --git a/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 client/resources/trees/OBJ/Birch_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_3.mtl diff --git a/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 client/resources/trees/OBJ/Birch_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_3.obj diff --git a/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 client/resources/trees/OBJ/Birch_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_4.mtl diff --git a/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 client/resources/trees/OBJ/Birch_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_4.obj diff --git a/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 client/resources/trees/OBJ/Birch_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_5.mtl diff --git a/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 client/resources/trees/OBJ/Birch_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_5.obj diff --git a/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 client/resources/trees/OBJ/Birch_6.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_6.mtl diff --git a/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 client/resources/trees/OBJ/Birch_6.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_6.obj diff --git a/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 client/resources/trees/OBJ/Birch_7.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_7.mtl diff --git a/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 client/resources/trees/OBJ/Birch_7.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_7.obj diff --git a/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 client/resources/trees/OBJ/Birch_8.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_8.mtl diff --git a/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 client/resources/trees/OBJ/Birch_8.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_8.obj diff --git a/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 client/resources/trees/OBJ/Birch_9.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_9.mtl diff --git a/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 client/resources/trees/OBJ/Birch_9.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Birch_9.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_1.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_1.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_10.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_10.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_10.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_10.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_2.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_2.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_3.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_3.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_4.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_4.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_5.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_5.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_6.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_6.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_6.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_6.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_7.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_7.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_7.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_7.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_8.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_8.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_8.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_8.obj diff --git a/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 client/resources/trees/OBJ/DeadBirch_9.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_9.mtl diff --git a/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 client/resources/trees/OBJ/DeadBirch_9.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadBirch_9.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_1.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_1.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_10.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_10.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_10.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_10.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_2.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_2.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_3.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_3.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_4.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_4.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_5.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_5.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_6.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_6.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_6.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_6.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_7.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_7.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_7.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_7.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_8.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_8.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_8.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_8.obj diff --git a/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 client/resources/trees/OBJ/DeadTree_9.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_9.mtl diff --git a/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 client/resources/trees/OBJ/DeadTree_9.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/DeadTree_9.obj diff --git a/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 client/resources/trees/OBJ/Pine_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_1.mtl diff --git a/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 client/resources/trees/OBJ/Pine_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_1.obj diff --git a/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 client/resources/trees/OBJ/Pine_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_2.mtl diff --git a/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 client/resources/trees/OBJ/Pine_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_2.obj diff --git a/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 client/resources/trees/OBJ/Pine_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_3.mtl diff --git a/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 client/resources/trees/OBJ/Pine_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_3.obj diff --git a/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 client/resources/trees/OBJ/Pine_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_4.mtl diff --git a/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 client/resources/trees/OBJ/Pine_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_4.obj diff --git a/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 client/resources/trees/OBJ/Pine_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_5.mtl diff --git a/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 client/resources/trees/OBJ/Pine_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Pine_5.obj diff --git a/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 client/resources/trees/OBJ/Tree_1.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_1.mtl diff --git a/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 client/resources/trees/OBJ/Tree_1.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_1.obj diff --git a/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 client/resources/trees/OBJ/Tree_10.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_10.mtl diff --git a/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 client/resources/trees/OBJ/Tree_10.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_10.obj diff --git a/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 client/resources/trees/OBJ/Tree_2.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_2.mtl diff --git a/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 client/resources/trees/OBJ/Tree_2.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_2.obj diff --git a/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 client/resources/trees/OBJ/Tree_3.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_3.mtl diff --git a/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 client/resources/trees/OBJ/Tree_3.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_3.obj diff --git a/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 client/resources/trees/OBJ/Tree_4.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_4.mtl diff --git a/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 client/resources/trees/OBJ/Tree_4.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_4.obj diff --git a/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 client/resources/trees/OBJ/Tree_5.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_5.mtl diff --git a/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 client/resources/trees/OBJ/Tree_5.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_5.obj diff --git a/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 client/resources/trees/OBJ/Tree_6.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_6.mtl diff --git a/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 client/resources/trees/OBJ/Tree_6.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_6.obj diff --git a/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 client/resources/trees/OBJ/Tree_7.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_7.mtl diff --git a/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 client/resources/trees/OBJ/Tree_7.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_7.obj diff --git a/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 client/resources/trees/OBJ/Tree_8.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_8.mtl diff --git a/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 client/resources/trees/OBJ/Tree_8.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_8.obj diff --git a/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 client/resources/trees/OBJ/Tree_9.mtl rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_9.mtl diff --git a/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 client/resources/trees/OBJ/Tree_9.obj rename to packages/quick-3d-mmo-client/src/resources/trees/OBJ/Tree_9.obj diff --git a/client/resources/trees/Preview.jpg b/packages/quick-3d-mmo-client/src/resources/trees/Preview.jpg similarity index 100% rename from client/resources/trees/Preview.jpg rename to packages/quick-3d-mmo-client/src/resources/trees/Preview.jpg diff --git a/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 client/resources/trees/Textures/Birch_Bark.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Birch_Bark.png diff --git a/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 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/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 client/resources/trees/Textures/Leaves_Blue.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Leaves_Blue.png diff --git a/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 client/resources/trees/Textures/Pine_Leaves.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Pine_Leaves.png diff --git a/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 client/resources/trees/Textures/Tree_Bark.jpg rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Tree_Bark.jpg diff --git a/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 client/resources/trees/Textures/Tree_Leaves.png rename to packages/quick-3d-mmo-client/src/resources/trees/Textures/Tree_Leaves.png diff --git a/client/resources/weapons/Blends/Arrow.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Arrow.blend similarity index 100% rename from client/resources/weapons/Blends/Arrow.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Arrow.blend diff --git a/client/resources/weapons/Blends/Axe.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe.blend similarity index 100% rename from client/resources/weapons/Blends/Axe.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe.blend diff --git a/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 client/resources/weapons/Blends/Axe_Double.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe_Double.blend diff --git a/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 client/resources/weapons/Blends/Axe_Small.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Axe_Small.blend diff --git a/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 client/resources/weapons/Blends/Bow_Evil.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Evil.blend diff --git a/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 client/resources/weapons/Blends/Bow_Golden.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Golden.blend diff --git a/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 client/resources/weapons/Blends/Bow_Wooden.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Wooden.blend diff --git a/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 client/resources/weapons/Blends/Bow_Wooden2.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Bow_Wooden2.blend diff --git a/client/resources/weapons/Blends/Claymore.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Claymore.blend similarity index 100% rename from client/resources/weapons/Blends/Claymore.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Claymore.blend diff --git a/client/resources/weapons/Blends/Dagger.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Dagger.blend similarity index 100% rename from client/resources/weapons/Blends/Dagger.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Dagger.blend diff --git a/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 client/resources/weapons/Blends/Dagger_2.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Dagger_2.blend diff --git a/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 client/resources/weapons/Blends/Hammer_Double.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Hammer_Double.blend diff --git a/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 client/resources/weapons/Blends/Hammer_Small.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Hammer_Small.blend diff --git a/client/resources/weapons/Blends/Scythe.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Scythe.blend similarity index 100% rename from client/resources/weapons/Blends/Scythe.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Scythe.blend diff --git a/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 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/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 client/resources/weapons/Blends/Shield_Heater.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Heater.blend diff --git a/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 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/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 client/resources/weapons/Blends/Shield_Round.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Shield_Round.blend diff --git a/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 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/client/resources/weapons/Blends/Spear.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Spear.blend similarity index 100% rename from client/resources/weapons/Blends/Spear.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Spear.blend diff --git a/client/resources/weapons/Blends/Sword.blend b/packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword.blend similarity index 100% rename from client/resources/weapons/Blends/Sword.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword.blend diff --git a/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 client/resources/weapons/Blends/Sword_2.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_2.blend diff --git a/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 client/resources/weapons/Blends/Sword_Big.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_Big.blend diff --git a/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 client/resources/weapons/Blends/Sword_Golden.blend rename to packages/quick-3d-mmo-client/src/resources/weapons/Blends/Sword_Golden.blend diff --git a/client/resources/weapons/FBX/Arrow.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Arrow.fbx similarity index 100% rename from client/resources/weapons/FBX/Arrow.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Arrow.fbx diff --git a/client/resources/weapons/FBX/Axe.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe.fbx similarity index 100% rename from client/resources/weapons/FBX/Axe.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe.fbx diff --git a/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 client/resources/weapons/FBX/Axe_Double.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe_Double.fbx diff --git a/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 client/resources/weapons/FBX/Axe_Small.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Axe_Small.fbx diff --git a/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 client/resources/weapons/FBX/Bow_Evil.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Evil.fbx diff --git a/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 client/resources/weapons/FBX/Bow_Golden.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Golden.fbx diff --git a/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 client/resources/weapons/FBX/Bow_Wooden.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Wooden.fbx diff --git a/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 client/resources/weapons/FBX/Bow_Wooden2.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Bow_Wooden2.fbx diff --git a/client/resources/weapons/FBX/Claymore.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Claymore.fbx similarity index 100% rename from client/resources/weapons/FBX/Claymore.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Claymore.fbx diff --git a/client/resources/weapons/FBX/Dagger.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Dagger.fbx similarity index 100% rename from client/resources/weapons/FBX/Dagger.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Dagger.fbx diff --git a/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 client/resources/weapons/FBX/Dagger_2.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Dagger_2.fbx diff --git a/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 client/resources/weapons/FBX/Hammer_Double.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Hammer_Double.fbx diff --git a/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 client/resources/weapons/FBX/Hammer_Small.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Hammer_Small.fbx diff --git a/client/resources/weapons/FBX/Scythe.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Scythe.fbx similarity index 100% rename from client/resources/weapons/FBX/Scythe.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Scythe.fbx diff --git a/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 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/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 client/resources/weapons/FBX/Shield_Heater.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Heater.fbx diff --git a/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 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/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 client/resources/weapons/FBX/Shield_Round.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Shield_Round.fbx diff --git a/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 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/client/resources/weapons/FBX/Spear.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Spear.fbx similarity index 100% rename from client/resources/weapons/FBX/Spear.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Spear.fbx diff --git a/client/resources/weapons/FBX/Sword.fbx b/packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword.fbx similarity index 100% rename from client/resources/weapons/FBX/Sword.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword.fbx diff --git a/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 client/resources/weapons/FBX/Sword_2.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_2.fbx diff --git a/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 client/resources/weapons/FBX/Sword_Big.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_Big.fbx diff --git a/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 client/resources/weapons/FBX/Sword_Golden.fbx rename to packages/quick-3d-mmo-client/src/resources/weapons/FBX/Sword_Golden.fbx diff --git a/client/resources/weapons/License.txt b/packages/quick-3d-mmo-client/src/resources/weapons/License.txt similarity index 100% rename from client/resources/weapons/License.txt rename to packages/quick-3d-mmo-client/src/resources/weapons/License.txt diff --git a/client/resources/weapons/OBJ/Arrow.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Arrow.mtl similarity index 100% rename from client/resources/weapons/OBJ/Arrow.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Arrow.mtl diff --git a/client/resources/weapons/OBJ/Arrow.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Arrow.obj similarity index 100% rename from client/resources/weapons/OBJ/Arrow.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Arrow.obj diff --git a/client/resources/weapons/OBJ/Axe.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe.mtl similarity index 100% rename from client/resources/weapons/OBJ/Axe.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe.mtl diff --git a/client/resources/weapons/OBJ/Axe.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe.obj similarity index 100% rename from client/resources/weapons/OBJ/Axe.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe.obj diff --git a/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 client/resources/weapons/OBJ/Axe_Double.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Double.mtl diff --git a/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 client/resources/weapons/OBJ/Axe_Double.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Double.obj diff --git a/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 client/resources/weapons/OBJ/Axe_Small.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Small.mtl diff --git a/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 client/resources/weapons/OBJ/Axe_Small.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Axe_Small.obj diff --git a/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 client/resources/weapons/OBJ/Bow_Evil.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Evil.mtl diff --git a/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 client/resources/weapons/OBJ/Bow_Evil.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Evil.obj diff --git a/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 client/resources/weapons/OBJ/Bow_Golden.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Golden.mtl diff --git a/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 client/resources/weapons/OBJ/Bow_Golden.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Golden.obj diff --git a/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 client/resources/weapons/OBJ/Bow_Wooden.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden.mtl diff --git a/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 client/resources/weapons/OBJ/Bow_Wooden.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden.obj diff --git a/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 client/resources/weapons/OBJ/Bow_Wooden2.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden2.mtl diff --git a/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 client/resources/weapons/OBJ/Bow_Wooden2.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Bow_Wooden2.obj diff --git a/client/resources/weapons/OBJ/Claymore.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Claymore.mtl similarity index 100% rename from client/resources/weapons/OBJ/Claymore.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Claymore.mtl diff --git a/client/resources/weapons/OBJ/Claymore.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Claymore.obj similarity index 100% rename from client/resources/weapons/OBJ/Claymore.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Claymore.obj diff --git a/client/resources/weapons/OBJ/Dagger.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger.mtl similarity index 100% rename from client/resources/weapons/OBJ/Dagger.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger.mtl diff --git a/client/resources/weapons/OBJ/Dagger.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger.obj similarity index 100% rename from client/resources/weapons/OBJ/Dagger.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger.obj diff --git a/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 client/resources/weapons/OBJ/Dagger_2.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger_2.mtl diff --git a/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 client/resources/weapons/OBJ/Dagger_2.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Dagger_2.obj diff --git a/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 client/resources/weapons/OBJ/Hammer_Double.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Double.mtl diff --git a/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 client/resources/weapons/OBJ/Hammer_Double.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Double.obj diff --git a/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 client/resources/weapons/OBJ/Hammer_Small.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Small.mtl diff --git a/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 client/resources/weapons/OBJ/Hammer_Small.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Hammer_Small.obj diff --git a/client/resources/weapons/OBJ/Scythe.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Scythe.mtl similarity index 100% rename from client/resources/weapons/OBJ/Scythe.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Scythe.mtl diff --git a/client/resources/weapons/OBJ/Scythe.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Scythe.obj similarity index 100% rename from client/resources/weapons/OBJ/Scythe.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Scythe.obj diff --git a/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 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/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 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/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 client/resources/weapons/OBJ/Shield_Heater.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater.mtl diff --git a/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 client/resources/weapons/OBJ/Shield_Heater.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Heater.obj diff --git a/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 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/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 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/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 client/resources/weapons/OBJ/Shield_Round.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round.mtl diff --git a/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 client/resources/weapons/OBJ/Shield_Round.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Shield_Round.obj diff --git a/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 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/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 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/client/resources/weapons/OBJ/Spear.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Spear.mtl similarity index 100% rename from client/resources/weapons/OBJ/Spear.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Spear.mtl diff --git a/client/resources/weapons/OBJ/Spear.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Spear.obj similarity index 100% rename from client/resources/weapons/OBJ/Spear.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Spear.obj diff --git a/client/resources/weapons/OBJ/Sword.mtl b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword.mtl similarity index 100% rename from client/resources/weapons/OBJ/Sword.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword.mtl diff --git a/client/resources/weapons/OBJ/Sword.obj b/packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword.obj similarity index 100% rename from client/resources/weapons/OBJ/Sword.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword.obj diff --git a/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 client/resources/weapons/OBJ/Sword_2.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_2.mtl diff --git a/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 client/resources/weapons/OBJ/Sword_2.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_2.obj diff --git a/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 client/resources/weapons/OBJ/Sword_Big.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Big.mtl diff --git a/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 client/resources/weapons/OBJ/Sword_Big.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Big.obj diff --git a/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 client/resources/weapons/OBJ/Sword_Golden.mtl rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Golden.mtl diff --git a/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 client/resources/weapons/OBJ/Sword_Golden.obj rename to packages/quick-3d-mmo-client/src/resources/weapons/OBJ/Sword_Golden.obj diff --git a/client/resources/weapons/Preview.png b/packages/quick-3d-mmo-client/src/resources/weapons/Preview.png similarity index 100% rename from client/resources/weapons/Preview.png rename to packages/quick-3d-mmo-client/src/resources/weapons/Preview.png diff --git a/packages/quick-3d-mmo-client/src/scripts/attacker-controller.ts b/packages/quick-3d-mmo-client/src/scripts/attacker-controller.ts new file mode 100644 index 00000000..c7df262b --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/attacker-controller.ts @@ -0,0 +1,32 @@ +import * as THREE from 'three'; + +import { Component } from './entity'; +import { Constants } from 'quick-3d-mmo-shared' +const { EVENT_TYPES } = { ...Constants }; + +class AttackController extends Component { + action_: any; + + constructor() { + super(); + this.action_ = null; + } + + InitComponent() { + this._RegisterHandler(EVENT_TYPES.PLAYER_ACTION, (m: { action: typeof 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, + }); + } + } +}; + +export { AttackController } \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts b/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts new file mode 100644 index 00000000..bfc15c29 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/blood-effect.ts @@ -0,0 +1,246 @@ +import * as THREE from 'three'; + +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; +import { Constants } from 'quick-3d-mmo-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: './src/resources/textures/whitePuff14.png', + }); + this.fireFX_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './src/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 || !e?.attacker) { + continue; + } + + // Another hack + const hc = e?.attacker?.GetComponent('HealthComponent'); + if(!hc?.stats_?.desc) { + return; + } + 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.js b/packages/quick-3d-mmo-client/src/scripts/entity.ts similarity index 78% rename from client/src/entity.js rename to packages/quick-3d-mmo-client/src/scripts/entity.ts index 1fea36b0..b749904c 100644 --- a/client/src/entity.js +++ b/packages/quick-3d-mmo-client/src/scripts/entity.ts @@ -1,9 +1,17 @@ -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'; +import {Constants} from 'quick-3d-mmo-shared'; +const {UPDATE_POSITION} = Constants.EVENT_TYPES; + +class Entity { + _name: any; + _components: {}; + _position: THREE.Vector3; + _rotation: THREE.Quaternion; + _handlers: {}; + parent_: any; + dead_: boolean; + Account: any; + constructor() { this._name = null; this._components = {}; @@ -78,9 +86,10 @@ export const 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); } @@ -89,7 +98,7 @@ export const entity = (() => { SetPosition(p) { this._position.copy(p); this.Broadcast({ - topic: 'update.position', + topic: UPDATE_POSITION, value: this._position, }); } @@ -118,7 +127,8 @@ export const entity = (() => { }; class Component { - constructor() { + parent_: any; + constructor(params?) { this.parent_ = null; } @@ -160,9 +170,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/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/quick-3d-mmo-client/src/scripts/finite-state-machine.ts b/packages/quick-3d-mmo-client/src/scripts/finite-state-machine.ts new file mode 100644 index 00000000..1c146581 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/finite-state-machine.ts @@ -0,0 +1,37 @@ + +class FiniteStateMachine { + _states: {}; + _currentState: any; + + 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 } \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/floating-name.ts b/packages/quick-3d-mmo-client/src/scripts/floating-name.ts new file mode 100644 index 00000000..e8841c8a --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/floating-name.ts @@ -0,0 +1,98 @@ +import * as THREE from 'three'; + +import { Component } from './entity'; + +import { Constants, Defs } from 'quick-3d-mmo-shared'; + +const { EVENT_TYPES, CHARACTER_MODELS } = {...Constants, ...Defs}; + +class FloatingName extends Component { + params_: { + desc: { + character: { + class: string + }, + account: { + name: string + } + } + }; + visible_: boolean; + sprite_: any; + element_: HTMLCanvasElement; + context2d_: any; + + 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: any) { + 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 } \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/gltf-component.ts b/packages/quick-3d-mmo-client/src/scripts/gltf-component.ts new file mode 100644 index 00000000..7cb19117 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/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 'quick-3d-mmo-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(EVENT_TYPES.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(EVENT_TYPES.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: EVENT_TYPES.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.js b/packages/quick-3d-mmo-client/src/scripts/health-bar.ts similarity index 79% rename from client/src/health-bar.js rename to packages/quick-3d-mmo-client/src/scripts/health-bar.ts index c7aa1229..adc09732 100644 --- a/client/src/health-bar.js +++ b/packages/quick-3d-mmo-client/src/scripts/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 as math } from 'quick-3d-mmo-shared'; - -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/packages/quick-3d-mmo-client/src/scripts/health-component.ts b/packages/quick-3d-mmo-client/src/scripts/health-component.ts new file mode 100644 index 00000000..724603be --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/health-component.ts @@ -0,0 +1,131 @@ +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 { + 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/packages/quick-3d-mmo-client/src/scripts/inventory-controller.ts b/packages/quick-3d-mmo-client/src/scripts/inventory-controller.ts new file mode 100644 index 00000000..627928a4 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/inventory-controller.ts @@ -0,0 +1,216 @@ +import {Constants} from 'quick-3d-mmo-shared'; +import { Component } from './entity'; + +const { EVENT_TYPES, INVENTORY_TYPES, KNOWN_ENTITIES } = Constants; + +class InventoryDatabaseController extends Component { + items_: {}; + constructor() { + super(); + + this.items_ = {}; + } + + AddItem(name, item) { + this.items_[name] = item; + } + + Find(name) { + return this.items_[name]; + } +}; + +class UIInventoryController extends Component { + inventory_: any; + 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) { + const div = document.getElementById(slot); + const item = this.GetItemDefinition_(itemName); + if (item?.renderParams?.icon) { + const path = './src/resources/icons/weapons/' + item.renderParams.icon; + div.style.backgroundImage = "url('" + path + "')"; + } else { + div.style.backgroundImage = ''; + } + } +}; + + +class InventoryController extends Component { + inventory_: {}; + 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 { + _params: any; + 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/quick-3d-mmo-client/src/scripts/level-up-component.ts b/packages/quick-3d-mmo-client/src/scripts/level-up-component.ts new file mode 100644 index 00000000..e0e97311 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/level-up-component.ts @@ -0,0 +1,65 @@ +import * as THREE from 'three'; + +import { ParticleSystem } from "./particle-system"; +import { Component, Entity } from "./entity"; + +class LevelUpComponentSpawner extends Component { + _params: any; + 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 { + _params: any; + _particles: any; + constructor(params) { + super(); + this._params = params; + + this._particles = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './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, +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/load-controller.ts b/packages/quick-3d-mmo-client/src/scripts/load-controller.ts new file mode 100644 index 00000000..953fdd9c --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/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/packages/quick-3d-mmo-client/src/scripts/loading-manager.ts b/packages/quick-3d-mmo-client/src/scripts/loading-manager.ts new file mode 100644 index 00000000..b700a678 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/loading-manager.ts @@ -0,0 +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 = () => { }; + } + + 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 +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/main.ts b/packages/quick-3d-mmo-client/src/scripts/main.ts new file mode 100644 index 00000000..5ce8c087 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/main.ts @@ -0,0 +1,170 @@ +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 'quick-3d-mmo-shared'; +import { ThreeJSController } from './threejs_component'; + +const { WEAPONS_DATA, DOM_IDS, KNOWN_ENTITIES, NAMED_COMPONENTS, EntityManager, SpatialHashGrid } = { ...Constants, ...Defs, ...aEntityManager, ...aSpatialHashGrid }; + +class CrappyMMOAttempt { + entityManager_: any; + grid_: any; + previousRAF_: any; + _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(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_(); + }; + } + + OnGameStarted_() { + // this.CreateGUI_(); + this.grid_ = new SpatialHashGrid( + [[-1000, -1000], [1000, 1000]], [100, 100]); + + this.LoadControllers_(); + this.LoadPlayer_(); + + this.previousRAF_ = null; + this.RAF_(); + } + + + 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_; + 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: KNOWN_ENTITIES.PLAYER, + 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) => { + // console.log("RAF_()") + if (this.previousRAF_ === null) { + this.previousRAF_ = t; + } + + this.threejs_.render(this.scene_, this.camera_); + this.Step_(t - this.previousRAF_); + this.previousRAF_ = t; + + this.RAF_(); + }); + } + + 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/quick-3d-mmo-client/src/scripts/network-controller.ts b/packages/quick-3d-mmo-client/src/scripts/network-controller.ts new file mode 100644 index 00000000..4ed332bd --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/network-controller.ts @@ -0,0 +1,165 @@ +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'; +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: true, + transports: ['websocket'], + timeout: 10000, + }); + + this.socket_.on(EVENT_TYPES.CONNECT, () => { + 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 KNOWN_ENTITIES.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 } \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/network-entity-controller.ts b/packages/quick-3d-mmo-client/src/scripts/network-entity-controller.ts new file mode 100644 index 00000000..034909a5 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/network-entity-controller.ts @@ -0,0 +1,112 @@ +import * as THREE from 'three'; + +import { Component } from './entity'; +import { Constants } from 'quick-3d-mmo-shared'; + +const { EVENT_TYPES } = Constants; + +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; + } + + 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/quick-3d-mmo-client/src/scripts/network-player-controller.ts b/packages/quick-3d-mmo-client/src/scripts/network-player-controller.ts new file mode 100644 index 00000000..1e340aa1 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/network-player-controller.ts @@ -0,0 +1,93 @@ +import * as THREE from 'three'; + +import { Component } from './entity'; +import { Constants } from 'quick-3d-mmo-shared'; + +const { EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS } = Constants; + +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])); + } + + 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 } \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts b/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts new file mode 100644 index 00000000..da543606 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/npc-entity.ts @@ -0,0 +1,183 @@ +import * as THREE from 'three'; + +import { Component } from './entity'; +import { CharacterFSM, BasicCharacterControllerProxy } from './player-entity' +import { Constants, Defs } from 'quick-3d-mmo-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(EVENT_TYPES.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_() { + 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'); + 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/packages/quick-3d-mmo-client/src/scripts/particle-system.ts b/packages/quick-3d-mmo-client/src/scripts/particle-system.ts new file mode 100644 index 00000000..981447a5 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/particle-system.ts @@ -0,0 +1,340 @@ +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 { + points_: any[]; + _lerp: any; + 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 { + 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; + } + + 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 { + 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.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 +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/player-entity.ts b/packages/quick-3d-mmo-client/src/scripts/player-entity.ts new file mode 100644 index 00000000..a200bdf0 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/player-entity.ts @@ -0,0 +1,303 @@ +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 'quick-3d-mmo-shared'; + +const { ANIM_TYPES, EVENT_TYPES, KNOWN_ENTITIES, NAMED_COMPONENTS, STATE_TYPES, CHARACTER_MODELS, ENTITY_DRAW_DISTANCE } = {...Constants, ...Defs}; + +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( + EVENT_TYPES.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) { + if(!this.stateMachine_) { + console.log("Couldn't find state machine"); + } + 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) { + c.entity.SetDead() + return false; + } + return h.Health > 0; + }; + + const grid = this.GetComponent('SpatialGridController'); + const nearby = grid.FindNearbyEntities(ENTITY_DRAW_DISTANCE).filter(e => _IsAlive(e)); + const collisions = []; + + 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; + + // 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; + } + + 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, +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/player-input.ts b/packages/quick-3d-mmo-client/src/scripts/player-input.ts new file mode 100644 index 00000000..8362ed41 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/player-input.ts @@ -0,0 +1,144 @@ +import * as THREE from 'three'; + +import { Constants } from 'quick-3d-mmo-shared'; +import { Component } from "./entity"; + +const { DOM_IDS, EVENT_TYPES } = Constants; + +class PickableComponent extends Component { + constructor() { + super(); + } + + InitComponent() { + } +}; + +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(); + } + + _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, +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/player-state.ts b/packages/quick-3d-mmo-client/src/scripts/player-state.ts new file mode 100644 index 00000000..a529e885 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/player-state.ts @@ -0,0 +1,313 @@ +import * as THREE from 'three'; + +import { Constants } from 'quick-3d-mmo-shared'; + +const { STATE_TYPES } = Constants; + +class State { + _parent: any; + constructor(parent) { + this._parent = parent; + } + +}; + +class DeathState extends State { + _action: any; + 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?: any, arg1?: any): void { + } +}; + +class DanceState extends State { + _action: any; + _FinishedCallback: () => void; + 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 { + _action: any; + _FinishedCallback: () => void; + 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, +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/quadtree.ts b/packages/quick-3d-mmo-client/src/scripts/quadtree.ts new file mode 100644 index 00000000..b598c7f4 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/quadtree.ts @@ -0,0 +1,175 @@ +import * as THREE from 'three'; + + +class CubeQuadTree { + _params: any; + _sides: any[]; + 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 { + _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; + } + + 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 +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/quest-component.ts b/packages/quick-3d-mmo-client/src/scripts/quest-component.ts new file mode 100644 index 00000000..75f99b1a --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/quest-component.ts @@ -0,0 +1,37 @@ +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!'; +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/packages/quick-3d-mmo-client/src/scripts/render-component.ts b/packages/quick-3d-mmo-client/src/scripts/render-component.ts new file mode 100644 index 00000000..bd745515 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/render-component.ts @@ -0,0 +1,166 @@ +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 'quick-3d-mmo-shared'; +import { EVENT_TYPES } from 'quick-3d-mmo-shared/src/constants'; + +const { KNOWN_ENTITIES } = { ...Constants }; + +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(EVENT_TYPES.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 +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts b/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts new file mode 100644 index 00000000..dc42f205 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/scenery-controller.ts @@ -0,0 +1,280 @@ +import * as THREE from 'three'; + +import { Entity, Component } from './entity'; +import { RenderComponent } from './render-component'; +import { SpatialGridController } from './spatial-grid-controller'; + +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; + +const _SCENERY = { + birch1: { + base: 'Birch_1.fbx', + resourcePath: './src/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: './src/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: './src/resources/nature/FBX/', + names: {}, + scale: 0.025, + biomes: ['arid', 'desert'], + }, + rockMoss1: { + base: 'Rock_Moss_1.fbx', + resourcePath: './src/resources/nature/FBX/', + names: {}, + scale: 0.025, + biomes: ['forest'], + }, + plant1: { + base: 'Plant_1.fbx', + resourcePath: './src/resources/nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest', 'arid'], + }, + grass1: { + base: 'Grass_1.fbx', + resourcePath: './src/resources/nature/FBX/', + names: {}, + scale: 0.05, + biomes: ['forest', 'arid'], + }, + flowers1: { + base: 'Flowers.fbx', + resourcePath: './src/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_: INoise.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_ = []; + } + + 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: 'src/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); + } + } + + // @TODO this should be controlled manually. + 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: 'src/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(KNOWN_ENTITIES.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 +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/sorceror-effect.ts b/packages/quick-3d-mmo-client/src/scripts/sorceror-effect.ts new file mode 100644 index 00000000..f9550c95 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/sorceror-effect.ts @@ -0,0 +1,129 @@ +import * as THREE from 'three'; + +import { ParticleEmitter, ParticleSystem } from "./particle-system"; +import { Component } from "./entity"; +import { Constants } from 'quick-3d-mmo-shared'; + +const { EVENT_TYPES } = Constants; + +class SorcerorEffectEmitter extends ParticleEmitter { + parent_: any; + blend_: number; + + 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 { + params_: any; + particles_: any; + _bones: any; + constructor(params) { + super(); + this.params_ = params; + + this.particles_ = new ParticleSystem({ + camera: params.camera, + parent: params.scene, + texture: './src/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: 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); + } +} + +export { + SorcerorEffect +} \ No newline at end of file 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 new file mode 100644 index 00000000..1235d500 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/spatial-grid-controller.ts @@ -0,0 +1,45 @@ +import { EVENT_TYPES } from 'quick-3d-mmo-shared/src/constants'; +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(EVENT_TYPES.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/packages/quick-3d-mmo-client/src/scripts/spawners.ts b/packages/quick-3d-mmo-client/src/scripts/spawners.ts new file mode 100644 index 00000000..14241fff --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/spawners.ts @@ -0,0 +1,146 @@ +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 { EquipWeapon } 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 'quick-3d-mmo-shared'; +import { KNOWN_ENTITIES } from 'quick-3d-mmo-shared/src/constants'; + +const { CLASS_TYPES_ENUM } = Constants; + +class PlayerSpawner extends Component { + params_: any; + constructor(params) { + super(params); + this.params_ = params; + } + + Spawn(playerParams) { + const params = { + camera: this.params_.camera, + 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 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, KNOWN_ENTITIES.PLAYER); + + return player; + } +}; + +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 ?? "Undefined desc.account.name") { + npc.AddComponent( + new FloatingName({ desc: desc })); + } + npc.AddComponent( + 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) { + npc.AddComponent( + new SorcerorEffect({ + camera: this.params_.camera, + scene: this.params_.scene, + })); + } + + this.Manager.Add(npc, name); + + return npc; + } +} + + + +export { + PlayerSpawner, + NetworkEntitySpawner +} \ No newline at end of file diff --git a/client/src/terrain-builder-threaded-worker.js b/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded-worker.ts similarity index 74% rename from client/src/terrain-builder-threaded-worker.js rename to packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded-worker.ts index 1bd5f051..6a63dca9 100644 --- a/client/src/terrain-builder-threaded-worker.js +++ b/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded-worker.ts @@ -1,30 +1,31 @@ -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' ; +import { TextureSplatter } from './texture-splatter'; -import {math} from '/shared/math.mjs'; -import {noise} from '/shared/noise.mjs'; -import {terrain_height} from '/shared/terrain-height.mjs' ; +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.Noise(params.noiseParams); - this._params.heightGenerators = [new terrain_height.HeightGenerator()]; - - this._params.biomeGenerator = new noise.Noise(params.biomesParams); - this._params.colourNoise = new noise.Noise(params.colourNoiseParams); - this._params.colourGenerator = new texture_splatter.TextureSplatter( - { - biomeGenerator: this._params.biomeGenerator, - colourNoise: this._params.colourNoise - }); + 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) { @@ -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/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded.ts new file mode 100644 index 00000000..634993ca --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/terrain-builder-threaded.ts @@ -0,0 +1,185 @@ +import { TerrainChunk } from './terrain-chunk'; +import TerrainWorker from "worker-loader!./worker"; + + +const _NUM_WORKERS = 4; + +let _IDs = 0; + +class WorkerThread { + _worker: Worker; + _resolve: any; + _id: number; + + constructor(s) { + 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++; + } + + _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 { + _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 = []; + } + + 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 { + _pool: {}; + _old: any[]; + _workerPool: WorkerThreadPool; + _params: any; + constructor(params) { + this._pool = {}; + this._old = []; + this._workerPool = new WorkerThreadPool( + _NUM_WORKERS, './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/quick-3d-mmo-client/src/scripts/terrain-builder.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-builder.ts new file mode 100644 index 00000000..6fc8c6e9 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/terrain-builder.ts @@ -0,0 +1,103 @@ +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(); + } + + 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/quick-3d-mmo-client/src/scripts/terrain-chunk.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-chunk.ts new file mode 100644 index 00000000..ef2183ca --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/terrain-chunk.ts @@ -0,0 +1,65 @@ +import * as THREE from 'three'; + +class TerrainChunk { + _params: any; + _geometry: THREE.BufferGeometry; + _plane: THREE.Mesh; + + 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/quick-3d-mmo-client/src/scripts/terrain-shader.ts b/packages/quick-3d-mmo-client/src/scripts/terrain-shader.ts new file mode 100644 index 00000000..3e42f2ef --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/terrain-shader.ts @@ -0,0 +1,474 @@ + +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, +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/terrain.ts b/packages/quick-3d-mmo-client/src/scripts/terrain.ts new file mode 100644 index 00000000..756c93de --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/terrain.ts @@ -0,0 +1,313 @@ +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 'quick-3d-mmo-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('src/resources/terrain/simplex-png'); + noiseTexture.wrapS = THREE.RepeatWrapping; + noiseTexture.wrapT = THREE.RepeatWrapping; + const diffuse = new TextureAtlas(params); + diffuse.Load('diffuse', [ + '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', [ + '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({ + 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(); + // if(!params?.guiParams) { + // console.log("GUIParams undefined") + // return; + // } + this._InitBiomes(params); + this._InitTerrain(params); + } + + _InitNoise() { + this.heightGenerator_ = new HeightGenerator(); + } + + _InitBiomes(params) { + if (!params?.guiParams) { + console.error("terrainManager guiParamsMissing") + } + 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('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; + + 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) { + 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('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; + } + + _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(_) { + // 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; + } + + 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) { + // console.log("TerrainChunkManager._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/quick-3d-mmo-client/src/scripts/test.ts b/packages/quick-3d-mmo-client/src/scripts/test.ts new file mode 100644 index 00000000..b7f4c892 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/test.ts @@ -0,0 +1,5 @@ + + + +// We got nothing. +// lol nope. from: Jeremy \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/texture-splatter.ts b/packages/quick-3d-mmo-client/src/scripts/texture-splatter.ts new file mode 100644 index 00000000..c81da134 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/texture-splatter.ts @@ -0,0 +1,155 @@ +import * as THREE from 'three'; + +import { Spline, TerrainConstants, Math as math } from 'quick-3d-mmo-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: any[]; + _oceanSpline: any; + _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/quick-3d-mmo-client/src/scripts/textures.ts b/packages/quick-3d-mmo-client/src/scripts/textures.ts new file mode 100644 index 00000000..6fcba29a --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/textures.ts @@ -0,0 +1,104 @@ +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 ?? 600; + canvas.height = image?.height ?? 600; + + 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; + } + + 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() { + 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(); + } + + async _LoadAtlas(atlas, names) { + this._textures[atlas] = { + textures: await Promise.allSettled(names.map( n => this._LoadTexture(n))), + atlas: null, + }; + } +} + +export { + TextureAtlas +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-client/src/scripts/third-person-camera.ts b/packages/quick-3d-mmo-client/src/scripts/third-person-camera.ts new file mode 100644 index 00000000..db4ef941 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/third-person-camera.ts @@ -0,0 +1,58 @@ +import * as THREE from 'three'; +import { Component } from './entity'; +import { Constants } from 'quick-3d-mmo-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/quick-3d-mmo-client/src/scripts/threejs_component.ts b/packages/quick-3d-mmo-client/src/scripts/threejs_component.ts new file mode 100644 index 00000000..1b9cc913 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/threejs_component.ts @@ -0,0 +1,199 @@ +import * as THREE from 'three'; + +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; + +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; + _onWindowResize: any; + + 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 = 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.00005); + + 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([ + '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; + + 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(KNOWN_ENTITIES.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/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/quick-3d-mmo-client/src/scripts/ui-controller.ts b/packages/quick-3d-mmo-client/src/scripts/ui-controller.ts new file mode 100644 index 00000000..e771f6f2 --- /dev/null +++ b/packages/quick-3d-mmo-client/src/scripts/ui-controller.ts @@ -0,0 +1,175 @@ +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 { + _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; + } + + 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) { + let attackerName = "Undefined Attacker"; + let targetName = "Undefined Target"; + + for (let e of events) { + if(e?.attacker) { + return; + } + + if (e?.type != STATE_TYPES.ATTACK) { + continue; + } + if (e?.attacker?.Name != KNOWN_ENTITIES.PLAYER && e.target.Name != KNOWN_ENTITIES.PLAYER) { + continue; + } + 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: '', + 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 } \ No newline at end of file diff --git a/client/src/utils.js b/packages/quick-3d-mmo-client/src/scripts/utils.ts similarity index 100% rename from client/src/utils.js 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/client/base.css b/packages/quick-3d-mmo-client/src/styles/base.css similarity index 90% rename from client/base.css rename to packages/quick-3d-mmo-client/src/styles/base.css index 24a4cd61..e24ea164 100644 --- a/client/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/quick-3d-mmo-server/dist/scripts/login-queue.js b/packages/quick-3d-mmo-server/dist/scripts/login-queue.js new file mode 100644 index 00000000..73c5e94d --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/login-queue.js @@ -0,0 +1,138 @@ +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; +import { Constants } from 'quick-3d-mmo-shared'; +const { EVENT_TYPES, STATE_TYPES } = 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) { + // console.log("Login_Await.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); + // 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({})); + } + 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) { + this.clients = {}; + this.onLogin = onLogin; + } + Add(client) { + // console.log + this.clients[client.ID] = new LoginClient(client, (e) => { this.OnLogin(client, e); }); + } + OnLogin(client, params) { + delete this.clients[client.ID]; + this.onLogin(client, params); + } +} +; +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/quick-3d-mmo-server/dist/scripts/world-client.js b/packages/quick-3d-mmo-server/dist/scripts/world-client.js new file mode 100644 index 00000000..445a8357 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-client.js @@ -0,0 +1,300 @@ +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 { SocketWrapper } from './world-server.js'; +import { Constants, EntityManager as aEntityManager } from 'quick-3d-mmo-shared'; +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); + 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_()); + // console.log("Sent world.player, world.stats") + __classPrivateFieldSet(this, _timeout, _TIMEOUT); + this.entityCache = {}; + // Hack + entity.parent_ = this; + } + Destroy() { + 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; + (_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() { } + 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(ENTITY_DRAW_DISTANCE, 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(ENTITY_DRAW_DISTANCE, 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) => { + console.log(e, this.entity); + return e.ID != this.entity.ID; + }; + 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. + 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(ENTITY_DRAW_DISTANCE).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(STATE_TYPES.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_ = STATE_TYPES.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) { + 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); + } +} +; +class AIState_WaitAttackDone extends AIState { + constructor(target) { + super(); + this.target_ = target; + } + Update(_) { + this.entity.state_ = STATE_TYPES.ATTACK; + if (this.entity.action_) { + return; + } + this.parent_.SetState(new AIState_FollowToAttack(this.target_)); + } +} +; +class FakeClient extends SocketWrapper { + constructor() { + super({ socket: 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, }; +//# 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..a04763c7 --- /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/quick-3d-mmo-server/dist/scripts/world-entity.js b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js new file mode 100644 index 00000000..693d1adb --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-entity.js @@ -0,0 +1,249 @@ +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 { Constants, Defs } from 'quick-3d-mmo-shared'; +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); + _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() { + 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(ENTITY_DRAW_DISTANCE); + 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((_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. + 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 }; +//# 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..61d92080 --- /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/quick-3d-mmo-server/dist/scripts/world-manager.js b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js new file mode 100644 index 00000000..34353988 --- /dev/null +++ b/packages/quick-3d-mmo-server/dist/scripts/world-manager.js @@ -0,0 +1,151 @@ +import { quat, vec3 } from 'gl-matrix'; +// 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; + 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_(WorldAIClient) { + // 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 }, + }); + // console.log("WorldAIClient: ", WorldAIClient) + 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, WorldAIClient) { + if (!this.entity_) { + this.Spawn_(WorldAIClient); + } + } +} +; +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; + console.log("new WorldManager(); Generating World"); + // 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, 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_++, + 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:', + server: true, + text: '[' + params.accountName + ' has entered the game]' + }); + } + Update(timeElapsed, WorldAIClient) { + if (false) { + console.log("WorldManager.Update(): ", { timeElapsed, WorldAIClient }); + } + this.TickClientState_(timeElapsed); + this.UpdateEntities_(timeElapsed); + this.UpdateSpawners_(timeElapsed, WorldAIClient); + } + TickClientState_(timeElapsed) { + var _a, _b; + 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) { + 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, WorldAIClient) { + for (let i = 0; i < this.spawners_.length; ++i) { + this.spawners_[i].Update(timeElapsed, WorldAIClient); + } + } + 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 }; +//# 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..c6bbd8d3 --- /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/server/package-lock.json b/packages/quick-3d-mmo-server/package-lock.json similarity index 100% rename from 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..10d34ad1 --- /dev/null +++ b/packages/quick-3d-mmo-server/package.json @@ -0,0 +1,24 @@ +{ + "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:watch": "concurrently 'yarn build:watch' 'nodemon dist/index.js'", + "start": "yarn build && node 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", + "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/quick-3d-mmo-server/src/index.ts b/packages/quick-3d-mmo-server/src/index.ts new file mode 100644 index 00000000..76d0e810 --- /dev/null +++ b/packages/quick-3d-mmo-server/src/index.ts @@ -0,0 +1,27 @@ + +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(); diff --git a/packages/quick-3d-mmo-server/src/scripts/login-queue.ts b/packages/quick-3d-mmo-server/src/scripts/login-queue.ts new file mode 100644 index 00000000..da7cb939 --- /dev/null +++ b/packages/quick-3d-mmo-server/src/scripts/login-queue.ts @@ -0,0 +1,180 @@ +import {Constants} from 'quick-3d-mmo-shared'; +import type {GlobalTypes} from 'quick-3d-mmo-shared'; + +const { EVENT_TYPES, STATE_TYPES } = Constants; +interface IState {} + +interface IOnEvent { + (evt: string, data?: any): void +} + +interface IFiniteStateMachine { + _currentState: IState, + onEvent(evt: GlobalTypes.TEvt, data?: any): any; + Broadcast(evt: string): void, + OnMessage: IOnEvent +} + class FiniteStateMachine implements IFiniteStateMachine { + _currentState; + onEvent; + + + constructor(onEvent: any) { + this._currentState = new State({}); + this.onEvent = onEvent; + } + + get currentState() { + return this._currentState; + } + + Broadcast(evt: string) { + this.onEvent(evt); + } + + OnMessage(evt: string, data?: any) { + return this._currentState?.OnMessage?.(evt, data); + } + + SetState(state: 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(params: any) { + this.params = params; + } + + + + Broadcast(evt: {topic: any, params: any}) { + this.#parent.Broadcast(evt); + } + + setParent(stateMachine: FiniteStateMachine) { + this.#parent = stateMachine; + } + + getParent() { + return this.#parent; + } + + setParams(newParams: any) { + this.params = newParams; + } + + getParams() { + return this.params; + } + + OnEnter(state?: State) { + } + + OnMessage(evt: string, data: any) { + } + + OnExit() { + } + }; + + interface ILoginParams { + accountName?: string + } + class Login_Await extends State { + constructor(params: ILoginParams) { + super(params); + } + + OnMessage(evt: string, data: any) { + // console.log("Login_Await.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: any) { + super(params); + this.setParams({...params}); + } + + OnEnter() { + // console.log('login confirmed: ' + this.getParams().accountName); + this.Broadcast({topic: EVENT_TYPES.LOGIN_COMMIT, params: this.getParams()}); + } + + OnMessage() { + return true; + } + }; + + class LoginClient { + #onLogin: (evt: string, data?: any) => any; + #fsm: FiniteStateMachine; + + 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); }); + this.#fsm.SetState(new Login_Await({})); + } + + OnEvent(evt: any) { + this.#onLogin?.(evt.params); + } + + 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: any) { + this.clients = {}; + this.onLogin = onLogin; + } + + Add(client: IClient) { + // console.log + this.clients[client.ID] = new LoginClient( + client, (e) => { this.OnLogin(client, e); }); + } + + OnLogin(client: IClient, params: any) { + delete this.clients[client.ID]; + + this.onLogin(client, params); + } + }; + + export {LoginQueue} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/src/scripts/world-client.ts b/packages/quick-3d-mmo-server/src/scripts/world-client.ts new file mode 100644 index 00000000..eaeea3c9 --- /dev/null +++ b/packages/quick-3d-mmo-server/src/scripts/world-client.ts @@ -0,0 +1,379 @@ +import { quat, vec3 } from 'gl-matrix'; + +import type { WorldEntity } from './world-entity.js'; +import { SocketWrapper } from './world-server.js'; + +import { Constants, EntityManager as aEntityManager } from 'quick-3d-mmo-shared'; + +const { _TIMEOUT, EVENT_TYPES, EntityManager, STATE_TYPES, ENTITY_DRAW_DISTANCE } = { ...Constants, ...aEntityManager }; + +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: any, d?: any) => this.OnEntityEvent_(t, d); + + this.client = client; + 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 = {}; + + // Hack + entity.parent_ = this; + } + + Destroy() { + this.client?.Disconnect?.(); + this.client = null; + + this.entity?.Destroy?.(); + this.entity = null; + } + + OnDeath() { } + + OnEntityEvent_(t: any, d: any) { + if (t == EVENT_TYPES.ATTACK_DAMAGE) { + this.OnDamageEvent_(d); + } + } + + OnMessage_(evt: string, data: any) { + 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_(_: any) { } + + OnInventoryChanged_(inventory: []) { + this.entity.UpdateInventory(inventory); + + // Todo: Merge this into entityCache path. + 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]); + } + } + + OnChatMessage_(message) { + const chatMessage = { + name: this.entity.accountInfo_.name, + text: message, + }; + + this.BroadcastChat(chatMessage); + } + + BroadcastChat(chatMessage) { + 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? + n.parent_.client.Send(EVENT_TYPES.CHAT_MESSAGE, chatMessage); + } + } + + get IsDead() { + return this.#timeout <= 0.0; + } + + OnUpdate_(timeElapsed) { } + + OnUpdateClientState_() { } + + UpdateClientState_() { + this.OnUpdateClientState_(); + } + + Update(timeElapsed) { + this.#timeout -= 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) { + } + + OnUpdateClientState_() { + const _Filter = (e) => { + console.log(e, this.entity) + return e.ID != this.entity.ID; + }; + + 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. + 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 { + currentState_: any; + entity: any; + terrain_: InstanceType; + constructor(entity: WorldEntity, terrain: InstanceType) { + this.currentState_ = null; + this.entity = entity; + this.terrain_ = terrain; + } + + SetState(state: any) { + 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: 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(ENTITY_DRAW_DISTANCE).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(STATE_TYPES.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_ = STATE_TYPES.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: number) { + 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); + } +}; + + +class AIState_WaitAttackDone extends AIState { + constructor(target: WorldEntity) { + super(); + this.target_ = target; + } + + Update(_) { + this.entity.state_ = STATE_TYPES.ATTACK; + if (this.entity.action_) { + return; + } + + this.parent_.SetState(new AIState_FollowToAttack(this.target_)); + } +}; + + +class FakeClient extends SocketWrapper { + constructor() { + super({socket: null}) + } + + Send(msg, data) { } + + Disconnect() { } +}; + +class WorldAIClient extends WorldClient { + constructor(entity: WorldEntity, terrain: any, 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: number) { + // Never times out + this.timeout_ = 1000.0; + + if (this.entity.Health > 0) { + this.fsm_.Update(timeElapsed); + } else { + this.deathTimer_ += timeElapsed; + } + } +}; + +export { + WorldNetworkClient, + WorldAIClient, + WorldClient, +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/src/scripts/world-entity.ts b/packages/quick-3d-mmo-server/src/scripts/world-entity.ts new file mode 100644 index 00000000..9b6d148f --- /dev/null +++ b/packages/quick-3d-mmo-server/src/scripts/world-entity.ts @@ -0,0 +1,304 @@ +import { quat, vec3 } from 'gl-matrix'; + +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, ENTITY_DRAW_DISTANCE } = { ...Constants, ...Defs }; + +class Action_Attack { + #onAction: any; + #time: number; + #cooldown: number; + #timeElapsed: number; + + constructor(time: number, cooldown: number, onAction: () => void) { + this.#onAction = onAction; + this.#time = time; + this.#cooldown = cooldown; + this.#timeElapsed = 0.0; + } + + get Finished() { + return this.#timeElapsed > this.#cooldown; + } + + Update(timeElapsed: number) { + const oldTimeElapsed = this.#timeElapsed; + this.#timeElapsed += timeElapsed; + if (this.#timeElapsed > this.#time && + oldTimeElapsed <= this.#time) { + this.#onAction(); + } + } +}; + +// 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, + }; + 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; + } + + 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: [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); + + 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() { + if((this?.characterDefinition_?.stats?.health ?? -1) <= 0) { + console.log("Deadman attacked, this") + debugger; + return; + } + // wheee hardcoded :( + const nearby = this.FindNear(ENTITY_DRAW_DISTANCE); + + 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); + + 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?.characterDefinition_?.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. + 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 }); + } + } + + 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); + } + } + + // this seems wrong to me. TS doesn't have a typeof ENUM it seems. + SetState(s: string) { + if (this.state_ != STATE_TYPES.DEATH) { + this.state_ = s; + } + } + + 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); + } + 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); + } + } +}; + +export { WorldEntity, Action_Attack }; \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/src/scripts/world-manager.ts b/packages/quick-3d-mmo-server/src/scripts/world-manager.ts new file mode 100644 index 00000000..d3aa29cc --- /dev/null +++ b/packages/quick-3d-mmo-server/src/scripts/world-manager.ts @@ -0,0 +1,203 @@ +import { quat, vec3 } from 'gl-matrix'; + +// 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 } = { + ...aSpatialHashGrid, + ...Constants, + ...Defs, + ...TerrainHeight, +} + +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_(WorldAIClient) { + // 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 }, + }); + + // console.log("WorldAIClient: ", WorldAIClient) + + 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, WorldAIClient) { + if (!this.entity_) { + this.Spawn_(WorldAIClient); + } + } +}; + + +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; + console.log("new WorldManager(); Generating World") + // 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, 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_++, + 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:', + server: true, + text: '[' + params.accountName + ' has entered the game]' + }); + } + + Update(timeElapsed, WorldAIClient) { + if(false) { + + console.log("WorldManager.Update(): ", {timeElapsed, WorldAIClient}) + } + this.TickClientState_(timeElapsed); + this.UpdateEntities_(timeElapsed); + this.UpdateSpawners_(timeElapsed, WorldAIClient); + } + + 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) { + if (this.entities_?.[i]?.entity_) { + this.entities_[i].entity_.events_ = []; + } + } + } + + UpdateSpawners_(timeElapsed, WorldAIClient) { + for (let i = 0; i < this.spawners_.length; ++i) { + this.spawners_[i].Update(timeElapsed, WorldAIClient); + } + } + + 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 } \ No newline at end of file diff --git a/packages/quick-3d-mmo-server/src/scripts/world-server.ts b/packages/quick-3d-mmo-server/src/scripts/world-server.ts new file mode 100644 index 00000000..5525767d --- /dev/null +++ b/packages/quick-3d-mmo-server/src/scripts/world-server.ts @@ -0,0 +1,106 @@ +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 { + socket_: any; + dead_: boolean; + constructor(params: {socket: any}) { + // console.log("params: ", 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: any, d: any) => { + 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: any, data) { + this.socket_.emit(msg, data); + } + onMessage(e: any, d: any) {return false} +}; + + +class WorldServer { + loginQueue_: LoginQueue; + worldMgr_: WorldManager; + + 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 +} \ No newline at end of file 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..4408a40d --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/constants.d.ts @@ -0,0 +1,104 @@ +declare enum STATE_TYPES { + ATTACK = "attack", + DANCE = "dance", + DEATH = "death", + IDLE = "idle", + RUN = "run", + WALK = "walk" +} +declare const ENTITY_DRAW_DISTANCE = 200; +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", + UPDATE_POSITION = "update.position" +} +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, 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 new file mode 100644 index 00000000..65ac0d72 --- /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,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 new file mode 100644 index 00000000..18c4b37e --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/constants.js @@ -0,0 +1,127 @@ +"use strict"; +exports.__esModule = true; +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"; + 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 ENTITY_DRAW_DISTANCE = 200.0; +exports.ENTITY_DRAW_DISTANCE = ENTITY_DRAW_DISTANCE; +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["UPDATE_POSITION"] = "update.position"; +})(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..acd38780 --- /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":"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"} \ 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..66c9ab93 --- /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;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 new file mode 100644 index 00000000..e50f4e2d --- /dev/null +++ b/packages/quick-3d-mmo-shared/dist/entity-manager.js @@ -0,0 +1,70 @@ +"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]; + debugger; + 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..cc9548d5 --- /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;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/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":";;;;;;;;AAAA,gCAAkC;AAElC;IAKE,yBAAY,MAAM,EAAE,UAAU;QACrB,IAAA,CAAC,GAAO,UAAU,GAAjB,EAAE,CAAC,GAAI,UAAU,GAAd,CAAe;QAC1B,IAAI,CAAC,MAAM,GAAG,kBAAI,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,kBAAI,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,IAAI,CAAC,EAAN,CAAM,CAAC,EAA9B,CAA8B,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,uCAAa,GAAb,UAAc,QAAQ;QACpB,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CACtD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CACtD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5C,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEzD,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,mCAAS,GAAT,UAAU,QAAQ,EAAE,UAAU;QAC5B,IAAM,MAAM,GAAG;YACb,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,GAAG,EAAE,IAAI;gBACT,KAAK,EAAE,IAAI;aACZ;YACD,QAAQ,EAAE,CAAC,CAAC;SACb,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAErB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sCAAY,GAAZ,UAAa,MAAM;QACX,IAAA,KAAS,MAAM,CAAC,QAAQ,EAAvB,CAAC,QAAA,EAAE,CAAC,QAAmB,CAAC;QACzB,IAAA,KAAS,MAAM,CAAC,UAAU,EAAzB,CAAC,QAAA,EAAE,CAAC,QAAqB,CAAC;QAEjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;YAC/B,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,kCAAQ,GAAR,UAAS,QAAQ,EAAE,MAAM;QAChB,IAAA,CAAC,GAAO,QAAQ,GAAf,EAAE,CAAC,GAAI,QAAQ,GAAZ,CAAa;QACjB,IAAA,CAAC,GAAO,MAAM,GAAb,EAAE,CAAC,GAAI,MAAM,GAAV,CAAW;QAEtB,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtD,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjC,KAAK,IAAI,GAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAC,IAAI,EAAE,EAAE,EAAE,GAAC,EAAE;YAC5C,KAAK,IAAI,GAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAC,IAAI,EAAE,EAAE,EAAE,GAAC,EAAE;gBAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC;gBAE7B,OAAO,IAAI,EAAE;oBACX,IAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;oBACtB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBAEjB,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,EAAE;wBACzB,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC;wBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACjB;iBACF;aACF;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,iCAAO,GAAP,UAAQ,MAAM;QACN,IAAA,KAAS,MAAM,CAAC,QAAQ,EAAvB,CAAC,QAAA,EAAE,CAAC,QAAmB,CAAC;QACzB,IAAA,KAAS,MAAM,CAAC,UAAU,EAAzB,CAAC,QAAA,EAAE,CAAC,QAAqB,CAAC;QAEjC,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtD,IAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,KAAK,IAAI,GAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAC,IAAI,EAAE,EAAE,EAAE,GAAC,EAAE;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,KAAK,IAAI,GAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAC,IAAI,EAAE,EAAE,EAAE,GAAC,EAAE;gBAC5C,IAAM,EAAE,GAAG,GAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAErB,IAAM,IAAI,GAAG;oBACX,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,MAAM;iBACf,CAAC;gBAEF,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAErB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC;gBAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAE;oBACrB,IAAI,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;iBAC/B;gBAED,IAAI,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,GAAG,IAAI,CAAC;aAC1B;SACF;QAED,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,gCAAM,GAAN,UAAO,MAAM;QACX,IAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7B,IAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;YAC5C,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;gBAC5C,IAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEzC,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;iBAC5B;gBACD,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;iBAC5B;gBAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBACd,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;iBAC/B;aACF;SACF;QAED,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;IAC7B,CAAC;IACH,sBAAC;AAAD,CAAC,AAxJD,IAwJC;AACQ,0CAAe"} \ 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/quick-3d-mmo-shared/src/OrbitControls.ts b/packages/quick-3d-mmo-shared/src/OrbitControls.ts new file mode 100644 index 00000000..19483658 --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/OrbitControls.ts @@ -0,0 +1,1219 @@ +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: any) { + + // 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: any) { + + // 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/packages/quick-3d-mmo-shared/src/constants.ts b/packages/quick-3d-mmo-shared/src/constants.ts new file mode 100644 index 00000000..fe028615 --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/constants.ts @@ -0,0 +1,134 @@ +enum STATE_TYPES { + ATTACK = 'attack', + DANCE = 'dance', + DEATH = 'death', + IDLE = 'idle', + RUN = 'run', + WALK = 'walk', +} + +const ENTITY_DRAW_DISTANCE = 200.0; + +enum ANIM_TYPES { + ATTACK = 'Attack', + DANCE = 'Dance', + DEATH = 'Death', + IDLE = 'Idle', + RUN = 'Run', + WALK = 'Walk', +} + +enum EVENT_TYPES { + ACTION_ATTACK = 'action.attack', + ATTACK = 'attack', + ATTACK_DAMAGE = 'attack.damage', + 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', + 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', + UPDATE_POSITION = 'update.position', +} + +type IEVENT_TYPES = Record; + +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' +} + +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 { + PALADIN = 'paladin', + SORCEROR = 'sorceror', + WARROK = 'warrok', + ZOMBIE = 'zombie', +} + +enum WEAPON_TYPES_ENUM { + AXE = 'weapon.axe1', + HAMMER = 'weapon.hammer1', + SWORD = 'weapon.sword1', +} + +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_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, + ENTITY_DRAW_DISTANCE, +}; \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/src/defs.ts b/packages/quick-3d-mmo-shared/src/defs.ts new file mode 100644 index 00000000..3bdfd8b9 --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/defs.ts @@ -0,0 +1,222 @@ +import { CLASS_TYPES_ENUM, WEAPON_TYPES_ENUM } from "./constants.js"; + +declare module ICharacter { + + 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: './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': WEAPON_TYPES_ENUM.AXE, + 'inventory-2': WEAPON_TYPES_ENUM.HAMMER, + 'inventory-equip-1': WEAPON_TYPES_ENUM.SWORD, + }, + stats: { + health: 200, + maxHealth: 200, + strength: 50, + wisdomness: 5, + benchpress: 20, + curl: 100, + experience: 0, + level: 1, + }, + name: 'Paladin', + }, + [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', + }, + [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', + }, + [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', + }, +}; + +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, + renderParams: { + name: 'Axe', + scale: 0.125, + icon: 'war-axe-64.png', + }, + }, + [WEAPON_TYPES_ENUM.SWORD]: + { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Sword', + scale: 0.125, + icon: 'pointy-sword-64.png', + }, + }, + [WEAPON_TYPES_ENUM.HAMMER]: + { + type: 'weapon', + damage: 3, + renderParams: { + name: 'Hammer_Small', + scale: 0.125, + icon: 'hammer-64.png', + }, + }, +}; + +export type { ICharacter }; +export { CHARACTER_MODELS, WEAPONS_DATA } \ 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 new file mode 100644 index 00000000..72916da7 --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/entity-manager.ts @@ -0,0 +1,86 @@ +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) { + // 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(); + } + + 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: any[] = []; + const alive: any[] = []; + for (let i = 0; i < this._entities.length; ++i) { + + const e = this._entities[i]; + debugger; + 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/packages/quick-3d-mmo-shared/src/globaltypes.ts b/packages/quick-3d-mmo-shared/src/globaltypes.ts new file mode 100644 index 00000000..00489873 --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/globaltypes.ts @@ -0,0 +1,20 @@ +import { EVENT_TYPES } from "./constants.js" + +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/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/quick-3d-mmo-shared/src/math.ts b/packages/quick-3d-mmo-shared/src/math.ts new file mode 100644 index 00000000..71579e70 --- /dev/null +++ b/packages/quick-3d-mmo-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/packages/quick-3d-mmo-shared/src/noise.ts b/packages/quick-3d-mmo-shared/src/noise.ts new file mode 100644 index 00000000..18badb3e --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/noise.ts @@ -0,0 +1,43 @@ +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. + // Super complicated. + _noise: any; + + constructor(params) { + this._params = params; + this._Init(); + } + + _Init() { + this._noise = new 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; + + 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 } \ No newline at end of file diff --git a/client/shared/simplex-noise.mjs b/packages/quick-3d-mmo-shared/src/simplex-noise.ts similarity index 99% rename from client/shared/simplex-noise.mjs rename to packages/quick-3d-mmo-shared/src/simplex-noise.ts index 7cf04bb9..efac2745 100644 --- a/client/shared/simplex-noise.mjs +++ b/packages/quick-3d-mmo-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/packages/quick-3d-mmo-shared/src/spatial-hash-grid.ts b/packages/quick-3d-mmo-shared/src/spatial-hash-grid.ts new file mode 100644 index 00000000..f8149cfd --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/spatial-hash-grid.ts @@ -0,0 +1,156 @@ +import * as math from './math.js'; + +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])); + + 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 } diff --git a/client/shared/spline.mjs b/packages/quick-3d-mmo-shared/src/spline.ts similarity index 88% rename from client/shared/spline.mjs rename to packages/quick-3d-mmo-shared/src/spline.ts index 611f8577..be99e7b2 100644 --- a/client/shared/spline.mjs +++ b/packages/quick-3d-mmo-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/packages/quick-3d-mmo-shared/src/terrain-constants.ts b/packages/quick-3d-mmo-shared/src/terrain-constants.ts new file mode 100644 index 00000000..36c5dbf1 --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/terrain-constants.ts @@ -0,0 +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 { + QT_MIN_CELL_SIZE, + QT_MIN_CELL_RESOLUTION, + PLANET_RADIUS, + + NOISE_HEIGHT, + NOISE_SCALE, + NOISE_PARAMS, +} \ No newline at end of file diff --git a/packages/quick-3d-mmo-shared/src/terrain-height.ts b/packages/quick-3d-mmo-shared/src/terrain-height.ts new file mode 100644 index 00000000..0382461d --- /dev/null +++ b/packages/quick-3d-mmo-shared/src/terrain-height.ts @@ -0,0 +1,16 @@ + +import {NOISE_PARAMS} from './terrain-constants.js'; +import {Noise} from './noise.js'; + +class HeightGenerator { + noise_: Noise; + constructor() { + this.noise_ = new Noise(NOISE_PARAMS); + } + + Get(x, y, z) { + return [this.noise_.Get(x, y, z), 1]; + } +}; + +export {HeightGenerator} \ No newline at end of file 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..a00ef0b5 --- /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": "64551640d8b7a02d1fc06a22c5660f0cbd95d15b304479c729c4b30959534065", + "signature": "6ebbd7706ea9e894376b52482fc9a5857904335717c121773a41ec7f0d5dadc7", + "affectsGlobalScope": false + }, + "./src/defs.ts": { + "version": "99ed8a889c3ed7d25ba8c6eed445e52b5432e90a2dc27fc8ee6d0fb6e8bbb8a3", + "signature": "70f7a3602e6c1253e4e7cfaf7caed9c14bbf0f50f80ce8f022671d3f62fbfa71", + "affectsGlobalScope": false + }, + "./src/entity-manager.ts": { + "version": "336ec87d13b29a2aebc2f1a27bec5004e6b26ee06cf9ba4de14e4d650375fcc1", + "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/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/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/world-client.mjs b/server/src/world-client.mjs deleted file mode 100644 index 543e526b..00000000 --- a/server/src/world-client.mjs +++ /dev/null @@ -1,350 +0,0 @@ -import {quat, vec3} from 'gl-matrix'; - - -export const world_client = (() => { - - const _TIMEOUT = 600.0; - - class WorldClient { - constructor(client, entity) { - 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('world.player', this.entity_ .CreatePlayerPacket_()); - this.client_.Send('world.stats', this.entity_ .CreateStatsPacket_()); - - 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 == 'attack.damage') { - this.OnDamageEvent_(d); - } - } - - OnMessage_(evt, data) { - this.timeout_ = _TIMEOUT; - - 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_(_) {} - - 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('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]; - n.parent_.client_.Send('chat.message', chatMessage); - } - } - - get IsDead() { - return this.timeout_ <= 0.0; - } - - OnUpdate_(timeElapsed) {} - - OnUpdateClientState_() {} - - UpdateClientState_() { - this.OnUpdateClientState_(); - } - - Update(timeElapsed) { - this.timeout_ -= timeElapsed; - - this.entity_.Update(timeElapsed); - - this.OnUpdate_(timeElapsed); - } - }; - - - class WorldNetworkClient extends WorldClient { - constructor(client, entity) { - super(client, 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_(), - }; - - if (!(n.ID in this.entityCache_)) { - cur.desc = n.GetDescription(); - } - - newCache_[n.ID] = cur; - updates.push(cur); - } - - this.entityCache_ = newCache_; - - this.client_.Send('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() { - 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 { - constructor() {} - - 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; - } - } - }; - - - return { - WorldNetworkClient: WorldNetworkClient, - WorldAIClient: WorldAIClient, - }; -})(); \ No newline at end of file diff --git a/server/src/world-entity.mjs b/server/src/world-entity.mjs deleted file mode 100644 index 8cfa85a0..00000000 --- a/server/src/world-entity.mjs +++ /dev/null @@ -1,255 +0,0 @@ -import {quat, vec3} from 'gl-matrix'; - -import {defs} from '../../client/shared/defs.mjs'; - - -export const world_entity = (() => { - - class Action_Attack { - constructor(time, cooldown, onAction) { - this.onAction_ = onAction; - this.time_ = time; - this.cooldown_ = cooldown; - this.timeElapsed_ = 0.0; - } - - 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 { - constructor(params) { - this.id_ = params.id; - this.state_ = '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; - } - - 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) { - if (this.stats_.health <= 0) { - this.SetState('death'); - } - this.state_ = transformData[0] - this.position_ = vec3.fromValues(...transformData[1]); - this.rotation_ = quat.fromValues(...transformData[2]); - - 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 == '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); - } - - console.log(' damage: ' + damage); - - target.OnDamage(this, damage); - - this.onEvent_('attack.damage', {target: target, damage: damage}); - } - } - - OnDamage(attacker, damage) { - this.stats_.health -= damage; - this.stats_.health = Math.max(0.0, this.stats_.health); - this.events_.push({ - type: 'attack', - target: this.ID, - attacker: attacker.ID, - amount: damage - }); - - if (this.stats_.health <= 0) { - this.SetState('death'); - } - } - - SetState(s) { - if (this.state_ != '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_ == 'attack') { - this.SetState('idle'); - } - return; - } - - this.action_.Update(timeElapsed); - if (this.action_.Finished) { - this.action_ = null; - this.SetState('idle'); - } - } - }; - - - return { - WorldEntity: WorldEntity, - }; -})(); \ No newline at end of file diff --git a/server/src/world-manager.mjs b/server/src/world-manager.mjs deleted file mode 100644 index 659555dd..00000000 --- a/server/src/world-manager.mjs +++ /dev/null @@ -1,181 +0,0 @@ -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; - } - - 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) { - 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 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]' - }); - } - - 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(); - } - } - }; - - return { - WorldManager: WorldManager, - }; -})(); \ No newline at end of file diff --git a/server/src/world-server.mjs b/server/src/world-server.mjs deleted file mode 100644 index 6b0529b2..00000000 --- a/server/src/world-server.mjs +++ /dev/null @@ -1,97 +0,0 @@ -import {performance} from 'perf_hooks'; - -import {world_manager} from './world-manager.mjs'; -import {login_queue} from './login-queue.mjs'; - - -export const world_server = (() => { - - - 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); - this.Disconnect(); - } - }); - } - - Disconnect() { - this.socket_.disconnect(true); - } - - Send(msg, data) { - this.socket_.emit(msg, data); - } - }; - - - class WorldServer { - constructor(io) { - this.loginQueue_ = new login_queue.LoginQueue( - (c, p) => { this.OnLogin_(c, p); }); - - 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); - }); - } - - Update_(timeElapsed) { - this.worldMgr_.Update(timeElapsed); - } - }; - - return { - WorldServer: WorldServer, - }; -})(); \ No newline at end of file diff --git a/client/main.js b/trash/main.ts similarity index 71% rename from client/main.js rename to trash/main.ts index b08d2c6f..20eb7737 100644 --- a/client/main.js +++ b/trash/main.ts @@ -1,15 +1,24 @@ -import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.124/build/three.module.js'; +/** + * THIS ISN"T USED KADAJETT + */ -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 * as THREE from 'three'; -import 'https://cdn.jsdelivr.net/npm/socket.io-client@3.1.0/dist/socket.io.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 { io } from 'socket.io-client'; +import type { Socket } from 'socket.io-client'; +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', @@ -20,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', @@ -33,6 +42,11 @@ const _CHARACTER_MODELS = { class FloatingName { + params_: any; + element_: HTMLCanvasElement; + context2d_: CanvasRenderingContext2D; + sprite_: THREE.Sprite; + constructor(params) { this.params_ = params; this.Init_(); @@ -43,6 +57,7 @@ class FloatingName { } Init_() { + console.log("FloatingName Init_"); const modelData = _CHARACTER_MODELS[this.params_.desc.character.class]; this.element_ = document.createElement('canvas'); @@ -61,7 +76,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,13 +85,19 @@ 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) { + console.log("OurLoadingManager load()", file); this.files_.add(file); this.loader_.load(file, (result) => { @@ -92,7 +113,10 @@ class OurLoadingManager { class BasicCharacterControllerProxy { + animations_: any; + constructor(animations) { + console.log('new BasicCharacterControllerProxy', animations) this.animations_ = animations; } @@ -103,14 +127,23 @@ class BasicCharacterControllerProxy { class AnimatedMesh { + params_: any; + group_: any; + target_: any; + animations_: any; + mixer_: any; + onLoad: () => void; + manager_: OurLoadingManager; + constructor(params) { + console.log('new AnimatedMesh', 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.onLoad = () => { }; this.Load_(); } @@ -137,7 +170,9 @@ 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(); loader.setPath(modelData.path); loader.load(modelData.base, (fbx) => { @@ -154,7 +189,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, @@ -169,17 +204,17 @@ class AnimatedMesh { 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,7 +230,20 @@ 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) { + console.log("new BasicCharacterController", params) this._Init(params); } @@ -211,15 +259,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 +291,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 +306,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 +326,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); } @@ -321,13 +369,31 @@ class BasicCharacterController { this.position_.copy(controlObject.position); this.quaternion_.copy(controlObject.quaternion); - this.target_.Update(timeInSeconds); + this.target_.Update(timeInSeconds); } }; +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 +405,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 +441,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 +466,9 @@ class BasicCharacterControllerInput { class FiniteStateMachine { + currentState_: any; + _states: any; + constructor() { this._states = {}; this.currentState_ = null; @@ -409,7 +480,7 @@ class FiniteStateMachine { SetState(name) { const prevState = this.currentState_; - + if (prevState) { if (prevState.Name == name) { return; @@ -432,6 +503,8 @@ class FiniteStateMachine { class CharacterFSM extends FiniteStateMachine { + _proxy: any; + constructor(proxy) { super(); this._proxy = proxy; @@ -439,26 +512,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 +545,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 +568,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 +592,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 +628,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 +644,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 +680,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 +696,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 +722,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 +776,11 @@ class ThirdPersonCamera { class PlayerEntity { + params_: any; + controls_: BasicCharacterController; + thirdPersonCamera_: ThirdPersonCamera; + updateTimer_: number; + constructor(params) { this.params_ = params; this.Init_(); @@ -723,8 +810,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) ); } @@ -739,7 +826,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(), ); } @@ -748,14 +835,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 +856,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 +896,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 +917,7 @@ class NetworkEntity { } Destroy() { - this.controller_.Destroy(); + this.controller_?.Destroy?.(); } Init_() { @@ -822,16 +925,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 +943,7 @@ class NetworkEntity { this.ApplyLCT_(timeElapsed); } - ApplyLCT_(timeElapsed) { + ApplyLCT_(timeElapsed) { if (this.transformUpdates_.length == 0) { return; } @@ -850,7 +953,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,19 +983,23 @@ 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) { + OnKeyDown_(evt: any) { if (evt.keyCode === 13) { evt.preventDefault(); const msg = this.element_.value; @@ -903,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; @@ -914,6 +1021,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 +1047,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 +1079,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 +1089,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', + '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; 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 +1113,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,33 +1122,34 @@ 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: true, + transports: ['websocket'], }); - this.socket_.on("connect", () => { - console.log(this.socket_.id); + // The socket.io TS definition is wrong I think. This is a hack. + (this.socket_ as any).on(EVENT_TYPES.CONNECT, () => { + console.log("BasicMMODemo.socket_.on: ", EVENT_TYPES.CONNECT); const randomName = this.GenerateRandomName_(); - this.socket_.emit('login.commit', randomName); + this.socket_.emit(EVENT_TYPES.LOGIN_COMMIT, randomName); }); this.socket_.on("disconnect", () => { @@ -1039,27 +1157,29 @@ class BasicMMODemo { }); this.socket_.onAny((e, d) => { + console.log("BasicMMODemo.socket_.onAny(): ", {e, d}) this.OnMessage_(e, d); }); } 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) { + debugger; 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); 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 = {}; @@ -1067,7 +1187,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/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 new file mode 100644 index 00000000..c6304f6d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + /* 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/tsconfig.packages.json b/tsconfig.packages.json new file mode 100644 index 00000000..cf5d844e --- /dev/null +++ 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 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-error.log b/yarn-error.log new file mode 100644 index 00000000..ef2e6888 --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,5941 @@ +Arguments: + /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--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 + +Node version: + 15.11.0 + +Platform: + linux x64 + +Trace: + 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 () + 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: + { + "name": "quick-3d-mmo", + "private": true, + "version": "1.0.0", + "license": "MIT", + "main": "index.js", + "workspaces": [ + "packages/*" + ], + "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" + }, + "dependencies": { + "@babel/core": "^7.13.14", + "gl-matrix": "^3.3.0", + "webpack": "^5.30.0", + "webpack-cli": "^4.6.0" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # 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" + 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/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.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== + dependencies: + 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" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + 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" + 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@^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" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + 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" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + 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" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + 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" + 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== + + 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" + 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@^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" + 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, 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== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + + 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" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + 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" + 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" + + 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" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + 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" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + 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== + + 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" + 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" + + 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" + 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.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== + 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== + + 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.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.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" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + 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" + 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" + + 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" + 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== + + 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" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + + engine.io-client@~5.0.0: + 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" + 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" + + 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" + + 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: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + + 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" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + 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" + 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== + + 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" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + + 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== + 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" + + 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-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" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + 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" + 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.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" + 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-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" + 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, 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-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== + 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== + + 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" + 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== + + 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" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + 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" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + + 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= + + 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@^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== + 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@^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" + 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-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" + + 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" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + + 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" + 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== + + 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-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: + 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" + 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== + + 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== + 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.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" + 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== + + 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" + 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@^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" + 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== + + 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== + + 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" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.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" + + 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" + 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== + + 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.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" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + + 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== + + 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== + dependencies: + async "^2.6.2" + 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" + 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" + + 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" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + 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" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + 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" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + 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" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + 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" + 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" + + 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" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + 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" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + + 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== + + 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== + + 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" + 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.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.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" + 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.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" + "@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" + + 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" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + 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" + 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, 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== + 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" + + 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== + 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-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= + + 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@^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== + + 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" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + 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" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + 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" + 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" + + 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" + 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-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" + integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== + 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" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + 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" + 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" + + 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" + 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" + + 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" + 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" + + 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" + 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@^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" + 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== + + 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 new file mode 100644 index 00000000..9bf2038b --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5609 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# 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" + 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/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.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== + dependencies: + 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" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + 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" + 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@^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" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + 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" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + 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" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + 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" + 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== + +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" + 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@^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" + 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, 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== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +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" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + 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" + 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" + +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" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + 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" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + 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== + +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" + 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" + +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" + 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.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== + 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== + +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: + 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.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" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + 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" + 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" + +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" + 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== + +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" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +engine.io-client@~5.0.0: + 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" + 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" + +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@^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" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + 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" + 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== + +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" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +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== + 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" + +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@^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" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + 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" + 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.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" + 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-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" + 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, 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-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== + 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== + +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" + 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== + +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" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + 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" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +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= + +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@^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== + 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@^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" + 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-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" + 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" + +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" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +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" + 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== + +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-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: + 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" + 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== + +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== + 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.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" + 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== + +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" + 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@^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" + 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== + +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== + +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" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.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" + 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== + +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.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" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + +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== + +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== + dependencies: + async "^2.6.2" + 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" + 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" + +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" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + 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" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + 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" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + 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" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + 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" + 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" + +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" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + 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" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +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== + +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== + +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" + 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.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.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" + 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.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" + "@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" + +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" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + 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" + +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" + 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" + 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, 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== + 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" + +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== + 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-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= + +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@^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== + +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" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + 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" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + 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" + 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" + +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" + 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-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" + integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== + 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" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + 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" + 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" + +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" + 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" + +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" + 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" + +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" + 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@^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" + 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== + +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==