diff --git a/public/CurvedPath.json b/public/CurvedPath.json new file mode 100644 index 0000000..3062996 --- /dev/null +++ b/public/CurvedPath.json @@ -0,0 +1,2885 @@ +{ + "points": [ + { + "x": 0.5196225047111511, + "y": 0.12702089548110962, + "z": -2.4067494869232178 + }, + { + "x": 0.5908891558647156, + "y": 0.12702102959156036, + "z": -2.4123847484588623 + }, + { + "x": 0.65264493227005, + "y": 0.1270231008529663, + "z": -2.418732166290283 + }, + { + "x": 0.7060883045196533, + "y": 0.1270320862531662, + "z": -2.4256889820098877 + }, + { + "x": 0.7523300051689148, + "y": 0.1270562708377838, + "z": -2.433168411254883 + }, + { + "x": 0.7923916578292847, + "y": 0.12710729241371155, + "z": -2.441098928451538 + }, + { + "x": 0.8272078037261963, + "y": 0.12720002233982086, + "z": -2.449424982070923 + }, + { + "x": 0.8576237559318542, + "y": 0.1273527592420578, + "z": -2.4581069946289062 + }, + { + "x": 0.884397029876709, + "y": 0.12758705019950867, + "z": -2.46712064743042 + }, + { + "x": 0.908196747303009, + "y": 0.1279277503490448, + "z": -2.4764575958251953 + }, + { + "x": 0.9296040534973145, + "y": 0.12840309739112854, + "z": -2.4861254692077637 + }, + { + "x": 0.9491114616394043, + "y": 0.1290445774793625, + "z": -2.4961466789245605 + }, + { + "x": 0.9671235084533691, + "y": 0.12988704442977905, + "z": -2.5065605640411377 + }, + { + "x": 0.9839564561843872, + "y": 0.1309686154127121, + "z": -2.5174214839935303 + }, + { + "x": 0.9998441338539124, + "y": 0.1323295533657074, + "z": -2.528797149658203 + }, + { + "x": 1.0149744749069214, + "y": 0.13400483131408691, + "z": -2.540757417678833 + }, + { + "x": 1.029510498046875, + "y": 0.1360197365283966, + "z": -2.5533649921417236 + }, + { + "x": 1.043592929840088, + "y": 0.13838952779769897, + "z": -2.566676139831543 + }, + { + "x": 1.0573383569717407, + "y": 0.1411195546388626, + "z": -2.5807406902313232 + }, + { + "x": 1.0708402395248413, + "y": 0.1442052274942398, + "z": -2.5956013202667236 + }, + { + "x": 1.0841695070266724, + "y": 0.14763198792934418, + "z": -2.6112940311431885 + }, + { + "x": 1.0973730087280273, + "y": 0.15137530863285065, + "z": -2.6278486251831055 + }, + { + "x": 1.1104750633239746, + "y": 0.15540072321891785, + "z": -2.645287275314331 + }, + { + "x": 1.1234759092330933, + "y": 0.1596638262271881, + "z": -2.6636264324188232 + }, + { + "x": 1.1363534927368164, + "y": 0.16411027312278748, + "z": -2.682875156402588 + }, + { + "x": 1.1490613222122192, + "y": 0.16867570579051971, + "z": -2.703036069869995 + }, + { + "x": 1.1615313291549683, + "y": 0.17328590154647827, + "z": -2.724104881286621 + }, + { + "x": 1.1736762523651123, + "y": 0.17786017060279846, + "z": -2.7460713386535645 + }, + { + "x": 1.1854121685028076, + "y": 0.1823231726884842, + "z": -2.768920421600342 + }, + { + "x": 1.196663737297058, + "y": 0.18660952150821686, + "z": -2.792633295059204 + }, + { + "x": 1.207365870475769, + "y": 0.19066372513771057, + "z": -2.8171873092651367 + }, + { + "x": 1.217462182044983, + "y": 0.19444027543067932, + "z": -2.842555522918701 + }, + { + "x": 1.2269070148468018, + "y": 0.1979035884141922, + "z": -2.8687074184417725 + }, + { + "x": 1.2356631755828857, + "y": 0.20102806389331818, + "z": -2.8956081867218018 + }, + { + "x": 1.2437033653259277, + "y": 0.20379802584648132, + "z": -2.923219680786133 + }, + { + "x": 1.2510102987289429, + "y": 0.2062077671289444, + "z": -2.9514992237091064 + }, + { + "x": 1.2575759887695312, + "y": 0.20826151967048645, + "z": -2.980400800704956 + }, + { + "x": 1.2634012699127197, + "y": 0.20997346937656403, + "z": -3.009873628616333 + }, + { + "x": 1.2684977054595947, + "y": 0.21136778593063354, + "z": -3.0398640632629395 + }, + { + "x": 1.2728856801986694, + "y": 0.2124784290790558, + "z": -3.0703134536743164 + }, + { + "x": 1.2765942811965942, + "y": 0.2133454978466034, + "z": -3.10115909576416 + }, + { + "x": 1.2796598672866821, + "y": 0.21400752663612366, + "z": -3.1323297023773193 + }, + { + "x": 1.2821247577667236, + "y": 0.21449971199035645, + "z": -3.1637468338012695 + }, + { + "x": 1.2840379476547241, + "y": 0.2148539423942566, + "z": -3.1953229904174805 + }, + { + "x": 1.2854552268981934, + "y": 0.2150987684726715, + "z": -3.226963520050049 + }, + { + "x": 1.286437749862671, + "y": 0.21525943279266357, + "z": -3.2585651874542236 + }, + { + "x": 1.2870543003082275, + "y": 0.21535786986351013, + "z": -3.2900166511535645 + }, + { + "x": 1.2873796224594116, + "y": 0.21541272103786469, + "z": -3.3211991786956787 + }, + { + "x": 1.2874946594238281, + "y": 0.21543926000595093, + "z": -3.351984739303589 + }, + { + "x": 1.287487268447876, + "y": 0.21544945240020752, + "z": -3.3822383880615234 + }, + { + "x": 1.2874515056610107, + "y": 0.21545200049877167, + "z": -3.411816120147705 + }, + { + "x": 1.2874881029129028, + "y": 0.21545220911502838, + "z": -3.4405670166015625 + }, + { + "x": 1.2877037525177002, + "y": 0.21545220911502838, + "z": -3.468331813812256 + }, + { + "x": 1.2882046699523926, + "y": 0.21545220911502838, + "z": -3.4949593544006348 + }, + { + "x": 1.2890914678573608, + "y": 0.21545220911502838, + "z": -3.52032470703125 + }, + { + "x": 1.2904562950134277, + "y": 0.21545220911502838, + "z": -3.5443320274353027 + }, + { + "x": 1.292383074760437, + "y": 0.21545220911502838, + "z": -3.56691312789917 + }, + { + "x": 1.2949479818344116, + "y": 0.21545220911502838, + "z": -3.5880284309387207 + }, + { + "x": 1.2982194423675537, + "y": 0.21545220911502838, + "z": -3.607667922973633 + }, + { + "x": 1.3022581338882446, + "y": 0.21545220911502838, + "z": -3.6258490085601807 + }, + { + "x": 1.307116150856018, + "y": 0.21545220911502838, + "z": -3.642618179321289 + }, + { + "x": 1.3128387928009033, + "y": 0.21545220911502838, + "z": -3.658050775527954 + }, + { + "x": 1.3194624185562134, + "y": 0.21545220911502838, + "z": -3.6722500324249268 + }, + { + "x": 1.3270158767700195, + "y": 0.2154521942138672, + "z": -3.6853480339050293 + }, + { + "x": 1.3355201482772827, + "y": 0.21545220911502838, + "z": -3.6975061893463135 + }, + { + "x": 1.3449889421463013, + "y": 0.21545220911502838, + "z": -3.7089099884033203 + }, + { + "x": 1.3554301261901855, + "y": 0.21545220911502838, + "z": -3.7197461128234863 + }, + { + "x": 1.366849660873413, + "y": 0.21545220911502838, + "z": -3.7301836013793945 + }, + { + "x": 1.3792506456375122, + "y": 0.21545220911502838, + "z": -3.7403693199157715 + }, + { + "x": 1.3926328420639038, + "y": 0.21545220911502838, + "z": -3.750432252883911 + }, + { + "x": 1.4069935083389282, + "y": 0.2154521942138672, + "z": -3.7604799270629883 + }, + { + "x": 1.4223278760910034, + "y": 0.2154521942138672, + "z": -3.7706000804901123 + }, + { + "x": 1.43862783908844, + "y": 0.2154521942138672, + "z": -3.7808609008789062 + }, + { + "x": 1.4558824300765991, + "y": 0.21545220911502838, + "z": -3.7913103103637695 + }, + { + "x": 1.4740782976150513, + "y": 0.21545220911502838, + "z": -3.801975727081299 + }, + { + "x": 1.4931994676589966, + "y": 0.21545220911502838, + "z": -3.8128647804260254 + }, + { + "x": 1.5132269859313965, + "y": 0.21545220911502838, + "z": -3.8239657878875732 + }, + { + "x": 1.5341389179229736, + "y": 0.21545220911502838, + "z": -3.8352460861206055 + }, + { + "x": 1.5559104681015015, + "y": 0.21545220911502838, + "z": -3.8466553688049316 + }, + { + "x": 1.5785114765167236, + "y": 0.2154521942138672, + "z": -3.8581366539001465 + }, + { + "x": 1.6019049882888794, + "y": 0.21545220911502838, + "z": -3.8696298599243164 + }, + { + "x": 1.626045823097229, + "y": 0.21545220911502838, + "z": -3.8810722827911377 + }, + { + "x": 1.6508839130401611, + "y": 0.2154521942138672, + "z": -3.8924002647399902 + }, + { + "x": 1.6763615608215332, + "y": 0.2154521942138672, + "z": -3.9035468101501465 + }, + { + "x": 1.7024139165878296, + "y": 0.21545220911502838, + "z": -3.914443016052246 + }, + { + "x": 1.7289705276489258, + "y": 0.21545220911502838, + "z": -3.925017833709717 + }, + { + "x": 1.75595223903656, + "y": 0.21545220911502838, + "z": -3.9351978302001953 + }, + { + "x": 1.7832751274108887, + "y": 0.21545220911502838, + "z": -3.9449071884155273 + }, + { + "x": 1.8108463287353516, + "y": 0.21545220911502838, + "z": -3.9540674686431885 + }, + { + "x": 1.8385685682296753, + "y": 0.21545220911502838, + "z": -3.962599277496338 + }, + { + "x": 1.8663362264633179, + "y": 0.21545220911502838, + "z": -3.9704198837280273 + }, + { + "x": 1.8940424919128418, + "y": 0.21545220911502838, + "z": -3.977447032928467 + }, + { + "x": 1.9215936660766602, + "y": 0.21545220911502838, + "z": -3.983609676361084 + }, + { + "x": 1.9489136934280396, + "y": 0.21545220911502838, + "z": -3.988846778869629 + }, + { + "x": 1.9759418964385986, + "y": 0.21545220911502838, + "z": -3.9931094646453857 + }, + { + "x": 2.0026357173919678, + "y": 0.21545220911502838, + "z": -3.9963607788085938 + }, + { + "x": 2.0289695262908936, + "y": 0.2154521942138672, + "z": -3.998575210571289 + }, + { + "x": 2.0549349784851074, + "y": 0.21545220911502838, + "z": -3.999739646911621 + }, + { + "x": 2.080540418624878, + "y": 0.21545220911502838, + "z": -3.999852418899536 + }, + { + "x": 2.1058101654052734, + "y": 0.21545220911502838, + "z": -3.998922824859619 + }, + { + "x": 2.1307871341705322, + "y": 0.21545220911502838, + "z": -3.9969727993011475 + }, + { + "x": 2.1555306911468506, + "y": 0.2154521942138672, + "z": -3.9940357208251953 + }, + { + "x": 2.180117130279541, + "y": 0.21545220911502838, + "z": -3.9901576042175293 + }, + { + "x": 2.204638957977295, + "y": 0.21545220911502838, + "z": -3.985393524169922 + }, + { + "x": 2.229192018508911, + "y": 0.21545220911502838, + "z": -3.9798049926757812 + }, + { + "x": 2.2538533210754395, + "y": 0.2154521942138672, + "z": -3.9734442234039307 + }, + { + "x": 2.2786788940429688, + "y": 0.21545220911502838, + "z": -3.966353416442871 + }, + { + "x": 2.3037006855010986, + "y": 0.21545220911502838, + "z": -3.9585649967193604 + }, + { + "x": 2.3289294242858887, + "y": 0.21545220911502838, + "z": -3.9501004219055176 + }, + { + "x": 2.354353427886963, + "y": 0.21545220911502838, + "z": -3.940971851348877 + }, + { + "x": 2.379939556121826, + "y": 0.21545220911502838, + "z": -3.931180953979492 + }, + { + "x": 2.4056310653686523, + "y": 0.21545220911502838, + "z": -3.920719623565674 + }, + { + "x": 2.4313502311706543, + "y": 0.21545220911502838, + "z": -3.9095683097839355 + }, + { + "x": 2.4569969177246094, + "y": 0.2154521942138672, + "z": -3.8976986408233643 + }, + { + "x": 2.4824483394622803, + "y": 0.21545220911502838, + "z": -3.8850722312927246 + }, + { + "x": 2.5075597763061523, + "y": 0.21545220911502838, + "z": -3.8716397285461426 + }, + { + "x": 2.532165765762329, + "y": 0.21545220911502838, + "z": -3.8573431968688965 + }, + { + "x": 2.5561020374298096, + "y": 0.21545220911502838, + "z": -3.8421263694763184 + }, + { + "x": 2.5792229175567627, + "y": 0.21545220911502838, + "z": -3.825948715209961 + }, + { + "x": 2.6014060974121094, + "y": 0.21545220911502838, + "z": -3.808783769607544 + }, + { + "x": 2.6225504875183105, + "y": 0.21545220911502838, + "z": -3.790621519088745 + }, + { + "x": 2.6425790786743164, + "y": 0.21545220911502838, + "z": -3.771466016769409 + }, + { + "x": 2.661432981491089, + "y": 0.21545220911502838, + "z": -3.7513372898101807 + }, + { + "x": 2.6790804862976074, + "y": 0.21545220911502838, + "z": -3.7302706241607666 + }, + { + "x": 2.695507764816284, + "y": 0.21545220911502838, + "z": -3.7083168029785156 + }, + { + "x": 2.710725784301758, + "y": 0.2154521942138672, + "z": -3.6855416297912598 + }, + { + "x": 2.724766731262207, + "y": 0.21545220911502838, + "z": -3.6620264053344727 + }, + { + "x": 2.7376840114593506, + "y": 0.21545220911502838, + "z": -3.6378672122955322 + }, + { + "x": 2.7495551109313965, + "y": 0.21545220911502838, + "z": -3.6131765842437744 + }, + { + "x": 2.760474443435669, + "y": 0.2154521942138672, + "z": -3.588078498840332 + }, + { + "x": 2.770540714263916, + "y": 0.21545220911502838, + "z": -3.562696695327759 + }, + { + "x": 2.779839515686035, + "y": 0.21545220911502838, + "z": -3.537142753601074 + }, + { + "x": 2.7884504795074463, + "y": 0.21545220911502838, + "z": -3.5115180015563965 + }, + { + "x": 2.796440839767456, + "y": 0.21545220911502838, + "z": -3.485912322998047 + }, + { + "x": 2.8038690090179443, + "y": 0.21545220911502838, + "z": -3.460404396057129 + }, + { + "x": 2.8107829093933105, + "y": 0.21545220911502838, + "z": -3.4350624084472656 + }, + { + "x": 2.8172218799591064, + "y": 0.21545220911502838, + "z": -3.4099419116973877 + }, + { + "x": 2.823213815689087, + "y": 0.21545220911502838, + "z": -3.38508939743042 + }, + { + "x": 2.828777551651001, + "y": 0.21545220911502838, + "z": -3.3605380058288574 + }, + { + "x": 2.8339226245880127, + "y": 0.21545220911502838, + "z": -3.3363118171691895 + }, + { + "x": 2.83864688873291, + "y": 0.21545220911502838, + "z": -3.3124217987060547 + }, + { + "x": 2.8429410457611084, + "y": 0.21545220911502838, + "z": -3.288870096206665 + }, + { + "x": 2.8467869758605957, + "y": 0.21545220911502838, + "z": -3.2656478881835938 + }, + { + "x": 2.8501734733581543, + "y": 0.2154521942138672, + "z": -3.242750644683838 + }, + { + "x": 2.853097677230835, + "y": 0.2154521942138672, + "z": -3.220177173614502 + }, + { + "x": 2.8555684089660645, + "y": 0.21545220911502838, + "z": -3.1979334354400635 + }, + { + "x": 2.8576014041900635, + "y": 0.21545220911502838, + "z": -3.1760294437408447 + }, + { + "x": 2.859224557876587, + "y": 0.21545220911502838, + "z": -3.1544811725616455 + }, + { + "x": 2.8604750633239746, + "y": 0.21545220911502838, + "z": -3.1333107948303223 + }, + { + "x": 2.861398935317993, + "y": 0.21545220911502838, + "z": -3.1125450134277344 + }, + { + "x": 2.862053155899048, + "y": 0.21545220911502838, + "z": -3.0922164916992188 + }, + { + "x": 2.8625032901763916, + "y": 0.21545220911502838, + "z": -3.0723631381988525 + }, + { + "x": 2.862825393676758, + "y": 0.21545220911502838, + "z": -3.0530283451080322 + }, + { + "x": 2.863105297088623, + "y": 0.21545220911502838, + "z": -3.0342609882354736 + }, + { + "x": 2.863438367843628, + "y": 0.21545220911502838, + "z": -3.016115665435791 + }, + { + "x": 2.8639230728149414, + "y": 0.21545220911502838, + "z": -2.9986445903778076 + }, + { + "x": 2.8646509647369385, + "y": 0.21545220911502838, + "z": -2.981884479522705 + }, + { + "x": 2.8657028675079346, + "y": 0.21545220911502838, + "z": -2.965852737426758 + }, + { + "x": 2.867147445678711, + "y": 0.21545220911502838, + "z": -2.950547695159912 + }, + { + "x": 2.8690433502197266, + "y": 0.21545220911502838, + "z": -2.935948371887207 + }, + { + "x": 2.8714396953582764, + "y": 0.21545220911502838, + "z": -2.9220149517059326 + }, + { + "x": 2.874372959136963, + "y": 0.2154521942138672, + "z": -2.9086883068084717 + }, + { + "x": 2.877870798110962, + "y": 0.21545220911502838, + "z": -2.8958899974823 + }, + { + "x": 2.8819472789764404, + "y": 0.2154521942138672, + "z": -2.8835225105285645 + }, + { + "x": 2.8866093158721924, + "y": 0.21545220911502838, + "z": -2.871469020843506 + }, + { + "x": 2.891850471496582, + "y": 0.21545220911502838, + "z": -2.8595943450927734 + }, + { + "x": 2.8976547718048096, + "y": 0.21545220911502838, + "z": -2.847743272781372 + }, + { + "x": 2.9039952754974365, + "y": 0.21545220911502838, + "z": -2.835742712020874 + }, + { + "x": 2.910837411880493, + "y": 0.21545220911502838, + "z": -2.8234212398529053 + }, + { + "x": 2.918142795562744, + "y": 0.21545220911502838, + "z": -2.8106324672698975 + }, + { + "x": 2.925870656967163, + "y": 0.21545220911502838, + "z": -2.7972583770751953 + }, + { + "x": 2.933976411819458, + "y": 0.21545220911502838, + "z": -2.783210277557373 + }, + { + "x": 2.942411422729492, + "y": 0.2154521942138672, + "z": -2.7684264183044434 + }, + { + "x": 2.9511263370513916, + "y": 0.21545220911502838, + "z": -2.7528750896453857 + }, + { + "x": 2.9600648880004883, + "y": 0.21545220911502838, + "z": -2.7365520000457764 + }, + { + "x": 2.9691710472106934, + "y": 0.21545220911502838, + "z": -2.7194817066192627 + }, + { + "x": 2.9783835411071777, + "y": 0.21545220911502838, + "z": -2.7017173767089844 + }, + { + "x": 2.987638473510742, + "y": 0.21545220911502838, + "z": -2.683340072631836 + }, + { + "x": 2.996868371963501, + "y": 0.2154521942138672, + "z": -2.6644601821899414 + }, + { + "x": 3.0060033798217773, + "y": 0.21545220911502838, + "z": -2.6452155113220215 + }, + { + "x": 3.0149693489074707, + "y": 0.21545220911502838, + "z": -2.6257705688476562 + }, + { + "x": 3.023691177368164, + "y": 0.21545220911502838, + "z": -2.606289863586426 + }, + { + "x": 3.032090425491333, + "y": 0.21545220911502838, + "z": -2.5869221687316895 + }, + { + "x": 3.0400888919830322, + "y": 0.21545220911502838, + "z": -2.567796468734741 + }, + { + "x": 3.047605514526367, + "y": 0.21545220911502838, + "z": -2.5490243434906006 + }, + { + "x": 3.054558277130127, + "y": 0.2154521942138672, + "z": -2.5306975841522217 + }, + { + "x": 3.060863733291626, + "y": 0.21545220911502838, + "z": -2.512890577316284 + }, + { + "x": 3.066436529159546, + "y": 0.2154521942138672, + "z": -2.4956583976745605 + }, + { + "x": 3.0711891651153564, + "y": 0.21545220911502838, + "z": -2.4790384769439697 + }, + { + "x": 3.07503342628479, + "y": 0.21545220911502838, + "z": -2.4630486965179443 + }, + { + "x": 3.0778799057006836, + "y": 0.21545220911502838, + "z": -2.4476890563964844 + }, + { + "x": 3.0796353816986084, + "y": 0.21545220911502838, + "z": -2.432940721511841 + }, + { + "x": 3.0802090167999268, + "y": 0.21545220911502838, + "z": -2.418766736984253 + }, + { + "x": 3.07950758934021, + "y": 0.21545220911502838, + "z": -2.4051122665405273 + }, + { + "x": 3.0774619579315186, + "y": 0.2154521942138672, + "z": -2.3919103145599365 + }, + { + "x": 3.074030637741089, + "y": 0.21545220911502838, + "z": -2.379085063934326 + }, + { + "x": 3.069199562072754, + "y": 0.21545220911502838, + "z": -2.3665499687194824 + }, + { + "x": 3.062985897064209, + "y": 0.2154521942138672, + "z": -2.3542096614837646 + }, + { + "x": 3.0554351806640625, + "y": 0.2154521942138672, + "z": -2.34195876121521 + }, + { + "x": 3.0466220378875732, + "y": 0.21545220911502838, + "z": -2.3296823501586914 + }, + { + "x": 3.036649703979492, + "y": 0.21545220911502838, + "z": -2.317256212234497 + }, + { + "x": 3.025649309158325, + "y": 0.2154521942138672, + "z": -2.3045461177825928 + }, + { + "x": 3.0137853622436523, + "y": 0.21545220911502838, + "z": -2.2914085388183594 + }, + { + "x": 3.0012459754943848, + "y": 0.21545220911502838, + "z": -2.2776901721954346 + }, + { + "x": 2.9882519245147705, + "y": 0.21545220911502838, + "z": -2.263228178024292 + }, + { + "x": 2.9750523567199707, + "y": 0.21545220911502838, + "z": -2.247850179672241 + }, + { + "x": 2.961909770965576, + "y": 0.21545220911502838, + "z": -2.231382131576538 + }, + { + "x": 2.9490671157836914, + "y": 0.21545220911502838, + "z": -2.2136669158935547 + }, + { + "x": 2.936734914779663, + "y": 0.21545220911502838, + "z": -2.1945719718933105 + }, + { + "x": 2.9250926971435547, + "y": 0.21545220911502838, + "z": -2.173987627029419 + }, + { + "x": 2.9142866134643555, + "y": 0.21545220911502838, + "z": -2.1518282890319824 + }, + { + "x": 2.9044318199157715, + "y": 0.21545220911502838, + "z": -2.128031015396118 + }, + { + "x": 2.89561128616333, + "y": 0.21545220911502838, + "z": -2.1025564670562744 + }, + { + "x": 2.8878772258758545, + "y": 0.21545220911502838, + "z": -2.0753910541534424 + }, + { + "x": 2.8812477588653564, + "y": 0.21545220911502838, + "z": -2.046542167663574 + }, + { + "x": 2.87571120262146, + "y": 0.2154521942138672, + "z": -2.0160419940948486 + }, + { + "x": 2.871223211288452, + "y": 0.21545220911502838, + "z": -1.9839448928833008 + }, + { + "x": 2.8677070140838623, + "y": 0.21545220911502838, + "z": -1.9503315687179565 + }, + { + "x": 2.8650550842285156, + "y": 0.2154521644115448, + "z": -1.9153034687042236 + }, + { + "x": 2.863142728805542, + "y": 0.21545082330703735, + "z": -1.8789730072021484 + }, + { + "x": 2.8618533611297607, + "y": 0.21544398367404938, + "z": -1.8414421081542969 + }, + { + "x": 2.8610777854919434, + "y": 0.2154240608215332, + "z": -1.8028020858764648 + }, + { + "x": 2.8607187271118164, + "y": 0.21538019180297852, + "z": -1.7631282806396484 + }, + { + "x": 2.860689401626587, + "y": 0.21529817581176758, + "z": -1.7224842309951782 + }, + { + "x": 2.860912322998047, + "y": 0.2151605188846588, + "z": -1.6809196472167969 + }, + { + "x": 2.8613204956054688, + "y": 0.21494638919830322, + "z": -1.6384704113006592 + }, + { + "x": 2.861858367919922, + "y": 0.21463164687156677, + "z": -1.5951619148254395 + }, + { + "x": 2.8624789714813232, + "y": 0.2141888290643692, + "z": -1.5510040521621704 + }, + { + "x": 2.8631467819213867, + "y": 0.21358716487884521, + "z": -1.5059937238693237 + }, + { + "x": 2.8638360500335693, + "y": 0.2127925455570221, + "z": -1.4601134061813354 + }, + { + "x": 2.8645308017730713, + "y": 0.21176756918430328, + "z": -1.413336992263794 + }, + { + "x": 2.8652265071868896, + "y": 0.21047207713127136, + "z": -1.3656219244003296 + }, + { + "x": 2.865921974182129, + "y": 0.20886917412281036, + "z": -1.3169357776641846 + }, + { + "x": 2.8666176795959473, + "y": 0.20693139731884003, + "z": -1.2672715187072754 + }, + { + "x": 2.8673131465911865, + "y": 0.20464129745960236, + "z": -1.216654896736145 + }, + { + "x": 2.868008613586426, + "y": 0.2019912749528885, + "z": -1.1651362180709839 + }, + { + "x": 2.868704080581665, + "y": 0.19898374378681183, + "z": -1.1127967834472656 + }, + { + "x": 2.8694000244140625, + "y": 0.19563095271587372, + "z": -1.059744119644165 + }, + { + "x": 2.870095729827881, + "y": 0.19195537269115448, + "z": -1.0061200857162476 + }, + { + "x": 2.870790719985962, + "y": 0.18798917531967163, + "z": -0.9520905017852783 + }, + { + "x": 2.8714866638183594, + "y": 0.18377456068992615, + "z": -0.8978513479232788 + }, + { + "x": 2.8721821308135986, + "y": 0.1793636977672577, + "z": -0.8436275720596313 + }, + { + "x": 2.872877597808838, + "y": 0.17481854557991028, + "z": -0.789671778678894 + }, + { + "x": 2.873573064804077, + "y": 0.17021141946315765, + "z": -0.7362689971923828 + }, + { + "x": 2.874267101287842, + "y": 0.16562235355377197, + "z": -0.6837245225906372 + }, + { + "x": 2.874950647354126, + "y": 0.16112864017486572, + "z": -0.6323331594467163 + }, + { + "x": 2.875600576400757, + "y": 0.15679781138896942, + "z": -0.582358717918396 + }, + { + "x": 2.876181125640869, + "y": 0.15268775820732117, + "z": -0.534037709236145 + }, + { + "x": 2.8766427040100098, + "y": 0.1488461047410965, + "z": -0.48756980895996094 + }, + { + "x": 2.8769237995147705, + "y": 0.145310640335083, + "z": -0.44312524795532227 + }, + { + "x": 2.876948833465576, + "y": 0.14210909605026245, + "z": -0.40084123611450195 + }, + { + "x": 2.87662935256958, + "y": 0.13925951719284058, + "z": -0.3608262538909912 + }, + { + "x": 2.875863790512085, + "y": 0.13676977157592773, + "z": -0.3231544494628906 + }, + { + "x": 2.8745369911193848, + "y": 0.13463780283927917, + "z": -0.2878689765930176 + }, + { + "x": 2.872520923614502, + "y": 0.13285158574581146, + "z": -0.25498032569885254 + }, + { + "x": 2.8696749210357666, + "y": 0.1313892900943756, + "z": -0.2244701385498047 + }, + { + "x": 2.8658440113067627, + "y": 0.1302190124988556, + "z": -0.19628667831420898 + }, + { + "x": 2.860860824584961, + "y": 0.12930119037628174, + "z": -0.1703505516052246 + }, + { + "x": 2.8545432090759277, + "y": 0.12859632074832916, + "z": -0.1465747356414795 + }, + { + "x": 2.8466956615448, + "y": 0.1280677616596222, + "z": -0.12486958503723145 + }, + { + "x": 2.837108850479126, + "y": 0.1276819109916687, + "z": -0.10514330863952637 + }, + { + "x": 2.8255577087402344, + "y": 0.12740811705589294, + "z": -0.08730125427246094 + }, + { + "x": 2.81180477142334, + "y": 0.12721870839595795, + "z": -0.07124710083007812 + }, + { + "x": 2.79559588432312, + "y": 0.1270889788866043, + "z": -0.05688142776489258 + }, + { + "x": 2.7766671180725098, + "y": 0.1269971877336502, + "z": -0.04410243034362793 + }, + { + "x": 2.7547359466552734, + "y": 0.12692461907863617, + "z": -0.032806396484375 + }, + { + "x": 2.7295079231262207, + "y": 0.12685547769069672, + "z": -0.022888898849487305 + }, + { + "x": 2.7006733417510986, + "y": 0.12677696347236633, + "z": -0.014239072799682617 + }, + { + "x": 2.667909860610962, + "y": 0.12667925655841827, + "z": -0.0067479610443115234 + }, + { + "x": 2.6308813095092773, + "y": 0.12655557692050934, + "z": -0.0003018379211425781 + }, + { + "x": 2.5892674922943115, + "y": 0.1264040768146515, + "z": 0.005212306976318359 + }, + { + "x": 2.5428311824798584, + "y": 0.12623190879821777, + "z": 0.009902000427246094 + }, + { + "x": 2.4914329051971436, + "y": 0.12605608999729156, + "z": 0.013869285583496094 + }, + { + "x": 2.4350264072418213, + "y": 0.12590347230434418, + "z": 0.01721024513244629 + }, + { + "x": 2.373661994934082, + "y": 0.12581078708171844, + "z": 0.020014524459838867 + }, + { + "x": 2.3074867725372314, + "y": 0.12582466006278992, + "z": 0.022365570068359375 + }, + { + "x": 2.2367405891418457, + "y": 0.1260015219449997, + "z": 0.024341344833374023 + }, + { + "x": 2.161766529083252, + "y": 0.1264077126979828, + "z": 0.026013851165771484 + }, + { + "x": 2.082995891571045, + "y": 0.12711945176124573, + "z": 0.02744770050048828 + }, + { + "x": 2.000960350036621, + "y": 0.1282227337360382, + "z": 0.02870345115661621 + }, + { + "x": 1.916283369064331, + "y": 0.12981358170509338, + "z": 0.02983379364013672 + }, + { + "x": 1.8296918869018555, + "y": 0.13199767470359802, + "z": 0.030886411666870117 + }, + { + "x": 1.7419960498809814, + "y": 0.13488972187042236, + "z": 0.03190279006958008 + }, + { + "x": 1.6540164947509766, + "y": 0.13859823346138, + "z": 0.032917022705078125 + }, + { + "x": 1.5664737224578857, + "y": 0.14320652186870575, + "z": 0.03395700454711914 + }, + { + "x": 1.4799821376800537, + "y": 0.14876984059810638, + "z": 0.03504228591918945 + }, + { + "x": 1.3950395584106445, + "y": 0.15531602501869202, + "z": 0.036185264587402344 + }, + { + "x": 1.3120341300964355, + "y": 0.16284513473510742, + "z": 0.03739047050476074 + }, + { + "x": 1.2312407493591309, + "y": 0.17132967710494995, + "z": 0.03865623474121094 + }, + { + "x": 1.1528286933898926, + "y": 0.18071387708187103, + "z": 0.03997159004211426 + }, + { + "x": 1.076850414276123, + "y": 0.1909147948026657, + "z": 0.041320085525512695 + }, + { + "x": 1.0032484531402588, + "y": 0.20182162523269653, + "z": 0.042676448822021484 + }, + { + "x": 0.9318544864654541, + "y": 0.2132958024740219, + "z": 0.04400801658630371 + }, + { + "x": 0.8623868227005005, + "y": 0.22517137229442596, + "z": 0.045275211334228516 + }, + { + "x": 0.7944577932357788, + "y": 0.237253800034523, + "z": 0.04643082618713379 + }, + { + "x": 0.727573812007904, + "y": 0.24932481348514557, + "z": 0.04742121696472168 + }, + { + "x": 0.6612303853034973, + "y": 0.26116663217544556, + "z": 0.04819679260253906 + }, + { + "x": 0.5949768424034119, + "y": 0.27258235216140747, + "z": 0.04871797561645508 + }, + { + "x": 0.5284273624420166, + "y": 0.2833960950374603, + "z": 0.04895806312561035 + }, + { + "x": 0.461251437664032, + "y": 0.2934548556804657, + "z": 0.04890084266662598 + }, + { + "x": 0.3931805193424225, + "y": 0.3026271164417267, + "z": 0.04854249954223633 + }, + { + "x": 0.32400378584861755, + "y": 0.3108035624027252, + "z": 0.047890663146972656 + }, + { + "x": 0.2535761892795563, + "y": 0.3178960680961609, + "z": 0.046964406967163086 + }, + { + "x": 0.18180756270885468, + "y": 0.3238391876220703, + "z": 0.04579424858093262 + }, + { + "x": 0.10866938531398773, + "y": 0.32858899235725403, + "z": 0.04442262649536133 + }, + { + "x": 0.03419321030378342, + "y": 0.33212360739707947, + "z": 0.042903900146484375 + }, + { + "x": -0.041531018912792206, + "y": 0.33444300293922424, + "z": 0.041303157806396484 + }, + { + "x": -0.11834798753261566, + "y": 0.33556896448135376, + "z": 0.039698123931884766 + }, + { + "x": -0.1960555613040924, + "y": 0.33554333448410034, + "z": 0.03817319869995117 + }, + { + "x": -0.27443376183509827, + "y": 0.33441925048828125, + "z": 0.03680610656738281 + }, + { + "x": -0.3532651364803314, + "y": 0.3322566747665405, + "z": 0.035657644271850586 + }, + { + "x": -0.43232855200767517, + "y": 0.32912278175354004, + "z": 0.03477358818054199 + }, + { + "x": -0.5114094018936157, + "y": 0.3250914216041565, + "z": 0.03418254852294922 + }, + { + "x": -0.5902933478355408, + "y": 0.3202434182167053, + "z": 0.033898115158081055 + }, + { + "x": -0.6687688231468201, + "y": 0.31466639041900635, + "z": 0.03391695022583008 + }, + { + "x": -0.7466206550598145, + "y": 0.30845531821250916, + "z": 0.03421974182128906 + }, + { + "x": -0.8236403465270996, + "y": 0.3017115592956543, + "z": 0.03477144241333008 + }, + { + "x": -0.8996193408966064, + "y": 0.29454365372657776, + "z": 0.035521507263183594 + }, + { + "x": -0.974352240562439, + "y": 0.287066787481308, + "z": 0.036402225494384766 + }, + { + "x": -1.047629475593567, + "y": 0.2794036269187927, + "z": 0.037329673767089844 + }, + { + "x": -1.1192492246627808, + "y": 0.2716831862926483, + "z": 0.038205623626708984 + }, + { + "x": -1.1890162229537964, + "y": 0.264037162065506, + "z": 0.03891897201538086 + }, + { + "x": -1.25676429271698, + "y": 0.25658881664276123, + "z": 0.03936123847961426 + }, + { + "x": -1.3223634958267212, + "y": 0.24944940209388733, + "z": 0.03943157196044922 + }, + { + "x": -1.385714054107666, + "y": 0.24271881580352783, + "z": 0.03903317451477051 + }, + { + "x": -1.4467554092407227, + "y": 0.2364846169948578, + "z": 0.03807568550109863 + }, + { + "x": -1.5054596662521362, + "y": 0.23082269728183746, + "z": 0.03647613525390625 + }, + { + "x": -1.5618360042572021, + "y": 0.22579698264598846, + "z": 0.034155845642089844 + }, + { + "x": -1.6159234046936035, + "y": 0.22145995497703552, + "z": 0.03104376792907715 + }, + { + "x": -1.667799472808838, + "y": 0.21785181760787964, + "z": 0.02707386016845703 + }, + { + "x": -1.7175757884979248, + "y": 0.21500112116336823, + "z": 0.0221865177154541 + }, + { + "x": -1.7654000520706177, + "y": 0.2129245400428772, + "z": 0.016328811645507812 + }, + { + "x": -1.8114495277404785, + "y": 0.21162697672843933, + "z": 0.009452581405639648 + }, + { + "x": -1.855940341949463, + "y": 0.2111014425754547, + "z": 0.001516580581665039 + }, + { + "x": -1.8990989923477173, + "y": 0.21132931113243103, + "z": -0.007514238357543945 + }, + { + "x": -1.9411314725875854, + "y": 0.212280735373497, + "z": -0.017670631408691406 + }, + { + "x": -1.9822114706039429, + "y": 0.21391452848911285, + "z": -0.0289762020111084 + }, + { + "x": -2.0224883556365967, + "y": 0.21617837250232697, + "z": -0.041449785232543945 + }, + { + "x": -2.062082529067993, + "y": 0.2190086543560028, + "z": -0.055104970932006836 + }, + { + "x": -2.101085901260376, + "y": 0.22233057022094727, + "z": -0.06994962692260742 + }, + { + "x": -2.1395626068115234, + "y": 0.22605815529823303, + "z": -0.08598685264587402 + }, + { + "x": -2.1775476932525635, + "y": 0.23009392619132996, + "z": -0.10321164131164551 + }, + { + "x": -2.2150487899780273, + "y": 0.2343294620513916, + "z": -0.12161660194396973 + }, + { + "x": -2.2520456314086914, + "y": 0.23864500224590302, + "z": -0.14118695259094238 + }, + { + "x": -2.2884910106658936, + "y": 0.24290969967842102, + "z": -0.16190242767333984 + }, + { + "x": -2.324305772781372, + "y": 0.24698105454444885, + "z": -0.18373870849609375 + }, + { + "x": -2.3593881130218506, + "y": 0.25070762634277344, + "z": -0.2066640853881836 + }, + { + "x": -2.393627882003784, + "y": 0.2539486885070801, + "z": -0.23064637184143066 + }, + { + "x": -2.4269280433654785, + "y": 0.25659486651420593, + "z": -0.25565361976623535 + }, + { + "x": -2.459202766418457, + "y": 0.258569598197937, + "z": -0.28165555000305176 + }, + { + "x": -2.4903836250305176, + "y": 0.25982969999313354, + "z": -0.3086223602294922 + }, + { + "x": -2.5204145908355713, + "y": 0.2603648900985718, + "z": -0.33652591705322266 + }, + { + "x": -2.5492541790008545, + "y": 0.2601979374885559, + "z": -0.3653388023376465 + }, + { + "x": -2.5768747329711914, + "y": 0.25938478112220764, + "z": -0.3950369358062744 + }, + { + "x": -2.6032612323760986, + "y": 0.25801438093185425, + "z": -0.42559385299682617 + }, + { + "x": -2.6284148693084717, + "y": 0.25620874762535095, + "z": -0.45698702335357666 + }, + { + "x": -2.6523499488830566, + "y": 0.2541230320930481, + "z": -0.48919427394866943 + }, + { + "x": -2.6750950813293457, + "y": 0.25194528698921204, + "z": -0.5221956968307495 + }, + { + "x": -2.6966917514801025, + "y": 0.24989689886569977, + "z": -0.5559695959091187 + }, + { + "x": -2.7171950340270996, + "y": 0.24822482466697693, + "z": -0.590498685836792 + }, + { + "x": -2.736661911010742, + "y": 0.2471584677696228, + "z": -0.6257619857788086 + }, + { + "x": -2.755145788192749, + "y": 0.2468828558921814, + "z": -0.6617375612258911 + }, + { + "x": -2.7726943492889404, + "y": 0.24753741919994354, + "z": -0.6983983516693115 + }, + { + "x": -2.7893528938293457, + "y": 0.2492160052061081, + "z": -0.7357162237167358 + }, + { + "x": -2.8051607608795166, + "y": 0.2519669532775879, + "z": -0.7736599445343018 + }, + { + "x": -2.820155620574951, + "y": 0.255793035030365, + "z": -0.8121964931488037 + }, + { + "x": -2.8343677520751953, + "y": 0.26065126061439514, + "z": -0.8512861728668213 + }, + { + "x": -2.847825288772583, + "y": 0.2664532959461212, + "z": -0.8908909559249878 + }, + { + "x": -2.86055064201355, + "y": 0.27306509017944336, + "z": -0.9309680461883545 + }, + { + "x": -2.8725645542144775, + "y": 0.28030717372894287, + "z": -0.9714716672897339 + }, + { + "x": -2.883881092071533, + "y": 0.28795450925827026, + "z": -1.012354850769043 + }, + { + "x": -2.894510269165039, + "y": 0.2957361936569214, + "z": -1.0535643100738525 + }, + { + "x": -2.9044599533081055, + "y": 0.30335110425949097, + "z": -1.0950469970703125 + }, + { + "x": -2.9137392044067383, + "y": 0.3105178773403168, + "z": -1.1367433071136475 + }, + { + "x": -2.9223573207855225, + "y": 0.31699419021606445, + "z": -1.1785897016525269 + }, + { + "x": -2.930327892303467, + "y": 0.3225765824317932, + "z": -1.2205134630203247 + }, + { + "x": -2.9376649856567383, + "y": 0.32710134983062744, + "z": -1.2624396085739136 + }, + { + "x": -2.9443860054016113, + "y": 0.3304439187049866, + "z": -1.3042868375778198 + }, + { + "x": -2.950510025024414, + "y": 0.33251896500587463, + "z": -1.3459689617156982 + }, + { + "x": -2.9560587406158447, + "y": 0.33328044414520264, + "z": -1.3873906135559082 + }, + { + "x": -2.9610564708709717, + "y": 0.3327215909957886, + "z": -1.428455114364624 + }, + { + "x": -2.9655277729034424, + "y": 0.3308749198913574, + "z": -1.4690587520599365 + }, + { + "x": -2.9695019721984863, + "y": 0.32781219482421875, + "z": -1.5090925693511963 + }, + { + "x": -2.973008394241333, + "y": 0.3236446678638458, + "z": -1.548439860343933 + }, + { + "x": -2.9760806560516357, + "y": 0.31852221488952637, + "z": -1.5869810581207275 + }, + { + "x": -2.9787495136260986, + "y": 0.31261900067329407, + "z": -1.6245968341827393 + }, + { + "x": -2.981043577194214, + "y": 0.30610308051109314, + "z": -1.661181926727295 + }, + { + "x": -2.982982635498047, + "y": 0.2991294860839844, + "z": -1.6966490745544434 + }, + { + "x": -2.984581708908081, + "y": 0.29184091091156006, + "z": -1.7309253215789795 + }, + { + "x": -2.985849142074585, + "y": 0.2843666672706604, + "z": -1.7639576196670532 + }, + { + "x": -2.9867870807647705, + "y": 0.27682337164878845, + "z": -1.7957091331481934 + }, + { + "x": -2.987391471862793, + "y": 0.2693145275115967, + "z": -1.8261607885360718 + }, + { + "x": -2.9876513481140137, + "y": 0.2619314193725586, + "z": -1.8553085327148438 + }, + { + "x": -2.9875504970550537, + "y": 0.2547518014907837, + "z": -1.8831675052642822 + }, + { + "x": -2.9870662689208984, + "y": 0.24784080684185028, + "z": -1.9097692966461182 + }, + { + "x": -2.9861693382263184, + "y": 0.24125051498413086, + "z": -1.9351630210876465 + }, + { + "x": -2.9848244190216064, + "y": 0.23502059280872345, + "z": -1.9594132900238037 + }, + { + "x": -2.982989549636841, + "y": 0.22917762398719788, + "z": -1.9826029539108276 + }, + { + "x": -2.980621099472046, + "y": 0.22373896837234497, + "z": -2.004819869995117 + }, + { + "x": -2.977675437927246, + "y": 0.2187168151140213, + "z": -2.02614426612854 + }, + { + "x": -2.9741103649139404, + "y": 0.2141190618276596, + "z": -2.046645164489746 + }, + { + "x": -2.9698855876922607, + "y": 0.20994874835014343, + "z": -2.0663838386535645 + }, + { + "x": -2.964961528778076, + "y": 0.2062043845653534, + "z": -2.0854105949401855 + }, + { + "x": -2.959301233291626, + "y": 0.20287998020648956, + "z": -2.103766918182373 + }, + { + "x": -2.9528677463531494, + "y": 0.19996486604213715, + "z": -2.1214840412139893 + }, + { + "x": -2.945626735687256, + "y": 0.19744397699832916, + "z": -2.138582944869995 + }, + { + "x": -2.9375452995300293, + "y": 0.19529752433300018, + "z": -2.155076026916504 + }, + { + "x": -2.928590774536133, + "y": 0.19350114464759827, + "z": -2.1709654331207275 + }, + { + "x": -2.918732166290283, + "y": 0.19202592968940735, + "z": -2.186244010925293 + }, + { + "x": -2.907942771911621, + "y": 0.19083848595619202, + "z": -2.2008934020996094 + }, + { + "x": -2.896193027496338, + "y": 0.18990114331245422, + "z": -2.2148890495300293 + }, + { + "x": -2.883462429046631, + "y": 0.18917621672153473, + "z": -2.228203773498535 + }, + { + "x": -2.8697397708892822, + "y": 0.1886289268732071, + "z": -2.2408151626586914 + }, + { + "x": -2.8550193309783936, + "y": 0.18822753429412842, + "z": -2.25270938873291 + }, + { + "x": -2.839308023452759, + "y": 0.1879434734582901, + "z": -2.263875961303711 + }, + { + "x": -2.8226215839385986, + "y": 0.18775129318237305, + "z": -2.274310350418091 + }, + { + "x": -2.804981231689453, + "y": 0.18762865662574768, + "z": -2.284015655517578 + }, + { + "x": -2.786421775817871, + "y": 0.18755632638931274, + "z": -2.2929985523223877 + }, + { + "x": -2.7669835090637207, + "y": 0.1875181943178177, + "z": -2.3012733459472656 + }, + { + "x": -2.7467174530029297, + "y": 0.18750128149986267, + "z": -2.308859348297119 + }, + { + "x": -2.7256851196289062, + "y": 0.18749572336673737, + "z": -2.3157811164855957 + }, + { + "x": -2.7039530277252197, + "y": 0.18749473989009857, + "z": -2.3220701217651367 + }, + { + "x": -2.681600570678711, + "y": 0.18749472498893738, + "z": -2.3277628421783447 + }, + { + "x": -2.6587116718292236, + "y": 0.18749472498893738, + "z": -2.3329017162323 + }, + { + "x": -2.6353697776794434, + "y": 0.18749472498893738, + "z": -2.3375303745269775 + }, + { + "x": -2.6116535663604736, + "y": 0.18749472498893738, + "z": -2.34169340133667 + }, + { + "x": -2.587631940841675, + "y": 0.18749472498893738, + "z": -2.3454365730285645 + }, + { + "x": -2.5633716583251953, + "y": 0.18749472498893738, + "z": -2.348806142807007 + }, + { + "x": -2.5389323234558105, + "y": 0.18749472498893738, + "z": -2.3518478870391846 + }, + { + "x": -2.5143654346466064, + "y": 0.18749472498893738, + "z": -2.3546102046966553 + }, + { + "x": -2.489720106124878, + "y": 0.18749472498893738, + "z": -2.357140302658081 + }, + { + "x": -2.4650347232818604, + "y": 0.18749472498893738, + "z": -2.3594870567321777 + }, + { + "x": -2.4403462409973145, + "y": 0.18749472498893738, + "z": -2.3616998195648193 + }, + { + "x": -2.415684223175049, + "y": 0.18749472498893738, + "z": -2.363828420639038 + }, + { + "x": -2.391068935394287, + "y": 0.18749472498893738, + "z": -2.3659236431121826 + }, + { + "x": -2.366520404815674, + "y": 0.18749472498893738, + "z": -2.3680362701416016 + }, + { + "x": -2.342048406600952, + "y": 0.18749472498893738, + "z": -2.3702187538146973 + }, + { + "x": -2.317669153213501, + "y": 0.18749472498893738, + "z": -2.372525691986084 + }, + { + "x": -2.2934024333953857, + "y": 0.18749472498893738, + "z": -2.3750131130218506 + }, + { + "x": -2.2692673206329346, + "y": 0.18749472498893738, + "z": -2.3777408599853516 + }, + { + "x": -2.2452902793884277, + "y": 0.18749472498893738, + "z": -2.380769968032837 + }, + { + "x": -2.221501111984253, + "y": 0.18749472498893738, + "z": -2.3841638565063477 + }, + { + "x": -2.197930097579956, + "y": 0.18749472498893738, + "z": -2.3879895210266113 + }, + { + "x": -2.174614906311035, + "y": 0.18749472498893738, + "z": -2.3923146724700928 + }, + { + "x": -2.151592254638672, + "y": 0.18749472498893738, + "z": -2.3972110748291016 + }, + { + "x": -2.128906011581421, + "y": 0.18749472498893738, + "z": -2.4027514457702637 + }, + { + "x": -2.1066033840179443, + "y": 0.18749472498893738, + "z": -2.409011125564575 + }, + { + "x": -2.0847325325012207, + "y": 0.18749472498893738, + "z": -2.4160690307617188 + }, + { + "x": -2.063347101211548, + "y": 0.18749472498893738, + "z": -2.424004316329956 + }, + { + "x": -2.042495012283325, + "y": 0.18749472498893738, + "z": -2.432891845703125 + }, + { + "x": -2.0222127437591553, + "y": 0.18749472498893738, + "z": -2.4427859783172607 + }, + { + "x": -2.002519369125366, + "y": 0.18749472498893738, + "z": -2.4537200927734375 + }, + { + "x": -1.9834164381027222, + "y": 0.18749472498893738, + "z": -2.465707302093506 + }, + { + "x": -1.9648915529251099, + "y": 0.18749472498893738, + "z": -2.478738307952881 + }, + { + "x": -1.9469168186187744, + "y": 0.18749472498893738, + "z": -2.4927821159362793 + }, + { + "x": -1.929444670677185, + "y": 0.18749472498893738, + "z": -2.5077884197235107 + }, + { + "x": -1.9124155044555664, + "y": 0.18749472498893738, + "z": -2.5236833095550537 + }, + { + "x": -1.8957513570785522, + "y": 0.18749472498893738, + "z": -2.5403740406036377 + }, + { + "x": -1.879358172416687, + "y": 0.18749472498893738, + "z": -2.5577445030212402 + }, + { + "x": -1.8631277084350586, + "y": 0.18749472498893738, + "z": -2.5756571292877197 + }, + { + "x": -1.846933364868164, + "y": 0.18749472498893738, + "z": -2.5939557552337646 + }, + { + "x": -1.8306351900100708, + "y": 0.18749472498893738, + "z": -2.612461566925049 + }, + { + "x": -1.8140966892242432, + "y": 0.18749487400054932, + "z": -2.630990982055664 + }, + { + "x": -1.7971982955932617, + "y": 0.18749552965164185, + "z": -2.6493732929229736 + }, + { + "x": -1.7798444032669067, + "y": 0.18749728798866272, + "z": -2.667445421218872 + }, + { + "x": -1.7619574069976807, + "y": 0.1875009983778, + "z": -2.6850597858428955 + }, + { + "x": -1.7434839010238647, + "y": 0.1875077486038208, + "z": -2.7020773887634277 + }, + { + "x": -1.7243905067443848, + "y": 0.1875188648700714, + "z": -2.7183711528778076 + }, + { + "x": -1.7046633958816528, + "y": 0.18753591179847717, + "z": -2.7338273525238037 + }, + { + "x": -1.6843124628067017, + "y": 0.18756069242954254, + "z": -2.7483413219451904 + }, + { + "x": -1.6633652448654175, + "y": 0.18759526312351227, + "z": -2.761822462081909 + }, + { + "x": -1.6418735980987549, + "y": 0.1876419335603714, + "z": -2.7741897106170654 + }, + { + "x": -1.6199105978012085, + "y": 0.1877032220363617, + "z": -2.7853736877441406 + }, + { + "x": -1.5975664854049683, + "y": 0.1877819001674652, + "z": -2.7953178882598877 + }, + { + "x": -1.5749534368515015, + "y": 0.18788084387779236, + "z": -2.803976058959961 + }, + { + "x": -1.552185297012329, + "y": 0.18800215423107147, + "z": -2.8113112449645996 + }, + { + "x": -1.5293641090393066, + "y": 0.1881466656923294, + "z": -2.8172974586486816 + }, + { + "x": -1.5065842866897583, + "y": 0.18831384181976318, + "z": -2.8219153881073 + }, + { + "x": -1.483929991722107, + "y": 0.18850187957286835, + "z": -2.8251564502716064 + }, + { + "x": -1.4614769220352173, + "y": 0.1887076199054718, + "z": -2.8270199298858643 + }, + { + "x": -1.4392915964126587, + "y": 0.1889265924692154, + "z": -2.827514410018921 + }, + { + "x": -1.4174286127090454, + "y": 0.1891530454158783, + "z": -2.826657772064209 + }, + { + "x": -1.3959366083145142, + "y": 0.18937982618808746, + "z": -2.8244762420654297 + }, + { + "x": -1.3748514652252197, + "y": 0.18959856033325195, + "z": -2.82100510597229 + }, + { + "x": -1.3542019128799438, + "y": 0.1897994875907898, + "z": -2.816288948059082 + }, + { + "x": -1.3340075016021729, + "y": 0.18997153639793396, + "z": -2.8103814125061035 + }, + { + "x": -1.3142753839492798, + "y": 0.19010235369205475, + "z": -2.803344249725342 + }, + { + "x": -1.295008897781372, + "y": 0.19017890095710754, + "z": -2.795248508453369 + }, + { + "x": -1.2762113809585571, + "y": 0.19018980860710144, + "z": -2.786172389984131 + }, + { + "x": -1.257887601852417, + "y": 0.1901261806488037, + "z": -2.7761993408203125 + }, + { + "x": -1.2400506734848022, + "y": 0.1899816244840622, + "z": -2.7654213905334473 + }, + { + "x": -1.222712516784668, + "y": 0.1897522658109665, + "z": -2.753934383392334 + }, + { + "x": -1.205892562866211, + "y": 0.18943674862384796, + "z": -2.7418432235717773 + }, + { + "x": -1.1896138191223145, + "y": 0.18903623521327972, + "z": -2.7292585372924805 + }, + { + "x": -1.1739007234573364, + "y": 0.18855434656143188, + "z": -2.7162954807281494 + }, + { + "x": -1.1587836742401123, + "y": 0.1879972517490387, + "z": -2.703078508377075 + }, + { + "x": -1.14429771900177, + "y": 0.18737365305423737, + "z": -2.6897377967834473 + }, + { + "x": -1.1304785013198853, + "y": 0.1866946965456009, + "z": -2.676407814025879 + }, + { + "x": -1.1173690557479858, + "y": 0.18597412109375, + "z": -2.6632332801818848 + }, + { + "x": -1.1050134897232056, + "y": 0.18522801995277405, + "z": -2.6503615379333496 + }, + { + "x": -1.0934566259384155, + "y": 0.18447379767894745, + "z": -2.637938976287842 + }, + { + "x": -1.0827324390411377, + "y": 0.1837274134159088, + "z": -2.626091241836548 + }, + { + "x": -1.0728604793548584, + "y": 0.18300269544124603, + "z": -2.6149158477783203 + }, + { + "x": -1.0638493299484253, + "y": 0.18231159448623657, + "z": -2.6044869422912598 + }, + { + "x": -1.0556929111480713, + "y": 0.1816638857126236, + "z": -2.59485125541687 + }, + { + "x": -1.0483732223510742, + "y": 0.18106742203235626, + "z": -2.586031198501587 + }, + { + "x": -1.0418593883514404, + "y": 0.18052802979946136, + "z": -2.5780229568481445 + }, + { + "x": -1.0361071825027466, + "y": 0.18004941940307617, + "z": -2.570796489715576 + }, + { + "x": -1.0310592651367188, + "y": 0.17963336408138275, + "z": -2.5642964839935303 + }, + { + "x": -1.0266461372375488, + "y": 0.17927959561347961, + "z": -2.5584425926208496 + }, + { + "x": -1.0227844715118408, + "y": 0.17898574471473694, + "z": -2.5531272888183594 + }, + { + "x": -1.019378900527954, + "y": 0.1787475347518921, + "z": -2.5482189655303955 + }, + { + "x": -1.0163207054138184, + "y": 0.1785586178302765, + "z": -2.543560028076172 + }, + { + "x": -1.0134958028793335, + "y": 0.1784118115901947, + "z": -2.538990020751953 + }, + { + "x": -1.0107932090759277, + "y": 0.17830033600330353, + "z": -2.5343689918518066 + }, + { + "x": -1.0081051588058472, + "y": 0.1782180219888687, + "z": -2.529581069946289 + }, + { + "x": -1.00532865524292, + "y": 0.17815925180912018, + "z": -2.5245351791381836 + }, + { + "x": -1.0023640394210815, + "y": 0.17811906337738037, + "z": -2.5191640853881836 + }, + { + "x": -0.9991156458854675, + "y": 0.17809303104877472, + "z": -2.513425827026367 + }, + { + "x": -0.9954917430877686, + "y": 0.17807738482952118, + "z": -2.5073022842407227 + }, + { + "x": -0.9914044141769409, + "y": 0.17806889116764069, + "z": -2.5007994174957275 + }, + { + "x": -0.9867700934410095, + "y": 0.17806494235992432, + "z": -2.493947744369507 + }, + { + "x": -0.9815089106559753, + "y": 0.1780635267496109, + "z": -2.486802577972412 + }, + { + "x": -0.9755440354347229, + "y": 0.17806322872638702, + "z": -2.479443073272705 + }, + { + "x": -0.9688042998313904, + "y": 0.17806321382522583, + "z": -2.471973180770874 + }, + { + "x": -0.9612208604812622, + "y": 0.17806321382522583, + "z": -2.464517831802368 + }, + { + "x": -0.9527328610420227, + "y": 0.17806321382522583, + "z": -2.4572041034698486 + }, + { + "x": -0.9432882070541382, + "y": 0.17806321382522583, + "z": -2.450143575668335 + }, + { + "x": -0.9328421950340271, + "y": 0.17806321382522583, + "z": -2.4434311389923096 + }, + { + "x": -0.9213609099388123, + "y": 0.17806321382522583, + "z": -2.4371469020843506 + }, + { + "x": -0.9088169932365417, + "y": 0.17806321382522583, + "z": -2.4313528537750244 + }, + { + "x": -0.8951932787895203, + "y": 0.17806321382522583, + "z": -2.4260966777801514 + }, + { + "x": -0.8804823160171509, + "y": 0.17806321382522583, + "z": -2.4214091300964355 + }, + { + "x": -0.8646824955940247, + "y": 0.17806321382522583, + "z": -2.417304515838623 + }, + { + "x": -0.8478036522865295, + "y": 0.17806321382522583, + "z": -2.4137816429138184 + }, + { + "x": -0.8298645615577698, + "y": 0.17806321382522583, + "z": -2.410822868347168 + }, + { + "x": -0.8108895421028137, + "y": 0.17806321382522583, + "z": -2.4083943367004395 + }, + { + "x": -0.7909161448478699, + "y": 0.17806321382522583, + "z": -2.4064459800720215 + }, + { + "x": -0.7699851393699646, + "y": 0.17806321382522583, + "z": -2.404914617538452 + }, + { + "x": -0.7481436729431152, + "y": 0.17806321382522583, + "z": -2.4037363529205322 + }, + { + "x": -0.7254393100738525, + "y": 0.17806321382522583, + "z": -2.4028520584106445 + }, + { + "x": -0.7019166946411133, + "y": 0.17806321382522583, + "z": -2.402208089828491 + }, + { + "x": -0.6776246428489685, + "y": 0.17806321382522583, + "z": -2.401756525039673 + }, + { + "x": -0.6526123881340027, + "y": 0.17806321382522583, + "z": -2.401454448699951 + }, + { + "x": -0.6269260048866272, + "y": 0.17806321382522583, + "z": -2.4012646675109863 + }, + { + "x": -0.6006171107292175, + "y": 0.17806321382522583, + "z": -2.4011552333831787 + }, + { + "x": -0.5737327337265015, + "y": 0.17806321382522583, + "z": -2.40109920501709 + }, + { + "x": -0.5463241934776306, + "y": 0.17806321382522583, + "z": -2.401075839996338 + }, + { + "x": -0.5184435248374939, + "y": 0.17806321382522583, + "z": -2.401068687438965 + }, + { + "x": -0.4901391565799713, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.4614655077457428, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.43247073888778687, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.4032045900821686, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.3737125098705292, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.3440321087837219, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.3142015337944031, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.2842547595500946, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.25421783328056335, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.22411881387233734, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.19397591054439545, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.1638079583644867, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.13363002240657806, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.10344885289669037, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.0732710137963295, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.04304124042391777, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": -0.012571674771606922, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.018476054072380066, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.05059545859694481, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.08442609012126923, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.12075778841972351, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.16053631901741028, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.20485052466392517, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.25494804978370667, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.3122209310531616, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.37821027636528015, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + }, + { + "x": 0.4546176791191101, + "y": 0.17806321382522583, + "z": -2.4010677337646484 + } + ], + "closed": true +} \ No newline at end of file diff --git a/public/SPLINE.json b/public/SPLINE.json new file mode 100644 index 0000000..7665b96 --- /dev/null +++ b/public/SPLINE.json @@ -0,0 +1,3605 @@ +{ + "points": [ + { + "x": 1.9993304014205933, + "y": 4.662108898162842, + "z": -2.4273054599761963 + }, + { + "x": 2.191608428955078, + "y": 4.660759449005127, + "z": -2.4519402980804443 + }, + { + "x": 2.346683979034424, + "y": 4.659717559814453, + "z": -2.478855609893799 + }, + { + "x": 2.4701476097106934, + "y": 4.658931732177734, + "z": -2.5077083110809326 + }, + { + "x": 2.5671095848083496, + "y": 4.658356189727783, + "z": -2.5381882190704346 + }, + { + "x": 2.6421990394592285, + "y": 4.657949924468994, + "z": -2.5700178146362305 + }, + { + "x": 2.6995644569396973, + "y": 4.657675743103027, + "z": -2.602951765060425 + }, + { + "x": 2.742873191833496, + "y": 4.657501697540283, + "z": -2.636777639389038 + }, + { + "x": 2.7753124237060547, + "y": 4.6573991775512695, + "z": -2.6713156700134277 + }, + { + "x": 2.799586534500122, + "y": 4.657345771789551, + "z": -2.70641827583313 + }, + { + "x": 2.817919969558716, + "y": 4.657322406768799, + "z": -2.741971015930176 + }, + { + "x": 2.8320577144622803, + "y": 4.657314777374268, + "z": -2.777891159057617 + }, + { + "x": 2.8432610034942627, + "y": 4.657313346862793, + "z": -2.8141298294067383 + }, + { + "x": 2.8523125648498535, + "y": 4.657313346862793, + "z": -2.8506693840026855 + }, + { + "x": 2.85958194732666, + "y": 4.657313346862793, + "z": -2.8875184059143066 + }, + { + "x": 2.86529278755188, + "y": 4.657313346862793, + "z": -2.9246833324432373 + }, + { + "x": 2.8696391582489014, + "y": 4.657313346862793, + "z": -2.962155818939209 + }, + { + "x": 2.8727879524230957, + "y": 4.657313346862793, + "z": -2.999913215637207 + }, + { + "x": 2.874877452850342, + "y": 4.657313346862793, + "z": -3.0379185676574707 + }, + { + "x": 2.8760201930999756, + "y": 4.657313346862793, + "z": -3.076119899749756 + }, + { + "x": 2.8762989044189453, + "y": 4.657313346862793, + "z": -3.1144511699676514 + }, + { + "x": 2.8757708072662354, + "y": 4.657313346862793, + "z": -3.152831554412842 + }, + { + "x": 2.874464750289917, + "y": 4.657313346862793, + "z": -3.1911656856536865 + }, + { + "x": 2.8723819255828857, + "y": 4.657313346862793, + "z": -3.229344129562378 + }, + { + "x": 2.8694958686828613, + "y": 4.657313346862793, + "z": -3.267242431640625 + }, + { + "x": 2.865752696990967, + "y": 4.657313346862793, + "z": -3.3047213554382324 + }, + { + "x": 2.8610730171203613, + "y": 4.657313346862793, + "z": -3.3416285514831543 + }, + { + "x": 2.855360984802246, + "y": 4.657313346862793, + "z": -3.3778092861175537 + }, + { + "x": 2.848531484603882, + "y": 4.657313346862793, + "z": -3.41312837600708 + }, + { + "x": 2.8405110836029053, + "y": 4.657313346862793, + "z": -3.4474730491638184 + }, + { + "x": 2.8312366008758545, + "y": 4.657313346862793, + "z": -3.480752468109131 + }, + { + "x": 2.820659637451172, + "y": 4.657313346862793, + "z": -3.5128989219665527 + }, + { + "x": 2.808741331100464, + "y": 4.657313346862793, + "z": -3.5438668727874756 + }, + { + "x": 2.795456647872925, + "y": 4.657313346862793, + "z": -3.5736331939697266 + }, + { + "x": 2.7807915210723877, + "y": 4.657313346862793, + "z": -3.60219669342041 + }, + { + "x": 2.7647440433502197, + "y": 4.657313346862793, + "z": -3.629580020904541 + }, + { + "x": 2.7473251819610596, + "y": 4.657313346862793, + "z": -3.655827283859253 + }, + { + "x": 2.7285573482513428, + "y": 4.657313346862793, + "z": -3.6810050010681152 + }, + { + "x": 2.7084743976593018, + "y": 4.657313346862793, + "z": -3.705202102661133 + }, + { + "x": 2.6871225833892822, + "y": 4.657313346862793, + "z": -3.728527545928955 + }, + { + "x": 2.664557695388794, + "y": 4.657313346862793, + "z": -3.751084327697754 + }, + { + "x": 2.6408424377441406, + "y": 4.657313346862793, + "z": -3.7729547023773193 + }, + { + "x": 2.6160454750061035, + "y": 4.657313346862793, + "z": -3.7941973209381104 + }, + { + "x": 2.5902445316314697, + "y": 4.657313346862793, + "z": -3.8148488998413086 + }, + { + "x": 2.563523292541504, + "y": 4.657313346862793, + "z": -3.834923267364502 + }, + { + "x": 2.535973072052002, + "y": 4.657313346862793, + "z": -3.8544118404388428 + }, + { + "x": 2.5076916217803955, + "y": 4.657313346862793, + "z": -3.8732826709747314 + }, + { + "x": 2.478785514831543, + "y": 4.657313346862793, + "z": -3.89148211479187 + }, + { + "x": 2.449366331100464, + "y": 4.657313346862793, + "z": -3.908933162689209 + }, + { + "x": 2.4195549488067627, + "y": 4.657313346862793, + "z": -3.925536632537842 + }, + { + "x": 2.3894777297973633, + "y": 4.657313346862793, + "z": -3.9411702156066895 + }, + { + "x": 2.359269380569458, + "y": 4.657313346862793, + "z": -3.9556894302368164 + }, + { + "x": 2.3290629386901855, + "y": 4.657313346862793, + "z": -3.968937873840332 + }, + { + "x": 2.2989728450775146, + "y": 4.657313346862793, + "z": -3.9807732105255127 + }, + { + "x": 2.2690858840942383, + "y": 4.657313346862793, + "z": -3.9910778999328613 + }, + { + "x": 2.2394649982452393, + "y": 4.657313346862793, + "z": -3.9997589588165283 + }, + { + "x": 2.2101449966430664, + "y": 4.657313346862793, + "z": -4.006745338439941 + }, + { + "x": 2.1811351776123047, + "y": 4.657313346862793, + "z": -4.011991500854492 + }, + { + "x": 2.152419328689575, + "y": 4.657313346862793, + "z": -4.015473365783691 + }, + { + "x": 2.1239540576934814, + "y": 4.657313346862793, + "z": -4.017193794250488 + }, + { + "x": 2.0956716537475586, + "y": 4.657313346862793, + "z": -4.017177581787109 + }, + { + "x": 2.067476272583008, + "y": 4.657313346862793, + "z": -4.015472412109375 + }, + { + "x": 2.0392470359802246, + "y": 4.657313346862793, + "z": -4.012152194976807 + }, + { + "x": 2.0108368396759033, + "y": 4.657313346862793, + "z": -4.007312774658203 + }, + { + "x": 1.9820747375488281, + "y": 4.657313346862793, + "z": -4.001073837280273 + }, + { + "x": 1.952789306640625, + "y": 4.657313346862793, + "z": -3.9935719966888428 + }, + { + "x": 1.9228366613388062, + "y": 4.657313346862793, + "z": -3.98494815826416 + }, + { + "x": 1.8921066522598267, + "y": 4.657313346862793, + "z": -3.975353717803955 + }, + { + "x": 1.860518217086792, + "y": 4.657313346862793, + "z": -3.964942216873169 + }, + { + "x": 1.8280240297317505, + "y": 4.657313346862793, + "z": -3.95387601852417 + }, + { + "x": 1.7946064472198486, + "y": 4.657313346862793, + "z": -3.942323684692383 + }, + { + "x": 1.760280966758728, + "y": 4.657313346862793, + "z": -3.9304592609405518 + }, + { + "x": 1.725092887878418, + "y": 4.657313346862793, + "z": -3.9184632301330566 + }, + { + "x": 1.689121127128601, + "y": 4.657313346862793, + "z": -3.906522750854492 + }, + { + "x": 1.652474284172058, + "y": 4.657313346862793, + "z": -3.8948311805725098 + }, + { + "x": 1.6152931451797485, + "y": 4.657313346862793, + "z": -3.8835883140563965 + }, + { + "x": 1.5777508020401, + "y": 4.657313346862793, + "z": -3.872999429702759 + }, + { + "x": 1.540042519569397, + "y": 4.657313346862793, + "z": -3.8632729053497314 + }, + { + "x": 1.5023536682128906, + "y": 4.657313346862793, + "z": -3.8545985221862793 + }, + { + "x": 1.4648369550704956, + "y": 4.657313346862793, + "z": -3.8471384048461914 + }, + { + "x": 1.4276169538497925, + "y": 4.657313346862793, + "z": -3.8410253524780273 + }, + { + "x": 1.390786051750183, + "y": 4.657313346862793, + "z": -3.836365222930908 + }, + { + "x": 1.3544057607650757, + "y": 4.657313346862793, + "z": -3.8332343101501465 + }, + { + "x": 1.3185077905654907, + "y": 4.657313346862793, + "z": -3.8316807746887207 + }, + { + "x": 1.283092737197876, + "y": 4.657313346862793, + "z": -3.8317246437072754 + }, + { + "x": 1.2481310367584229, + "y": 4.657313346862793, + "z": -3.833357810974121 + }, + { + "x": 1.2135610580444336, + "y": 4.657313346862793, + "z": -3.836542844772339 + }, + { + "x": 1.1792924404144287, + "y": 4.657313346862793, + "z": -3.841214656829834 + }, + { + "x": 1.1452025175094604, + "y": 4.657313346862793, + "z": -3.8472800254821777 + }, + { + "x": 1.111139178276062, + "y": 4.657313346862793, + "z": -3.854617118835449 + }, + { + "x": 1.07693612575531, + "y": 4.657313346862793, + "z": -3.8630857467651367 + }, + { + "x": 1.0424425601959229, + "y": 4.657313346862793, + "z": -3.8725461959838867 + }, + { + "x": 1.0075314044952393, + "y": 4.657313346862793, + "z": -3.882863998413086 + }, + { + "x": 0.9720962643623352, + "y": 4.657313346862793, + "z": -3.8939075469970703 + }, + { + "x": 0.9360541701316833, + "y": 4.657313346862793, + "z": -3.905550956726074 + }, + { + "x": 0.8993442058563232, + "y": 4.657313346862793, + "z": -3.9176712036132812 + }, + { + "x": 0.8619278073310852, + "y": 4.657313346862793, + "z": -3.9301507472991943 + }, + { + "x": 0.823789119720459, + "y": 4.657313346862793, + "z": -3.942875623703003 + }, + { + "x": 0.784933865070343, + "y": 4.657313346862793, + "z": -3.9557371139526367 + }, + { + "x": 0.7453908920288086, + "y": 4.657313346862793, + "z": -3.9686288833618164 + }, + { + "x": 0.7052109837532043, + "y": 4.657313346862793, + "z": -3.9814515113830566 + }, + { + "x": 0.6644675731658936, + "y": 4.657313346862793, + "z": -3.994107246398926 + }, + { + "x": 0.6232548356056213, + "y": 4.657313346862793, + "z": -4.006505012512207 + }, + { + "x": 0.5816707015037537, + "y": 4.657313346862793, + "z": -4.018560409545898 + }, + { + "x": 0.53980553150177, + "y": 4.657313346862793, + "z": -4.030198097229004 + }, + { + "x": 0.4977412521839142, + "y": 4.657313346862793, + "z": -4.041352272033691 + }, + { + "x": 0.45554882287979126, + "y": 4.657313346862793, + "z": -4.051969528198242 + }, + { + "x": 0.41329142451286316, + "y": 4.657313346862793, + "z": -4.062001705169678 + }, + { + "x": 0.3710227608680725, + "y": 4.657313346862793, + "z": -4.071414470672607 + }, + { + "x": 0.32878774404525757, + "y": 4.657313346862793, + "z": -4.080181121826172 + }, + { + "x": 0.2866206467151642, + "y": 4.657313346862793, + "z": -4.088285446166992 + }, + { + "x": 0.2445480227470398, + "y": 4.657313346862793, + "z": -4.095720291137695 + }, + { + "x": 0.2025873214006424, + "y": 4.657313346862793, + "z": -4.1024885177612305 + }, + { + "x": 0.1607452630996704, + "y": 4.657313346862793, + "z": -4.1086039543151855 + }, + { + "x": 0.11902102828025818, + "y": 4.657313346862793, + "z": -4.114088535308838 + }, + { + "x": 0.07740648090839386, + "y": 4.657313346862793, + "z": -4.118971824645996 + }, + { + "x": 0.03589590638875961, + "y": 4.657313346862793, + "z": -4.123283863067627 + }, + { + "x": -0.0055135381408035755, + "y": 4.657313346862793, + "z": -4.127051830291748 + }, + { + "x": -0.0468185693025589, + "y": 4.657313346862793, + "z": -4.1302995681762695 + }, + { + "x": -0.08801180869340897, + "y": 4.657313346862793, + "z": -4.133047580718994 + }, + { + "x": -0.12908080220222473, + "y": 4.657313346862793, + "z": -4.13531494140625 + }, + { + "x": -0.17000995576381683, + "y": 4.657313346862793, + "z": -4.1371169090271 + }, + { + "x": -0.21077761054039001, + "y": 4.657313346862793, + "z": -4.138465881347656 + }, + { + "x": -0.2513576149940491, + "y": 4.657313346862793, + "z": -4.139371395111084 + }, + { + "x": -0.2917206287384033, + "y": 4.657313346862793, + "z": -4.139840602874756 + }, + { + "x": -0.331831157207489, + "y": 4.657313346862793, + "z": -4.1398773193359375 + }, + { + "x": -0.3716498017311096, + "y": 4.657313346862793, + "z": -4.139482498168945 + }, + { + "x": -0.41113221645355225, + "y": 4.657313346862793, + "z": -4.138655185699463 + }, + { + "x": -0.45023366808891296, + "y": 4.657313346862793, + "z": -4.137388706207275 + }, + { + "x": -0.4889102280139923, + "y": 4.657313346862793, + "z": -4.135671615600586 + }, + { + "x": -0.5271203517913818, + "y": 4.657313346862793, + "z": -4.133488655090332 + }, + { + "x": -0.5648268461227417, + "y": 4.657313346862793, + "z": -4.13081693649292 + }, + { + "x": -0.6019934415817261, + "y": 4.657313346862793, + "z": -4.12762975692749 + }, + { + "x": -0.6385868787765503, + "y": 4.657313346862793, + "z": -4.123893737792969 + }, + { + "x": -0.6745761036872864, + "y": 4.657313346862793, + "z": -4.119571208953857 + }, + { + "x": -0.7099339962005615, + "y": 4.657313346862793, + "z": -4.114617824554443 + }, + { + "x": -0.7446346879005432, + "y": 4.657313346862793, + "z": -4.10898494720459 + }, + { + "x": -0.7786548137664795, + "y": 4.657313346862793, + "z": -4.1026177406311035 + }, + { + "x": -0.8119751214981079, + "y": 4.657313346862793, + "z": -4.095456123352051 + }, + { + "x": -0.8445773124694824, + "y": 4.657313346862793, + "z": -4.087434768676758 + }, + { + "x": -0.8764461278915405, + "y": 4.657313346862793, + "z": -4.078484535217285 + }, + { + "x": -0.9075666069984436, + "y": 4.657313346862793, + "z": -4.068540573120117 + }, + { + "x": -0.9379260540008545, + "y": 4.657313346862793, + "z": -4.057550430297852 + }, + { + "x": -0.9675100445747375, + "y": 4.657313346862793, + "z": -4.04547119140625 + }, + { + "x": -0.9963052868843079, + "y": 4.657313346862793, + "z": -4.032271385192871 + }, + { + "x": -1.0242984294891357, + "y": 4.657313346862793, + "z": -4.0179314613342285 + }, + { + "x": -1.0514771938323975, + "y": 4.657313346862793, + "z": -4.002439975738525 + }, + { + "x": -1.0778288841247559, + "y": 4.657313346862793, + "z": -3.9857993125915527 + }, + { + "x": -1.1033406257629395, + "y": 4.657313346862793, + "z": -3.9680209159851074 + }, + { + "x": -1.12800133228302, + "y": 4.657313346862793, + "z": -3.9491281509399414 + }, + { + "x": -1.1517990827560425, + "y": 4.657313346862793, + "z": -3.929154396057129 + }, + { + "x": -1.1747223138809204, + "y": 4.657313346862793, + "z": -3.908144474029541 + }, + { + "x": -1.196759581565857, + "y": 4.657313346862793, + "z": -3.8861541748046875 + }, + { + "x": -1.217901349067688, + "y": 4.657313346862793, + "z": -3.8632469177246094 + }, + { + "x": -1.238139271736145, + "y": 4.657313346862793, + "z": -3.8394887447357178 + }, + { + "x": -1.2574665546417236, + "y": 4.657313346862793, + "z": -3.8149447441101074 + }, + { + "x": -1.2758808135986328, + "y": 4.657313346862793, + "z": -3.7896807193756104 + }, + { + "x": -1.2933799028396606, + "y": 4.657313346862793, + "z": -3.763763427734375 + }, + { + "x": -1.309964656829834, + "y": 4.657313346862793, + "z": -3.7372593879699707 + }, + { + "x": -1.3256382942199707, + "y": 4.657313346862793, + "z": -3.710235595703125 + }, + { + "x": -1.340406894683838, + "y": 4.657313346862793, + "z": -3.6827585697174072 + }, + { + "x": -1.3542777299880981, + "y": 4.657313346862793, + "z": -3.6548962593078613 + }, + { + "x": -1.3672609329223633, + "y": 4.657313346862793, + "z": -3.626716375350952 + }, + { + "x": -1.3793692588806152, + "y": 4.657313346862793, + "z": -3.5982863903045654 + }, + { + "x": -1.3906171321868896, + "y": 4.657313346862793, + "z": -3.5696754455566406 + }, + { + "x": -1.4010210037231445, + "y": 4.657313346862793, + "z": -3.5409512519836426 + }, + { + "x": -1.4105947017669678, + "y": 4.657313346862793, + "z": -3.5121827125549316 + }, + { + "x": -1.4193450212478638, + "y": 4.657313346862793, + "z": -3.4834365844726562 + }, + { + "x": -1.4272717237472534, + "y": 4.657313346862793, + "z": -3.454780101776123 + }, + { + "x": -1.43436598777771, + "y": 4.657313346862793, + "z": -3.426278829574585 + }, + { + "x": -1.44061279296875, + "y": 4.657313346862793, + "z": -3.3979969024658203 + }, + { + "x": -1.4459887742996216, + "y": 4.657313346862793, + "z": -3.3699989318847656 + }, + { + "x": -1.4504635334014893, + "y": 4.657313346862793, + "z": -3.342348098754883 + }, + { + "x": -1.4539989233016968, + "y": 4.657313346862793, + "z": -3.3151063919067383 + }, + { + "x": -1.4565497636795044, + "y": 4.657313346862793, + "z": -3.288335084915161 + }, + { + "x": -1.4580632448196411, + "y": 4.657313346862793, + "z": -3.262094736099243 + }, + { + "x": -1.4584788084030151, + "y": 4.657313346862793, + "z": -3.236445426940918 + }, + { + "x": -1.457728624343872, + "y": 4.657313346862793, + "z": -3.2114453315734863 + }, + { + "x": -1.455741286277771, + "y": 4.657313346862793, + "z": -3.187150001525879 + }, + { + "x": -1.4524531364440918, + "y": 4.657313346862793, + "z": -3.163600206375122 + }, + { + "x": -1.4478143453598022, + "y": 4.657313346862793, + "z": -3.140817642211914 + }, + { + "x": -1.4417890310287476, + "y": 4.657313346862793, + "z": -3.118804931640625 + }, + { + "x": -1.4343546628952026, + "y": 4.657313346862793, + "z": -3.097546100616455 + }, + { + "x": -1.425502896308899, + "y": 4.657313346862793, + "z": -3.0770063400268555 + }, + { + "x": -1.415239691734314, + "y": 4.657313346862793, + "z": -3.0571324825286865 + }, + { + "x": -1.4035831689834595, + "y": 4.657313346862793, + "z": -3.0378506183624268 + }, + { + "x": -1.3905667066574097, + "y": 4.657313346862793, + "z": -3.0190699100494385 + }, + { + "x": -1.3762367963790894, + "y": 4.657313346862793, + "z": -3.0006794929504395 + }, + { + "x": -1.3606535196304321, + "y": 4.657313346862793, + "z": -2.9825494289398193 + }, + { + "x": -1.3438912630081177, + "y": 4.657313346862793, + "z": -2.964531660079956 + }, + { + "x": -1.3260375261306763, + "y": 4.657313346862793, + "z": -2.9464597702026367 + }, + { + "x": -1.3071876764297485, + "y": 4.657313346862793, + "z": -2.9281671047210693 + }, + { + "x": -1.2874350547790527, + "y": 4.657313346862793, + "z": -2.909515857696533 + }, + { + "x": -1.2668702602386475, + "y": 4.657313346862793, + "z": -2.890402317047119 + }, + { + "x": -1.2455805540084839, + "y": 4.657313346862793, + "z": -2.870756149291992 + }, + { + "x": -1.2236499786376953, + "y": 4.657313346862793, + "z": -2.8505401611328125 + }, + { + "x": -1.2011595964431763, + "y": 4.657313346862793, + "z": -2.8297507762908936 + }, + { + "x": -1.1781868934631348, + "y": 4.657313346862793, + "z": -2.8084185123443604 + }, + { + "x": -1.154807209968567, + "y": 4.657313346862793, + "z": -2.786607027053833 + }, + { + "x": -1.1310913562774658, + "y": 4.657313346862793, + "z": -2.764413356781006 + }, + { + "x": -1.1071079969406128, + "y": 4.657313346862793, + "z": -2.7419683933258057 + }, + { + "x": -1.0829225778579712, + "y": 4.657313346862793, + "z": -2.7194366455078125 + }, + { + "x": -1.0585962533950806, + "y": 4.657313346862793, + "z": -2.6970152854919434 + }, + { + "x": -1.0341883897781372, + "y": 4.657313346862793, + "z": -2.6749320030212402 + }, + { + "x": -1.00974440574646, + "y": 4.657313346862793, + "z": -2.6534066200256348 + }, + { + "x": -0.9852954745292664, + "y": 4.657313346862793, + "z": -2.632631778717041 + }, + { + "x": -0.9608569741249084, + "y": 4.657313346862793, + "z": -2.6127700805664062 + }, + { + "x": -0.9364274740219116, + "y": 4.657313346862793, + "z": -2.59395432472229 + }, + { + "x": -0.9119899272918701, + "y": 4.657313346862793, + "z": -2.576287269592285 + }, + { + "x": -0.8875108957290649, + "y": 4.657313346862793, + "z": -2.559842109680176 + }, + { + "x": -0.8629418611526489, + "y": 4.657313346862793, + "z": -2.5446627140045166 + }, + { + "x": -0.8382160067558289, + "y": 4.657313346862793, + "z": -2.530761241912842 + }, + { + "x": -0.8132526278495789, + "y": 4.657313346862793, + "z": -2.5181219577789307 + }, + { + "x": -0.7879545092582703, + "y": 4.657313346862793, + "z": -2.5066988468170166 + }, + { + "x": -0.7622077465057373, + "y": 4.657313346862793, + "z": -2.496415615081787 + }, + { + "x": -0.7358829379081726, + "y": 4.657313346862793, + "z": -2.4871668815612793 + }, + { + "x": -0.7088438868522644, + "y": 4.657313346862793, + "z": -2.4788265228271484 + }, + { + "x": -0.680971086025238, + "y": 4.657313346862793, + "z": -2.471273183822632 + }, + { + "x": -0.6521665453910828, + "y": 4.657313346862793, + "z": -2.4643964767456055 + }, + { + "x": -0.6223573684692383, + "y": 4.657313346862793, + "z": -2.458097457885742 + }, + { + "x": -0.5914930105209351, + "y": 4.657313346862793, + "z": -2.452289342880249 + }, + { + "x": -0.5595466494560242, + "y": 4.657313346862793, + "z": -2.4468960762023926 + }, + { + "x": -0.5265142321586609, + "y": 4.657313346862793, + "z": -2.4418535232543945 + }, + { + "x": -0.49241504073143005, + "y": 4.657313346862793, + "z": -2.4371087551116943 + }, + { + "x": -0.45729249715805054, + "y": 4.657313346862793, + "z": -2.4326205253601074 + }, + { + "x": -0.42121073603630066, + "y": 4.657313346862793, + "z": -2.428358793258667 + }, + { + "x": -0.3842596411705017, + "y": 4.657313346862793, + "z": -2.4243052005767822 + }, + { + "x": -0.3465513288974762, + "y": 4.657313346862793, + "z": -2.420452833175659 + }, + { + "x": -0.3082200288772583, + "y": 4.657313346862793, + "z": -2.4168057441711426 + }, + { + "x": -0.26940491795539856, + "y": 4.657313346862793, + "z": -2.4133756160736084 + }, + { + "x": -0.23023149371147156, + "y": 4.657313346862793, + "z": -2.410176992416382 + }, + { + "x": -0.19080938398838043, + "y": 4.657313346862793, + "z": -2.4072272777557373 + }, + { + "x": -0.15123355388641357, + "y": 4.657313346862793, + "z": -2.404545783996582 + }, + { + "x": -0.11158018559217453, + "y": 4.657313346862793, + "z": -2.4021551609039307 + }, + { + "x": -0.07191261649131775, + "y": 4.657313346862793, + "z": -2.4000802040100098 + }, + { + "x": -0.032277464866638184, + "y": 4.657313346862793, + "z": -2.398348331451416 + }, + { + "x": 0.007294408977031708, + "y": 4.657313346862793, + "z": -2.3969898223876953 + }, + { + "x": 0.04678796976804733, + "y": 4.657313346862793, + "z": -2.3960371017456055 + }, + { + "x": 0.08620387315750122, + "y": 4.657313346862793, + "z": -2.3955254554748535 + }, + { + "x": 0.12555767595767975, + "y": 4.657313346862793, + "z": -2.3954927921295166 + }, + { + "x": 0.16488346457481384, + "y": 4.657313346862793, + "z": -2.395979404449463 + }, + { + "x": 0.20422418415546417, + "y": 4.657313346862793, + "z": -2.3970272541046143 + }, + { + "x": 0.24361713230609894, + "y": 4.657313346862793, + "z": -2.398674726486206 + }, + { + "x": 0.2830839455127716, + "y": 4.657313346862793, + "z": -2.4009549617767334 + }, + { + "x": 0.32263055443763733, + "y": 4.657313346862793, + "z": -2.4038949012756348 + }, + { + "x": 0.3622473180294037, + "y": 4.657313346862793, + "z": -2.4075160026550293 + }, + { + "x": 0.4019075036048889, + "y": 4.657313346862793, + "z": -2.4118337631225586 + }, + { + "x": 0.44157180190086365, + "y": 4.657313346862793, + "z": -2.416858673095703 + }, + { + "x": 0.4811820685863495, + "y": 4.657313346862793, + "z": -2.4225945472717285 + }, + { + "x": 0.5206653475761414, + "y": 4.657313346862793, + "z": -2.42903995513916 + }, + { + "x": 0.5599330067634583, + "y": 4.657313346862793, + "z": -2.436187744140625 + }, + { + "x": 0.5988807678222656, + "y": 4.657313346862793, + "z": -2.4440245628356934 + }, + { + "x": 0.637388288974762, + "y": 4.657313346862793, + "z": -2.4525320529937744 + }, + { + "x": 0.6753190159797668, + "y": 4.657313346862793, + "z": -2.4616858959198 + }, + { + "x": 0.7125324010848999, + "y": 4.657313346862793, + "z": -2.4714624881744385 + }, + { + "x": 0.7488946914672852, + "y": 4.657313346862793, + "z": -2.481851100921631 + }, + { + "x": 0.7842855453491211, + "y": 4.657313346862793, + "z": -2.4928548336029053 + }, + { + "x": 0.8185973167419434, + "y": 4.657313346862793, + "z": -2.5044920444488525 + }, + { + "x": 0.85173499584198, + "y": 4.657313346862793, + "z": -2.5167953968048096 + }, + { + "x": 0.8836160898208618, + "y": 4.657313346862793, + "z": -2.5298125743865967 + }, + { + "x": 0.91416996717453, + "y": 4.657313346862793, + "z": -2.543604850769043 + }, + { + "x": 0.943341076374054, + "y": 4.657313346862793, + "z": -2.5582497119903564 + }, + { + "x": 0.9710840582847595, + "y": 4.657313346862793, + "z": -2.573837995529175 + }, + { + "x": 0.9973667860031128, + "y": 4.657313346862793, + "z": -2.590475559234619 + }, + { + "x": 1.0221699476242065, + "y": 4.657313346862793, + "z": -2.608283042907715 + }, + { + "x": 1.0454868078231812, + "y": 4.657313346862793, + "z": -2.6273956298828125 + }, + { + "x": 1.0673232078552246, + "y": 4.657313346862793, + "z": -2.6479601860046387 + }, + { + "x": 1.0876967906951904, + "y": 4.657313346862793, + "z": -2.6701133251190186 + }, + { + "x": 1.106637954711914, + "y": 4.657313346862793, + "z": -2.6939663887023926 + }, + { + "x": 1.124187707901001, + "y": 4.657313346862793, + "z": -2.719599962234497 + }, + { + "x": 1.1403993368148804, + "y": 4.657313346862793, + "z": -2.74706768989563 + }, + { + "x": 1.1553380489349365, + "y": 4.657313346862793, + "z": -2.7763938903808594 + }, + { + "x": 1.169080376625061, + "y": 4.657313346862793, + "z": -2.8075754642486572 + }, + { + "x": 1.181714653968811, + "y": 4.657313346862793, + "z": -2.8405802249908447 + }, + { + "x": 1.1933410167694092, + "y": 4.657313346862793, + "z": -2.8753466606140137 + }, + { + "x": 1.2040724754333496, + "y": 4.657313346862793, + "z": -2.91178822517395 + }, + { + "x": 1.21403169631958, + "y": 4.657313346862793, + "z": -2.94978666305542 + }, + { + "x": 1.223354697227478, + "y": 4.657313346862793, + "z": -2.989196538925171 + }, + { + "x": 1.2321885824203491, + "y": 4.657313346862793, + "z": -3.029844045639038 + }, + { + "x": 1.240688681602478, + "y": 4.657313346862793, + "z": -3.071532726287842 + }, + { + "x": 1.2490073442459106, + "y": 4.657313346862793, + "z": -3.1140615940093994 + }, + { + "x": 1.2572897672653198, + "y": 4.657313346862793, + "z": -3.1572299003601074 + }, + { + "x": 1.2656747102737427, + "y": 4.657313346862793, + "z": -3.2008416652679443 + }, + { + "x": 1.2742938995361328, + "y": 4.657313346862793, + "z": -3.244699001312256 + }, + { + "x": 1.2832720279693604, + "y": 4.657313346862793, + "z": -3.2886064052581787 + }, + { + "x": 1.292726993560791, + "y": 4.657313346862793, + "z": -3.332369804382324 + }, + { + "x": 1.3027697801589966, + "y": 4.657313346862793, + "z": -3.3757967948913574 + }, + { + "x": 1.3135045766830444, + "y": 4.657313346862793, + "z": -3.418696403503418 + }, + { + "x": 1.325028657913208, + "y": 4.657313346862793, + "z": -3.460878849029541 + }, + { + "x": 1.3374320268630981, + "y": 4.657313346862793, + "z": -3.502155303955078 + }, + { + "x": 1.3507988452911377, + "y": 4.657313346862793, + "z": -3.5423405170440674 + }, + { + "x": 1.3652054071426392, + "y": 4.657313346862793, + "z": -3.581249237060547 + }, + { + "x": 1.3807170391082764, + "y": 4.657313346862793, + "z": -3.6187074184417725 + }, + { + "x": 1.3973846435546875, + "y": 4.657313346862793, + "z": -3.6545662879943848 + }, + { + "x": 1.4152432680130005, + "y": 4.657313346862793, + "z": -3.688702344894409 + }, + { + "x": 1.4343117475509644, + "y": 4.657313346862793, + "z": -3.7210168838500977 + }, + { + "x": 1.4545928239822388, + "y": 4.657313346862793, + "z": -3.751436471939087 + }, + { + "x": 1.4760750532150269, + "y": 4.657313346862793, + "z": -3.7799153327941895 + }, + { + "x": 1.4987298250198364, + "y": 4.657313346862793, + "z": -3.806431293487549 + }, + { + "x": 1.5225130319595337, + "y": 4.657313346862793, + "z": -3.8309876918792725 + }, + { + "x": 1.5473650693893433, + "y": 4.657313346862793, + "z": -3.853614330291748 + }, + { + "x": 1.573210597038269, + "y": 4.657313346862793, + "z": -3.87436580657959 + }, + { + "x": 1.5999577045440674, + "y": 4.657313346862793, + "z": -3.893322229385376 + }, + { + "x": 1.6274986267089844, + "y": 4.657313346862793, + "z": -3.9105892181396484 + }, + { + "x": 1.6557152271270752, + "y": 4.657313346862793, + "z": -3.926295280456543 + }, + { + "x": 1.6844863891601562, + "y": 4.657313346862793, + "z": -3.9405646324157715 + }, + { + "x": 1.7137008905410767, + "y": 4.657313346862793, + "z": -3.9535093307495117 + }, + { + "x": 1.7432560920715332, + "y": 4.657313346862793, + "z": -3.9652247428894043 + }, + { + "x": 1.7730579376220703, + "y": 4.657313346862793, + "z": -3.97579288482666 + }, + { + "x": 1.8030200004577637, + "y": 4.657313346862793, + "z": -3.9852795600891113 + }, + { + "x": 1.8330652713775635, + "y": 4.657313346862793, + "z": -3.993736743927002 + }, + { + "x": 1.863126516342163, + "y": 4.657313346862793, + "z": -4.0012006759643555 + }, + { + "x": 1.8931435346603394, + "y": 4.657313346862793, + "z": -4.007693767547607 + }, + { + "x": 1.9230647087097168, + "y": 4.657313346862793, + "z": -4.0132222175598145 + }, + { + "x": 1.9528474807739258, + "y": 4.657313346862793, + "z": -4.017777919769287 + }, + { + "x": 1.9824579954147339, + "y": 4.657313346862793, + "z": -4.021337509155273 + }, + { + "x": 2.011870861053467, + "y": 4.657313346862793, + "z": -4.023864269256592 + }, + { + "x": 2.0410664081573486, + "y": 4.657313346862793, + "z": -4.02531099319458 + }, + { + "x": 2.07003116607666, + "y": 4.657313346862793, + "z": -4.025638580322266 + }, + { + "x": 2.0987510681152344, + "y": 4.657313346862793, + "z": -4.024815559387207 + }, + { + "x": 2.1272149085998535, + "y": 4.657313346862793, + "z": -4.022820472717285 + }, + { + "x": 2.155414581298828, + "y": 4.657313346862793, + "z": -4.01963996887207 + }, + { + "x": 2.1833431720733643, + "y": 4.657313346862793, + "z": -4.01527214050293 + }, + { + "x": 2.2109973430633545, + "y": 4.657313346862793, + "z": -4.009721755981445 + }, + { + "x": 2.238374948501587, + "y": 4.657313346862793, + "z": -4.00300407409668 + }, + { + "x": 2.265476942062378, + "y": 4.657313346862793, + "z": -3.995142936706543 + }, + { + "x": 2.292306423187256, + "y": 4.657313346862793, + "z": -3.9861717224121094 + }, + { + "x": 2.3188681602478027, + "y": 4.657313346862793, + "z": -3.976133108139038 + }, + { + "x": 2.34516978263855, + "y": 4.657313346862793, + "z": -3.9650790691375732 + }, + { + "x": 2.371220350265503, + "y": 4.657313346862793, + "z": -3.953068733215332 + }, + { + "x": 2.3970255851745605, + "y": 4.657313346862793, + "z": -3.940164089202881 + }, + { + "x": 2.422579765319824, + "y": 4.657313346862793, + "z": -3.926419496536255 + }, + { + "x": 2.447871208190918, + "y": 4.657313346862793, + "z": -3.9118833541870117 + }, + { + "x": 2.4728753566741943, + "y": 4.657313346862793, + "z": -3.8965978622436523 + }, + { + "x": 2.4975593090057373, + "y": 4.657313346862793, + "z": -3.8805980682373047 + }, + { + "x": 2.521878957748413, + "y": 4.657313346862793, + "z": -3.863912582397461 + }, + { + "x": 2.5457818508148193, + "y": 4.657313346862793, + "z": -3.8465628623962402 + }, + { + "x": 2.5692057609558105, + "y": 4.657313346862793, + "z": -3.8285648822784424 + }, + { + "x": 2.5920774936676025, + "y": 4.657313346862793, + "z": -3.8099279403686523 + }, + { + "x": 2.61431622505188, + "y": 4.657313346862793, + "z": -3.7906532287597656 + }, + { + "x": 2.635829210281372, + "y": 4.657313346862793, + "z": -3.7707366943359375 + }, + { + "x": 2.656515121459961, + "y": 4.657313346862793, + "z": -3.7501673698425293 + }, + { + "x": 2.67626690864563, + "y": 4.657313346862793, + "z": -3.7289299964904785 + }, + { + "x": 2.6949894428253174, + "y": 4.657313346862793, + "z": -3.7070107460021973 + }, + { + "x": 2.7126033306121826, + "y": 4.657313346862793, + "z": -3.6844005584716797 + }, + { + "x": 2.7290472984313965, + "y": 4.657313346862793, + "z": -3.6610968112945557 + }, + { + "x": 2.744278907775879, + "y": 4.657313346862793, + "z": -3.637099027633667 + }, + { + "x": 2.7582719326019287, + "y": 4.657313346862793, + "z": -3.6124136447906494 + }, + { + "x": 2.771017074584961, + "y": 4.657313346862793, + "z": -3.5870513916015625 + }, + { + "x": 2.7825236320495605, + "y": 4.657313346862793, + "z": -3.561028480529785 + }, + { + "x": 2.792818069458008, + "y": 4.657313346862793, + "z": -3.534364700317383 + }, + { + "x": 2.8019444942474365, + "y": 4.657313346862793, + "z": -3.5070858001708984 + }, + { + "x": 2.8099632263183594, + "y": 4.657313346862793, + "z": -3.4792227745056152 + }, + { + "x": 2.8169548511505127, + "y": 4.657313346862793, + "z": -3.4508094787597656 + }, + { + "x": 2.823014497756958, + "y": 4.657313346862793, + "z": -3.421886444091797 + }, + { + "x": 2.8282477855682373, + "y": 4.657313346862793, + "z": -3.3924999237060547 + }, + { + "x": 2.832758903503418, + "y": 4.657313346862793, + "z": -3.362704277038574 + }, + { + "x": 2.8366477489471436, + "y": 4.657313346862793, + "z": -3.332562208175659 + }, + { + "x": 2.840013027191162, + "y": 4.657313346862793, + "z": -3.3021445274353027 + }, + { + "x": 2.8429465293884277, + "y": 4.657313346862793, + "z": -3.2715301513671875 + }, + { + "x": 2.8455395698547363, + "y": 4.657313346862793, + "z": -3.2408077716827393 + }, + { + "x": 2.847879409790039, + "y": 4.657313346862793, + "z": -3.210071563720703 + }, + { + "x": 2.850048065185547, + "y": 4.657313346862793, + "z": -3.179426431655884 + }, + { + "x": 2.852126121520996, + "y": 4.657313346862793, + "z": -3.148984670639038 + }, + { + "x": 2.8541905879974365, + "y": 4.657313346862793, + "z": -3.1188673973083496 + }, + { + "x": 2.856313467025757, + "y": 4.657313346862793, + "z": -3.0892035961151123 + }, + { + "x": 2.858565330505371, + "y": 4.657313346862793, + "z": -3.0601305961608887 + }, + { + "x": 2.861011028289795, + "y": 4.657313346862793, + "z": -3.0317916870117188 + }, + { + "x": 2.863708734512329, + "y": 4.657313346862793, + "z": -3.0043141841888428 + }, + { + "x": 2.8667075634002686, + "y": 4.657313346862793, + "z": -2.977799892425537 + }, + { + "x": 2.8700437545776367, + "y": 4.657313346862793, + "z": -2.952321767807007 + }, + { + "x": 2.873746633529663, + "y": 4.657313346862793, + "z": -2.9279258251190186 + }, + { + "x": 2.8778340816497803, + "y": 4.657313346862793, + "z": -2.904629945755005 + }, + { + "x": 2.8823137283325195, + "y": 4.657313346862793, + "z": -2.8824236392974854 + }, + { + "x": 2.887183666229248, + "y": 4.657313346862793, + "z": -2.86126971244812 + }, + { + "x": 2.8924319744110107, + "y": 4.657313346862793, + "z": -2.84110164642334 + }, + { + "x": 2.898036479949951, + "y": 4.657313346862793, + "z": -2.821826457977295 + }, + { + "x": 2.9039645195007324, + "y": 4.657313346862793, + "z": -2.8033225536346436 + }, + { + "x": 2.910174608230591, + "y": 4.657313346862793, + "z": -2.7854411602020264 + }, + { + "x": 2.916614055633545, + "y": 4.657313346862793, + "z": -2.76800537109375 + }, + { + "x": 2.923222541809082, + "y": 4.657313346862793, + "z": -2.750823497772217 + }, + { + "x": 2.9299378395080566, + "y": 4.657313346862793, + "z": -2.733719825744629 + }, + { + "x": 2.936694622039795, + "y": 4.657313346862793, + "z": -2.7165427207946777 + }, + { + "x": 2.943427085876465, + "y": 4.657313346862793, + "z": -2.6991655826568604 + }, + { + "x": 2.950068950653076, + "y": 4.657313346862793, + "z": -2.6814866065979004 + }, + { + "x": 2.956550359725952, + "y": 4.657313346862793, + "z": -2.66342830657959 + }, + { + "x": 2.962801218032837, + "y": 4.657313346862793, + "z": -2.6449384689331055 + }, + { + "x": 2.968750238418579, + "y": 4.657313346862793, + "z": -2.625988721847534 + }, + { + "x": 2.9743239879608154, + "y": 4.657313346862793, + "z": -2.6065762042999268 + }, + { + "x": 2.9794483184814453, + "y": 4.657313346862793, + "z": -2.586721420288086 + }, + { + "x": 2.9840471744537354, + "y": 4.657313346862793, + "z": -2.5664710998535156 + }, + { + "x": 2.9880435466766357, + "y": 4.657313346862793, + "z": -2.5458953380584717 + }, + { + "x": 2.991358518600464, + "y": 4.657313346862793, + "z": -2.5250885486602783 + }, + { + "x": 2.9939208030700684, + "y": 4.657313346862793, + "z": -2.5041496753692627 + }, + { + "x": 2.9956724643707275, + "y": 4.657313346862793, + "z": -2.4831647872924805 + }, + { + "x": 2.996570348739624, + "y": 4.657313346862793, + "z": -2.4622044563293457 + }, + { + "x": 2.996587038040161, + "y": 4.657313346862793, + "z": -2.4413230419158936 + }, + { + "x": 2.9957094192504883, + "y": 4.657313346862793, + "z": -2.420559883117676 + }, + { + "x": 2.9939393997192383, + "y": 4.657313346862793, + "z": -2.3999390602111816 + }, + { + "x": 2.9912936687469482, + "y": 4.657313346862793, + "z": -2.379469156265259 + }, + { + "x": 2.9878041744232178, + "y": 4.657313346862793, + "z": -2.359142780303955 + }, + { + "x": 2.9835174083709717, + "y": 4.657313346862793, + "z": -2.338937759399414 + }, + { + "x": 2.9784953594207764, + "y": 4.657313346862793, + "z": -2.3188159465789795 + }, + { + "x": 2.972813129425049, + "y": 4.657313346862793, + "z": -2.2987234592437744 + }, + { + "x": 2.9665634632110596, + "y": 4.657313346862793, + "z": -2.2785911560058594 + }, + { + "x": 2.9598495960235596, + "y": 4.657313346862793, + "z": -2.2583370208740234 + }, + { + "x": 2.9527747631073, + "y": 4.657313346862793, + "z": -2.2378735542297363 + }, + { + "x": 2.9454352855682373, + "y": 4.657313346862793, + "z": -2.2171080112457275 + }, + { + "x": 2.9379236698150635, + "y": 4.657313346862793, + "z": -2.195948839187622 + }, + { + "x": 2.930324077606201, + "y": 4.657313346862793, + "z": -2.1743016242980957 + }, + { + "x": 2.922717332839966, + "y": 4.657313346862793, + "z": -2.1520700454711914 + }, + { + "x": 2.915175676345825, + "y": 4.657313346862793, + "z": -2.129155158996582 + }, + { + "x": 2.907766580581665, + "y": 4.657313346862793, + "z": -2.105456590652466 + }, + { + "x": 2.9005515575408936, + "y": 4.657313346862793, + "z": -2.080871820449829 + }, + { + "x": 2.893584966659546, + "y": 4.657313346862793, + "z": -2.0552961826324463 + }, + { + "x": 2.8869168758392334, + "y": 4.657313346862793, + "z": -2.028623104095459 + }, + { + "x": 2.8805899620056152, + "y": 4.657313346862793, + "z": -2.000744342803955 + }, + { + "x": 2.8746418952941895, + "y": 4.657313346862793, + "z": -1.9715490341186523 + }, + { + "x": 2.869103193283081, + "y": 4.657313346862793, + "z": -1.9409332275390625 + }, + { + "x": 2.8639986515045166, + "y": 4.657313346862793, + "z": -1.9088125228881836 + }, + { + "x": 2.859346866607666, + "y": 4.657313346862793, + "z": -1.875126600265503 + }, + { + "x": 2.8551599979400635, + "y": 4.657313346862793, + "z": -1.8398323059082031 + }, + { + "x": 2.8514435291290283, + "y": 4.657313346862793, + "z": -1.8029139041900635 + }, + { + "x": 2.8481974601745605, + "y": 4.657313346862793, + "z": -1.764376163482666 + }, + { + "x": 2.845414638519287, + "y": 4.657313346862793, + "z": -1.7242467403411865 + }, + { + "x": 2.8430819511413574, + "y": 4.657313346862793, + "z": -1.6825754642486572 + }, + { + "x": 2.8411810398101807, + "y": 4.657313346862793, + "z": -1.6394338607788086 + }, + { + "x": 2.839684247970581, + "y": 4.657313346862793, + "z": -1.5949172973632812 + }, + { + "x": 2.838561534881592, + "y": 4.657313346862793, + "z": -1.549141526222229 + }, + { + "x": 2.837772846221924, + "y": 4.657313346862793, + "z": -1.502246618270874 + }, + { + "x": 2.837275505065918, + "y": 4.657313346862793, + "z": -1.4543918371200562 + }, + { + "x": 2.8370234966278076, + "y": 4.657313346862793, + "z": -1.405745267868042 + }, + { + "x": 2.8369741439819336, + "y": 4.657313346862793, + "z": -1.3564717769622803 + }, + { + "x": 2.837087392807007, + "y": 4.657313346862793, + "z": -1.3067340850830078 + }, + { + "x": 2.83732533454895, + "y": 4.657313346862793, + "z": -1.2566943168640137 + }, + { + "x": 2.837653398513794, + "y": 4.657313346862793, + "z": -1.206504225730896 + }, + { + "x": 2.838038444519043, + "y": 4.657313346862793, + "z": -1.1563198566436768 + }, + { + "x": 2.8384506702423096, + "y": 4.657313346862793, + "z": -1.1062926054000854 + }, + { + "x": 2.8388631343841553, + "y": 4.657313346862793, + "z": -1.056570291519165 + }, + { + "x": 2.8392505645751953, + "y": 4.657313346862793, + "z": -1.0072983503341675 + }, + { + "x": 2.8395915031433105, + "y": 4.657313346862793, + "z": -0.958619236946106 + }, + { + "x": 2.8398656845092773, + "y": 4.657313346862793, + "z": -0.9106721878051758 + }, + { + "x": 2.8400557041168213, + "y": 4.657313346862793, + "z": -0.8635941743850708 + }, + { + "x": 2.8401477336883545, + "y": 4.657313346862793, + "z": -0.8175157308578491 + }, + { + "x": 2.8401260375976562, + "y": 4.657313346862793, + "z": -0.7725529670715332 + }, + { + "x": 2.8399758338928223, + "y": 4.657313346862793, + "z": -0.7288047075271606 + }, + { + "x": 2.83968186378479, + "y": 4.657313346862793, + "z": -0.686352014541626 + }, + { + "x": 2.839228391647339, + "y": 4.657313346862793, + "z": -0.6452590227127075 + }, + { + "x": 2.838599920272827, + "y": 4.657313346862793, + "z": -0.6055731773376465 + }, + { + "x": 2.8377797603607178, + "y": 4.657313346862793, + "z": -0.5673195123672485 + }, + { + "x": 2.836751699447632, + "y": 4.657313346862793, + "z": -0.5305114984512329 + }, + { + "x": 2.835498809814453, + "y": 4.657313346862793, + "z": -0.4951430559158325 + }, + { + "x": 2.8340046405792236, + "y": 4.657313346862793, + "z": -0.46118950843811035 + }, + { + "x": 2.8322505950927734, + "y": 4.657313346862793, + "z": -0.42861056327819824 + }, + { + "x": 2.8302197456359863, + "y": 4.657313346862793, + "z": -0.39734745025634766 + }, + { + "x": 2.827894926071167, + "y": 4.657313346862793, + "z": -0.3673241138458252 + }, + { + "x": 2.8252553939819336, + "y": 4.657313346862793, + "z": -0.3384590148925781 + }, + { + "x": 2.8222782611846924, + "y": 4.657313346862793, + "z": -0.31067824363708496 + }, + { + "x": 2.8189375400543213, + "y": 4.657313346862793, + "z": -0.28391575813293457 + }, + { + "x": 2.815204381942749, + "y": 4.657313346862793, + "z": -0.258115291595459 + }, + { + "x": 2.8110437393188477, + "y": 4.657313346862793, + "z": -0.2332286834716797 + }, + { + "x": 2.806420087814331, + "y": 4.657313346862793, + "z": -0.20921754837036133 + }, + { + "x": 2.801293134689331, + "y": 4.657313346862793, + "z": -0.186051607131958 + }, + { + "x": 2.7956204414367676, + "y": 4.657313346862793, + "z": -0.1637105941772461 + }, + { + "x": 2.7893528938293457, + "y": 4.657313346862793, + "z": -0.1421809196472168 + }, + { + "x": 2.7824411392211914, + "y": 4.657313346862793, + "z": -0.1214599609375 + }, + { + "x": 2.774831533432007, + "y": 4.657313346862793, + "z": -0.10155344009399414 + }, + { + "x": 2.7664668560028076, + "y": 4.657313346862793, + "z": -0.08247542381286621 + }, + { + "x": 2.757275104522705, + "y": 4.657314300537109, + "z": -0.06424903869628906 + }, + { + "x": 2.7471158504486084, + "y": 4.657320976257324, + "z": -0.04689812660217285 + }, + { + "x": 2.735750913619995, + "y": 4.657346248626709, + "z": -0.03044724464416504 + }, + { + "x": 2.7228403091430664, + "y": 4.657409191131592, + "z": -0.01491999626159668 + }, + { + "x": 2.707946538925171, + "y": 4.657535076141357, + "z": -0.0003390312194824219 + }, + { + "x": 2.690530300140381, + "y": 4.657756805419922, + "z": 0.013273239135742188 + }, + { + "x": 2.669954538345337, + "y": 4.658113479614258, + "z": 0.025895357131958008 + }, + { + "x": 2.645479917526245, + "y": 4.6586527824401855, + "z": 0.0375058650970459 + }, + { + "x": 2.6162707805633545, + "y": 4.659426212310791, + "z": 0.04808521270751953 + }, + { + "x": 2.581390380859375, + "y": 4.660495281219482, + "z": 0.05761289596557617 + }, + { + "x": 2.539799213409424, + "y": 4.661925792694092, + "z": 0.0660707950592041 + }, + { + "x": 2.490361213684082, + "y": 4.663792133331299, + "z": 0.0734395980834961 + }, + { + "x": 2.4318437576293945, + "y": 4.666173934936523, + "z": 0.07970261573791504 + }, + { + "x": 2.363032102584839, + "y": 4.669149398803711, + "z": 0.08484530448913574 + }, + { + "x": 2.282968759536743, + "y": 4.672773361206055, + "z": 0.0888667106628418 + }, + { + "x": 2.1910064220428467, + "y": 4.67707633972168, + "z": 0.09177756309509277 + }, + { + "x": 2.0868077278137207, + "y": 4.682061672210693, + "z": 0.09360146522521973 + }, + { + "x": 1.9703454971313477, + "y": 4.687705993652344, + "z": 0.0943760871887207 + }, + { + "x": 1.8419020175933838, + "y": 4.693960666656494, + "z": 0.09415125846862793 + }, + { + "x": 1.7020721435546875, + "y": 4.700750350952148, + "z": 0.09299063682556152 + }, + { + "x": 1.5517576932907104, + "y": 4.707974433898926, + "z": 0.09096956253051758 + }, + { + "x": 1.3921735286712646, + "y": 4.715505599975586, + "z": 0.08817815780639648 + }, + { + "x": 1.2248427867889404, + "y": 4.723189353942871, + "z": 0.08471846580505371 + }, + { + "x": 1.0516083240509033, + "y": 4.730846405029297, + "z": 0.08070588111877441 + }, + { + "x": 0.8745978474617004, + "y": 4.738271713256836, + "z": 0.07626891136169434 + }, + { + "x": 0.6962425112724304, + "y": 4.745235919952393, + "z": 0.07154679298400879 + }, + { + "x": 0.5189527273178101, + "y": 4.751518726348877, + "z": 0.06667709350585938 + }, + { + "x": 0.34486350417137146, + "y": 4.756936550140381, + "z": 0.06177878379821777 + }, + { + "x": 0.1758154332637787, + "y": 4.761343479156494, + "z": 0.05695486068725586 + }, + { + "x": 0.013354131951928139, + "y": 4.764633655548096, + "z": 0.05228996276855469 + }, + { + "x": -0.14126992225646973, + "y": 4.766737937927246, + "z": 0.047852277755737305 + }, + { + "x": -0.28710120916366577, + "y": 4.767626762390137, + "z": 0.04369091987609863 + }, + { + "x": -0.42347878217697144, + "y": 4.767309188842773, + "z": 0.03983807563781738 + }, + { + "x": -0.5500368475914001, + "y": 4.76583194732666, + "z": 0.03630852699279785 + }, + { + "x": -0.666704535484314, + "y": 4.76328182220459, + "z": 0.03309965133666992 + }, + { + "x": -0.7737058997154236, + "y": 4.759781837463379, + "z": 0.03019094467163086 + }, + { + "x": -0.871559739112854, + "y": 4.755495548248291, + "z": 0.027544021606445312 + }, + { + "x": -0.9610753655433655, + "y": 4.750625133514404, + "z": 0.025104045867919922 + }, + { + "x": -1.0433026552200317, + "y": 4.745397567749023, + "z": 0.022800445556640625 + }, + { + "x": -1.1192749738693237, + "y": 4.740032196044922, + "z": 0.02055835723876953 + }, + { + "x": -1.189939022064209, + "y": 4.734721660614014, + "z": 0.018301725387573242 + }, + { + "x": -1.2561489343643188, + "y": 4.729633331298828, + "z": 0.01595330238342285 + }, + { + "x": -1.3186655044555664, + "y": 4.724909782409668, + "z": 0.013435840606689453 + }, + { + "x": -1.3781566619873047, + "y": 4.720666885375977, + "z": 0.010670185089111328 + }, + { + "x": -1.435197353363037, + "y": 4.716996192932129, + "z": 0.0075757503509521484 + }, + { + "x": -1.4902697801589966, + "y": 4.713963985443115, + "z": 0.004072666168212891 + }, + { + "x": -1.5437631607055664, + "y": 4.711609363555908, + "z": 7.891654968261719e-05 + }, + { + "x": -1.5959737300872803, + "y": 4.7099480628967285, + "z": -0.004488229751586914 + }, + { + "x": -1.6471049785614014, + "y": 4.7089691162109375, + "z": -0.009712934494018555 + }, + { + "x": -1.6972670555114746, + "y": 4.708636283874512, + "z": -0.015679359436035156 + }, + { + "x": -1.7464796304702759, + "y": 4.708889484405518, + "z": -0.022472858428955078 + }, + { + "x": -1.7947063446044922, + "y": 4.709652900695801, + "z": -0.030175447463989258 + }, + { + "x": -1.841906189918518, + "y": 4.710855484008789, + "z": -0.03885793685913086 + }, + { + "x": -1.8880484104156494, + "y": 4.712430000305176, + "z": -0.04858207702636719 + }, + { + "x": -1.9331010580062866, + "y": 4.714315414428711, + "z": -0.05939650535583496 + }, + { + "x": -1.9770387411117554, + "y": 4.71645450592041, + "z": -0.07133960723876953 + }, + { + "x": -2.0198395252227783, + "y": 4.718796730041504, + "z": -0.08443951606750488 + }, + { + "x": -2.061488151550293, + "y": 4.721295356750488, + "z": -0.09871149063110352 + }, + { + "x": -2.1019718647003174, + "y": 4.723909854888916, + "z": -0.11416101455688477 + }, + { + "x": -2.1412839889526367, + "y": 4.726603984832764, + "z": -0.1307821273803711 + }, + { + "x": -2.1794211864471436, + "y": 4.729347229003906, + "z": -0.1485576629638672 + }, + { + "x": -2.2163848876953125, + "y": 4.732113838195801, + "z": -0.16746020317077637 + }, + { + "x": -2.2521822452545166, + "y": 4.734883785247803, + "z": -0.18744969367980957 + }, + { + "x": -2.2868237495422363, + "y": 4.737640380859375, + "z": -0.20847821235656738 + }, + { + "x": -2.3203234672546387, + "y": 4.740370273590088, + "z": -0.23049497604370117 + }, + { + "x": -2.3526978492736816, + "y": 4.743060111999512, + "z": -0.25345516204833984 + }, + { + "x": -2.3839657306671143, + "y": 4.745694160461426, + "z": -0.2773158550262451 + }, + { + "x": -2.4141523838043213, + "y": 4.748260021209717, + "z": -0.30204319953918457 + }, + { + "x": -2.443281412124634, + "y": 4.750741958618164, + "z": -0.3276035785675049 + }, + { + "x": -2.4713809490203857, + "y": 4.753126621246338, + "z": -0.3539695739746094 + }, + { + "x": -2.4984822273254395, + "y": 4.755398750305176, + "z": -0.3811178207397461 + }, + { + "x": -2.5246174335479736, + "y": 4.757544040679932, + "z": -0.4090306758880615 + }, + { + "x": -2.549823760986328, + "y": 4.759547710418701, + "z": -0.43769359588623047 + }, + { + "x": -2.5741405487060547, + "y": 4.76139497756958, + "z": -0.46709704399108887 + }, + { + "x": -2.597609281539917, + "y": 4.763070583343506, + "z": -0.49723637104034424 + }, + { + "x": -2.620274305343628, + "y": 4.764559745788574, + "z": -0.5281111001968384 + }, + { + "x": -2.642180919647217, + "y": 4.765848159790039, + "z": -0.5597215890884399 + }, + { + "x": -2.6633682250976562, + "y": 4.766922950744629, + "z": -0.5920612812042236 + }, + { + "x": -2.683868169784546, + "y": 4.767773628234863, + "z": -0.6251142024993896 + }, + { + "x": -2.703706741333008, + "y": 4.768392562866211, + "z": -0.6588536500930786 + }, + { + "x": -2.7229011058807373, + "y": 4.76877498626709, + "z": -0.6932438611984253 + }, + { + "x": -2.741464376449585, + "y": 4.768916606903076, + "z": -0.7282422780990601 + }, + { + "x": -2.759399890899658, + "y": 4.76881742477417, + "z": -0.7637934684753418 + }, + { + "x": -2.776704788208008, + "y": 4.768478870391846, + "z": -0.7998330593109131 + }, + { + "x": -2.7933690547943115, + "y": 4.767904758453369, + "z": -0.8362882137298584 + }, + { + "x": -2.8093760013580322, + "y": 4.767101764678955, + "z": -0.8730758428573608 + }, + { + "x": -2.8247017860412598, + "y": 4.766078472137451, + "z": -0.9101032018661499 + }, + { + "x": -2.839315176010132, + "y": 4.764845371246338, + "z": -0.9472684860229492 + }, + { + "x": -2.853179454803467, + "y": 4.763416767120361, + "z": -0.9844608306884766 + }, + { + "x": -2.8662569522857666, + "y": 4.761806011199951, + "z": -1.0215718746185303 + }, + { + "x": -2.87851881980896, + "y": 4.760026931762695, + "z": -1.058504581451416 + }, + { + "x": -2.8899447917938232, + "y": 4.758092880249023, + "z": -1.0951769351959229 + }, + { + "x": -2.900521993637085, + "y": 4.756015300750732, + "z": -1.1315196752548218 + }, + { + "x": -2.9102468490600586, + "y": 4.753806114196777, + "z": -1.1674771308898926 + }, + { + "x": -2.919123411178589, + "y": 4.751475811004639, + "z": -1.2030056715011597 + }, + { + "x": -2.9271657466888428, + "y": 4.749034881591797, + "z": -1.2380807399749756 + }, + { + "x": -2.9343950748443604, + "y": 4.746492385864258, + "z": -1.2726855278015137 + }, + { + "x": -2.940840244293213, + "y": 4.743857383728027, + "z": -1.3068193197250366 + }, + { + "x": -2.946540117263794, + "y": 4.7411370277404785, + "z": -1.3404945135116577 + }, + { + "x": -2.9515416622161865, + "y": 4.738339900970459, + "z": -1.37373685836792 + }, + { + "x": -2.955899238586426, + "y": 4.735471248626709, + "z": -1.406586766242981 + }, + { + "x": -2.9596750736236572, + "y": 4.732537746429443, + "z": -1.4390937089920044 + }, + { + "x": -2.9629251956939697, + "y": 4.729545593261719, + "z": -1.4713048934936523 + }, + { + "x": -2.9656982421875, + "y": 4.726502895355225, + "z": -1.5032589435577393 + }, + { + "x": -2.9680347442626953, + "y": 4.723417282104492, + "z": -1.5349849462509155 + }, + { + "x": -2.969965696334839, + "y": 4.7202982902526855, + "z": -1.5665035247802734 + }, + { + "x": -2.9715137481689453, + "y": 4.717155456542969, + "z": -1.5978257656097412 + }, + { + "x": -2.9726932048797607, + "y": 4.7139997482299805, + "z": -1.6289544105529785 + }, + { + "x": -2.9735093116760254, + "y": 4.710843086242676, + "z": -1.6598827838897705 + }, + { + "x": -2.97395920753479, + "y": 4.707698345184326, + "z": -1.690593957901001 + }, + { + "x": -2.9740312099456787, + "y": 4.704578399658203, + "z": -1.7210662364959717 + }, + { + "x": -2.9737043380737305, + "y": 4.701497554779053, + "z": -1.751265048980713 + }, + { + "x": -2.9729509353637695, + "y": 4.698471546173096, + "z": -1.7811474800109863 + }, + { + "x": -2.9717321395874023, + "y": 4.6955156326293945, + "z": -1.8106626272201538 + }, + { + "x": -2.9700076580047607, + "y": 4.6926469802856445, + "z": -1.8397533893585205 + }, + { + "x": -2.967740058898926, + "y": 4.689878940582275, + "z": -1.8683621883392334 + }, + { + "x": -2.9648971557617188, + "y": 4.687224388122559, + "z": -1.8964323997497559 + }, + { + "x": -2.9614524841308594, + "y": 4.684694290161133, + "z": -1.923907995223999 + }, + { + "x": -2.9573848247528076, + "y": 4.682297229766846, + "z": -1.950732946395874 + }, + { + "x": -2.9526777267456055, + "y": 4.68004035949707, + "z": -1.976852297782898 + }, + { + "x": -2.9473204612731934, + "y": 4.677928924560547, + "z": -2.002211570739746 + }, + { + "x": -2.94130802154541, + "y": 4.675966262817383, + "z": -2.026756525039673 + }, + { + "x": -2.9346401691436768, + "y": 4.674154281616211, + "z": -2.050434112548828 + }, + { + "x": -2.9273221492767334, + "y": 4.672492027282715, + "z": -2.073190689086914 + }, + { + "x": -2.9193642139434814, + "y": 4.67097806930542, + "z": -2.094975709915161 + }, + { + "x": -2.9107823371887207, + "y": 4.669608116149902, + "z": -2.115736484527588 + }, + { + "x": -2.901597738265991, + "y": 4.668376445770264, + "z": -2.135422945022583 + }, + { + "x": -2.891831636428833, + "y": 4.667276382446289, + "z": -2.15399169921875 + }, + { + "x": -2.8815059661865234, + "y": 4.666301727294922, + "z": -2.1714110374450684 + }, + { + "x": -2.8706390857696533, + "y": 4.665445327758789, + "z": -2.1876606941223145 + }, + { + "x": -2.859250545501709, + "y": 4.664700984954834, + "z": -2.2027320861816406 + }, + { + "x": -2.8473570346832275, + "y": 4.664061546325684, + "z": -2.216628074645996 + }, + { + "x": -2.834975004196167, + "y": 4.663519382476807, + "z": -2.229363441467285 + }, + { + "x": -2.822117805480957, + "y": 4.6630682945251465, + "z": -2.240964412689209 + }, + { + "x": -2.8087995052337646, + "y": 4.66270112991333, + "z": -2.2514686584472656 + }, + { + "x": -2.7950315475463867, + "y": 4.662409782409668, + "z": -2.260925769805908 + }, + { + "x": -2.78082537651062, + "y": 4.662187576293945, + "z": -2.269397020339966 + }, + { + "x": -2.7661900520324707, + "y": 4.662026882171631, + "z": -2.276954412460327 + }, + { + "x": -2.7511332035064697, + "y": 4.661920547485352, + "z": -2.2836830615997314 + }, + { + "x": -2.7356607913970947, + "y": 4.661860466003418, + "z": -2.289674997329712 + }, + { + "x": -2.7197775840759277, + "y": 4.661839485168457, + "z": -2.2950222492218018 + }, + { + "x": -2.703484296798706, + "y": 4.661850929260254, + "z": -2.2998123168945312 + }, + { + "x": -2.686779260635376, + "y": 4.661888599395752, + "z": -2.3041293621063232 + }, + { + "x": -2.669656753540039, + "y": 4.661946773529053, + "z": -2.308053493499756 + }, + { + "x": -2.652109384536743, + "y": 4.662018775939941, + "z": -2.3116612434387207 + }, + { + "x": -2.6341261863708496, + "y": 4.662100791931152, + "z": -2.3150250911712646 + }, + { + "x": -2.615694046020508, + "y": 4.662187099456787, + "z": -2.318213701248169 + }, + { + "x": -2.5967957973480225, + "y": 4.66227388381958, + "z": -2.3212921619415283 + }, + { + "x": -2.577411651611328, + "y": 4.662357330322266, + "z": -2.3243215084075928 + }, + { + "x": -2.5575194358825684, + "y": 4.66243314743042, + "z": -2.3273587226867676 + }, + { + "x": -2.5370941162109375, + "y": 4.66249942779541, + "z": -2.3304576873779297 + }, + { + "x": -2.516108989715576, + "y": 4.662552356719971, + "z": -2.333667516708374 + }, + { + "x": -2.494539260864258, + "y": 4.662590026855469, + "z": -2.3370351791381836 + }, + { + "x": -2.4723784923553467, + "y": 4.66261100769043, + "z": -2.340604543685913 + }, + { + "x": -2.449636220932007, + "y": 4.662613391876221, + "z": -2.3444173336029053 + }, + { + "x": -2.426337480545044, + "y": 4.662595748901367, + "z": -2.348512887954712 + }, + { + "x": -2.4025228023529053, + "y": 4.662558555603027, + "z": -2.352928400039673 + }, + { + "x": -2.378248929977417, + "y": 4.662500381469727, + "z": -2.357698678970337 + }, + { + "x": -2.353590250015259, + "y": 4.662422180175781, + "z": -2.362855911254883 + }, + { + "x": -2.3286356925964355, + "y": 4.662323951721191, + "z": -2.3684301376342773 + }, + { + "x": -2.3034911155700684, + "y": 4.662207126617432, + "z": -2.3744492530822754 + }, + { + "x": -2.2782771587371826, + "y": 4.662072658538818, + "z": -2.380938768386841 + }, + { + "x": -2.2531323432922363, + "y": 4.661922454833984, + "z": -2.3879213333129883 + }, + { + "x": -2.22821044921875, + "y": 4.661758899688721, + "z": -2.3954176902770996 + }, + { + "x": -2.2036755084991455, + "y": 4.66158390045166, + "z": -2.4034461975097656 + }, + { + "x": -2.1796789169311523, + "y": 4.66140079498291, + "z": -2.4120192527770996 + }, + { + "x": -2.156339645385742, + "y": 4.6612114906311035, + "z": -2.4211442470550537 + }, + { + "x": -2.1337509155273438, + "y": 4.661017894744873, + "z": -2.430821657180786 + }, + { + "x": -2.1119766235351562, + "y": 4.66082239151001, + "z": -2.4410462379455566 + }, + { + "x": -2.0910511016845703, + "y": 4.660626411437988, + "z": -2.451805830001831 + }, + { + "x": -2.0709800720214844, + "y": 4.660431385040283, + "z": -2.463083267211914 + }, + { + "x": -2.0517404079437256, + "y": 4.660239219665527, + "z": -2.4748542308807373 + }, + { + "x": -2.033280611038208, + "y": 4.660049915313721, + "z": -2.487088680267334 + }, + { + "x": -2.0155189037323, + "y": 4.659865856170654, + "z": -2.4997506141662598 + }, + { + "x": -1.998345971107483, + "y": 4.65968656539917, + "z": -2.5127975940704346 + }, + { + "x": -1.9816229343414307, + "y": 4.659513473510742, + "z": -2.5261807441711426 + }, + { + "x": -1.965182900428772, + "y": 4.659346580505371, + "z": -2.5398457050323486 + }, + { + "x": -1.9488449096679688, + "y": 4.659186363220215, + "z": -2.5537338256835938 + }, + { + "x": -1.9324432611465454, + "y": 4.659032344818115, + "z": -2.5677859783172607 + }, + { + "x": -1.9158326387405396, + "y": 4.658885478973389, + "z": -2.581943988800049 + }, + { + "x": -1.8988914489746094, + "y": 4.658745765686035, + "z": -2.5961499214172363 + }, + { + "x": -1.8815159797668457, + "y": 4.6586127281188965, + "z": -2.6103484630584717 + }, + { + "x": -1.8636260032653809, + "y": 4.658486843109131, + "z": -2.6244826316833496 + }, + { + "x": -1.8451621532440186, + "y": 4.658368110656738, + "z": -2.6384971141815186 + }, + { + "x": -1.8260867595672607, + "y": 4.658257007598877, + "z": -2.6523375511169434 + }, + { + "x": -1.8063828945159912, + "y": 4.6581525802612305, + "z": -2.665949583053589 + }, + { + "x": -1.7860552072525024, + "y": 4.658055305480957, + "z": -2.6792805194854736 + }, + { + "x": -1.765129566192627, + "y": 4.657965660095215, + "z": -2.692277669906616 + }, + { + "x": -1.7436528205871582, + "y": 4.6578826904296875, + "z": -2.7048890590667725 + }, + { + "x": -1.7216925621032715, + "y": 4.657806396484375, + "z": -2.7170636653900146 + }, + { + "x": -1.6993212699890137, + "y": 4.657736778259277, + "z": -2.7287464141845703 + }, + { + "x": -1.676607370376587, + "y": 4.6576738357543945, + "z": -2.739877462387085 + }, + { + "x": -1.6536129713058472, + "y": 4.657617568969727, + "z": -2.75039005279541 + }, + { + "x": -1.630393147468567, + "y": 4.657567024230957, + "z": -2.760211229324341 + }, + { + "x": -1.6069989204406738, + "y": 4.657522678375244, + "z": -2.7692618370056152 + }, + { + "x": -1.5834715366363525, + "y": 4.6574835777282715, + "z": -2.7774579524993896 + }, + { + "x": -1.5598485469818115, + "y": 4.657450199127197, + "z": -2.784707546234131 + }, + { + "x": -1.5361617803573608, + "y": 4.657421588897705, + "z": -2.7909131050109863 + }, + { + "x": -1.5124359130859375, + "y": 4.657397270202637, + "z": -2.7959718704223633 + }, + { + "x": -1.4886894226074219, + "y": 4.657377243041992, + "z": -2.7997734546661377 + }, + { + "x": -1.4649351835250854, + "y": 4.657361030578613, + "z": -2.8022022247314453 + }, + { + "x": -1.4411795139312744, + "y": 4.657348155975342, + "z": -2.8031363487243652 + }, + { + "x": -1.417421817779541, + "y": 4.6573381423950195, + "z": -2.802455425262451 + }, + { + "x": -1.3936514854431152, + "y": 4.657330513000488, + "z": -2.8000636100769043 + }, + { + "x": -1.3698469400405884, + "y": 4.657324314117432, + "z": -2.7959001064300537 + }, + { + "x": -1.345975399017334, + "y": 4.657320499420166, + "z": -2.7899386882781982 + }, + { + "x": -1.3219934701919556, + "y": 4.657317638397217, + "z": -2.782186985015869 + }, + { + "x": -1.2978460788726807, + "y": 4.657315731048584, + "z": -2.7726879119873047 + }, + { + "x": -1.2734689712524414, + "y": 4.657314300537109, + "z": -2.7615184783935547 + }, + { + "x": -1.2487826347351074, + "y": 4.657313823699951, + "z": -2.7487893104553223 + }, + { + "x": -1.2237006425857544, + "y": 4.657313346862793, + "z": -2.734646797180176 + }, + { + "x": -1.1981240510940552, + "y": 4.657313346862793, + "z": -2.719271183013916 + }, + { + "x": -1.1719428300857544, + "y": 4.657313346862793, + "z": -2.7028775215148926 + }, + { + "x": -1.145036220550537, + "y": 4.657313346862793, + "z": -2.6857151985168457 + }, + { + "x": -1.1172722578048706, + "y": 4.657313346862793, + "z": -2.6680662631988525 + }, + { + "x": -1.0885229110717773, + "y": 4.657313346862793, + "z": -2.6502225399017334 + }, + { + "x": -1.0586785078048706, + "y": 4.657313346862793, + "z": -2.6324493885040283 + }, + { + "x": -1.0276530981063843, + "y": 4.657313346862793, + "z": -2.6149826049804688 + }, + { + "x": -0.9953831434249878, + "y": 4.657313346862793, + "z": -2.598027229309082 + }, + { + "x": -0.9618280529975891, + "y": 4.657313346862793, + "z": -2.581758737564087 + }, + { + "x": -0.926969051361084, + "y": 4.657313346862793, + "z": -2.56632137298584 + }, + { + "x": -0.8908112049102783, + "y": 4.657313346862793, + "z": -2.5518300533294678 + }, + { + "x": -0.8533831834793091, + "y": 4.657313346862793, + "z": -2.5383689403533936 + }, + { + "x": -0.8147315382957458, + "y": 4.657313346862793, + "z": -2.525991201400757 + }, + { + "x": -0.7749301195144653, + "y": 4.657313346862793, + "z": -2.5147206783294678 + }, + { + "x": -0.7340742945671082, + "y": 4.657313346862793, + "z": -2.5045509338378906 + }, + { + "x": -0.6922820806503296, + "y": 4.657313346862793, + "z": -2.4954447746276855 + }, + { + "x": -0.6496824026107788, + "y": 4.657313346862793, + "z": -2.4873383045196533 + }, + { + "x": -0.6063494086265564, + "y": 4.657313346862793, + "z": -2.4801583290100098 + }, + { + "x": -0.5622617602348328, + "y": 4.657313346862793, + "z": -2.4738335609436035 + }, + { + "x": -0.5173006653785706, + "y": 4.657313346862793, + "z": -2.4682958126068115 + }, + { + "x": -0.47125035524368286, + "y": 4.657313346862793, + "z": -2.4634790420532227 + }, + { + "x": -0.4237974286079407, + "y": 4.657313346862793, + "z": -2.459320306777954 + }, + { + "x": -0.3745315968990326, + "y": 4.657313346862793, + "z": -2.455758810043335 + }, + { + "x": -0.32294487953186035, + "y": 4.657313346862793, + "z": -2.4527361392974854 + }, + { + "x": -0.2684324085712433, + "y": 4.657313346862793, + "z": -2.450197219848633 + }, + { + "x": -0.2102946937084198, + "y": 4.657313346862793, + "z": -2.4480888843536377 + }, + { + "x": -0.14772659540176392, + "y": 4.657313346862793, + "z": -2.4463605880737305 + }, + { + "x": -0.0798339769244194, + "y": 4.657313346862793, + "z": -2.444965124130249 + }, + { + "x": -0.0056219929829239845, + "y": 4.657313346862793, + "z": -2.443856954574585 + }, + { + "x": 0.07603277266025543, + "y": 4.657313346862793, + "z": -2.442993640899658 + }, + { + "x": 0.16645385324954987, + "y": 4.657313346862793, + "z": -2.442336320877075 + }, + { + "x": 0.2671828866004944, + "y": 4.657313346862793, + "z": -2.4418492317199707 + }, + { + "x": 0.3799797594547272, + "y": 4.657313346862793, + "z": -2.441500186920166 + }, + { + "x": 0.5068225860595703, + "y": 4.657313346862793, + "z": -2.4412600994110107 + }, + { + "x": 0.6499078273773193, + "y": 4.657313346862793, + "z": -2.44110369682312 + }, + { + "x": 0.8116499185562134, + "y": 4.657313346862793, + "z": -2.4410085678100586 + }, + { + "x": 0.9946815967559814, + "y": 4.657313346862793, + "z": -2.4409563541412354 + }, + { + "x": 1.2018539905548096, + "y": 4.657313346862793, + "z": -2.440931558609009 + }, + { + "x": 1.4362366199493408, + "y": 4.657313346862793, + "z": -2.440922498703003 + }, + { + "x": 1.7011168003082275, + "y": 4.657313346862793, + "z": -2.440920352935791 + }, + { + "x": 1.9999847412109375, + "y": 4.657313346862793, + "z": -2.440920114517212 + } + ], + "closed": false +} \ No newline at end of file diff --git a/public/images/gamepad.png b/public/images/gamepad.png new file mode 100644 index 0000000..7dcd27a Binary files /dev/null and b/public/images/gamepad.png differ diff --git a/public/images/keyboard.png b/public/images/keyboard.png new file mode 100644 index 0000000..ac5b54f Binary files /dev/null and b/public/images/keyboard.png differ diff --git a/public/images/mousekeyboard.png b/public/images/mousekeyboard.png new file mode 100644 index 0000000..60c36f9 Binary files /dev/null and b/public/images/mousekeyboard.png differ diff --git a/src/App.jsx b/src/App.jsx index 9aea028..8ad7e45 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -5,6 +5,7 @@ import { Physics } from '@react-three/rapier' import { KeyboardControls, Loader, OrbitControls, Preload, Stats } from '@react-three/drei' import { insertCoin, onPlayerJoin } from 'playroomkit' import { useStore } from "./components/store"; +import * as THREE from "three"; export const Controls = { up: 'up', @@ -37,13 +38,13 @@ function App() { onPlayerJoin((state) => { actions.addPlayer(state); - console.log('player joined', state); + actions.setId(state.id); - console.log(state) + state.onQuit(() => { actions.removePlayer(state); - console.log('player quit', state); + }); }); } @@ -59,7 +60,11 @@ function App() { shadows dpr={1} gl={{ antialias: false, stencil: false, powerPreference: 'high-performance' }} - > + mode="concurrent" + onCreated={({ gl, camera }) => { + gl.toneMapping = THREE.AgXToneMapping + // gl.setClearColor(new THREE.Color('#020209')) + }}> { const wheel = useRef(); const [image, setImage] = useState(""); - const {item} = useStore(); + const { item, gameStarted } = useStore(); useEffect(() => { const handleMouseMove = (e) => { @@ -44,31 +44,19 @@ export const HUD = () => { return (
-
- logo -
-
-
-
-
- {image && item} + {gameStarted && ( + <> +
+
+
+
+ {image && item} +
+
-
-
-
- steering wheel -
+ + )}
); }; diff --git a/src/Landing.jsx b/src/Landing.jsx new file mode 100644 index 0000000..3c004cb --- /dev/null +++ b/src/Landing.jsx @@ -0,0 +1,98 @@ +import React, { useEffect, useRef, useState } from "react"; +import { useStore } from "./components/store"; +import gsap from "gsap"; + +export const Landing = () => { + const { gameStarted, actions } = useStore(); + + const logo = useRef(); + const startButton = useRef(); + const homeRef = useRef(); + const [setupStatus, setSetupStatus] = useState(0); + const [controlStyle, setControlStyle] = useState(""); + + useEffect(() => { + const tl = gsap.timeline(); + + if (setupStatus === 0) { + if (logo.current && startButton.current) { + tl.from(logo.current, { + scale: 122, + opacity: 0, + duration: 0, + ease: "power4.out", + }) + .to(logo.current, { + scale: 1, + opacity: 1, + duration: 1.5, + ease: "power4.out", + }) + .to(startButton.current, { + opacity: 1, + duration: 3, + delay: 1, + ease: "power4.out", + }); + } + } + }, [setupStatus]); + + if (gameStarted) { + return null; + } + return ( + <> + {setupStatus === 0 && ( +
+
+ logo +
+
+ +
+
+ )} + {setupStatus === 1 && ( +
+
+

CHOOSE YOUR CONTROL STYLE

+ +
+
+ setControlStyle("keyboard")}> +

Keyboard

+ keyboard +
+
+ setControlStyle("gamepad")}> +

Gamepad

+ gamepad +
+
+ setControlStyle("mouseKeyboard")}> +

Mouse & Keybaord

+ mouse & keyboard +
+
+ +
+ +
+
+
+ )} + + + ); +}; diff --git a/src/components/Experience.jsx b/src/components/Experience.jsx index c090ee1..913c4a8 100644 --- a/src/components/Experience.jsx +++ b/src/components/Experience.jsx @@ -7,6 +7,8 @@ import { } from "@react-three/drei"; import { Ground } from "./Ground"; import { PlayerController } from "./PlayerController"; +import { PlayerControllerGamepad } from "./PlayerControllerGamepad"; +import { PlayerControllerKeyboard } from "./PlayerControllerKeyboard"; import { Paris } from "./models/tracks/Tour_paris_promenade"; import { EffectComposer, @@ -34,24 +36,40 @@ import { useMultiplayerState, } from "playroomkit"; import { PlayerDummies } from "./PlayerDummies"; -import { useEffect, useState } from "react"; +import { useEffect, useState, useRef } from "react"; import { useFrame, useLoader } from "@react-three/fiber"; -import { LUTPass, LUTCubeLoader } from 'three-stdlib' +import { LUTPass, LUTCubeLoader } from "three-stdlib"; +import { useCurvedPathPoints } from "./useCurvedPath"; export const Experience = () => { - const onCollide = (event) => { - console.log(event); - }; - const { bananas, shells, players, id, actions } = useStore(); + const onCollide = (event) => {}; + const { gameStarted, bananas, shells, players, id, actions, controls } = + useStore(); const [networkBananas, setNetworkBananas] = useMultiplayerState( "bananas", [] ); + const { points, loading, error } = useCurvedPathPoints("./CurvedPath.json"); + const [networkShells, setNetworkShells] = useMultiplayerState("shells", []); + const [pointest, setPointest] = useState([]); + const [currentPoint, setCurrentPoint] = useState(0); + useEffect(() => { + if (points) { + //This is adjusted to Paris scale + const scaledPoints = points.map((point) => ({ + x: point.x * 50, + y: point.y * 50, + z: point.z * 50, + })); + setPointest(scaledPoints.reverse()); + } + }, [points]); const testing = getState("bananas"); - + const cam = useRef(); + const lookAtTarget = useRef(); // useEffect(() => { // setNetworkBananas(bananas); // }, [bananas]); @@ -59,34 +77,73 @@ export const Experience = () => { // useEffect(() => { // setNetworkShells(shells); // }, [shells]); + const speedFactor = 5; + const { texture } = useLoader(LUTCubeLoader, "./cubicle-99.CUBE"); + useFrame((state, delta) => { + if (!gameStarted) { + const camera = cam.current; - const {texture}= useLoader(LUTCubeLoader, "./cubicle-99.CUBE"); + if (currentPoint < pointest.length - 1) { + camera.position.lerp(pointest[currentPoint], delta * speedFactor); + lookAtTarget.current.position.lerp( + pointest[currentPoint + 1], + delta * speedFactor + ); + camera.lookAt(lookAtTarget.current.position); + + if (camera.position.distanceTo(pointest[currentPoint]) < 5) { + setCurrentPoint(currentPoint + 1); + } + } else { + setCurrentPoint(0); + } + } + }); return ( <> - {players.map((player) => ( - - ))} - - {players.map((player) => ( - - ))} + {gameStarted && + players.map((player) => { + const ControllerComponent = + controls === "keyboard" + ? PlayerControllerKeyboard + : controls === "gamepad" + ? PlayerControllerGamepad + : PlayerController; + return ( + + ); + })} + {gameStarted && + players.map((player) => ( + + ))} + {!gameStarted && ( + <> + + + + )} - {/* */} - {/* */} + @@ -100,7 +157,6 @@ export const Experience = () => { setNetworkBananas={setNetworkBananas} networkBananas={networkBananas} id={banana.id} - // rotation={banana.rotation} /> ))} {networkShells.map((shell) => ( @@ -111,11 +167,10 @@ export const Experience = () => { rotation={shell.rotation} setNetworkShells={setNetworkShells} networkShells={networkShells} - /> ))} - {/* { shadow-camera-top={300} shadow-camera-bottom={-300} castShadow - /> */} + /> { @@ -576,6 +576,7 @@ export const PlayerController = ({ position={[0, 2, 8]} fov={50} ref={cam} + far={5000} /> { + + const [isOnGround, setIsOnGround] = useState(false); + const body = useRef(); + const kart = useRef(); + const cam = useRef(); + const initialSpeed = 0; + const maxSpeed = 30; + const boostSpeed = 50; + const acceleration = 0.1; + const decceleration = 0.2; + const damping = -0.1; + const MaxSteeringSpeed = 0.01; + const [currentSteeringSpeed, setCurrentSteeringSpeed] = useState(0); + const [currentSpeed, setCurrentSpeed] = useState(initialSpeed); + const camMaxOffset = 1; + let steeringAngle = 0; + const isOnFloor = useRef(false); + const jumpForce = useRef(0); + const jumpIsHeld = useRef(false); + const driftDirection = useRef(0); + const driftLeft = useRef(false); + const driftRight = useRef(false); + const driftForce = useRef(0); + const mario = useRef(); + const accumulatedDriftPower = useRef(0); + const blueTurboThreshold = 10; + const orangeTurboThreshold = 30; + const purpleTurboThreshold = 60; + const [turboColor, setTurboColor] = useState(0xffffff); + const boostDuration = useRef(0); + const [isBoosting, setIsBoosting] = useState(false); + let targetXPosition = 0; + let targetZPosition = 8; + const [steeringAngleWheels, setSteeringAngleWheels] = useState(0); + const engineSound = useRef(); + const driftSound = useRef(); + const driftTwoSound = useRef(); + const driftOrangeSound = useRef(); + const driftPurpleSound = useRef(); + const driftBlueSound = useRef(); + const jumpSound = useRef(); + const landingSound = useRef(); + const turboSound = useRef(); + const [scale, setScale] = useState(0); + const raycaster = new THREE.Raycaster(); + const downDirection = new THREE.Vector3(0, -1, 0); + const [shouldLaunch, setShouldLaunch] = useState(false); + const effectiveBoost = useRef(0); + const text = useRef(); + + const { actions, shouldSlowDown, item, bananas, coins, id, controls } = useStore(); + const slowDownDuration = useRef(1500); + const { buttonA, buttonB, RB, LB, joystick, select} = useGamepad(); + + useFrame(({ pointer, clock }, delta) => { + if (player.id !== id) return; + const time = clock.getElapsedTime(); + if (!body.current && !mario.current) return; + engineSound.current.setVolume(currentSpeed / 300 + 0.2); + engineSound.current.setPlaybackRate(currentSpeed / 10 + 0.1); + jumpSound.current.setPlaybackRate(1.5); + jumpSound.current.setVolume(0.5); + driftSound.current.setVolume(0.2); + + driftBlueSound.current.setVolume(0.5); + driftOrangeSound.current.setVolume(0.6); + driftPurpleSound.current.setVolume(0.7); + // HANDLING AND STEERING + const kartRotation = + kart.current.rotation.y - driftDirection.current * driftForce.current; + const forwardDirection = new THREE.Vector3( + -Math.sin(kartRotation), + 0, + -Math.cos(kartRotation) + ); + + // mouse steering + + if (!driftLeft.current && !driftRight.current) { + steeringAngle = currentSteeringSpeed * -joystick[0]; + targetXPosition = -camMaxOffset * -joystick[0]; + } else if (driftLeft.current && !driftRight.current) { + steeringAngle = currentSteeringSpeed * -(joystick[0] - 1); + targetXPosition = -camMaxOffset * -joystick[0]; + } else if (driftRight.current && !driftLeft.current) { + steeringAngle = currentSteeringSpeed * -(joystick[0] + 1); + targetXPosition = -camMaxOffset * -joystick[0]; + } + // ACCELERATING + const shouldSlow = actions.getShouldSlowDown(); + + if (buttonA && currentSpeed < maxSpeed) { + // Accelerate the kart within the maximum speed limit + setCurrentSpeed( + Math.min(currentSpeed + acceleration * delta * 144, maxSpeed) + ); + } else if ( + buttonA && + currentSpeed > maxSpeed && + effectiveBoost.current > 0 + ) { + setCurrentSpeed( + Math.max(currentSpeed - decceleration * delta * 144, maxSpeed) + ); + } + + if (buttonA) { + if (currentSteeringSpeed < MaxSteeringSpeed) { + setCurrentSteeringSpeed( + Math.min( + currentSteeringSpeed + 0.0001 * delta * 144, + MaxSteeringSpeed + ) + ); + } + } + if (shouldSlow) { + setCurrentSpeed( + Math.max(currentSpeed - decceleration * 2 * delta * 144, 0) + ); + setCurrentSteeringSpeed(0); + slowDownDuration.current -= 1500 * delta; + setShouldLaunch(true); + if (slowDownDuration.current <= 1) { + actions.setShouldSlowDown(false); + slowDownDuration.current = 1500; + setShouldLaunch(false); + } + } + + // REVERSING + if (buttonB && currentSpeed < -maxSpeed) { + setCurrentSpeed( + Math.max(currentSpeed - acceleration * delta * 144, -maxSpeed) + ); + } + // DECELERATING + else if (!buttonA && !buttonB) { + if (currentSteeringSpeed > 0) { + setCurrentSteeringSpeed( + Math.max(currentSteeringSpeed - 0.00005 * delta * 144, 0) + ); + } else if (currentSteeringSpeed < 0) { + setCurrentSteeringSpeed( + Math.min(currentSteeringSpeed + 0.00005 * delta * 144, 0) + ); + } + setCurrentSpeed(Math.max(currentSpeed - decceleration * delta * 144, 0)); + } + + // Update the kart's rotation based on the steering angle + kart.current.rotation.y += steeringAngle * delta * 144; + + // Apply damping to simulate slowdown when no keys are pressed + body.current.applyImpulse( + { + x: -body.current.linvel().x * (1 - damping) * delta * 144, + y: 0, + z: -body.current.linvel().z * (1 - damping) * delta * 144, + }, + true + ); + const bodyPosition = body.current.translation(); + kart.current.position.set( + bodyPosition.x, + bodyPosition.y - 0.5, + bodyPosition.z + ); + + // JUMPING + if (RB && isOnGround && !jumpIsHeld.current) { + jumpForce.current += 10; + isOnFloor.current = false; + jumpIsHeld.current = true; + jumpSound.current.play(); + setIsOnGround(false); + + if (jumpSound.current.isPlaying) { + jumpSound.current.stop(); + jumpSound.current.play(); + } + } + + if (isOnFloor.current && jumpForce.current > 0) { + landingSound.current.play(); + } + if (!isOnGround && jumpForce.current > 0) { + jumpForce.current -= 1 * delta * 144; + } + if (!RB) { + jumpIsHeld.current = false; + driftDirection.current = 0; + driftForce.current = 0; + driftLeft.current = false; + driftRight.current = false; + } + // DRIFTING + if ( + jumpIsHeld.current && + currentSteeringSpeed > 0 && + joystick[0] < -0.1 && + !driftRight.current + ) { + driftLeft.current = true; + } + if ( + jumpIsHeld.current && + currentSteeringSpeed > 0 && + joystick[0] > 0.1 && + !driftLeft.current + ) { + driftRight.current = true; + } + + if (!jumpIsHeld.current && !driftLeft.current && !driftRight.current) { + mario.current.rotation.y = THREE.MathUtils.lerp( + mario.current.rotation.y, + 0, + 0.0001 * delta * 144 + ); + setTurboColor(0xffffff); + accumulatedDriftPower.current = 0; + driftSound.current.stop(); + driftTwoSound.current.stop(); + driftOrangeSound.current.stop(); + driftPurpleSound.current.stop(); + } + + if (driftLeft.current) { + driftDirection.current = 1; + driftForce.current = 0.4; + mario.current.rotation.y = THREE.MathUtils.lerp( + mario.current.rotation.y, + steeringAngle * 25 + 0.4, + 0.05 * delta * 144 + ); + accumulatedDriftPower.current += 0.1 * (steeringAngle + 1) * delta * 144; + } + if (driftRight.current) { + driftDirection.current = -1; + driftForce.current = 0.4; + mario.current.rotation.y = THREE.MathUtils.lerp( + mario.current.rotation.y, + -(-steeringAngle * 25 + 0.4), + 0.05 * delta * 144 + ); + accumulatedDriftPower.current += 0.1 * (-steeringAngle + 1) * delta * 144; + } + if (!driftLeft.current && !driftRight.current) { + mario.current.rotation.y = THREE.MathUtils.lerp( + mario.current.rotation.y, + steeringAngle * 30, + 0.05 * delta * 144 + ); + setScale(0); + } + if (accumulatedDriftPower.current > blueTurboThreshold) { + setTurboColor(0x00ffff); + boostDuration.current = 50; + driftBlueSound.current.play(); + } + if (accumulatedDriftPower.current > orangeTurboThreshold) { + setTurboColor(0xffcf00); + boostDuration.current = 100; + driftBlueSound.current.stop(); + driftOrangeSound.current.play(); + } + if (accumulatedDriftPower.current > purpleTurboThreshold) { + setTurboColor(0xff00ff); + boostDuration.current = 250; + driftOrangeSound.current.stop(); + driftPurpleSound.current.play(); + } + + if (driftLeft.current || driftRight.current) { + const oscillation = Math.sin(time * 1000) * 0.1; + const vibration = oscillation + 0.9; + if (turboColor === 0xffffff) { + setScale(vibration * 0.8); + } else { + setScale(vibration); + } + if (isOnFloor.current && !driftSound.current.isPlaying) { + driftSound.current.play(); + driftTwoSound.current.play(); + landingSound.current.play(); + } + } + // RELEASING DRIFT + + if (boostDuration.current > 1 && !jumpIsHeld.current) { + setIsBoosting(true); + effectiveBoost.current = boostDuration.current; + boostDuration.current = 0; + } else if (effectiveBoost.current <= 1) { + targetZPosition = 8; + setIsBoosting(false); + } + + if (isBoosting && effectiveBoost.current > 1) { + setCurrentSpeed(boostSpeed); + effectiveBoost.current -= 1 * delta * 144; + targetZPosition = 10; + if (!turboSound.current.isPlaying) turboSound.current.play(); + driftTwoSound.current.play(); + driftBlueSound.current.stop(); + driftOrangeSound.current.stop(); + driftPurpleSound.current.stop(); + } else if (effectiveBoost.current <= 1) { + setIsBoosting(false); + targetZPosition = 8; + turboSound.current.stop(); + } + + // CAMERA WORK + + cam.current.updateMatrixWorld(); + + cam.current.position.x = THREE.MathUtils.lerp( + cam.current.position.x, + targetXPosition, + 0.01 * delta * 144 + ); + + cam.current.position.z = THREE.MathUtils.lerp( + cam.current.position.z, + targetZPosition, + 0.01 * delta * 144 + ); + + body.current.applyImpulse( + { + x: forwardDirection.x * currentSpeed * delta * 144, + y: 0 + jumpForce.current * delta * 144, + z: forwardDirection.z * currentSpeed * delta * 144, + }, + true + ); + + // Update the kart's rotation based on the steering angle + setSteeringAngleWheels(steeringAngle * 25); + + // SOUND WORK + + // MISC + + if (select) { + body.current.setTranslation({ x: 8, y: 2, z: -119 }); + body.current.setLinvel({ x: 0, y: 0, z: 0 }); + body.current.setAngvel({ x: 0, y: 0, z: 0 }); + setCurrentSpeed(0); + setCurrentSteeringSpeed(0); + setIsBoosting(false); + effectiveBoost.current = 0; + setIsOnGround(false); + jumpForce.current = 0; + driftDirection.current = 0; + kart.current.rotation.y = Math.PI / 2; + } + + // ITEMS + + if (LB && item === "banana") { + const distanceBehind = 2; + const scaledBackwardDirection = + forwardDirection.multiplyScalar(distanceBehind); + + const kartPosition = new THREE.Vector3( + ...vec3(body.current.translation()) + ); + + const bananaPosition = kartPosition.sub(scaledBackwardDirection); + const newBanana = { + id: Math.random() + "-" + +new Date(), + position: bananaPosition, + player: true, + }; + setNetworkBananas([...networkBananas, newBanana]); + + actions.useItem(); + } + + if (LB && item === "shell") { + const distanceBehind = -2; + const scaledBackwardDirection = + forwardDirection.multiplyScalar(distanceBehind); + + const kartPosition = new THREE.Vector3( + body.current.translation().x, + body.current.translation().y, + body.current.translation().z + ); + + const shellPosition = kartPosition.sub(scaledBackwardDirection); + const newShell = { + id: Math.random() + "-" + +new Date(), + position: shellPosition, + player: true, + rotation: kartRotation, + }; + setNetworkShells([...networkShells, newShell]); + actions.useItem(); + } + + if (LB && item === "mushroom") { + setIsBoosting(true); + effectiveBoost.current = 300; + actions.useItem(); + } + + player.setState("position", body.current.translation()); + player.setState("rotation", kartRotation + mario.current.rotation.y); + player.setState("isBoosting", isBoosting); + player.setState("shouldLaunch", shouldLaunch); + player.setState("turboColor", turboColor); + player.setState("scale", scale); + player.setState("bananas", bananas); + }); + + return player.id === id ? ( + + + { + isOnFloor.current = true; + setIsOnGround(true); + }} + onCollisionExit={({ other }) => { + isOnFloor.current = false; + setIsOnGround(false); + }} + /> + + + + + + + + + + + + + + + + + + + + + + + + {/* */} + + + + + + + + + + {/* */} + + + + + + + + + + + + + + ) : null; +}; diff --git a/src/components/PlayerControllerKeyboard.jsx b/src/components/PlayerControllerKeyboard.jsx new file mode 100644 index 0000000..c515b9a --- /dev/null +++ b/src/components/PlayerControllerKeyboard.jsx @@ -0,0 +1,628 @@ +import { Controls } from "../App"; +import { BallCollider, RigidBody, useRapier, vec3 } from "@react-three/rapier"; +import { + useKeyboardControls, + PerspectiveCamera, + PositionalAudio, +} from "@react-three/drei"; +import { useFrame, useThree, extend } from "@react-three/fiber"; +import { useRef, useState, useEffect, useCallback } from "react"; +import * as THREE from "three"; + +import { Mario } from "./models/characters/Mario_kart"; +import { DriftParticlesLeft } from "./Particles/drifts/DriftParticlesLeft"; +import { DriftParticlesRight } from "./Particles/drifts/DriftParticlesRight"; + +import { PointParticle } from "./Particles/drifts/PointParticle"; + +import { FlameParticles } from "./Particles/flames/FlameParticles"; +import { useStore } from "./store"; +import { Cylinder } from "@react-three/drei"; +import FakeGlowMaterial from "./ShaderMaterials/FakeGlow/FakeGlowMaterial"; +import { HitParticles } from "./Particles/hits/HitParticles"; +import { CoinParticles } from "./Particles/coins/CoinParticles"; +import { ItemParticles } from "./Particles/items/ItemParticles"; +import { geometry } from "maath"; +extend(geometry); + +export const PlayerControllerKeyboard = ({ + player, + userPlayer, + setNetworkBananas, + setNetworkShells, + networkBananas, + networkShells, +}) => { + const upPressed = useKeyboardControls((state) => state[Controls.up]); + const downPressed = useKeyboardControls((state) => state[Controls.down]); + const leftPressed = useKeyboardControls((state) => state[Controls.left]); + const rightPressed = useKeyboardControls((state) => state[Controls.right]); + const jumpPressed = useKeyboardControls((state) => state[Controls.jump]); + const shootPressed = useKeyboardControls((state) => state[Controls.shoot]); + const resetPressed = useKeyboardControls((state) => state[Controls.reset]); + + const [isOnGround, setIsOnGround] = useState(false); + const body = useRef(); + const kart = useRef(); + const cam = useRef(); + const initialSpeed = 0; + const maxSpeed = 30; + const boostSpeed = 50; + const acceleration = 0.1; + const decceleration = 0.2; + const damping = -0.1; + const MaxSteeringSpeed = 0.01; + const [currentSteeringSpeed, setCurrentSteeringSpeed] = useState(0); + const [currentSpeed, setCurrentSpeed] = useState(initialSpeed); + const camMaxOffset = 1; + let steeringAngle = 0; + const isOnFloor = useRef(false); + const jumpForce = useRef(0); + const jumpIsHeld = useRef(false); + const driftDirection = useRef(0); + const driftLeft = useRef(false); + const driftRight = useRef(false); + const driftForce = useRef(0); + const mario = useRef(); + const accumulatedDriftPower = useRef(0); + const blueTurboThreshold = 10; + const orangeTurboThreshold = 30; + const purpleTurboThreshold = 60; + const [turboColor, setTurboColor] = useState(0xffffff); + const boostDuration = useRef(0); + const [isBoosting, setIsBoosting] = useState(false); + let targetXPosition = 0; + let targetZPosition = 8; + const [steeringAngleWheels, setSteeringAngleWheels] = useState(0); + const engineSound = useRef(); + const driftSound = useRef(); + const driftTwoSound = useRef(); + const driftOrangeSound = useRef(); + const driftPurpleSound = useRef(); + const driftBlueSound = useRef(); + const jumpSound = useRef(); + const landingSound = useRef(); + const turboSound = useRef(); + const [scale, setScale] = useState(0); + const raycaster = new THREE.Raycaster(); + const downDirection = new THREE.Vector3(0, -1, 0); + const [shouldLaunch, setShouldLaunch] = useState(false); + const effectiveBoost = useRef(0); + const text = useRef(); + + const { actions, shouldSlowDown, item, bananas, coins, id, controls } = useStore(); + const slowDownDuration = useRef(1500); + + useFrame(({ pointer, clock }, delta) => { + if (player.id !== id) return; + const time = clock.getElapsedTime(); + if (!body.current && !mario.current) return; + engineSound.current.setVolume(currentSpeed / 300 + 0.2); + engineSound.current.setPlaybackRate(currentSpeed / 10 + 0.1); + jumpSound.current.setPlaybackRate(1.5); + jumpSound.current.setVolume(0.5); + driftSound.current.setVolume(0.2); + + driftBlueSound.current.setVolume(0.5); + driftOrangeSound.current.setVolume(0.6); + driftPurpleSound.current.setVolume(0.7); + // HANDLING AND STEERING + const kartRotation = + kart.current.rotation.y - driftDirection.current * driftForce.current; + const forwardDirection = new THREE.Vector3( + -Math.sin(kartRotation), + 0, + -Math.cos(kartRotation) + ); + + if (leftPressed && currentSpeed > 0) { + steeringAngle = currentSteeringSpeed; + targetXPosition = -camMaxOffset; + } else if (rightPressed && currentSpeed > 0) { + steeringAngle = -currentSteeringSpeed; + targetXPosition = camMaxOffset; + } else { + steeringAngle = 0; + targetXPosition = 0; + 1; + } + + // ACCELERATING + const shouldSlow = actions.getShouldSlowDown(); + + if (upPressed && currentSpeed < maxSpeed) { + // Accelerate the kart within the maximum speed limit + setCurrentSpeed( + Math.min(currentSpeed + acceleration * delta * 144, maxSpeed) + ); + } else if ( + upPressed && + currentSpeed > maxSpeed && + effectiveBoost.current > 0 + ) { + setCurrentSpeed( + Math.max(currentSpeed - decceleration * delta * 144, maxSpeed) + ); + } + + if (upPressed) { + if (currentSteeringSpeed < MaxSteeringSpeed) { + setCurrentSteeringSpeed( + Math.min( + currentSteeringSpeed + 0.0001 * delta * 144, + MaxSteeringSpeed + ) + ); + } + } + if (shouldSlow) { + setCurrentSpeed( + Math.max(currentSpeed - decceleration * 2 * delta * 144, 0) + ); + setCurrentSteeringSpeed(0); + slowDownDuration.current -= 1500 * delta; + setShouldLaunch(true); + if (slowDownDuration.current <= 1) { + actions.setShouldSlowDown(false); + slowDownDuration.current = 1500; + setShouldLaunch(false); + } + } + + // REVERSING + if (downPressed && currentSpeed < -maxSpeed) { + setCurrentSpeed( + Math.max(currentSpeed - acceleration * delta * 144, -maxSpeed) + ); + } + // DECELERATING + else if (!upPressed && !downPressed) { + if (currentSteeringSpeed > 0) { + setCurrentSteeringSpeed( + Math.max(currentSteeringSpeed - 0.00005 * delta * 144, 0) + ); + } else if (currentSteeringSpeed < 0) { + setCurrentSteeringSpeed( + Math.min(currentSteeringSpeed + 0.00005 * delta * 144, 0) + ); + } + setCurrentSpeed(Math.max(currentSpeed - decceleration * delta * 144, 0)); + } + + // Update the kart's rotation based on the steering angle + kart.current.rotation.y += steeringAngle * delta * 144; + + // Apply damping to simulate slowdown when no keys are pressed + body.current.applyImpulse( + { + x: -body.current.linvel().x * (1 - damping) * delta * 144, + y: 0, + z: -body.current.linvel().z * (1 - damping) * delta * 144, + }, + true + ); + const bodyPosition = body.current.translation(); + kart.current.position.set( + bodyPosition.x, + bodyPosition.y - 0.5, + bodyPosition.z + ); + + // JUMPING + if (jumpPressed && isOnGround && !jumpIsHeld.current) { + jumpForce.current += 10; + isOnFloor.current = false; + jumpIsHeld.current = true; + jumpSound.current.play(); + setIsOnGround(false); + + if (jumpSound.current.isPlaying) { + jumpSound.current.stop(); + jumpSound.current.play(); + } + } + + if (isOnFloor.current && jumpForce.current > 0) { + landingSound.current.play(); + } + if (!isOnGround && jumpForce.current > 0) { + jumpForce.current -= 1 * delta * 144; + } + if (!jumpPressed) { + jumpIsHeld.current = false; + driftDirection.current = 0; + driftForce.current = 0; + driftLeft.current = false; + driftRight.current = false; + } + // DRIFTING + if ( + jumpIsHeld.current && + currentSteeringSpeed > 0 && + leftPressed && + !driftRight.current + ) { + driftLeft.current = true; + } + if ( + jumpIsHeld.current && + currentSteeringSpeed > 0 && + rightPressed > 0.1 && + !driftLeft.current + ) { + driftRight.current = true; + } + + if (!jumpIsHeld.current && !driftLeft.current && !driftRight.current) { + mario.current.rotation.y = THREE.MathUtils.lerp( + mario.current.rotation.y, + 0, + 0.0001 * delta * 144 + ); + setTurboColor(0xffffff); + accumulatedDriftPower.current = 0; + driftSound.current.stop(); + driftTwoSound.current.stop(); + driftOrangeSound.current.stop(); + driftPurpleSound.current.stop(); + } + + if (driftLeft.current) { + driftDirection.current = 1; + driftForce.current = 0.4; + mario.current.rotation.y = THREE.MathUtils.lerp( + mario.current.rotation.y, + steeringAngle * 25 + 0.4, + 0.05 * delta * 144 + ); + accumulatedDriftPower.current += 0.1 * (steeringAngle + 1) * delta * 144; + } + if (driftRight.current) { + driftDirection.current = -1; + driftForce.current = 0.4; + mario.current.rotation.y = THREE.MathUtils.lerp( + mario.current.rotation.y, + -(-steeringAngle * 25 + 0.4), + 0.05 * delta * 144 + ); + accumulatedDriftPower.current += 0.1 * (-steeringAngle + 1) * delta * 144; + } + if (!driftLeft.current && !driftRight.current) { + mario.current.rotation.y = THREE.MathUtils.lerp( + mario.current.rotation.y, + steeringAngle * 30, + 0.05 * delta * 144 + ); + setScale(0); + } + if (accumulatedDriftPower.current > blueTurboThreshold) { + setTurboColor(0x00ffff); + boostDuration.current = 50; + driftBlueSound.current.play(); + } + if (accumulatedDriftPower.current > orangeTurboThreshold) { + setTurboColor(0xffcf00); + boostDuration.current = 100; + driftBlueSound.current.stop(); + driftOrangeSound.current.play(); + } + if (accumulatedDriftPower.current > purpleTurboThreshold) { + setTurboColor(0xff00ff); + boostDuration.current = 250; + driftOrangeSound.current.stop(); + driftPurpleSound.current.play(); + } + + if (driftLeft.current || driftRight.current) { + const oscillation = Math.sin(time * 1000) * 0.1; + const vibration = oscillation + 0.9; + if (turboColor === 0xffffff) { + setScale(vibration * 0.8); + } else { + setScale(vibration); + } + if (isOnFloor.current && !driftSound.current.isPlaying) { + driftSound.current.play(); + driftTwoSound.current.play(); + landingSound.current.play(); + } + } + // RELEASING DRIFT + + if (boostDuration.current > 1 && !jumpIsHeld.current) { + setIsBoosting(true); + effectiveBoost.current = boostDuration.current; + boostDuration.current = 0; + } else if (effectiveBoost.current <= 1) { + targetZPosition = 8; + setIsBoosting(false); + } + + if (isBoosting && effectiveBoost.current > 1) { + setCurrentSpeed(boostSpeed); + effectiveBoost.current -= 1 * delta * 144; + targetZPosition = 10; + if (!turboSound.current.isPlaying) turboSound.current.play(); + driftTwoSound.current.play(); + driftBlueSound.current.stop(); + driftOrangeSound.current.stop(); + driftPurpleSound.current.stop(); + } else if (effectiveBoost.current <= 1) { + setIsBoosting(false); + targetZPosition = 8; + turboSound.current.stop(); + } + + // CAMERA WORK + + cam.current.updateMatrixWorld(); + + cam.current.position.x = THREE.MathUtils.lerp( + cam.current.position.x, + targetXPosition, + 0.01 * delta * 144 + ); + + cam.current.position.z = THREE.MathUtils.lerp( + cam.current.position.z, + targetZPosition, + 0.01 * delta * 144 + ); + + body.current.applyImpulse( + { + x: forwardDirection.x * currentSpeed * delta * 144, + y: 0 + jumpForce.current * delta * 144, + z: forwardDirection.z * currentSpeed * delta * 144, + }, + true + ); + + // Update the kart's rotation based on the steering angle + setSteeringAngleWheels(steeringAngle * 25); + + // SOUND WORK + + // MISC + + if (resetPressed) { + body.current.setTranslation({ x: 8, y: 2, z: -119 }); + body.current.setLinvel({ x: 0, y: 0, z: 0 }); + body.current.setAngvel({ x: 0, y: 0, z: 0 }); + setCurrentSpeed(0); + setCurrentSteeringSpeed(0); + setIsBoosting(false); + effectiveBoost.current = 0; + setIsOnGround(false); + jumpForce.current = 0; + driftDirection.current = 0; + kart.current.rotation.y = Math.PI / 2; + } + + // ITEMS + + if (shootPressed && item === "banana") { + const distanceBehind = 2; + const scaledBackwardDirection = + forwardDirection.multiplyScalar(distanceBehind); + + const kartPosition = new THREE.Vector3( + ...vec3(body.current.translation()) + ); + + const bananaPosition = kartPosition.sub(scaledBackwardDirection); + const newBanana = { + id: Math.random() + "-" + +new Date(), + position: bananaPosition, + player: true, + }; + setNetworkBananas([...networkBananas, newBanana]); + + actions.useItem(); + } + + if (shootPressed && item === "shell") { + const distanceBehind = -2; + const scaledBackwardDirection = + forwardDirection.multiplyScalar(distanceBehind); + + const kartPosition = new THREE.Vector3( + body.current.translation().x, + body.current.translation().y, + body.current.translation().z + ); + + const shellPosition = kartPosition.sub(scaledBackwardDirection); + const newShell = { + id: Math.random() + "-" + +new Date(), + position: shellPosition, + player: true, + rotation: kartRotation, + }; + setNetworkShells([...networkShells, newShell]); + actions.useItem(); + } + + if (shootPressed && item === "mushroom") { + setIsBoosting(true); + effectiveBoost.current = 300; + actions.useItem(); + } + + player.setState("position", body.current.translation()); + player.setState("rotation", kartRotation + mario.current.rotation.y); + player.setState("isBoosting", isBoosting); + player.setState("shouldLaunch", shouldLaunch); + player.setState("turboColor", turboColor); + player.setState("scale", scale); + player.setState("bananas", bananas); + }); + + return player.id === id ? ( + + + { + isOnFloor.current = true; + setIsOnGround(true); + }} + onCollisionExit={({ other }) => { + isOnFloor.current = false; + setIsOnGround(false); + }} + /> + + + + + + + + + + + + + + + + + + + + + + + + {/* */} + + + + + + + + + + {/* */} + + + + + + + + + + + + + + ) : null; +}; diff --git a/src/components/PlayerDummies.jsx b/src/components/PlayerDummies.jsx index 3774e16..ebf0f7c 100644 --- a/src/components/PlayerDummies.jsx +++ b/src/components/PlayerDummies.jsx @@ -102,7 +102,7 @@ export const PlayerDummies = ( { player, userPlayer }) => { setShouldLaunch(player.getState("shouldLaunch")); setTurboColor(player.getState("turboColor")); setScale(player.getState("scale")); - console.log(player.state.profile.name) + diff --git a/src/components/store.jsx b/src/components/store.jsx index bf1649a..99aeb8e 100644 --- a/src/components/store.jsx +++ b/src/components/store.jsx @@ -13,6 +13,8 @@ export const items = [ ] export const useStore = create((set, get) => ({ + gameStarted: false, + controls: "", particles1: [], particles2: [], bodyPosition: [0, 0, 0], @@ -139,7 +141,14 @@ export const useStore = create((set, get) => ({ }, setId : (id) => { set({id}); + }, + setGameStarted: (gameStarted) => { + set({ gameStarted }); + }, + setControls: (controls) => { + set({ controls }); } + }, })); diff --git a/src/components/useCurvedPath.jsx b/src/components/useCurvedPath.jsx new file mode 100644 index 0000000..42287ae --- /dev/null +++ b/src/components/useCurvedPath.jsx @@ -0,0 +1,26 @@ +import React, { useState, useEffect } from 'react'; +import * as THREE from 'three'; + +export const useCurvedPathPoints = (jsonPath) => { + const [points, setPoints] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const loadPointsFromJson = async () => { + try { + const response = await fetch(jsonPath); + const data = await response.json(); + setPoints(data.points.map(point => new THREE.Vector3(point.x, point.y, point.z))); + setLoading(false); + } catch (err) { + setError(err); + setLoading(false); + } + }; + + loadPointsFromJson(); + }, [jsonPath]); + + return { points, loading, error }; +}; \ No newline at end of file diff --git a/src/index.css b/src/index.css index 22284aa..b5e1537 100644 --- a/src/index.css +++ b/src/index.css @@ -30,7 +30,7 @@ body::-webkit-scrollbar { } } -.overlay { +/* .overlay { position: absolute; top: 0; left: 0; @@ -51,7 +51,7 @@ body::-webkit-scrollbar { animation: bounce 0.4s infinite cubic-bezier(0.71, 1.94, 0.5, 0.61); } } - +*/ .item { width: 152px; height: 152px; @@ -120,4 +120,146 @@ body::-webkit-scrollbar { backdrop-filter: blur(10px); pointer-events: none; -} \ No newline at end of file +} + +.home { + position: absolute; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + display: grid; + place-content: center; + gap: 400px; + z-index: 2; + font-family: "Hanken Grotesk"; + + .logo { + img { + width: 1200px; + } + } + + .glassy { + width: 1280px; + height: 720px; + background: rgba(95, 95, 95, 0.25); + /* box-shadow: 0 8px 32px 0 rgba( 31, 38, 135, 0.37 ); */ + backdrop-filter: blur(15px); + -webkit-backdrop-filter: blur(15px); + border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.18); + color: white; + position: relative; + display: flex; + justify-content: space-between; + align-items: center; + flex-direction: column; + padding: 40px; + .articles { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 80px; + gap: 40px; + .article { + background: rgba(216, 216, 216, 0.25); + width: 300px; + height: 300px; + border-radius: 6px; + display: flex; + justify-content: space-between; + align-items: center; + flex-direction: column; + padding: 20px; + transition: all 0.2s ease 0s; + cursor: pointer; + &:hover { + background: rgba(216, 216, 216, 0.5); + } + img { + width: 200px; + filter: drop-shadow(5px 5px 5px #0000008f); + } + } + .article.selected { + background: rgba(216, 216, 216, 0.7); + box-shadow: 0 0 20px 0 rgb(255, 255, 255); + } + } + .submit { + font-weight: 900; + color: rgba(255, 255, 255, 0.795); + + font-size: 27px; + transition: all 0.2s ease 0s; + cursor: pointer; + &:hover { + text-shadow: 0 0 40px rgba(255, 255, 255, 1); + color: white; + opacity: 1; + animation: none; + } + button { + all: unset; + display: flex; + justify-content: center; + align-items: center; + display: inline-block; + } + } + } + + .start { + opacity: 0; + display: flex; + justify-content: center; + align-items: center; + font-weight: 900; + color: rgba(255, 255, 255, 0.795); + + font-size: 60px; + text-shadow: 0 0 10px rgba(0, 0, 0, 1); + background: linear-gradient( + to right, + rgba(54, 54, 54, 0), + rgb(54, 54, 54), + rgba(54, 54, 54, 0) + ); + animation: blinking 2s infinite; + transition: all 0.2s ease 0s; + cursor: pointer; + &:hover { + text-shadow: 0 0 40px rgba(255, 255, 255, 1); + color: white; + opacity: 1; + animation: none; + } + button { + all: unset; + display: flex; + justify-content: center; + align-items: center; + display: inline-block; + } + } +} + +.disabled{ + pointer-events: none; + cursor: not-allowed; + opacity: 0.4; + +} +@keyframes blinking { + 0% { + opacity: 1; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} diff --git a/src/main.jsx b/src/main.jsx index e35d3a2..0b8c8b8 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -3,10 +3,13 @@ import ReactDOM from 'react-dom/client' import App from './App' import './index.css' import { HUD } from './HUD' +import { Landing } from './Landing' +import { useStore } from './components/store' ReactDOM.createRoot(document.getElementById('root')).render( + , )