@cimplify/sdk 0.108.0 → 0.110.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/advanced.d.mts +4 -3
- package/dist/advanced.d.ts +4 -3
- package/dist/advanced.js +24 -24
- package/dist/advanced.mjs +5 -5
- package/dist/animation-4EXBXRVX.js +27 -0
- package/dist/animation-6DICNWUP.mjs +6 -0
- package/dist/audio-DhvyjqdA.d.mts +249 -0
- package/dist/audio-m0w8cnxq.d.ts +249 -0
- package/dist/avatars.d.mts +110 -0
- package/dist/avatars.d.ts +110 -0
- package/dist/avatars.js +82 -0
- package/dist/avatars.mjs +5 -0
- package/dist/backend-gUCzs5Kg.d.mts +3866 -0
- package/dist/backend-gUCzs5Kg.d.ts +3866 -0
- package/dist/{catalogue-B4eLL8Mi.d.ts → catalogue-CPTMyBUz.d.mts} +109 -221
- package/dist/catalogue-DzrTXP3v.d.mts +541 -0
- package/dist/catalogue-DzrTXP3v.d.ts +541 -0
- package/dist/{catalogue-OT89_Ifs.d.mts → catalogue-OTuS5zp-.d.ts} +109 -221
- package/dist/chunk-22BD3RHN.mjs +1809 -0
- package/dist/chunk-25T4JHEA.mjs +21 -0
- package/dist/chunk-2AQ237Y4.js +508 -0
- package/dist/chunk-2IC4H6OV.mjs +48 -0
- package/dist/chunk-2LHLG4OB.mjs +71 -0
- package/dist/chunk-2O2CG465.js +1709 -0
- package/dist/chunk-2Q4DTHXK.js +316 -0
- package/dist/chunk-2QTQ6BUH.mjs +46 -0
- package/dist/chunk-2UN4SFLR.mjs +100 -0
- package/dist/chunk-2V75I7K3.js +454 -0
- package/dist/chunk-2V7IL4HC.js +10 -0
- package/dist/chunk-34XBXUMW.js +296 -0
- package/dist/chunk-3C4C654I.js +71 -0
- package/dist/chunk-3DAD2LDF.mjs +72 -0
- package/dist/chunk-3GXH2NFD.mjs +4 -0
- package/dist/chunk-3O47ZFW3.js +961 -0
- package/dist/chunk-3OY3VYNF.mjs +11 -0
- package/dist/chunk-3S6WPBZL.js +2936 -0
- package/dist/chunk-3TUOUP5T.js +399 -0
- package/dist/chunk-3VEH23I5.mjs +1380 -0
- package/dist/chunk-3ZYSAW2T.mjs +263 -0
- package/dist/chunk-4ANVF274.js +103 -0
- package/dist/chunk-4C7I3ELN.js +388 -0
- package/dist/chunk-4DYKAYFO.mjs +8 -0
- package/dist/chunk-4ZDR72SG.js +329 -0
- package/dist/chunk-52YS45RR.js +1066 -0
- package/dist/chunk-5325XSCH.js +107 -0
- package/dist/chunk-5AD5X6AV.js +13 -0
- package/dist/chunk-5BYDGGWO.mjs +197 -0
- package/dist/chunk-5C3C7VDM.mjs +55 -0
- package/dist/chunk-5HFMY3D7.js +660 -0
- package/dist/chunk-5LH2QN3T.js +1862 -0
- package/dist/chunk-5PJEXSOW.js +44 -0
- package/dist/chunk-5SXDH3Y7.js +90 -0
- package/dist/chunk-5YFBGGCK.mjs +502 -0
- package/dist/chunk-5YWN6H5Q.mjs +133 -0
- package/dist/chunk-66QP3SMN.js +402 -0
- package/dist/chunk-6DAEZKIG.mjs +385 -0
- package/dist/chunk-6DATW7TB.mjs +420 -0
- package/dist/{chunk-JRGK3NXR.mjs → chunk-6ETDAU62.mjs} +72 -212
- package/dist/chunk-6H254EVP.mjs +178 -0
- package/dist/chunk-6PFNJPBJ.mjs +820 -0
- package/dist/chunk-6PJWXIFX.mjs +357 -0
- package/dist/chunk-6SWKWCMS.js +80 -0
- package/dist/chunk-6VVXXX7S.js +808 -0
- package/dist/chunk-6WUBSMTX.js +1403 -0
- package/dist/chunk-73SGZLAQ.mjs +35 -0
- package/dist/chunk-76L2V6KD.mjs +4 -0
- package/dist/chunk-7AAIAVAA.js +1531 -0
- package/dist/chunk-7ARSJPV3.mjs +93 -0
- package/dist/chunk-7BHW5GTC.mjs +1234 -0
- package/dist/chunk-7DQSDKDU.js +6 -0
- package/dist/chunk-7IQQQENP.mjs +401 -0
- package/dist/chunk-7KFTYENS.js +11357 -0
- package/dist/chunk-7SM6XSPZ.js +3171 -0
- package/dist/chunk-7SXOHAIR.mjs +28 -0
- package/dist/chunk-A2MAX6S4.js +90 -0
- package/dist/chunk-A33OORT7.mjs +1530 -0
- package/dist/{chunk-U6ACF76H.mjs → chunk-A36JRXXH.mjs} +1075 -1845
- package/dist/chunk-A7BU3BK4.js +52 -0
- package/dist/chunk-A7MQSN2V.mjs +77 -0
- package/dist/chunk-A7V4L2IT.mjs +416 -0
- package/dist/chunk-AABEK6XU.js +226 -0
- package/dist/chunk-AGV33FWC.mjs +5005 -0
- package/dist/chunk-AHNR3BXI.js +108 -0
- package/dist/chunk-AQ5RLBU2.mjs +286 -0
- package/dist/chunk-AQOE6WCG.js +1270 -0
- package/dist/chunk-ATAWRACV.mjs +62 -0
- package/dist/chunk-ATCURNUV.js +14 -0
- package/dist/chunk-AWPV33OO.js +6 -0
- package/dist/chunk-AYJPHKYV.js +337 -0
- package/dist/chunk-AZ5BGWHB.js +162 -0
- package/dist/chunk-AZAXD44P.js +1373 -0
- package/dist/chunk-BBGKQIJJ.mjs +406 -0
- package/dist/chunk-BP4JLSUA.js +1453 -0
- package/dist/{chunk-SUCE7FWA.mjs → chunk-BTUSVHIE.mjs} +539 -978
- package/dist/chunk-BU6OK542.mjs +818 -0
- package/dist/chunk-CVSRWM6W.js +418 -0
- package/dist/chunk-CYBMFMJD.mjs +247 -0
- package/dist/chunk-DDJLDOUX.mjs +217 -0
- package/dist/{chunk-V32BCG7M.js → chunk-DFZWHNRG.js} +75 -215
- package/dist/chunk-DJ2C7AVG.js +644 -0
- package/dist/chunk-DS2VU4WW.mjs +102 -0
- package/dist/chunk-DSAG7T5P.js +7290 -0
- package/dist/chunk-E2QPPH7I.js +327 -0
- package/dist/chunk-E65WCTIG.mjs +1187 -0
- package/dist/{chunk-33VCYWVL.mjs → chunk-E6QQKDNE.mjs} +30 -42
- package/dist/chunk-ECDK6QBF.mjs +981 -0
- package/dist/chunk-EIB4OWVQ.mjs +620 -0
- package/dist/chunk-EQUZYCGO.js +250 -0
- package/dist/chunk-F3UJ6ZRM.mjs +313 -0
- package/dist/chunk-F63N2ZTQ.js +7023 -0
- package/dist/chunk-F6XRYEM3.mjs +26 -0
- package/dist/chunk-FE6VCE4K.js +5030 -0
- package/dist/chunk-FLWD6GRR.js +1372 -0
- package/dist/chunk-FQBFWJBS.mjs +110 -0
- package/dist/chunk-FXVJ2HFU.js +26 -0
- package/dist/chunk-FZMQMQBW.js +312 -0
- package/dist/chunk-G3EEC44R.js +53 -0
- package/dist/{chunk-KG3WT4PR.mjs → chunk-GCKWKLZF.mjs} +73 -104
- package/dist/chunk-GCX7TY4D.mjs +6826 -0
- package/dist/chunk-GDB6TCSD.js +450 -0
- package/dist/chunk-GDCV4IWO.mjs +21 -0
- package/dist/chunk-GDZT5LZ5.js +170 -0
- package/dist/chunk-GHPUYD4I.mjs +213 -0
- package/dist/chunk-GHS6MIL6.mjs +1432 -0
- package/dist/chunk-GPS2THCL.mjs +11 -0
- package/dist/{chunk-EV2EVOYS.js → chunk-GTJWQAGU.js} +31 -42
- package/dist/chunk-GVTI6UJQ.mjs +130 -0
- package/dist/chunk-GXKI64OT.mjs +1138 -0
- package/dist/chunk-GYDYF2WX.js +275 -0
- package/dist/chunk-GYLP6UG4.mjs +705 -0
- package/dist/chunk-H3OQKK6X.js +1158 -0
- package/dist/chunk-H5DFSCJ6.js +40 -0
- package/dist/chunk-HAGEIC2L.mjs +186 -0
- package/dist/chunk-HAJ4JRFO.js +293 -0
- package/dist/chunk-HDR72GB6.js +188 -0
- package/dist/chunk-HF5HPS4T.mjs +40 -0
- package/dist/chunk-HK6LOFDS.js +218 -0
- package/dist/chunk-HMWYTXCY.mjs +143 -0
- package/dist/chunk-HPCSRCMA.js +89 -0
- package/dist/chunk-HSEO6TPU.js +247 -0
- package/dist/chunk-I5FOHCLH.js +132 -0
- package/dist/chunk-IDLW4NWA.mjs +85 -0
- package/dist/chunk-IIDZ5WUX.js +61 -0
- package/dist/chunk-IR74FJHU.js +2332 -0
- package/dist/chunk-IRVFYAKP.mjs +100 -0
- package/dist/{chunk-XBL3TMPC.mjs → chunk-IZDWAL53.mjs} +1795 -3287
- package/dist/chunk-J2KZXIU3.js +51 -0
- package/dist/chunk-J2U6PJSO.js +91 -0
- package/dist/chunk-J5AJNY2N.js +283 -0
- package/dist/chunk-J6KQZ4FO.mjs +821 -0
- package/dist/{chunk-OWW5GUSB.js → chunk-JGBCIKJV.js} +7 -6
- package/dist/chunk-JKGTBMU7.mjs +25 -0
- package/dist/chunk-JR3TNEQC.js +422 -0
- package/dist/chunk-JURRXY2J.mjs +29 -0
- package/dist/chunk-K3HW5I2A.mjs +317 -0
- package/dist/chunk-K46SMZ66.mjs +103 -0
- package/dist/chunk-K4UDGE3Z.mjs +6 -0
- package/dist/chunk-KDQOR4QQ.mjs +350 -0
- package/dist/chunk-KDTVOLHI.mjs +288 -0
- package/dist/chunk-KGHJH5KJ.mjs +35 -0
- package/dist/chunk-KIZOA5LX.mjs +140 -0
- package/dist/chunk-KK6HYVBI.mjs +242 -0
- package/dist/chunk-KMKWGXMK.js +856 -0
- package/dist/chunk-KPA6K5IB.js +80 -0
- package/dist/chunk-KU7O4IXU.mjs +260 -0
- package/dist/chunk-KVFNRJOR.mjs +11142 -0
- package/dist/chunk-KZJRSXHK.js +2432 -0
- package/dist/chunk-LHWPRUJL.js +79 -0
- package/dist/chunk-LIV3KXJG.mjs +369 -0
- package/dist/chunk-LKV4LACG.js +21 -0
- package/dist/chunk-LUY45X3U.mjs +263 -0
- package/dist/chunk-LYEZZEEF.mjs +17 -0
- package/dist/chunk-M5EXQZYY.mjs +1519 -0
- package/dist/chunk-ME6HGG4I.mjs +1338 -0
- package/dist/chunk-MEXP6DA6.js +31 -0
- package/dist/chunk-MG52AW3H.js +902 -0
- package/dist/chunk-MIPO6F72.js +334 -0
- package/dist/{chunk-5QW7CQBA.js → chunk-MKIJQL5Q.js} +211 -321
- package/dist/chunk-MN3YETVN.mjs +17 -0
- package/dist/chunk-MOBSBXVE.mjs +2391 -0
- package/dist/chunk-MOMOZEUM.mjs +88 -0
- package/dist/chunk-MRFUNRAP.js +62 -0
- package/dist/chunk-MTIHEW2M.js +433 -0
- package/dist/chunk-N4RGGDEL.mjs +73 -0
- package/dist/chunk-NH654HAT.js +10 -0
- package/dist/chunk-NHJUGZUR.mjs +253 -0
- package/dist/chunk-NMQT4HG3.mjs +757 -0
- package/dist/chunk-NPSYB6DC.mjs +906 -0
- package/dist/chunk-NW2GPMSO.js +857 -0
- package/dist/chunk-NXKQOQ6L.js +76 -0
- package/dist/chunk-NXLAZIJZ.js +309 -0
- package/dist/chunk-NYWNA5CF.js +148 -0
- package/dist/chunk-NZTKLY2W.js +1442 -0
- package/dist/chunk-O2ICABUD.js +36 -0
- package/dist/chunk-OIVVQQ22.js +862 -0
- package/dist/chunk-OKC2B4O3.mjs +312 -0
- package/dist/chunk-OLWFPDBK.js +2220 -0
- package/dist/chunk-OMTVH334.js +3779 -0
- package/dist/chunk-OQRVEM56.mjs +362 -0
- package/dist/chunk-OXMIBOD4.js +337 -0
- package/dist/chunk-PBL6YL5L.mjs +288 -0
- package/dist/chunk-PDOELNNQ.js +97 -0
- package/dist/chunk-PDQJY2GZ.js +136 -0
- package/dist/chunk-PKOZXD2Q.js +1274 -0
- package/dist/chunk-PPF2BYFL.mjs +2191 -0
- package/dist/chunk-PQTQKNKD.js +539 -0
- package/dist/chunk-PRSR4FAV.mjs +81 -0
- package/dist/chunk-PTRNO5UD.js +95 -0
- package/dist/chunk-Q2Y3VMKH.js +2000 -0
- package/dist/chunk-QCZOE65N.js +96 -0
- package/dist/chunk-QDYFLATW.mjs +52 -0
- package/dist/chunk-QQABGCMM.js +22 -0
- package/dist/chunk-QS6TRHMR.js +345 -0
- package/dist/chunk-R56P64LB.mjs +208 -0
- package/dist/chunk-RCQ2MPBV.js +428 -0
- package/dist/chunk-RFVRPYR2.mjs +856 -0
- package/dist/chunk-RKBLPGPV.js +11521 -0
- package/dist/chunk-RM2V4IND.mjs +327 -0
- package/dist/chunk-RQXN5A34.mjs +613 -0
- package/dist/chunk-RUVGVNOF.mjs +2687 -0
- package/dist/chunk-SAFJIGYB.mjs +165 -0
- package/dist/chunk-SKQFLBDD.js +263 -0
- package/dist/chunk-SMK6JU2F.mjs +2092 -0
- package/dist/{chunk-UVRPC2P7.js → chunk-SNNEOS5Z.js} +1984 -3476
- package/dist/chunk-SPCRQ6NO.mjs +1246 -0
- package/dist/chunk-SWX4SALA.mjs +19 -0
- package/dist/{chunk-JVODCGFP.mjs → chunk-SYEO2WV4.mjs} +128 -238
- package/dist/chunk-T2QQMX2N.js +10 -0
- package/dist/chunk-T3AFF3L7.mjs +57 -0
- package/dist/chunk-T6Z2EXYL.js +712 -0
- package/dist/chunk-T7LOXGYX.js +118 -0
- package/dist/chunk-TJCAE7RC.mjs +1315 -0
- package/dist/chunk-TJI3K6RP.js +137 -0
- package/dist/chunk-TL2SVO4P.mjs +55 -0
- package/dist/chunk-TM63CYGN.mjs +399 -0
- package/dist/chunk-TU5RYTYU.mjs +13 -0
- package/dist/chunk-TVJZ4GPS.js +1553 -0
- package/dist/chunk-TWM6DLYF.js +371 -0
- package/dist/chunk-U63OC4TQ.js +30 -0
- package/dist/{chunk-L5GKVQVJ.js → chunk-U6BVSJZ6.js} +25 -57
- package/dist/chunk-U6UVWEAK.mjs +792 -0
- package/dist/chunk-UCEPNO6N.mjs +11048 -0
- package/dist/{chunk-ANT574FD.js → chunk-UCR5HRYM.js} +74 -105
- package/dist/chunk-UG5BTOTF.mjs +334 -0
- package/dist/chunk-UGH37BQW.mjs +157 -0
- package/dist/chunk-V7ZRH3PY.mjs +271 -0
- package/dist/chunk-VBGHBL3E.mjs +1394 -0
- package/dist/chunk-VRBDAS5I.js +920 -0
- package/dist/chunk-VVE3Y76O.js +230 -0
- package/dist/chunk-W65JIRI4.mjs +1182 -0
- package/dist/chunk-WHYKAT7G.js +62 -0
- package/dist/{chunk-YOIVZ6OA.mjs → chunk-WIZRUIZB.mjs} +25 -57
- package/dist/chunk-WKWTDZS7.js +385 -0
- package/dist/chunk-WLMINRC4.mjs +78 -0
- package/dist/chunk-WOF3AD3J.js +22 -0
- package/dist/chunk-WWKMOA76.js +1262 -0
- package/dist/chunk-X5A5FOWW.js +615 -0
- package/dist/chunk-X6CN6KQF.mjs +192 -0
- package/dist/chunk-XD2PMH46.mjs +517 -0
- package/dist/chunk-XJA2NGTI.mjs +88 -0
- package/dist/chunk-XJIHN3BY.mjs +8 -0
- package/dist/chunk-XK6UDWJS.js +203 -0
- package/dist/chunk-XPG3N5CF.mjs +415 -0
- package/dist/chunk-XVZ2NKSU.mjs +74 -0
- package/dist/chunk-XYP45OLE.js +117 -0
- package/dist/chunk-XZSDGZX6.mjs +301 -0
- package/dist/chunk-Y2EMGN4T.mjs +120 -0
- package/dist/chunk-Y3XWP5XW.mjs +298 -0
- package/dist/chunk-Y4K22JL6.js +228 -0
- package/dist/chunk-Y65LXQGA.mjs +3164 -0
- package/dist/chunk-Y66WVMO5.mjs +87 -0
- package/dist/chunk-Y7JWLB25.mjs +7280 -0
- package/dist/chunk-YCDXAJKU.js +175 -0
- package/dist/chunk-YRDQCCIS.js +152 -0
- package/dist/chunk-YV52DGSA.js +111 -0
- package/dist/chunk-YXGZQPUD.js +94 -0
- package/dist/chunk-Z3A3AFVU.mjs +102 -0
- package/dist/chunk-ZCY6YKKP.mjs +475 -0
- package/dist/chunk-ZEQHXVU5.js +215 -0
- package/dist/chunk-ZF7JCXCI.js +284 -0
- package/dist/chunk-ZJBRUH6V.js +29 -0
- package/dist/chunk-ZMIL4ZOA.js +365 -0
- package/dist/chunk-ZR5ULMN2.mjs +337 -0
- package/dist/chunk-ZXREOYOW.js +87 -0
- package/dist/{client-BSP9U1O1.d.mts → client-CX_WR0-J.d.mts} +2 -2
- package/dist/client-Dytx_ZTC.d.ts +230 -0
- package/dist/{client-B878xeAP.d.ts → client-dqOhP9Nc.d.ts} +2 -2
- package/dist/client-hTKbCuhG.d.mts +230 -0
- package/dist/clock-B-UAjkKa.d.mts +5 -0
- package/dist/clock-B-UAjkKa.d.ts +5 -0
- package/dist/config-BlXQluJR.d.mts +36 -0
- package/dist/config-BlXQluJR.d.ts +36 -0
- package/dist/courier-Cnn-edJ4.d.ts +95 -0
- package/dist/courier-FmGfkvIN.d.mts +95 -0
- package/dist/crowd-DdHFbqKK.d.ts +186 -0
- package/dist/crowd-hOVSAmA3.d.mts +186 -0
- package/dist/danfo-BEBapFlX.d.mts +146 -0
- package/dist/danfo-UQ_PTIIx.d.ts +146 -0
- package/dist/{elements-Bty6Qs_N.d.mts → elements-DdsRig-2.d.mts} +1548 -257
- package/dist/{elements-Bty6Qs_N.d.ts → elements-DdsRig-2.d.ts} +1548 -257
- package/dist/engines/godot.d.mts +56 -0
- package/dist/engines/godot.d.ts +56 -0
- package/dist/engines/godot.js +28 -0
- package/dist/engines/godot.mjs +3 -0
- package/dist/engines/wasm.d.mts +11 -0
- package/dist/engines/wasm.d.ts +11 -0
- package/dist/engines/wasm.js +178 -0
- package/dist/engines/wasm.mjs +176 -0
- package/dist/fallback-CrG_lTFk.d.mts +270 -0
- package/dist/fallback-CrG_lTFk.d.ts +270 -0
- package/dist/fallback-KDB4Y2CE.mjs +6 -0
- package/dist/fallback-Y26TQENE.js +19 -0
- package/dist/features-CZB4rmcD.d.mts +118 -0
- package/dist/features-CZB4rmcD.d.ts +118 -0
- package/dist/fit-BWiE7rgA.d.mts +44 -0
- package/dist/fit-DK0oT7zO.d.ts +44 -0
- package/dist/five-a-side-Bv1AOUy3.d.mts +115 -0
- package/dist/five-a-side-EC51SJY1.d.ts +115 -0
- package/dist/fluid-ARr0qUIL.d.ts +939 -0
- package/dist/fluid-DLlEj2cs.d.mts +939 -0
- package/dist/game/conformance.d.mts +84 -0
- package/dist/game/conformance.d.ts +84 -0
- package/dist/game/conformance.js +1025 -0
- package/dist/game/conformance.mjs +994 -0
- package/dist/game/heap.d.mts +40 -0
- package/dist/game/heap.d.ts +40 -0
- package/dist/game/heap.js +48 -0
- package/dist/game/heap.mjs +7 -0
- package/dist/game/kit/canvas.d.mts +240 -0
- package/dist/game/kit/canvas.d.ts +240 -0
- package/dist/game/kit/canvas.js +3566 -0
- package/dist/game/kit/canvas.mjs +1039 -0
- package/dist/game/kit/courier.d.mts +17 -0
- package/dist/game/kit/courier.d.ts +17 -0
- package/dist/game/kit/courier.js +66 -0
- package/dist/game/kit/courier.mjs +49 -0
- package/dist/game/kit/danfo.d.mts +11 -0
- package/dist/game/kit/danfo.d.ts +11 -0
- package/dist/game/kit/danfo.js +109 -0
- package/dist/game/kit/danfo.mjs +44 -0
- package/dist/game/kit/engine.d.mts +29 -0
- package/dist/game/kit/engine.d.ts +29 -0
- package/dist/game/kit/engine.js +183 -0
- package/dist/game/kit/engine.mjs +30 -0
- package/dist/game/kit/five-a-side.d.mts +11 -0
- package/dist/game/kit/five-a-side.d.ts +11 -0
- package/dist/game/kit/five-a-side.js +86 -0
- package/dist/game/kit/five-a-side.mjs +41 -0
- package/dist/game/kit/frontier.d.mts +344 -0
- package/dist/game/kit/frontier.d.ts +344 -0
- package/dist/game/kit/frontier.js +435 -0
- package/dist/game/kit/frontier.mjs +14 -0
- package/dist/game/kit/genesis.d.mts +752 -0
- package/dist/game/kit/genesis.d.ts +752 -0
- package/dist/game/kit/genesis.js +380 -0
- package/dist/game/kit/genesis.mjs +15 -0
- package/dist/game/kit/ludo.d.mts +15 -0
- package/dist/game/kit/ludo.d.ts +15 -0
- package/dist/game/kit/ludo.js +87 -0
- package/dist/game/kit/ludo.mjs +42 -0
- package/dist/game/kit/runner.d.mts +12 -0
- package/dist/game/kit/runner.d.ts +12 -0
- package/dist/game/kit/runner.js +83 -0
- package/dist/game/kit/runner.mjs +46 -0
- package/dist/game/kit/shootout.d.mts +13 -0
- package/dist/game/kit/shootout.d.ts +13 -0
- package/dist/game/kit/shootout.js +122 -0
- package/dist/game/kit/shootout.mjs +57 -0
- package/dist/game/kit/slots.d.mts +392 -0
- package/dist/game/kit/slots.d.ts +392 -0
- package/dist/game/kit/slots.js +215 -0
- package/dist/game/kit/slots.mjs +6 -0
- package/dist/game/kit/tycoon.d.mts +16 -0
- package/dist/game/kit/tycoon.d.ts +16 -0
- package/dist/game/kit/tycoon.js +145 -0
- package/dist/game/kit/tycoon.mjs +44 -0
- package/dist/game/kit/word.d.mts +11 -0
- package/dist/game/kit/word.d.ts +11 -0
- package/dist/game/kit/word.js +78 -0
- package/dist/game/kit/word.mjs +41 -0
- package/dist/game/kit/worlds.d.mts +18 -0
- package/dist/game/kit/worlds.d.ts +18 -0
- package/dist/game/kit/worlds.js +74 -0
- package/dist/game/kit/worlds.mjs +49 -0
- package/dist/game/kit.d.mts +53 -0
- package/dist/game/kit.d.ts +53 -0
- package/dist/game/kit.js +2610 -0
- package/dist/game/kit.mjs +101 -0
- package/dist/game/prepared.d.mts +14 -0
- package/dist/game/prepared.d.ts +14 -0
- package/dist/game/prepared.js +81 -0
- package/dist/game/prepared.mjs +32 -0
- package/dist/game-Bx8onkhX.d.mts +1451 -0
- package/dist/game-fgQy2YIm.d.ts +1451 -0
- package/dist/game-theme-CBTw1b_d.d.mts +35 -0
- package/dist/game-theme-Dg-ict5A.d.ts +35 -0
- package/dist/game.d.mts +3546 -0
- package/dist/game.d.ts +3546 -0
- package/dist/game.js +4455 -0
- package/dist/game.mjs +50 -0
- package/dist/graphics-C6YjWYvP.d.ts +5 -0
- package/dist/graphics-Dk2yQnYN.d.mts +5 -0
- package/dist/guest-DrsA00XD.d.mts +732 -0
- package/dist/guest-wIdfoT05.d.ts +732 -0
- package/dist/hit-stop-BKkVwTq7.d.mts +43 -0
- package/dist/hit-stop-D-8pPYnM.d.ts +43 -0
- package/dist/hot-Crn9XpHJ.d.ts +29 -0
- package/dist/hot-DH3nOhQD.d.mts +29 -0
- package/dist/{index-CQStGb3B.d.mts → index-6gkHMGAq.d.mts} +2 -2
- package/dist/index-B8ybCKJI.d.ts +41 -0
- package/dist/{index-DJwXmoaP.d.ts → index-B98Xac8e.d.ts} +2 -2
- package/dist/{index-B7oA_1XI.d.ts → index-B_ByTtIT.d.ts} +2 -2
- package/dist/index-DHjNHb1c.d.mts +41 -0
- package/dist/{index-DhUSTAhT.d.mts → index-DbAN_VQE.d.mts} +2 -2
- package/dist/index.d.mts +134 -24
- package/dist/index.d.ts +134 -24
- package/dist/index.js +407 -248
- package/dist/index.mjs +184 -58
- package/dist/interactives-authoring.d.mts +231 -0
- package/dist/interactives-authoring.d.ts +231 -0
- package/dist/interactives-authoring.js +1743 -0
- package/dist/interactives-authoring.mjs +1704 -0
- package/dist/interactives-canvas.global.js +148 -0
- package/dist/interactives-guest.d.mts +20 -0
- package/dist/interactives-guest.d.ts +20 -0
- package/dist/interactives-guest.js +63 -0
- package/dist/interactives-guest.json +1 -0
- package/dist/interactives-guest.mjs +61 -0
- package/dist/interactives-jsc.global.js +9357 -0
- package/dist/interactives-meters.d.mts +93 -0
- package/dist/interactives-meters.d.ts +93 -0
- package/dist/interactives-meters.js +252 -0
- package/dist/interactives-meters.mjs +68 -0
- package/dist/interactives-production.d.mts +430 -0
- package/dist/interactives-production.d.ts +430 -0
- package/dist/interactives-production.js +1231 -0
- package/dist/interactives-production.mjs +1170 -0
- package/dist/interactives-record.d.mts +112 -0
- package/dist/interactives-record.d.ts +112 -0
- package/dist/interactives-record.js +302 -0
- package/dist/interactives-record.mjs +295 -0
- package/dist/interactives-runtime.d.mts +61 -0
- package/dist/interactives-runtime.d.ts +61 -0
- package/dist/interactives-runtime.js +442 -0
- package/dist/interactives-runtime.mjs +25 -0
- package/dist/interactives-studio-kernel.global.js +1 -0
- package/dist/interactives-studio.d.mts +806 -0
- package/dist/interactives-studio.d.ts +806 -0
- package/dist/interactives-studio.js +5741 -0
- package/dist/interactives-studio.mjs +5651 -0
- package/dist/interactives-tick.d.mts +90 -0
- package/dist/interactives-tick.d.ts +90 -0
- package/dist/interactives-tick.js +203 -0
- package/dist/interactives-tick.mjs +6 -0
- package/dist/interactives-web.d.mts +762 -0
- package/dist/interactives-web.d.ts +762 -0
- package/dist/interactives-web.js +5000 -0
- package/dist/interactives-web.mjs +4628 -0
- package/dist/interactives.d.mts +2430 -0
- package/dist/interactives.d.ts +2430 -0
- package/dist/interactives.js +5723 -0
- package/dist/interactives.mjs +4333 -0
- package/dist/juice-CoHxlpKA.d.ts +42 -0
- package/dist/juice-DQztFS43.d.mts +42 -0
- package/dist/launch-T2f4_Di4.d.mts +151 -0
- package/dist/launch-d6oreMzR.d.ts +151 -0
- package/dist/library-DXYaMFhi.d.mts +69 -0
- package/dist/library-DXYaMFhi.d.ts +69 -0
- package/dist/link-BUTqGmyi.d.mts +38 -0
- package/dist/link-BUTqGmyi.d.ts +38 -0
- package/dist/lint.js +104 -204
- package/dist/lint.mjs +103 -203
- package/dist/local-D8_I6UeL.d.mts +6967 -0
- package/dist/local-VZkqsCzR.d.ts +6967 -0
- package/dist/lockstep-BLf6dglI.d.mts +321 -0
- package/dist/lockstep-D50Ia0JW.d.ts +321 -0
- package/dist/ludo-B8ClkDqr.d.ts +205 -0
- package/dist/ludo-BOuohQ-M.d.mts +205 -0
- package/dist/mock/cli.mjs +200 -56
- package/dist/mock/library.js +200 -56
- package/dist/mock/library.mjs +200 -56
- package/dist/mock/msw.js +200 -56
- package/dist/mock/msw.mjs +200 -56
- package/dist/native-BodxSh03.d.mts +16 -0
- package/dist/native-DUHMT8gA.d.ts +16 -0
- package/dist/network-ZXLD7l1b.d.mts +19 -0
- package/dist/network-ZXLD7l1b.d.ts +19 -0
- package/dist/online-XeymeM9s.d.ts +381 -0
- package/dist/online-d7W_Al9a.d.mts +381 -0
- package/dist/params-DxFb5G_U.d.mts +155 -0
- package/dist/params-DxFb5G_U.d.ts +155 -0
- package/dist/play-BRRlfLhX.d.ts +940 -0
- package/dist/play-ClrMd_e8.d.mts +940 -0
- package/dist/policy-CCw8tXLm.d.mts +3078 -0
- package/dist/policy-CMqOSQIu.d.ts +3078 -0
- package/dist/ports-B_0v_P3A.d.mts +13 -0
- package/dist/ports-CGU_3e_0.d.ts +13 -0
- package/dist/prefetch-BHnicOQj.d.ts +117 -0
- package/dist/prefetch-CBXgYacv.d.mts +117 -0
- package/dist/{price-CSztR02F.d.mts → price-BOzexBww.d.mts} +1 -1
- package/dist/{price-C_vasx9A.d.ts → price-C1h9sPxE.d.ts} +1 -1
- package/dist/protocol-C8qbpUbT.d.mts +242 -0
- package/dist/protocol-C8qbpUbT.d.ts +242 -0
- package/dist/rapier-AZHT4YI7.js +7886 -0
- package/dist/rapier-ODEPCQA6.mjs +7792 -0
- package/dist/react.d.mts +157 -15
- package/dist/react.d.ts +157 -15
- package/dist/react.js +5564 -5904
- package/dist/react.mjs +5451 -5808
- package/dist/runner-CQcLL7By.d.ts +189 -0
- package/dist/runner-D46Yj-wE.d.mts +189 -0
- package/dist/runtime-BRWfkf_q.d.mts +51 -0
- package/dist/runtime-DyuBMkKM.d.ts +51 -0
- package/dist/scheduling-D2ajXpMC.d.ts +224 -0
- package/dist/scheduling-DSRbbaZb.d.mts +224 -0
- package/dist/schema-BrWxzKp6.d.mts +63 -0
- package/dist/schema-BrWxzKp6.d.ts +63 -0
- package/dist/server/evict.js +34 -37
- package/dist/server/evict.mjs +34 -37
- package/dist/server/tanstack.d.mts +49 -3
- package/dist/server/tanstack.d.ts +49 -3
- package/dist/server/tanstack.js +169 -117
- package/dist/server/tanstack.mjs +166 -118
- package/dist/{server-Dckg4Vdr.d.ts → server-D29IIuDV.d.ts} +136 -130
- package/dist/{server-B6dW7-Lj.d.mts → server-DQMWPnc8.d.mts} +136 -130
- package/dist/server.d.mts +45 -5
- package/dist/server.d.ts +45 -5
- package/dist/server.js +171 -227
- package/dist/server.mjs +165 -225
- package/dist/session-grant-CJ27DwrT.d.mts +19 -0
- package/dist/session-grant-CJ27DwrT.d.ts +19 -0
- package/dist/shootout-BJZeX6FG.d.ts +140 -0
- package/dist/shootout-tcZd1Rxt.d.mts +140 -0
- package/dist/state-replica-stMtdkVD.d.mts +42 -0
- package/dist/state-replica-stMtdkVD.d.ts +42 -0
- package/dist/studio-CowqWqez.d.mts +14 -0
- package/dist/studio-CowqWqez.d.ts +14 -0
- package/dist/styles.css +1 -1
- package/dist/template-AhCdB1kW.d.mts +190 -0
- package/dist/template-BkEGVTQj.d.ts +190 -0
- package/dist/terrain-BMxEc6Oc.d.ts +429 -0
- package/dist/terrain-C-XC1Oui.d.mts +429 -0
- package/dist/testing/msw.d.mts +28 -4
- package/dist/testing/msw.d.ts +28 -4
- package/dist/testing/msw.js +15 -21
- package/dist/testing/msw.mjs +15 -21
- package/dist/testing/suite.d.mts +6 -5
- package/dist/testing/suite.d.ts +6 -5
- package/dist/testing/suite.js +89 -124
- package/dist/testing/suite.mjs +81 -116
- package/dist/testing.d.mts +27 -1227
- package/dist/testing.d.ts +27 -1227
- package/dist/testing.js +127 -131
- package/dist/testing.mjs +19 -23
- package/dist/tick-transport-C8QEh8Uw.d.mts +50 -0
- package/dist/tick-transport-UjHY3xK1.d.ts +50 -0
- package/dist/timeline-protocol-hp6e8zFB.d.mts +47 -0
- package/dist/timeline-protocol-hp6e8zFB.d.ts +47 -0
- package/dist/tokens-DhanQRQS.d.mts +21 -0
- package/dist/tokens-K8yxwd6G.d.ts +21 -0
- package/dist/tree-C-Io2Hbx.d.mts +35 -0
- package/dist/tree-CP_qSW4H.d.ts +35 -0
- package/dist/tycoon-B5KHk2Xx.d.mts +255 -0
- package/dist/tycoon-hmHo-3HX.d.ts +255 -0
- package/dist/types-BQkxPwZP.d.mts +219 -0
- package/dist/types-D_f6UUxM.d.ts +219 -0
- package/dist/ui-DwHicuFv.d.mts +563 -0
- package/dist/ui-hi7S2YcH.d.ts +563 -0
- package/dist/{sign-in-DQlIdqsi.d.mts → url-52ndUruG.d.mts} +15 -1
- package/dist/{sign-in-DQlIdqsi.d.ts → url-52ndUruG.d.ts} +15 -1
- package/dist/utils.d.mts +3 -3
- package/dist/utils.d.ts +3 -3
- package/dist/utils.js +37 -37
- package/dist/utils.mjs +4 -4
- package/dist/vars-Dc_PrhBK.d.mts +511 -0
- package/dist/vars-Dc_PrhBK.d.ts +511 -0
- package/dist/vm-IUARFFAI.mjs +63 -0
- package/dist/vm-N7L6MGGH.js +65 -0
- package/dist/weave-delivery-CW-Kstut.d.mts +360 -0
- package/dist/weave-delivery-CW-Kstut.d.ts +360 -0
- package/dist/web-Dss74a7v.d.ts +883 -0
- package/dist/web-f9ZQPoyw.d.mts +883 -0
- package/dist/web-transport-C7MkBL0a.d.ts +19 -0
- package/dist/web-transport-aYEqXMd9.d.mts +19 -0
- package/dist/weight-CPGjsgjV.d.ts +92 -0
- package/dist/weight-tF1ODR1p.d.mts +92 -0
- package/dist/word-BcX9Jcmv.d.mts +70 -0
- package/dist/word-C7sVPLHm.d.ts +70 -0
- package/dist/world-PvILHDR1.d.ts +2285 -0
- package/dist/world-qekkXjJv.d.mts +2285 -0
- package/dist/worlds-Br2Pb0Cs.d.ts +109 -0
- package/dist/worlds-D5ydYr7d.d.mts +109 -0
- package/engines/c/cimplify.h +108 -0
- package/engines/c/cimplify.lib.js +11 -0
- package/engines/godot/addons/cimplify/cimplify.gd +97 -0
- package/engines/rust/interactives-ctx/Cargo.toml +9 -0
- package/engines/rust/interactives-ctx/src/lib.rs +189 -0
- package/package.json +189 -3
- package/vendor/rapier3d-compat/LICENSE +201 -0
- package/vendor/rapier3d-compat/PATCHES.md +61 -0
- package/dist/chunk-2P4KXFB6.js +0 -274
- package/dist/chunk-3G6RQLXK.mjs +0 -21
- package/dist/chunk-3V4DVXV3.mjs +0 -254
- package/dist/chunk-EDK3LNM6.js +0 -2436
- package/dist/chunk-F7J3HK27.js +0 -4549
- package/dist/chunk-U4MW6PYU.mjs +0 -23
- package/dist/chunk-XREIZ56K.js +0 -26
|
@@ -0,0 +1,2936 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk7AAIAVAA_js = require('./chunk-7AAIAVAA.js');
|
|
4
|
+
var chunkKZJRSXHK_js = require('./chunk-KZJRSXHK.js');
|
|
5
|
+
var chunkIR74FJHU_js = require('./chunk-IR74FJHU.js');
|
|
6
|
+
var chunk6SWKWCMS_js = require('./chunk-6SWKWCMS.js');
|
|
7
|
+
var chunk2V7IL4HC_js = require('./chunk-2V7IL4HC.js');
|
|
8
|
+
|
|
9
|
+
// src/game/kernel/spawns.ts
|
|
10
|
+
var WIDTHS = { vec2: 2, vec3: 3, vec4: 4 }, AXES = ["x", "y", "z", "w"], NO_ROW = 4294967295, spawnOverflow = chunk7AAIAVAA_js.events("kernel.spawnOverflow", { dropped: "u32", capacity: "u32", table: "u32" });
|
|
11
|
+
function storageOf(values) {
|
|
12
|
+
return values instanceof Float32Array ? chunkKZJRSXHK_js.STORAGE_F32 : values instanceof Int32Array ? chunkKZJRSXHK_js.STORAGE_I32 : values instanceof Uint32Array ? chunkKZJRSXHK_js.STORAGE_U32 : chunkKZJRSXHK_js.STORAGE_U8;
|
|
13
|
+
}
|
|
14
|
+
function tableColumns(table) {
|
|
15
|
+
let out = [];
|
|
16
|
+
for (let field of Object.keys(table.schema)) {
|
|
17
|
+
let width = WIDTHS[table.schema[field]] ?? 1;
|
|
18
|
+
for (let k = 0; k < width; k++) out.push(table.values(field, k));
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
var TableSpawns = class {
|
|
23
|
+
constructor(table, meta) {
|
|
24
|
+
this.table = table;
|
|
25
|
+
this.bySlot = /* @__PURE__ */ new Map();
|
|
26
|
+
this.columns = tableColumns(table), meta !== null && meta.slots.forEach((slot, k) => {
|
|
27
|
+
if (slot.spawn !== true) return;
|
|
28
|
+
if (!(slot.field in table.schema)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", `kernel ${meta.name} spawns ${slot.field}, which the spawn table does not have`);
|
|
29
|
+
let values = table.values(slot.field, slot.component);
|
|
30
|
+
this.bySlot.set(k, { values, storage: storageOf(values) });
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
get capacity() {
|
|
34
|
+
return this.table.capacity;
|
|
35
|
+
}
|
|
36
|
+
get count() {
|
|
37
|
+
return this.table.count;
|
|
38
|
+
}
|
|
39
|
+
set count(value) {
|
|
40
|
+
this.table.count = value;
|
|
41
|
+
}
|
|
42
|
+
column(slot) {
|
|
43
|
+
let column = this.bySlot.get(slot);
|
|
44
|
+
if (column === void 0) throw new chunk2V7IL4HC_js.GameError("invalid_argument", "the spawn table has no column for this kernel field");
|
|
45
|
+
return column;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
function reportSpawns(stats, into, out) {
|
|
49
|
+
return out.spawned = stats.spawned, out.dropped = stats.dropped, out.killed = stats.killed, stats.dropped > 0 && (chunk7AAIAVAA_js.setEmitRow((4294967295)), spawnOverflow.emit({ dropped: stats.dropped, capacity: into.capacity, table: into.id >>> 0 })), out;
|
|
50
|
+
}
|
|
51
|
+
function flatten(prefix, value, out) {
|
|
52
|
+
if (typeof value == "number") out.push([prefix, 0, value]);
|
|
53
|
+
else if (typeof value == "boolean") out.push([prefix, 0, value ? 1 : 0]);
|
|
54
|
+
else if (value !== null && typeof value == "object") {
|
|
55
|
+
let record = value, keys = Object.keys(record);
|
|
56
|
+
if (keys.length >= 2 && keys.length <= 4 && keys.every((k, i) => k === AXES[i]) && keys.every((k) => typeof record[k] == "number")) {
|
|
57
|
+
keys.forEach((k, i) => out.push([prefix, i, record[k]]));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (Array.isArray(value)) {
|
|
61
|
+
value.forEach((inner, i) => flatten(`${prefix}.${i}`, inner, out));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
for (let key of keys) flatten(prefix.length === 0 ? key : `${prefix}.${key}`, record[key], out);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
var PlainSpawns = class {
|
|
68
|
+
constructor() {
|
|
69
|
+
this.pending = [];
|
|
70
|
+
this.kills = /* @__PURE__ */ new Set();
|
|
71
|
+
this.sequence = 0;
|
|
72
|
+
}
|
|
73
|
+
spawn(row, values) {
|
|
74
|
+
let fields = [];
|
|
75
|
+
flatten("", values, fields), this.pending.push({ row, order: this.sequence++, fields });
|
|
76
|
+
}
|
|
77
|
+
kill(row) {
|
|
78
|
+
this.kills.add(row);
|
|
79
|
+
}
|
|
80
|
+
get used() {
|
|
81
|
+
return this.pending.length > 0 || this.kills.size > 0;
|
|
82
|
+
}
|
|
83
|
+
finish(own, into, out) {
|
|
84
|
+
if (out.spawned = 0, out.dropped = 0, out.killed = 0, this.kills.size > 0) {
|
|
85
|
+
let columns2 = tableColumns(own), total = own.count, kept = 0;
|
|
86
|
+
for (let row = 0; row < total; row++)
|
|
87
|
+
if (!this.kills.has(row)) {
|
|
88
|
+
if (kept !== row) for (let column of columns2) column[kept] = column[row];
|
|
89
|
+
kept++;
|
|
90
|
+
}
|
|
91
|
+
out.killed = total - kept, own.count = kept;
|
|
92
|
+
}
|
|
93
|
+
let target = into ?? own, pending = this.pending.sort((a, b) => a.row - b.row || a.order - b.order), columns = tableColumns(target);
|
|
94
|
+
for (let p of pending) {
|
|
95
|
+
let at = target.count;
|
|
96
|
+
if (at >= target.capacity) {
|
|
97
|
+
out.dropped++;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
for (let column of columns) column[at] = 0;
|
|
101
|
+
for (let [field, component, value] of p.fields) {
|
|
102
|
+
if (!(field in target.schema)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", `spawn() sets ${field}, which the spawn table does not have`);
|
|
103
|
+
let column = target.values(field, component);
|
|
104
|
+
column[at] = column instanceof Float32Array ? value : Math.trunc(value);
|
|
105
|
+
}
|
|
106
|
+
target.count = at + 1, out.spawned++;
|
|
107
|
+
}
|
|
108
|
+
return this.pending = [], this.kills.clear(), this.sequence = 0, out;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// src/game/kernel/wasm-fmath.ts
|
|
113
|
+
var WASM_FMATH = ["sin", "cos", "tan", "asin", "acos", "atan", "exp", "log", "log2", "pow", "atan2"], WASM_FMATH_BINARY = /* @__PURE__ */ new Set(["pow", "atan2"]), I32 = 127, I64 = 126, F32 = 125, F64 = 124, VOID = 64, BLOCK = 2, IF = 4, ELSE = 5, END = 11, BR = 12, BR_TABLE = 14, RETURN = 15, SELECT = 27, LOCAL_GET = 32, LOCAL_SET = 33, LOCAL_TEE = 34, I32_CONST = 65, I64_CONST = 66, F32_CONST = 67, F64_CONST = 68, I32_EQZ = 69, I32_EQ = 70, I32_NE = 71, I32_LT_U = 73, I32_GT_U = 75, I32_GE_U = 79, I64_LT_S = 83, F32_NE = 92, F64_EQ = 97, F64_NE = 98;
|
|
114
|
+
var F64_GT = 100, F64_LE = 101, I32_ADD = 106, I32_SUB = 107, I32_AND = 113, I32_OR = 114, I32_SHL = 116, I32_SHR_S = 117, I32_SHR_U = 118, I64_ADD = 124, I64_SUB = 125, I64_MUL = 126, I64_AND = 131, I64_OR = 132, I64_SHL = 134, I64_SHR_U = 136, F64_ABS = 153, F64_NEG = 154, F64_SQRT = 159, F64_ADD = 160, F64_SUB = 161, F64_MUL = 162, F64_DIV = 163, F64_MIN = 164, F64_MAX = 165, I32_WRAP_I64 = 167, I32_TRUNC_F64_S = 170, I64_EXTEND_I32_U = 173, F32_DEMOTE_F64 = 182, F64_CONVERT_I32_S = 183, F64_CONVERT_I64_S = 185, F64_PROMOTE_F32 = 187, I32_REINTERPRET_F32 = 188, I64_REINTERPRET_F64 = 189, F32_REINTERPRET_I32 = 190, F64_REINTERPRET_I64 = 191, CANONICAL_NAN = 2143289344, SIGN = 2147483648, ABS = 2147483647, EXPONENT_MASK = 4286578688, INFINITY_SHIFTED = 4278190080, ZERO_INF_NAN = 4278190079, LOW_WORD = 4294967295, EXP_TABLE_SIZE = 32, LOG_TABLE_SIZE = 16, ATAN_TERMS = chunkIR74FJHU_js.FMATH_CONSTANTS.ATAN_COEFFS.length;
|
|
115
|
+
function uleb(out, value) {
|
|
116
|
+
let v = value >>> 0;
|
|
117
|
+
do {
|
|
118
|
+
let byte = v & 127;
|
|
119
|
+
v >>>= 7, v !== 0 && (byte |= 128), out.push(byte);
|
|
120
|
+
} while (v !== 0);
|
|
121
|
+
}
|
|
122
|
+
function slebBig(out, value) {
|
|
123
|
+
let v = value;
|
|
124
|
+
for (; ; ) {
|
|
125
|
+
let byte = Number(v & 0x7fn);
|
|
126
|
+
v >>= 7n;
|
|
127
|
+
let done = v === 0n && (byte & 64) === 0 || v === -1n && (byte & 64) !== 0;
|
|
128
|
+
if (out.push(done ? byte : byte | 128), done) return;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
var Fn = class {
|
|
132
|
+
constructor(params) {
|
|
133
|
+
this.params = params;
|
|
134
|
+
this.code = [];
|
|
135
|
+
this.kinds = [];
|
|
136
|
+
}
|
|
137
|
+
local(kind) {
|
|
138
|
+
return this.kinds.push(kind), this.params + this.kinds.length - 1;
|
|
139
|
+
}
|
|
140
|
+
op(...bytes) {
|
|
141
|
+
for (let b of bytes) this.code.push(b);
|
|
142
|
+
return this;
|
|
143
|
+
}
|
|
144
|
+
get(l) {
|
|
145
|
+
return this.code.push((32)), uleb(this.code, l), this;
|
|
146
|
+
}
|
|
147
|
+
set(l) {
|
|
148
|
+
return this.code.push((33)), uleb(this.code, l), this;
|
|
149
|
+
}
|
|
150
|
+
tee(l) {
|
|
151
|
+
return this.code.push((34)), uleb(this.code, l), this;
|
|
152
|
+
}
|
|
153
|
+
i32(v) {
|
|
154
|
+
return this.code.push((65)), slebBig(this.code, BigInt(v | 0)), this;
|
|
155
|
+
}
|
|
156
|
+
i64(v) {
|
|
157
|
+
return this.code.push((66)), slebBig(this.code, BigInt.asIntN(64, v)), this;
|
|
158
|
+
}
|
|
159
|
+
f32bits(bits) {
|
|
160
|
+
this.code.push((67));
|
|
161
|
+
let word = bits >>> 0;
|
|
162
|
+
return this.code.push(word & 255, word >>> 8 & 255, word >>> 16 & 255, word >>> 24), this;
|
|
163
|
+
}
|
|
164
|
+
f64(v) {
|
|
165
|
+
this.code.push((68));
|
|
166
|
+
for (let b of new Uint8Array(new Float64Array([v]).buffer)) this.code.push(b);
|
|
167
|
+
return this;
|
|
168
|
+
}
|
|
169
|
+
when(kind, then, otherwise) {
|
|
170
|
+
return this.code.push((4), kind), then(), otherwise !== void 0 && (this.code.push((5)), otherwise()), this.code.push((11)), this;
|
|
171
|
+
}
|
|
172
|
+
returnNan() {
|
|
173
|
+
return this.f32bits((2143289344)).op((15));
|
|
174
|
+
}
|
|
175
|
+
table(index, kind, entries) {
|
|
176
|
+
let n = entries.length;
|
|
177
|
+
this.code.push((2), kind);
|
|
178
|
+
for (let k = 0; k < n; k++) this.code.push((2), (64));
|
|
179
|
+
this.get(index).op((14)), uleb(this.code, n - 1);
|
|
180
|
+
for (let k = 0; k < n; k++) uleb(this.code, k);
|
|
181
|
+
this.code.push((11));
|
|
182
|
+
for (let k = 0; k < n; k++)
|
|
183
|
+
entries[k](), k < n - 1 && (this.code.push((12)), uleb(this.code, n - 1 - k)), this.code.push((11));
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
f64Table(index, values) {
|
|
187
|
+
return this.table(
|
|
188
|
+
index,
|
|
189
|
+
(124),
|
|
190
|
+
values.map((v) => () => this.f64(v))
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
i64Table(index, values) {
|
|
194
|
+
return this.table(
|
|
195
|
+
index,
|
|
196
|
+
(126),
|
|
197
|
+
values.map((v) => () => this.i64(v))
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
finish() {
|
|
201
|
+
let out = [], groups = [];
|
|
202
|
+
for (let kind of this.kinds) {
|
|
203
|
+
let last = groups[groups.length - 1];
|
|
204
|
+
last !== void 0 && last[1] === kind ? last[0]++ : groups.push([1, kind]);
|
|
205
|
+
}
|
|
206
|
+
uleb(out, groups.length);
|
|
207
|
+
for (let [count, kind] of groups)
|
|
208
|
+
uleb(out, count), out.push(kind);
|
|
209
|
+
for (let b of this.code) out.push(b);
|
|
210
|
+
return out.push((11)), out;
|
|
211
|
+
}
|
|
212
|
+
}, EXP2_BITS = chunkIR74FJHU_js.FMATH_CONSTANTS.EXP2_HI.map((hi, i) => BigInt(hi >>> 0) << 32n | BigInt(chunkIR74FJHU_js.FMATH_CONSTANTS.EXP2_LO[i] >>> 0)), PIO4 = chunkIR74FJHU_js.FMATH_CONSTANTS.INV_PIO4.map((w) => BigInt(w >>> 0));
|
|
213
|
+
function canonicalReturn(f3, result) {
|
|
214
|
+
f3.f32bits((2143289344)).get(result).get(result).get(result).op((92)).op((27));
|
|
215
|
+
}
|
|
216
|
+
function clamp(f3, value, low, high) {
|
|
217
|
+
value(), f3.f64(low).op((165)).f64(high).op((164));
|
|
218
|
+
}
|
|
219
|
+
function exp2Table(f3, xd, shift, poly, signBias) {
|
|
220
|
+
let shifted = f3.local((124)), ki = f3.local((127)), r = f3.local((124)), s = f3.local((124)), i = f3.local((127));
|
|
221
|
+
f3.get(xd).f64(shift).op((160)).set(shifted), f3.get(shifted).op((189), (167)).set(ki), f3.get(xd).get(shifted).f64(shift).op((161)).op((161)).set(r), f3.get(ki).i32((32) - 1).op((113)).set(i), f3.i64Table(i, EXP2_BITS), f3.get(ki), signBias(), f3.op((106)).i32(15).op((116)).op((173)).i64(32n).op((134)).op((124)).op((191)).set(s), f3.f64(poly[0]).get(r).op((162)).f64(poly[1]).op((160)), f3.get(r).get(r).op((162)).op((162)), f3.f64(poly[2]).get(r).op((162)).f64(1).op((160)), f3.op((160)).get(s).op((162));
|
|
222
|
+
}
|
|
223
|
+
function normalized(f3, ix, out) {
|
|
224
|
+
f3.get(ix).i32((2147483647)).op((113)).set(out), f3.get(out).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.MIN_NORMAL).op((73)), f3.when((64), () => {
|
|
225
|
+
f3.get(out).op((190), (187)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.SUBNORMAL_SCALE).op((162)).op((182), (188)), f3.i32(chunkIR74FJHU_js.FMATH_CONSTANTS.SUBNORMAL_BIAS).op((107)).set(out);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
function split(f3, ix) {
|
|
229
|
+
let tmp = f3.local((127)), i = f3.local((127)), top = f3.local((127)), k = f3.local((127)), r = f3.local((124));
|
|
230
|
+
return f3.get(ix).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.LOG_OFF).op((107)).set(tmp), f3.get(tmp).i32(19).op((118)).i32((16) - 1).op((113)).set(i), f3.get(tmp).i32((4286578688)).op((113)).set(top), f3.get(top).i32(23).op((117)).set(k), f3.get(ix).get(top).op((107)).op((190), (187)), f3.f64Table(i, chunkIR74FJHU_js.FMATH_CONSTANTS.INV_C).op((162)).f64(1).op((161)).set(r), { i, k, r };
|
|
231
|
+
}
|
|
232
|
+
function logSpecial(f3, y) {
|
|
233
|
+
let ix = f3.local((127));
|
|
234
|
+
f3.get(0).op((188)).set(ix), f3.get(ix).i32(1).op((116)).op((69)).when((64), () => f3.f32bits(4286578688).op((15))), f3.get(ix).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.INFINITY_BITS).op((70)).when((64), () => f3.get(0).op((15))), f3.get(ix).i32((2147483648)).op((113)).i32(0).op((71)), f3.get(ix).i32(1).op((116)).i32((4278190080)).op((79)).op((114)), f3.when((64), () => f3.returnNan()), f3.get(y);
|
|
235
|
+
}
|
|
236
|
+
function logFn(two) {
|
|
237
|
+
let f3 = new Fn(1), ix = f3.local((127)), y = f3.local((124)), r2 = f3.local((124)), out = f3.local((125));
|
|
238
|
+
f3.get(0).op((188)).set(ix), normalized(f3, ix, ix);
|
|
239
|
+
let { i, k, r } = split(f3, ix), y0 = f3.local((124));
|
|
240
|
+
if (two) {
|
|
241
|
+
f3.f64Table(i, chunkIR74FJHU_js.FMATH_CONSTANTS.LOG2_C).get(k).op((183)).op((160)).set(y0), f3.get(r).get(r).op((162)).set(r2), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.LOG2_POLY[1]).get(r).op((162)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.LOG2_POLY[2]).op((160)).set(y), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.LOG2_POLY[0]).get(r2).op((162)).get(y).op((160)).set(y);
|
|
242
|
+
let p = f3.local((124));
|
|
243
|
+
f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.LOG2_POLY[3]).get(r).op((162)).get(y0).op((160)).set(p), f3.get(y).get(r2).op((162)).get(p).op((160)).set(y);
|
|
244
|
+
} else
|
|
245
|
+
f3.f64Table(i, chunkIR74FJHU_js.FMATH_CONSTANTS.LOG_C).get(k).op((183)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.LN2).op((162)).op((160)).set(y0), f3.get(r).get(r).op((162)).set(r2), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.LOG_POLY[1]).get(r).op((162)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.LOG_POLY[2]).op((160)).set(y), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.LOG_POLY[0]).get(r2).op((162)).get(y).op((160)).set(y), f3.get(y).get(r2).op((162)).get(y0).get(r).op((160)).op((160)).set(y);
|
|
246
|
+
return f3.get(y).op((182)).set(out), logSpecial(f3, out), f3.set(out), canonicalReturn(f3, out), f3.finish();
|
|
247
|
+
}
|
|
248
|
+
function expFn() {
|
|
249
|
+
let f3 = new Fn(1), xd = f3.local((124)), out = f3.local((125));
|
|
250
|
+
return f3.get(0).get(0).op((92)).when((64), () => f3.returnNan()), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.INV_LN2_N), clamp(f3, () => f3.get(0).op((187)), chunkIR74FJHU_js.FMATH_CONSTANTS.EXP_LOW, chunkIR74FJHU_js.FMATH_CONSTANTS.EXP_HIGH), f3.op((162)).set(xd), exp2Table(f3, xd, chunkIR74FJHU_js.FMATH_CONSTANTS.SHIFT, chunkIR74FJHU_js.FMATH_CONSTANTS.EXP_POLY, () => f3.i32(0)), f3.op((182)).set(out), canonicalReturn(f3, out), f3.finish();
|
|
251
|
+
}
|
|
252
|
+
function zeroInfNan(f3, bits) {
|
|
253
|
+
f3.get(bits).i32(1).op((116)).i32(1).op((107)).i32((4278190079)).op((79));
|
|
254
|
+
}
|
|
255
|
+
function powFn() {
|
|
256
|
+
let f3 = new Fn(2), ix = f3.local((127)), iy = f3.local((127)), ax = f3.local((127)), yint = f3.local((127)), odd = f3.local((127)), e = f3.local((127)), shift = f3.local((127)), x2 = f3.local((124)), ylogx = f3.local((124)), norm = f3.local((127)), out = f3.local((125)), xf = () => f3.get(0).op((187)), yf = () => f3.get(1).op((187));
|
|
257
|
+
f3.get(0).op((188)).set(ix), f3.get(1).op((188)).set(iy), f3.get(ix).i32((2147483647)).op((113)).set(ax), zeroInfNan(f3, iy), f3.when((64), () => {
|
|
258
|
+
f3.get(iy).i32(1).op((116)).op((69)).get(ix).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.ONE_BITS).op((70)).op((114)), f3.when((64), () => f3.f32bits(chunkIR74FJHU_js.FMATH_CONSTANTS.ONE_BITS).op((15))), f3.get(ix).i32(1).op((116)).i32((4278190080)).op((75)), f3.get(iy).i32(1).op((116)).i32((4278190080)).op((75)).op((114)), f3.when((64), () => f3.returnNan()), f3.get(ax).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.ONE_BITS).op((70)).when((64), () => f3.f32bits(chunkIR74FJHU_js.FMATH_CONSTANTS.ONE_BITS).op((15))), f3.get(ax).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.ONE_BITS).op((73)).get(iy).i32((2147483648)).op((113)).op((69)).op((70)), f3.when((64), () => f3.f32bits(0).op((15))), yf().get(1).op((187)).op((162)).op((182)).op((15));
|
|
259
|
+
}), f3.get(iy).i32(23).op((118)).i32(255).op((113)).set(e), f3.get(e).i32(127).op((73)), f3.when(
|
|
260
|
+
(64),
|
|
261
|
+
() => f3.i32(0).set(yint),
|
|
262
|
+
() => {
|
|
263
|
+
f3.get(e).i32(150).op((75)), f3.when(
|
|
264
|
+
(64),
|
|
265
|
+
() => f3.i32(2).set(yint),
|
|
266
|
+
() => {
|
|
267
|
+
f3.i32(150).get(e).op((107)).set(shift), f3.get(iy).i32(1).get(shift).op((116)).i32(1).op((107)).op((113)).i32(0).op((71)), f3.when(
|
|
268
|
+
(64),
|
|
269
|
+
() => f3.i32(0).set(yint),
|
|
270
|
+
() => {
|
|
271
|
+
f3.i32(1).i32(2).get(iy).i32(1).get(shift).op((116)).op((113)).op((27)).set(yint);
|
|
272
|
+
}
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
), f3.get(ix).i32((2147483648)).op((113)).i32(0).op((71)).get(yint).i32(1).op((70)).op((113)).set(odd), zeroInfNan(f3, ix), f3.when((64), () => {
|
|
278
|
+
f3.get(0).get(0).op((92)).when((64), () => f3.returnNan()), xf().get(0).op((187)).op((162)).op((182), (187)).set(x2), f3.get(odd).when((64), () => f3.get(x2).op((154)).set(x2)), f3.get(iy).i32((2147483648)).op((113)), f3.when((125), () => f3.f64(1).get(x2).op((163)).op((182)), () => f3.get(x2).op((182))), f3.op((15));
|
|
279
|
+
}), f3.get(ix).i32((2147483648)).op((113)).i32(0).op((71)).get(yint).op((69)).op((113)).when((64), () => f3.returnNan()), normalized(f3, ix, norm);
|
|
280
|
+
let { i, k, r } = split(f3, norm), y0 = f3.local((124)), r2 = f3.local((124)), q = f3.local((124));
|
|
281
|
+
f3.f64Table(i, chunkIR74FJHU_js.FMATH_CONSTANTS.LOG2_C).get(k).op((183)).op((160)).set(y0), f3.get(r).get(r).op((162)).set(r2), yf(), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_POLY[0]).get(r).op((162)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_POLY[1]).op((160)), f3.get(r2).get(r2).op((162)).op((162)), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_POLY[4]).get(r).op((162)).get(y0).op((160)).set(q), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_POLY[2]).get(r).op((162)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_POLY[3]).op((160)).get(r2).op((162)).get(q).op((160)), f3.op((160)).op((162)).set(ylogx);
|
|
282
|
+
let signed = (bits) => {
|
|
283
|
+
f3.f32bits(bits | (2147483648)).f32bits(bits).get(odd).op((27)).op((15));
|
|
284
|
+
};
|
|
285
|
+
f3.get(ylogx).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_OVERFLOW).op((100)).when((64), () => signed(chunkIR74FJHU_js.FMATH_CONSTANTS.INFINITY_BITS)), f3.get(ylogx).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_SATURATE).op((100)).when((64), () => signed(2139095039)), f3.get(ylogx).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_UNDERFLOW).op((101)).when((64), () => signed(0));
|
|
286
|
+
let xd = f3.local((124));
|
|
287
|
+
return clamp(f3, () => f3.get(ylogx), chunkIR74FJHU_js.FMATH_CONSTANTS.EXP2_LOW, chunkIR74FJHU_js.FMATH_CONSTANTS.EXP2_HIGH), f3.set(xd), exp2Table(f3, xd, chunkIR74FJHU_js.FMATH_CONSTANTS.SHIFT_SCALED, chunkIR74FJHU_js.FMATH_CONSTANTS.EXP2_POLY, () => f3.i32(chunkIR74FJHU_js.FMATH_CONSTANTS.POW_SIGN_BIAS).i32(0).get(odd).op((27))), f3.op((182)).set(out), canonicalReturn(f3, out), f3.finish();
|
|
288
|
+
}
|
|
289
|
+
function signFlip(f3, n, mask) {
|
|
290
|
+
f3.f64(-1).f64(1).get(n), mask === 1 && f3.i32(1).op((106)), f3.i32(2).op((113)).op((27));
|
|
291
|
+
}
|
|
292
|
+
function sincos(f3, first, second, which) {
|
|
293
|
+
let bits = f3.local((127)), x = f3.local((124)), n = f3.local((127)), q = f3.local((127)), flip = f3.local((124)), s = f3.local((124));
|
|
294
|
+
f3.get(0).op((188)).set(bits), f3.get(bits).i32(20).op((118)).i32(2047).op((113)).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.LARGE_TOP).op((73)), f3.when(
|
|
295
|
+
(64),
|
|
296
|
+
() => {
|
|
297
|
+
f3.get(0).op((187)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.HPI_INV).op((162)).op((170)).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.QUADRANT_ROUND).op((106)).i32(24).op((117)).tee(n).set(q), f3.get(0).op((187)).get(n).op((183)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.HPI).op((162)).op((161)).set(x);
|
|
298
|
+
},
|
|
299
|
+
() => {
|
|
300
|
+
f3.get(bits).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.INFINITY_BITS).op((113)).i32(chunkIR74FJHU_js.FMATH_CONSTANTS.INFINITY_BITS).op((70)).when((64), () => f3.returnNan());
|
|
301
|
+
let at = f3.local((127)), m = f3.local((126)), res0 = f3.local((126)), res = f3.local((126)), t = f3.local((127)), n64 = f3.local((126));
|
|
302
|
+
f3.get(bits).i32(26).op((118)).i32(15).op((113)).set(at), f3.get(bits).i32(16777215).op((113)).i32(8388608).op((114)).get(bits).i32(23).op((118)).i32(7).op((113)).op((116)).op((173)).set(m), f3.get(m).get(at).set(t).i64Table(t, PIO4).op((126)).i64(BigInt((4294967295))).op((131)).set(res0), f3.get(at).i32(8).op((106)).set(t), f3.get(m).i64Table(t, PIO4).op((126)).i64(32n).op((136)).get(res0).i64(32n).op((134)).op((132)).set(res), f3.get(at).i32(4).op((106)).set(t), f3.get(res).get(m).i64Table(t, PIO4).op((126)).op((124)).set(res), f3.get(res).i64(1n << 61n).op((124)).i64(62n).op((136)).set(n64), f3.get(res).get(n64).i64(62n).op((134)).op((125)).set(res), f3.get(res).op((185)).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.PI63).op((162)).set(x), f3.get(n64).op((167)).tee(n).get(bits).i32(31).op((118)).op((106)).set(q);
|
|
303
|
+
}
|
|
304
|
+
), signFlip(f3, q, 2), f3.set(flip), signFlip(f3, q, 1), f3.set(s);
|
|
305
|
+
let xs = f3.local((124)), x2 = f3.local((124)), x3 = f3.local((124)), x4 = f3.local((124));
|
|
306
|
+
f3.get(x).get(s).op((162)).set(xs), f3.get(x).get(x).op((162)).set(x2), f3.get(x2).get(xs).op((162)).set(x3), f3.get(x2).get(x2).op((162)).set(x4);
|
|
307
|
+
let sinePoly = () => {
|
|
308
|
+
f3.get(xs).get(x3).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.SIN_S1).op((162)).op((160)), f3.get(x3).get(x2).op((162)), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.SIN_S2).get(x2).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.SIN_S3).op((162)).op((160)), f3.op((162)).op((160));
|
|
309
|
+
}, cosinePoly = () => {
|
|
310
|
+
f3.get(flip).get(x2).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.COS_C1).get(flip).op((162)).op((162)).op((160)), f3.get(x4).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.COS_C2).get(flip).op((162)).op((162)).op((160)), f3.get(x4).get(x2).op((162)), f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.COS_C3).get(flip).op((162)).get(x2).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.COS_C4).get(flip).op((162)).op((162)).op((160)), f3.op((162)).op((160));
|
|
311
|
+
}, odd = () => f3.get(n).i32(1).op((113));
|
|
312
|
+
which !== "cos" && (odd().when((124), cosinePoly, sinePoly), f3.set(first)), which !== "sin" && (odd().when((124), sinePoly, cosinePoly), f3.set(second));
|
|
313
|
+
}
|
|
314
|
+
function trigFn(which) {
|
|
315
|
+
let f3 = new Fn(1), first = f3.local((124)), second = f3.local((124)), out = f3.local((125));
|
|
316
|
+
return sincos(f3, first, second, which), which === "sin" ? f3.get(first) : which === "cos" ? f3.get(second) : f3.get(first).get(second).op((163)), f3.op((182)).set(out), canonicalReturn(f3, out), f3.finish();
|
|
317
|
+
}
|
|
318
|
+
function signBit(f3, value) {
|
|
319
|
+
f3.get(value).op((189)).i64(0n).op((83));
|
|
320
|
+
}
|
|
321
|
+
function atan2Wide(f3, y, x, v) {
|
|
322
|
+
f3.get(x).get(x).op((98)).get(y).get(y).op((98)).op((114)).when((64), () => f3.returnNan());
|
|
323
|
+
let ax = f3.local((124)), ay = f3.local((124)), high = f3.local((124)), low = f3.local((124)), t = f3.local((124)), u = f3.local((124)), u2 = f3.local((124)), p = f3.local((124)), big = f3.local((127));
|
|
324
|
+
f3.get(x).op((153)).set(ax), f3.get(y).op((153)).set(ay), f3.get(ax).get(ay).op((165)).set(high), f3.get(ax).get(ay).op((164)).set(low), f3.get(high).f64(0).op((97)), f3.when(
|
|
325
|
+
(124),
|
|
326
|
+
() => f3.f64(0),
|
|
327
|
+
() => {
|
|
328
|
+
f3.get(low).f64(Number.POSITIVE_INFINITY).op((97)), f3.when((124), () => f3.f64(1), () => f3.get(low).get(high).op((163)));
|
|
329
|
+
}
|
|
330
|
+
), f3.set(t), f3.get(t).f64(chunkIR74FJHU_js.FMATH_CONSTANTS.TAN_PI_8).op((100)).set(big), f3.get(big), f3.when((124), () => f3.get(t).f64(1).op((161)).get(t).f64(1).op((160)).op((163)), () => f3.get(t)), f3.set(u), f3.get(u).get(u).op((162)).set(u2), f3.f64(0).set(p);
|
|
331
|
+
for (let k = ATAN_TERMS - 1; k >= 0; k--) f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.ATAN_COEFFS[k]).get(u2).get(p).op((162)).op((160)).set(p);
|
|
332
|
+
f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.QUARTER_PI).f64(0).get(big).op((27)).get(u).get(p).op((162)).op((160)).set(v), f3.get(ay).get(ax).op((100)).when((64), () => f3.f64(chunkIR74FJHU_js.FMATH_CONSTANTS.HALF_PI).get(v).op((161)).set(v)), signBit(f3, x), f3.when((64), () => f3.f64(Math.PI).get(v).op((161)).set(v)), signBit(f3, y), f3.when((64), () => f3.get(v).op((154)).set(v));
|
|
333
|
+
}
|
|
334
|
+
function atanFamily(which) {
|
|
335
|
+
let f3 = new Fn(which === "atan2" ? 2 : 1), y = f3.local((124)), x = f3.local((124)), v = f3.local((124)), out = f3.local((125));
|
|
336
|
+
if (which === "atan2")
|
|
337
|
+
f3.get(0).op((187)).set(y), f3.get(1).op((187)).set(x);
|
|
338
|
+
else if (which === "atan")
|
|
339
|
+
f3.get(0).op((187)).set(y), f3.f64(1).set(x);
|
|
340
|
+
else {
|
|
341
|
+
let a = f3.local((124));
|
|
342
|
+
f3.get(0).op((187)).set(a), f3.get(a).op((153)).f64(1).op((100)).when((64), () => f3.returnNan()), f3.f64(1).get(a).op((161)).f64(1).get(a).op((160)).op((162)).op((159)), which === "asin" ? f3.set(x).get(a).set(y) : f3.set(y).get(a).set(x);
|
|
343
|
+
}
|
|
344
|
+
return atan2Wide(f3, y, x, v), f3.get(v).op((182)).set(out), canonicalReturn(f3, out), f3.finish();
|
|
345
|
+
}
|
|
346
|
+
function build(name2) {
|
|
347
|
+
switch (name2) {
|
|
348
|
+
case "sin":
|
|
349
|
+
case "cos":
|
|
350
|
+
case "tan":
|
|
351
|
+
return trigFn(name2);
|
|
352
|
+
case "exp":
|
|
353
|
+
return expFn();
|
|
354
|
+
case "log":
|
|
355
|
+
return logFn(false);
|
|
356
|
+
case "log2":
|
|
357
|
+
return logFn(true);
|
|
358
|
+
case "pow":
|
|
359
|
+
return powFn();
|
|
360
|
+
default:
|
|
361
|
+
return atanFamily(name2);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
var V128 = 123, SIMD = 253, CALL = 16, LANES = 4, V = {
|
|
365
|
+
shuffle: 13,
|
|
366
|
+
i32splat: 17,
|
|
367
|
+
f64splat: 20,
|
|
368
|
+
f32extract: 31,
|
|
369
|
+
f32replace: 32,
|
|
370
|
+
i32ne: 56,
|
|
371
|
+
i32ltU: 58,
|
|
372
|
+
and: 78,
|
|
373
|
+
bitselect: 82,
|
|
374
|
+
demoteZero: 94,
|
|
375
|
+
promoteLow: 95,
|
|
376
|
+
i32allTrue: 163,
|
|
377
|
+
i32shrS: 172,
|
|
378
|
+
i32shrU: 173,
|
|
379
|
+
i32add: 174,
|
|
380
|
+
i64extendLowS: 199,
|
|
381
|
+
f64add: 240,
|
|
382
|
+
f64sub: 241,
|
|
383
|
+
f64mul: 242,
|
|
384
|
+
truncSatZero: 252,
|
|
385
|
+
convertLow: 254
|
|
386
|
+
}, HIGH_HALF = [8, 9, 10, 11, 12, 13, 14, 15, 8, 9, 10, 11, 12, 13, 14, 15], JOIN_HALVES = [0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23];
|
|
387
|
+
function simd(f3, op) {
|
|
388
|
+
return f3.code.push((253)), uleb(f3.code, op), f3;
|
|
389
|
+
}
|
|
390
|
+
function splatF64(f3, value) {
|
|
391
|
+
return simd(f3.f64(value), V.f64splat);
|
|
392
|
+
}
|
|
393
|
+
function splatI32(f3, value) {
|
|
394
|
+
return simd(f3.i32(value), V.i32splat);
|
|
395
|
+
}
|
|
396
|
+
function laneMask(f3, n, add, bit) {
|
|
397
|
+
f3.get(n), add !== 0 && simd(splatI32(f3, add), V.i32add), simd(splatI32(f3, bit), V.and), simd(splatI32(f3, 0), V.i32ne), simd(f3, V.i64extendLowS);
|
|
398
|
+
}
|
|
399
|
+
function sincosHalf(f3, half, which, out) {
|
|
400
|
+
let n = f3.local((123)), x = f3.local((123)), flip = f3.local((123)), s = f3.local((123)), xs = f3.local((123)), x2 = f3.local((123)), x3 = f3.local((123)), x4 = f3.local((123)), mul = () => simd(f3, V.f64mul), add = () => simd(f3, V.f64add);
|
|
401
|
+
f3.get(half), simd(splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.HPI_INV), V.f64mul), simd(f3, V.truncSatZero), simd(splatI32(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.QUADRANT_ROUND), V.i32add), f3.i32(24), simd(f3, V.i32shrS).set(n), f3.get(half).get(n), simd(f3, V.convertLow), splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.HPI), mul(), simd(f3, V.f64sub).set(x), splatF64(f3, -1), splatF64(f3, 1), laneMask(f3, n, 0, 2), simd(f3, V.bitselect).set(flip), splatF64(f3, -1), splatF64(f3, 1), laneMask(f3, n, 1, 2), simd(f3, V.bitselect).set(s), f3.get(x).get(s), mul().set(xs), f3.get(x).get(x), mul().set(x2), f3.get(x2).get(xs), mul().set(x3), f3.get(x2).get(x2), mul().set(x4);
|
|
402
|
+
let sine = () => {
|
|
403
|
+
f3.get(xs).get(x3), splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.SIN_S1), mul(), add(), f3.get(x3).get(x2), mul(), splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.SIN_S2).get(x2), splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.SIN_S3), mul(), add(), mul(), add();
|
|
404
|
+
}, cosine = () => {
|
|
405
|
+
f3.get(flip).get(x2), splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.COS_C1).get(flip), mul(), mul(), add(), f3.get(x4), splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.COS_C2).get(flip), mul(), mul(), add(), f3.get(x4).get(x2), mul(), splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.COS_C3).get(flip), mul(), f3.get(x2), splatF64(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.COS_C4).get(flip), mul(), mul(), add(), mul(), add();
|
|
406
|
+
};
|
|
407
|
+
which === "sin" ? (cosine(), sine()) : (sine(), cosine()), laneMask(f3, n, 0, 1), simd(f3, V.bitselect), simd(f3, V.demoteZero).set(out);
|
|
408
|
+
}
|
|
409
|
+
function sincos4(which, scalar) {
|
|
410
|
+
let f3 = new Fn(1), lo = f3.local((123)), hi = f3.local((123)), rl = f3.local((123)), rh = f3.local((123)), fallback = f3.local((123));
|
|
411
|
+
f3.get(0).i32(20), simd(f3, V.i32shrU), simd(splatI32(f3, 2047), V.and), simd(splatI32(f3, chunkIR74FJHU_js.FMATH_CONSTANTS.LARGE_TOP), V.i32ltU), simd(f3, V.i32allTrue).op((69)), f3.when((64), () => {
|
|
412
|
+
f3.get(0).set(fallback);
|
|
413
|
+
for (let lane = 0; lane < (4); lane++)
|
|
414
|
+
f3.get(fallback).get(0), simd(f3, V.f32extract).op(lane), f3.op((16)), uleb(f3.code, scalar), simd(f3, V.f32replace).op(lane).set(fallback);
|
|
415
|
+
f3.get(fallback).op((15));
|
|
416
|
+
}), f3.get(0), simd(f3, V.promoteLow).set(lo), f3.get(0).get(0), simd(f3, V.shuffle);
|
|
417
|
+
for (let b of HIGH_HALF) f3.code.push(b);
|
|
418
|
+
simd(f3, V.promoteLow).set(hi), sincosHalf(f3, lo, which, rl), sincosHalf(f3, hi, which, rh), f3.get(rl).get(rh), simd(f3, V.shuffle);
|
|
419
|
+
for (let b of JOIN_HALVES) f3.code.push(b);
|
|
420
|
+
return f3.finish();
|
|
421
|
+
}
|
|
422
|
+
var WASM_FMATH_SIMD = ["sin", "cos"];
|
|
423
|
+
function wasmFmathSimdBodies(scalarBase) {
|
|
424
|
+
return WASM_FMATH_SIMD.map((name2) => sincos4(name2, scalarBase + WASM_FMATH.indexOf(name2)));
|
|
425
|
+
}
|
|
426
|
+
var cached = null;
|
|
427
|
+
function wasmFmathBodies() {
|
|
428
|
+
return cached === null && (cached = WASM_FMATH.map(build)), cached;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// src/game/kernel/wasm-noise.ts
|
|
432
|
+
var WASM_NOISE = ["fmod", "noise2", "noise3"], I322 = 127, F322 = 125, F642 = 124, VOID2 = 64, LOOP = 3, IF2 = 4, ELSE2 = 5, END2 = 11, BR2 = 12, RETURN2 = 15, I32_EQZ2 = 69, I32_XOR = 115, I32_OR2 = 114, I32_AND2 = 113, I32_ADD2 = 106, I32_MUL = 108, I32_SHR_U2 = 118, F32_EQ = 91, F32_NE2 = 92, F32_LT = 93, F32_GE = 96, F64_LT = 99, F64_LE2 = 101, F64_GE = 102, F32_ABS = 139, F32_FLOOR = 142, F32_ADD = 146, F32_SUB = 147, F32_MUL = 148, F64_SUB2 = 161, F64_MUL2 = 162, F64_COPYSIGN = 166, I32_WRAP_I642 = 167, F32_CONVERT_I32_U = 179, F32_DEMOTE_F642 = 182, F64_PROMOTE_F322 = 187, MISC = 252, I64_TRUNC_SAT_F32_S = 4, CANONICAL_NAN2 = 2143289344, INFINITY_BITS = 2139095040, ZERO_BITS = 0, ONE_BITS = 1065353216, TWO_BITS = 1073741824, THREE_BITS = 1077936128, TWO_POW_63_BITS = 1593835520, TWO_POW_MINUS_24_BITS = 864026624, DOUBLE = 2, HALF = 0.5, LATTICE_X = 2376512323, LATTICE_Y = 3625334849, LATTICE_Z = 3407524639, MIX_A = 2146121005, MIX_B = 2221713035, SHIFT_16 = 16, SHIFT_15 = 15, SHIFT_8 = 8;
|
|
433
|
+
function fmodFn() {
|
|
434
|
+
let f3 = new Fn(2), x = 0, y = 1, ax = f3.local((124)), ay = f3.local((124)), r = f3.local((124)), t = f3.local((124));
|
|
435
|
+
return f3.get(x).get(x).op((92)), f3.get(y).get(y).op((92)).op((114)), f3.get(x).op((139)).f32bits((2139095040)).op((91)).op((114)), f3.get(y).f32bits((0)).op((91)).op((114)), f3.when((64), () => f3.f32bits((2143289344)).op((15))), f3.get(y).op((139)).f32bits((2139095040)).op((91)), f3.when((64), () => f3.get(x).op((15))), f3.get(x).op((139), (187)).set(ax), f3.get(y).op((139), (187)).set(ay), f3.get(ax).get(ay).op((99)), f3.when((64), () => f3.get(x).op((15))), f3.get(ay).set(t), f3.op((3), (64)), f3.get(t).f64((2)).op((162)).get(ax).op((101)), f3.when((64), () => {
|
|
436
|
+
f3.get(t).f64((2)).op((162)).set(t), f3.op((12), 1);
|
|
437
|
+
}), f3.op((11)), f3.get(ax).set(r), f3.op((3), (64)), f3.get(t).get(ay).op((102)), f3.when((64), () => {
|
|
438
|
+
f3.get(r).get(t).op((102)), f3.when((64), () => f3.get(r).get(t).op((161)).set(r)), f3.get(t).f64((0.5)).op((162)).set(t), f3.op((12), 1);
|
|
439
|
+
}), f3.op((11)), f3.get(r).get(x).op((187), (166), (182)), f3.finish();
|
|
440
|
+
}
|
|
441
|
+
function toInt32(f3, floor, out) {
|
|
442
|
+
f3.get(floor).op((139)).f32bits((1593835520)).op((96)), f3.op((4), (127)), f3.i32(0), f3.op((5)), f3.get(floor).op((252), (4), (167)), f3.op((11)), f3.set(out);
|
|
443
|
+
}
|
|
444
|
+
function cell(f3, value, index, fraction, floor) {
|
|
445
|
+
f3.get(value).op((142)).set(floor), f3.get(value).get(floor).op((147)).set(fraction), toInt32(f3, floor, index);
|
|
446
|
+
}
|
|
447
|
+
function smooth(f3, t, out) {
|
|
448
|
+
f3.get(t).get(t).op((148)), f3.f32bits((1077936128)).f32bits((1073741824)).get(t).op((148)).op((147)), f3.op((148)).set(out);
|
|
449
|
+
}
|
|
450
|
+
function lattice(f3, h, x, y, z) {
|
|
451
|
+
x(), f3.i32((2376512323)).op((108)), y(), f3.i32((3625334849)).op((108)).op((115)), z(), f3.i32((3407524639)).op((108)).op((115)).set(h), f3.get(h).get(h).i32((16)).op((118)).op((115)).set(h), f3.get(h).i32((2146121005)).op((108)).set(h), f3.get(h).get(h).i32((15)).op((118)).op((115)).set(h), f3.get(h).i32((2221713035)).op((108)).set(h), f3.get(h).get(h).i32((16)).op((118)).op((115)).set(h), f3.get(h).i32((8)).op((118)).op((179)).f32bits((864026624)).op((148));
|
|
452
|
+
}
|
|
453
|
+
function mixf(f3, a, b, t, out) {
|
|
454
|
+
f3.get(a).get(b).get(a).op((147)).get(t).op((148)).op((146)).set(out);
|
|
455
|
+
}
|
|
456
|
+
function noiseFn(dims) {
|
|
457
|
+
let f3 = new Fn(dims), finite = (p) => {
|
|
458
|
+
f3.get(p).op((139)).f32bits((2139095040)).op((93));
|
|
459
|
+
};
|
|
460
|
+
finite(0), finite(1), f3.op((113)), dims === 3 && (finite(2), f3.op((113))), f3.op((69)), f3.when((64), () => f3.f32bits((0)).op((15)));
|
|
461
|
+
let floor = f3.local((125)), ix = f3.local((127)), iy = f3.local((127)), iz = f3.local((127)), h = f3.local((127)), fx = f3.local((125)), fy = f3.local((125)), fz = f3.local((125)), u = f3.local((125)), v = f3.local((125)), w = f3.local((125)), la = f3.local((125)), lb = f3.local((125)), a = f3.local((125)), b = f3.local((125)), c = f3.local((125)), d = f3.local((125));
|
|
462
|
+
cell(f3, 0, ix, fx, floor), cell(f3, 1, iy, fy, floor), dims === 3 ? cell(f3, 2, iz, fz, floor) : f3.i32(0).set(iz), smooth(f3, fx, u), smooth(f3, fy, v), dims === 3 && smooth(f3, fz, w);
|
|
463
|
+
let at = (base, plus) => () => {
|
|
464
|
+
f3.get(base), plus !== 0 && f3.i32(plus).op((106));
|
|
465
|
+
}, pair = (dy, dz, out) => {
|
|
466
|
+
lattice(f3, h, at(ix, 0), at(iy, dy), at(iz, dz)), f3.set(la), lattice(f3, h, at(ix, 1), at(iy, dy), at(iz, dz)), f3.set(lb), mixf(f3, la, lb, u, out);
|
|
467
|
+
};
|
|
468
|
+
return pair(0, 0, a), pair(1, 0, b), dims === 2 ? mixf(f3, a, b, v, a) : (pair(0, 1, c), pair(1, 1, d), mixf(f3, a, b, v, a), mixf(f3, c, d, v, c), mixf(f3, a, c, w, a)), f3.get(a).f32bits((1073741824)).op((148)).f32bits((1065353216)).op((147)), f3.finish();
|
|
469
|
+
}
|
|
470
|
+
var cached2 = null;
|
|
471
|
+
function wasmNoiseBodies() {
|
|
472
|
+
return cached2 === null && (cached2 = [fmodFn(), noiseFn(2), noiseFn(3)]), cached2;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// src/game/kernel/wasm.ts
|
|
476
|
+
var Op2 = chunkIR74FJHU_js.Op, I323 = 127, F323 = 125, V1282 = 123, VOID_BLOCK = 64, BLOCK2 = 2, LOOP2 = 3, IF3 = 4, ELSE3 = 5, END3 = 11, BR3 = 12, BR_IF = 13, CALL2 = 16, SELECT2 = 27, LOCAL_GET2 = 32, LOCAL_SET2 = 33, LOCAL_TEE2 = 34, I32_LOAD = 40, F32_LOAD = 42, I32_LOAD8_U = 45, I32_STORE = 54, I32_STORE8 = 58, F32_REINTERPRET = 190, I32_CONST2 = 65, F32_CONST2 = 67, I32_EQZ3 = 69, I32_EQ2 = 70, I32_NE2 = 71, I32_LT_S = 72, I32_LT_U2 = 73, I32_GT_U2 = 75, I32_GE_U2 = 79, F32_NE3 = 92, F32_LT2 = 93, F32_GT = 94, F32_LE = 95, I32_ADD3 = 106, I32_SUB2 = 107, I32_MUL2 = 108, I32_REM_S = 111, I32_REM_U = 112, I32_AND3 = 113, I32_OR3 = 114, I32_SHL2 = 116, I32_SHR_S2 = 117, I32_SHR_U3 = 118, I64_CONST2 = 66, I64_LT_U = 84, I64_ADD2 = 124, I64_MUL2 = 126, I64_SHR_U2 = 136, I32_WRAP_I643 = 167, I64_EXTEND_I32_U2 = 173, HALF_BITS = 32, F32_CEIL = 141, F32_FLOOR2 = 142, F32_ADD2 = 146, F32_SUB2 = 147, F32_MUL2 = 148, PREFIX_FC = 252, TRUNC_SAT_F32_S = 0, TRUNC_SAT_F32_U = 1, SIMD2 = 253, S = {
|
|
477
|
+
load: 0,
|
|
478
|
+
store: 11,
|
|
479
|
+
const: 12,
|
|
480
|
+
i32splat: 17,
|
|
481
|
+
i32extract: 27,
|
|
482
|
+
i32replace: 28,
|
|
483
|
+
f32extract: 31,
|
|
484
|
+
f32replace: 32,
|
|
485
|
+
i32eq: 55,
|
|
486
|
+
i32ne: 56,
|
|
487
|
+
i32lt_s: 57,
|
|
488
|
+
i32lt_u: 58,
|
|
489
|
+
i32le_s: 61,
|
|
490
|
+
i32le_u: 62,
|
|
491
|
+
f32eq: 65,
|
|
492
|
+
f32ne: 66,
|
|
493
|
+
f32lt: 67,
|
|
494
|
+
f32le: 69,
|
|
495
|
+
f32ge: 70,
|
|
496
|
+
not: 77,
|
|
497
|
+
and: 78,
|
|
498
|
+
andnot: 79,
|
|
499
|
+
or: 80,
|
|
500
|
+
xor: 81,
|
|
501
|
+
bitselect: 82,
|
|
502
|
+
anyTrue: 83,
|
|
503
|
+
load32lane: 86,
|
|
504
|
+
store32lane: 90,
|
|
505
|
+
f32ceil: 103,
|
|
506
|
+
f32floor: 104,
|
|
507
|
+
f32trunc: 105,
|
|
508
|
+
i32abs: 160,
|
|
509
|
+
i32neg: 161,
|
|
510
|
+
i32shl: 171,
|
|
511
|
+
i32shr_s: 172,
|
|
512
|
+
i32shr_u: 173,
|
|
513
|
+
i32add: 174,
|
|
514
|
+
i32sub: 177,
|
|
515
|
+
i32mul: 181,
|
|
516
|
+
i32min_s: 182,
|
|
517
|
+
i32min_u: 183,
|
|
518
|
+
i32max_s: 184,
|
|
519
|
+
i32max_u: 185,
|
|
520
|
+
f32abs: 224,
|
|
521
|
+
f32neg: 225,
|
|
522
|
+
f32sqrt: 227,
|
|
523
|
+
f32add: 228,
|
|
524
|
+
f32sub: 229,
|
|
525
|
+
f32mul: 230,
|
|
526
|
+
f32div: 231,
|
|
527
|
+
truncSatS: 248,
|
|
528
|
+
convertS: 250,
|
|
529
|
+
convertU: 251
|
|
530
|
+
}, TWO_POW_31 = 2147483648, MIX_A2 = 2146121005, MIX_B2 = 2221713035, GOLDEN = 2654435769, UNIT_SCALE = 1 / 16777216, LANES2 = 4, STRIDE_X = 1021, STRIDE_Z = 65539, MIN_TABLE = 1024, TABLE_LOAD = 2, KEY_WORDS = 8, KEY_LOOPS = 3, STAGE_WORDS = 2 + (8) + 10, STAGE_HEADROOM = 2, WORD = 4, BYTE_MASK = 255, SHIFT_MASK = 31, INT_MIN = -2147483648, CTX_SNAPSHOT = 0, CTX_CAPACITY = 4, CTX_STARTS = 8, CTX_CELLS = 12, CTX_XS = 16, CTX_YS = 20, CTX_ZS = 24, CTX_ROWS = 28, CTX_MASK = 32, CTX_INVERSE = 36, CTX_RADIUS = 40, CTX_R2 = 44, CTX_LEN = 48, CTX_FLAT = 52, CTX_QUERY_LANES = 56, CTX_QUERY_ROWS = 60, CTX_STAGE = 64, CTX_STAGE_CAPACITY = 68, CTX_STAGED = 72, CTX_QUERY_PARAMS = 76, CTX_ENTITY_ROWS = 80, CTX_ENTITY_MASK = 96, CTX_OUTER = 112, CTX_PAIR_LANE = 128, CTX_PAIR_ROW = 144, CTX_ACC = 160, CTX_LANES = 192, CTX_BYTES = 208;
|
|
531
|
+
var IMPORTS = ["toInt32", "fmod", "noise2", "noise3", "lanes", "data", "query", "queryKeep"], FN = Object.fromEntries(IMPORTS.map((n, k) => [n, k])), UNARY_TYPE = 2, BINARY_TYPE = 3, TERNARY_TYPE = 4, VECTOR_TYPE = 8, UNARY_FMATH = {
|
|
532
|
+
[Op2.FLOG2]: "log2",
|
|
533
|
+
[Op2.FSIN]: "sin",
|
|
534
|
+
[Op2.FCOS]: "cos",
|
|
535
|
+
[Op2.FTAN]: "tan",
|
|
536
|
+
[Op2.FASIN]: "asin",
|
|
537
|
+
[Op2.FACOS]: "acos",
|
|
538
|
+
[Op2.FATAN]: "atan",
|
|
539
|
+
[Op2.FEXP]: "exp",
|
|
540
|
+
[Op2.FLOG]: "log"
|
|
541
|
+
}, FMATH_OPS = /* @__PURE__ */ new Set([...Object.keys(UNARY_FMATH).map(Number), Op2.FPOW, Op2.FATAN2]), NOISE_OPS = /* @__PURE__ */ new Set([Op2.FMOD, Op2.NOISE2, Op2.NOISE3]), IMPORT_TYPE = {
|
|
542
|
+
toInt32: 0,
|
|
543
|
+
fmod: 3,
|
|
544
|
+
noise2: 3,
|
|
545
|
+
noise3: 4,
|
|
546
|
+
lanes: 5,
|
|
547
|
+
data: 5,
|
|
548
|
+
query: 6,
|
|
549
|
+
queryKeep: 7
|
|
550
|
+
}, DATA_HOOKS = /* @__PURE__ */ new Map(), QUERY_HOSTS = /* @__PURE__ */ new Map();
|
|
551
|
+
function setWasmDataHook(ctx, hook) {
|
|
552
|
+
hook === null ? DATA_HOOKS.delete(ctx) : DATA_HOOKS.set(ctx, hook);
|
|
553
|
+
}
|
|
554
|
+
function wasmKernelImports(memory) {
|
|
555
|
+
let v = new Uint32Array((5)), r = new Uint32Array((3)), words = new Uint32Array(memory.buffer);
|
|
556
|
+
return {
|
|
557
|
+
env: {
|
|
558
|
+
memory,
|
|
559
|
+
toInt32: (x) => x | 0,
|
|
560
|
+
fmod: (x, y) => x % y,
|
|
561
|
+
noise2: chunkKZJRSXHK_js.noise2,
|
|
562
|
+
noise3: chunkKZJRSXHK_js.noise3,
|
|
563
|
+
lanes: (sub, input, output) => {
|
|
564
|
+
words.buffer !== memory.buffer && (words = new Uint32Array(memory.buffer));
|
|
565
|
+
for (let lane = 0; lane < (4); lane++) {
|
|
566
|
+
for (let k = 0; k < (5); k++) v[k] = words[(input >>> 2) + k * (4) + lane];
|
|
567
|
+
chunkIR74FJHU_js.evalLane(sub, v, r);
|
|
568
|
+
for (let k = 0; k < (3); k++) words[(output >>> 2) + k * (4) + lane] = r[k];
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
data: (ctx, pc, chunk) => {
|
|
572
|
+
let hook = DATA_HOOKS.get(ctx >>> 0);
|
|
573
|
+
if (hook === void 0) throw new Error("a compiled kernel ran a data op without an engine data binding");
|
|
574
|
+
hook(pc, chunk);
|
|
575
|
+
},
|
|
576
|
+
query: (ctx, params, rows, kind, filter, mode) => QUERY_HOSTS.get(ctx >>> 0).query(params, rows, kind, filter | 0, mode),
|
|
577
|
+
queryKeep: (ctx, stops, p, out) => QUERY_HOSTS.get(ctx >>> 0).keep(stops, p, out)
|
|
578
|
+
}
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
var QUERY_PARAMS = 11, QUERY_SCRATCH_BYTES = ((11) + 3) * 16, LANE_INPUTS = 5, LANE_OUTPUTS = 3;
|
|
582
|
+
function laneScratchOffset(program) {
|
|
583
|
+
return Math.ceil(Math.max(program.cross.length, 1) * (4) / (16)) * (16);
|
|
584
|
+
}
|
|
585
|
+
var LANE_SCRATCH_BYTES = ((5) + (3)) * 16, VECTOR_BYTES = 16;
|
|
586
|
+
function uleb2(out, value) {
|
|
587
|
+
let v = value >>> 0;
|
|
588
|
+
do {
|
|
589
|
+
let byte = v & 127;
|
|
590
|
+
v >>>= 7, v !== 0 && (byte |= 128), out.push(byte);
|
|
591
|
+
} while (v !== 0);
|
|
592
|
+
}
|
|
593
|
+
function sleb(out, value) {
|
|
594
|
+
let v = value | 0;
|
|
595
|
+
for (; ; ) {
|
|
596
|
+
let byte = v & 127;
|
|
597
|
+
if (v >>= 7, v === 0 && (byte & 64) === 0 || v === -1 && (byte & 64) !== 0) {
|
|
598
|
+
out.push(byte);
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
out.push(byte | 128);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
function section(out, id, body) {
|
|
605
|
+
out.push(id), uleb2(out, body.length);
|
|
606
|
+
for (let b of body) out.push(b);
|
|
607
|
+
}
|
|
608
|
+
function name(out, text) {
|
|
609
|
+
uleb2(out, text.length);
|
|
610
|
+
for (let k = 0; k < text.length; k++) out.push(text.charCodeAt(k));
|
|
611
|
+
}
|
|
612
|
+
var KNOWN = new Set(Object.values(Op2)), UNROLL = 2, RECORD_SHIFT = 4;
|
|
613
|
+
function known(op) {
|
|
614
|
+
return KNOWN.has(op) && op !== Op2.CALL;
|
|
615
|
+
}
|
|
616
|
+
function wasmStageName(stage) {
|
|
617
|
+
return `stage${stage}`;
|
|
618
|
+
}
|
|
619
|
+
function exactStorage(kind, storage) {
|
|
620
|
+
return kind === 0 ? storage === 0 : (kind === 1 || kind === 2) && (storage === 1 || storage === 2);
|
|
621
|
+
}
|
|
622
|
+
function narrowXop(op, sub) {
|
|
623
|
+
return op === chunkIR74FJHU_js.XOP && chunkIR74FJHU_js.xopRange(sub) === chunkIR74FJHU_js.XOP_RANGE.NARROW && chunkIR74FJHU_js.laneSignature(sub) !== null;
|
|
624
|
+
}
|
|
625
|
+
var DATA_SUBS = /* @__PURE__ */ new Set([chunkIR74FJHU_js.DATA_LIST, chunkIR74FJHU_js.DATA_KEYOF, chunkIR74FJHU_js.DATA_ROWOF, chunkIR74FJHU_js.DATA_FLOAD, chunkIR74FJHU_js.DATA_ROWS, chunkIR74FJHU_js.DATA_PGET, chunkIR74FJHU_js.DATA_PSET, chunkIR74FJHU_js.DATA_TALLY, chunkIR74FJHU_js.DATA_SEND, chunkIR74FJHU_js.DATA_PICK]);
|
|
626
|
+
function dataXop(op, sub) {
|
|
627
|
+
return op === chunkIR74FJHU_js.XOP && DATA_SUBS.has(sub);
|
|
628
|
+
}
|
|
629
|
+
function gatherXop(op, sub) {
|
|
630
|
+
return op === chunkIR74FJHU_js.XOP && (sub === chunkIR74FJHU_js.XOP_GATHER || sub === chunkIR74FJHU_js.XOP_FIELD);
|
|
631
|
+
}
|
|
632
|
+
function queryXop(program, op, sub) {
|
|
633
|
+
return op === chunkIR74FJHU_js.XOP && program.position !== null && (sub === chunkIR74FJHU_js.XOP_QUERY || sub === chunkIR74FJHU_js.XOP_QSHAPE || sub === chunkIR74FJHU_js.XOP_QFILTER || sub === chunkIR74FJHU_js.XOP_QSTOP);
|
|
634
|
+
}
|
|
635
|
+
function laneOps(program) {
|
|
636
|
+
return program.code.some((i) => narrowXop(i.op, i.dst) || dataXop(i.op, i.dst));
|
|
637
|
+
}
|
|
638
|
+
function hostState(program) {
|
|
639
|
+
return program.position !== null || program.channels.length > 0 || program.state >= 0;
|
|
640
|
+
}
|
|
641
|
+
function staged(program) {
|
|
642
|
+
return program.calls.length > 0 || program.cross.length > 0 || laneOps(program) && !hostState(program);
|
|
643
|
+
}
|
|
644
|
+
function wasmStaged(program) {
|
|
645
|
+
return staged(program);
|
|
646
|
+
}
|
|
647
|
+
function wasmNeedsHost(program) {
|
|
648
|
+
return program.position !== null || program.channels.length > 0 || !staged(program) && laneOps(program);
|
|
649
|
+
}
|
|
650
|
+
function wasmDataOps(program) {
|
|
651
|
+
return program.code.some((i) => dataXop(i.op, i.dst));
|
|
652
|
+
}
|
|
653
|
+
function wasmQueries(program) {
|
|
654
|
+
return program.code.some((i) => i.op === chunkIR74FJHU_js.XOP && i.dst === chunkIR74FJHU_js.XOP_QUERY);
|
|
655
|
+
}
|
|
656
|
+
function wasmStages(program) {
|
|
657
|
+
let out = [], width = (pc) => program.code[pc].op === chunkIR74FJHU_js.CROSS_OP.SCATTER || program.code[pc].op === chunkIR74FJHU_js.XOP ? 2 : 1, start = 0, nextCall = 0, nextCross = 0;
|
|
658
|
+
for (; nextCall < program.calls.length || nextCross < program.cross.length; ) {
|
|
659
|
+
let callPc = nextCall < program.calls.length ? program.calls[nextCall] : 1 / 0, crossPc = nextCross < program.cross.length ? program.cross[nextCross] : 1 / 0;
|
|
660
|
+
if (crossPc < callPc) {
|
|
661
|
+
let pcs = [], end = crossPc;
|
|
662
|
+
for (; nextCross < program.cross.length && program.cross[nextCross] === end; )
|
|
663
|
+
pcs.push(end), end += width(end), nextCross++;
|
|
664
|
+
out.push({ start, end, stage: { barrier: "cross", pcs } }), start = end;
|
|
665
|
+
} else
|
|
666
|
+
out.push({ start, end: callPc, stage: { barrier: "call", pcs: [callPc] } }), start = callPc + 1, nextCall++;
|
|
667
|
+
}
|
|
668
|
+
return out.push({ start, end: program.code.length, stage: { barrier: "end", pcs: [] } }), out;
|
|
669
|
+
}
|
|
670
|
+
function wasmSupports(program, storages) {
|
|
671
|
+
if (!(!staged(program) || program.position === null && program.channels.length === 0 && program.state < 0) || !staged(program) && program.slots.some((s) => s.scratch) || storages.length !== program.slots.length || storages.some((s) => s > 3)) return false;
|
|
672
|
+
if (program.state >= 0) {
|
|
673
|
+
let slot = program.slots[program.state];
|
|
674
|
+
if (slot === void 0 || !exactStorage(slot.kind, storages[program.state])) return false;
|
|
675
|
+
}
|
|
676
|
+
return program.code.every((i, pc) => known(i.op) || chunkKZJRSXHK_js.isSimd(i) || chunkIR74FJHU_js.crossRow(i.op) || chunkIR74FJHU_js.stageEndingOp(i.op, i.dst) || narrowXop(i.op, i.dst) || dataXop(i.op, i.dst) || gatherXop(i.op, i.dst) || !staged(program) && queryXop(program, i.op, i.dst) || i.op === Op2.CALL && program.calls.includes(pc));
|
|
677
|
+
}
|
|
678
|
+
var Body = class {
|
|
679
|
+
constructor() {
|
|
680
|
+
this.code = [];
|
|
681
|
+
this.mapper = (word) => word;
|
|
682
|
+
}
|
|
683
|
+
reg(word) {
|
|
684
|
+
return this.get(this.mapper(word));
|
|
685
|
+
}
|
|
686
|
+
op(...bytes) {
|
|
687
|
+
for (let b of bytes) this.code.push(b);
|
|
688
|
+
return this;
|
|
689
|
+
}
|
|
690
|
+
simd(opcode) {
|
|
691
|
+
return this.code.push((253)), uleb2(this.code, opcode), this;
|
|
692
|
+
}
|
|
693
|
+
get(local) {
|
|
694
|
+
return this.code.push((32)), uleb2(this.code, local), this;
|
|
695
|
+
}
|
|
696
|
+
set(local) {
|
|
697
|
+
return this.code.push((33)), uleb2(this.code, local), this;
|
|
698
|
+
}
|
|
699
|
+
tee(local) {
|
|
700
|
+
return this.code.push((34)), uleb2(this.code, local), this;
|
|
701
|
+
}
|
|
702
|
+
i32(value) {
|
|
703
|
+
return this.code.push((65)), sleb(this.code, value), this;
|
|
704
|
+
}
|
|
705
|
+
f32(value) {
|
|
706
|
+
this.code.push((67));
|
|
707
|
+
let bytes = new Uint8Array(new Float32Array([value]).buffer);
|
|
708
|
+
for (let b of bytes) this.code.push(b);
|
|
709
|
+
return this;
|
|
710
|
+
}
|
|
711
|
+
v128i(lanes) {
|
|
712
|
+
this.simd(S.const);
|
|
713
|
+
let bytes = new Uint8Array(new Uint32Array(lanes.map((x) => x >>> 0)).buffer);
|
|
714
|
+
for (let b of bytes) this.code.push(b);
|
|
715
|
+
return this;
|
|
716
|
+
}
|
|
717
|
+
v128f(value) {
|
|
718
|
+
this.simd(S.const);
|
|
719
|
+
let bytes = new Uint8Array(new Float32Array([value, value, value, value]).buffer);
|
|
720
|
+
for (let b of bytes) this.code.push(b);
|
|
721
|
+
return this;
|
|
722
|
+
}
|
|
723
|
+
mem(align, offset) {
|
|
724
|
+
return uleb2(this.code, align), uleb2(this.code, offset), this;
|
|
725
|
+
}
|
|
726
|
+
call(fn) {
|
|
727
|
+
return this.code.push((16)), uleb2(this.code, fn), this;
|
|
728
|
+
}
|
|
729
|
+
load(ctx, offset) {
|
|
730
|
+
return this.get(ctx).op((40)).mem(2, offset);
|
|
731
|
+
}
|
|
732
|
+
};
|
|
733
|
+
function functionBody(program, storages, start, end, fmathBase, noiseBase) {
|
|
734
|
+
let noise = (fn) => noiseBase + WASM_NOISE.indexOf(fn), fmath = (fn) => fmathBase + WASM_FMATH.indexOf(fn), fmathSimd = (fn) => fmathBase + WASM_FMATH.length + WASM_FMATH_SIMD.indexOf(fn), slotCount = program.slots.length, uniforms = program.uniforms.length, args = program.args, loopBase = program.uniforms.length - program.loops, P_COLS = 0, P_N = 1, P_ROWS = 2, P_ARGS = 3, P_CTX = 4, next = 5, L_I = next++, L_TMP = next++, L_COUNTERS = next;
|
|
735
|
+
next += uniforms;
|
|
736
|
+
let L_USCALAR = next;
|
|
737
|
+
next += uniforms;
|
|
738
|
+
let L_SLOT = next;
|
|
739
|
+
next += slotCount;
|
|
740
|
+
let L_LANE = next++, L_ROW = next++, L_GX = next++, L_GY = next++, L_GZ = next++, L_LY = next++, L_LZ = next++, L_HX = next++, L_HY = next++, L_HZ = next++, L_SLOT_AT = next++, L_END = next++, L_PCOUNT = next++, L_PN = next++, L_NROW = next++, L_IDX = next++, L_BASE = next++, L_A = next++, L_B = next++, L_QP = next++, L_QN = next++, HOISTED = [(0), (4), (8), (12), (16), (20), (24), (28), (32), (36), (40), (44)], L_FIELD = next;
|
|
741
|
+
next += HOISTED.length;
|
|
742
|
+
let i32Locals = next - 5, F_CX = next++, F_CY = next++, F_CZ = next++, F_DX = next++, F_DY = next++, F_DZ = next++, F_A = next++, F_B = next++, f32Locals = next - F_CX, V_REG = next, simdTemp = Math.max(program.registers, 1);
|
|
743
|
+
next += simdTemp + (program.code.some(chunkKZJRSXHK_js.isSimd) ? chunkKZJRSXHK_js.SIMD_TEMPS : 0);
|
|
744
|
+
let V_UNIFORM = next;
|
|
745
|
+
next += uniforms;
|
|
746
|
+
let V_TEMP = next;
|
|
747
|
+
next += 8;
|
|
748
|
+
let V_ROW = next++, V_VALID = next++, V_PLANE = next++, V_PROW = next++, V_STOP = next++, V_KEEP = next++, v128Locals = next - V_REG, snapshotIndex = [], snapshots = 0;
|
|
749
|
+
for (let slot of program.slots) snapshotIndex.push(slot.neighbour ? snapshots++ : -1);
|
|
750
|
+
let b = new Body();
|
|
751
|
+
for (let s = 0; s < slotCount; s++) b.get(P_COLS).op((40)).mem(2, s * 4).set(L_SLOT + s);
|
|
752
|
+
for (let u = 0; u < uniforms; u++)
|
|
753
|
+
u < args || u >= loopBase ? b.get(P_ARGS).op((40)).mem(2, u * 4) : b.i32(program.uniforms[u] | 0), b.tee(L_USCALAR + u).simd(S.i32splat).set(V_UNIFORM + u);
|
|
754
|
+
program.position !== null && HOISTED.forEach((offset, k) => b.load(P_CTX, offset).set(L_FIELD + k));
|
|
755
|
+
let field = (offset) => b.get(L_FIELD + HOISTED.indexOf(offset)), reg = (word) => (word & 2147483648) !== 0 ? V_UNIFORM + (word & 2147483647) : V_REG + word;
|
|
756
|
+
b.mapper = reg;
|
|
757
|
+
let get = (word) => b.reg(word), temp = (k) => V_TEMP + k, mode = "list", chunkRows = (next2) => {
|
|
758
|
+
if (mode = next2, b.get(L_I).simd(S.i32splat).v128i([0, 1, 2, 3]).simd(S.i32add).set(V_ROW), next2 === "full" ? b.v128i([-1, -1, -1, -1]).set(V_VALID) : b.get(V_ROW).get(P_N).simd(S.i32splat).simd(S.i32lt_u).set(V_VALID), next2 === "list")
|
|
759
|
+
for (let lane = 0; lane < (4); lane++)
|
|
760
|
+
b.get(V_ROW), b.get(L_I).i32(lane).op((106)).get(P_N).op((73)).op((4), (127)), b.get(P_ROWS).get(L_I).i32(lane).op((106)).i32(2).op((116)).op((106)).op((40)).mem(2, 0), b.op((5)).get(P_ROWS).get(L_I).i32(2).op((116)).op((106)).op((40)).mem(2, 0).op((11)), b.simd(S.i32replace).op(lane).set(V_ROW);
|
|
761
|
+
}, advance = () => {
|
|
762
|
+
b.get(L_I).i32((4)).op((106)).set(L_I);
|
|
763
|
+
}, laneInside = (lane) => {
|
|
764
|
+
b.get(L_I).i32(lane).op((106)).get(P_N).op((73));
|
|
765
|
+
}, byteSlot = (slot) => storages[slot] === 3, loadRaw = (slot) => {
|
|
766
|
+
if (byteSlot(slot)) {
|
|
767
|
+
b.v128i([0, 0, 0, 0]);
|
|
768
|
+
for (let lane = 0; lane < (4); lane++)
|
|
769
|
+
b.set(temp(7)), b.get(temp(7)), b.get(L_SLOT + slot).get(V_ROW).simd(S.i32extract).op(lane).op((106)).op((45)).mem(0, 0), b.simd(S.i32replace).op(lane);
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
if (mode !== "list") {
|
|
773
|
+
b.get(L_SLOT + slot).get(L_I).i32(2).op((116)).op((106)).simd(S.load).mem(2, 0);
|
|
774
|
+
return;
|
|
775
|
+
}
|
|
776
|
+
b.v128i([0, 0, 0, 0]);
|
|
777
|
+
for (let lane = 0; lane < (4); lane++)
|
|
778
|
+
b.set(temp(7)), b.get(L_SLOT + slot).get(V_ROW).simd(S.i32extract).op(lane).i32(2).op((116)).op((106)), b.get(temp(7)).simd(S.load32lane).mem(2, 0).op(lane);
|
|
779
|
+
}, toInt = (source, out) => {
|
|
780
|
+
b.get(source).simd(S.truncSatS).set(out), b.get(source).simd(S.f32abs).v128f((2147483648)).simd(S.f32ge).simd(S.anyTrue).op((4), (64));
|
|
781
|
+
for (let lane = 0; lane < (4); lane++)
|
|
782
|
+
b.get(out).get(source).simd(S.f32extract).op(lane).call(FN.toInt32).simd(S.i32replace).op(lane).set(out);
|
|
783
|
+
b.op((11));
|
|
784
|
+
}, readAs = (kind, storage, raw, out) => {
|
|
785
|
+
if (kind === 0) {
|
|
786
|
+
storage === 0 ? b.get(raw).set(out) : storage === 1 ? b.get(raw).simd(S.convertS).set(out) : storage === 2 ? b.get(raw).simd(S.convertU).set(out) : b.get(raw).v128i([(255), (255), (255), (255)]).simd(S.and).simd(S.convertU).set(out);
|
|
787
|
+
return;
|
|
788
|
+
}
|
|
789
|
+
if (kind === 3) {
|
|
790
|
+
storage === 0 ? (b.get(raw).v128f(0).simd(S.f32ne), b.get(raw).get(raw).simd(S.f32eq).simd(S.and).set(out)) : storage === 3 ? b.get(raw).v128i([(255), (255), (255), (255)]).simd(S.and).v128i([0, 0, 0, 0]).simd(S.i32ne).set(out) : b.get(raw).v128i([0, 0, 0, 0]).simd(S.i32ne).set(out);
|
|
791
|
+
return;
|
|
792
|
+
}
|
|
793
|
+
storage === 0 ? toInt(raw, out) : storage === 3 ? b.get(raw).v128i([(255), (255), (255), (255)]).simd(S.and).set(out) : b.get(raw).set(out);
|
|
794
|
+
}, writeAs = (kind, storage, value, out) => {
|
|
795
|
+
if (kind === 0) {
|
|
796
|
+
storage === 0 ? b.get(value).set(out) : toInt(value, out);
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
799
|
+
if (kind === 3) {
|
|
800
|
+
storage === 0 ? b.v128f(1).v128f(0) : b.v128i([1, 1, 1, 1]).v128i([0, 0, 0, 0]), b.get(value).v128i([0, 0, 0, 0]).simd(S.i32ne).simd(S.bitselect).set(out);
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
803
|
+
storage === 0 ? b.get(value).simd(kind === 1 ? S.convertS : S.convertU).set(out) : b.get(value).set(out);
|
|
804
|
+
}, loadSlot = (slot, out) => {
|
|
805
|
+
loadRaw(slot), b.set(temp(6)), readAs(program.slots[slot].kind, storages[slot], temp(6), out);
|
|
806
|
+
}, writeLanes = (slot, value) => {
|
|
807
|
+
for (let lane = 0; lane < (4); lane++)
|
|
808
|
+
laneInside(lane), b.op((4), (64)), byteSlot(slot) ? (b.get(L_SLOT + slot).get(V_ROW).simd(S.i32extract).op(lane).op((106)), b.get(value).simd(S.i32extract).op(lane).op((58)).mem(0, 0)) : (b.get(L_SLOT + slot).get(V_ROW).simd(S.i32extract).op(lane).i32(2).op((116)).op((106)), b.get(value).simd(S.store32lane).mem(2, 0).op(lane)), b.op((11));
|
|
809
|
+
}, storeSlot = (slot, word) => {
|
|
810
|
+
let kind = program.slots[slot].kind, storage = storages[slot], value = temp(5);
|
|
811
|
+
if (exactStorage(kind, storage) ? get(word).set(value) : (loadRaw(slot), b.set(temp(6)), readAs(kind, storage, temp(6), temp(4)), get(word).set(temp(3)), writeAs(kind, storage, temp(3), temp(2)), b.get(temp(6)).get(temp(2)).get(temp(4)).get(temp(3)).simd(S.i32eq).simd(S.bitselect).set(value)), byteSlot(slot)) {
|
|
812
|
+
writeLanes(slot, value);
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
815
|
+
if (mode === "list") {
|
|
816
|
+
writeLanes(slot, value);
|
|
817
|
+
return;
|
|
818
|
+
}
|
|
819
|
+
b.get(L_SLOT + slot).get(L_I).i32(2).op((116)).op((106)), mode === "full" ? b.get(value) : b.get(value).get(L_SLOT + slot).get(L_I).i32(2).op((116)).op((106)).simd(S.load).mem(2, 0).get(V_VALID).simd(S.bitselect), b.simd(S.store).mem(2, 0);
|
|
820
|
+
}, jsMin = (a, c, out, max) => {
|
|
821
|
+
a(), b.set(temp(0)), c(), b.set(temp(1)), b.get(temp(0)).get(temp(1)).get(temp(0)).get(temp(0)).simd(S.f32ne).simd(S.bitselect).set(temp(2)), b.get(temp(1)).get(temp(2)), max ? b.get(temp(0)).get(temp(1)).simd(S.f32lt) : b.get(temp(1)).get(temp(0)).simd(S.f32lt), b.simd(S.bitselect).set(temp(2)), b.get(temp(0)).get(temp(2)), max ? b.get(temp(1)).get(temp(0)).simd(S.f32lt) : b.get(temp(0)).get(temp(1)).simd(S.f32lt), b.simd(S.bitselect).set(out);
|
|
822
|
+
}, jsMinScalar = (max) => {
|
|
823
|
+
b.set(F_B).set(F_A), b.get(F_A), b.get(F_B), b.get(F_A).get(F_B).get(F_A).get(F_A).op((92)).op((27)), max ? b.get(F_B).get(F_A).op((94)) : b.get(F_B).get(F_A).op((93)), b.op((27)), max ? b.get(F_A).get(F_B).op((94)) : b.get(F_A).get(F_B).op((93)), b.op((27));
|
|
824
|
+
}, lanes = (fn, operands, out) => {
|
|
825
|
+
for (let k = 0; k < operands.length; k++) get(operands[k]).set(temp(k));
|
|
826
|
+
b.v128f(0).set(temp(4));
|
|
827
|
+
for (let lane = 0; lane < (4); lane++) {
|
|
828
|
+
b.get(temp(4));
|
|
829
|
+
for (let k = 0; k < operands.length; k++) b.get(temp(k)).simd(S.f32extract).op(lane);
|
|
830
|
+
b.call(fn).simd(S.f32replace).op(lane).set(temp(4));
|
|
831
|
+
}
|
|
832
|
+
b.get(temp(4)).set(out);
|
|
833
|
+
}, perLane = (a, c, out, op) => {
|
|
834
|
+
get(a).set(temp(0)), get(c).set(temp(1)), b.v128i([0, 0, 0, 0]).set(temp(2));
|
|
835
|
+
for (let lane = 0; lane < (4); lane++)
|
|
836
|
+
b.get(temp(2)), b.get(temp(0)).simd(S.i32extract).op(lane).set(L_A), b.get(temp(1)).simd(S.i32extract).op(lane).set(L_B), op(), b.simd(S.i32replace).op(lane).set(temp(2));
|
|
837
|
+
b.get(temp(2)).set(out);
|
|
838
|
+
}, mix2 = () => {
|
|
839
|
+
for (let [shift, mul] of [
|
|
840
|
+
[16, (2146121005)],
|
|
841
|
+
[15, (2221713035)],
|
|
842
|
+
[16, 0]
|
|
843
|
+
])
|
|
844
|
+
b.tee(temp(5)).get(temp(5)).i32(shift).simd(S.i32shr_u).simd(S.xor), mul !== 0 && b.v128i([mul, mul, mul, mul]).simd(S.i32mul);
|
|
845
|
+
}, hashInto = (i) => {
|
|
846
|
+
get(i.b).v128i([(2654435769), (2654435769), (2654435769), (2654435769)]).simd(S.i32add), mix2(), get(i.a).simd(S.xor), mix2();
|
|
847
|
+
}, code = program.code, loopUniforms = new Set(code.filter((i) => i.op === Op2.LOOP_INIT).map((i) => i.a)), scalarLocal = (word) => {
|
|
848
|
+
let index = word & 2147483647;
|
|
849
|
+
return loopUniforms.has(index) ? L_COUNTERS + (index - args) : L_USCALAR + index;
|
|
850
|
+
}, loopsOf = (open) => open.filter((o) => o.kind === "loop"), emitEvent = (pc, open) => {
|
|
851
|
+
let i = code[pc], words = program.channels[i.dst], loops = loopsOf(open);
|
|
852
|
+
if (loops.length > (3)) return false;
|
|
853
|
+
let key = [];
|
|
854
|
+
for (let l of loops)
|
|
855
|
+
key.push(() => b.i32(l.pc)), key.push(() => b.get(L_COUNTERS + (l.counter - args)));
|
|
856
|
+
for (key.push(() => b.i32(pc)); key.length < (8); ) key.push(() => b.i32(0));
|
|
857
|
+
for (let lane = 0; lane < (4); lane++) {
|
|
858
|
+
laneInside(lane), i.a !== 4294967295 && get(i.a).simd(S.i32extract).op(lane).i32(0).op((71)).op((113)), b.op((4), (64)), b.load(P_CTX, (72)).tee(L_IDX), b.get(P_CTX).get(L_IDX).i32(1).op((106)).op((54)).mem(2, (72)), b.load(P_CTX, (68)).op((73)).op((4), (64)), b.load(P_CTX, (64)).get(L_IDX).i32(STAGE_WORDS * (4)).op((108)).op((106)).set(L_BASE);
|
|
859
|
+
let put = (at, value) => {
|
|
860
|
+
b.get(L_BASE), value(), b.op((54)).mem(2, at * (4));
|
|
861
|
+
};
|
|
862
|
+
put(0, () => b.get(L_I).i32(lane).op((106))), key.forEach((k, w) => put(1 + w, k)), put(1 + (8), () => b.i32(0)), put(2 + (8), () => b.i32(i.dst)), put(3 + (8), () => b.get(V_ROW).simd(S.i32extract).op(lane));
|
|
863
|
+
for (let w = 0; w < 8; w++)
|
|
864
|
+
if (w < words) {
|
|
865
|
+
let ext = code[pc + 1 + Math.floor(w / 3)], word = [ext.a, ext.b, ext.c][w % 3];
|
|
866
|
+
put(4 + (8) + w, () => get(word).simd(S.i32extract).op(lane));
|
|
867
|
+
} else put(4 + (8) + w, () => b.i32(0));
|
|
868
|
+
b.op((11)).op((11));
|
|
869
|
+
}
|
|
870
|
+
return true;
|
|
871
|
+
}, dry = false, keeping = false, accumulate = (i) => {
|
|
872
|
+
if (!dry) {
|
|
873
|
+
b.get(P_CTX).get(reg(i.a)).simd(S.store).mem(2, (160));
|
|
874
|
+
for (let lane = 0; lane < (4); lane++)
|
|
875
|
+
b.i32(lane).get(L_PN).op((73)), i.c !== 4294967295 && get(i.c).simd(S.i32extract).op(lane).i32(0).op((71)).op((113)), keeping && b.get(V_KEEP).simd(S.i32extract).op(lane).i32(0).op((71)).op((113)), b.op((4), (64)), b.get(P_CTX).get(V_PLANE).simd(S.i32extract).op(lane).i32(2).op((116)).op((106)).set(L_IDX), i.op === Op2.ACC_IADD ? (b.get(L_IDX), b.get(L_IDX).op((40)).mem(2, (160)), get(i.b).simd(S.i32extract).op(lane).op((106)), b.op((54)).mem(2, (160))) : (b.get(L_IDX), b.get(L_IDX).op((42)).mem(2, (160)), get(i.b).simd(S.f32extract).op(lane), i.op === Op2.ACC_FADD ? b.op((146)) : jsMinScalar(i.op === Op2.ACC_FMAX), b.op(56).mem(2, (160))), b.op((11));
|
|
876
|
+
b.get(P_CTX).simd(S.load).mem(2, (160)).set(reg(i.a));
|
|
877
|
+
}
|
|
878
|
+
}, wideCarry = (i) => {
|
|
879
|
+
let wide = (word, lane, low) => {
|
|
880
|
+
get(word).simd(S.i32extract).op(lane), low && b.i32(1).op((113)), b.op((173));
|
|
881
|
+
};
|
|
882
|
+
for (let lane = 0; lane < (4); lane++)
|
|
883
|
+
b.get(V_REG + i.dst), wide(i.a, lane, false), wide(i.b, lane, false), i.op === Op2.UMULHI ? b.op((126)).op((66), (32)).op((136)).op((167)) : i.op === Op2.UADDC ? (b.op((124)), wide(i.c, lane, true), b.op((124)).op((66), (32)).op((136)).op((167))) : (wide(i.c, lane, true), b.op((124)).op((84))), b.simd(S.i32replace).op(lane).set(V_REG + i.dst);
|
|
884
|
+
}, stagedBody = staged(program), laneBase = () => stagedBody ? b.get(P_CTX).i32(laneScratchOffset(program)).op((106)) : b.load(P_CTX, (192)), laneOp = (pc) => {
|
|
885
|
+
let i = code[pc], ext = code[pc + 1], [inputs, outputs] = chunkIR74FJHU_js.laneSignature(i.dst);
|
|
886
|
+
[i.a, i.b, i.c, ext.a, ext.b].forEach((word, k) => {
|
|
887
|
+
laneBase(), (inputs & 1 << k) !== 0 ? get(word) : b.v128i([0, 0, 0, 0]), b.simd(S.store).mem(0, k * 16);
|
|
888
|
+
}), b.i32(i.dst), laneBase(), laneBase().i32((5) * 16).op((106)).call(FN.lanes);
|
|
889
|
+
let targets = [ext.dst, ext.c, ext.b];
|
|
890
|
+
for (let k = 0; k < outputs; k++) laneBase().simd(S.load).mem(0, ((5) + k) * 16).set(V_REG + targets[k]);
|
|
891
|
+
}, dataOp = (pc) => {
|
|
892
|
+
let i = code[pc], ext = code[pc + 1];
|
|
893
|
+
if (i.dst === chunkIR74FJHU_js.DATA_LIST) return;
|
|
894
|
+
let N = 4294967295, plan = {
|
|
895
|
+
[chunkIR74FJHU_js.DATA_KEYOF]: [[i.a, N, N, N], [false, false, false, false], true],
|
|
896
|
+
[chunkIR74FJHU_js.DATA_ROWOF]: [[i.a, N, N, N], [false, false, false, false], true],
|
|
897
|
+
[chunkIR74FJHU_js.DATA_FLOAD]: [[N, i.b, N, N], [false, false, false, false], true],
|
|
898
|
+
[chunkIR74FJHU_js.DATA_ROWS]: [[N, N, N, N], [false, false, false, false], true],
|
|
899
|
+
[chunkIR74FJHU_js.DATA_PGET]: [[N, i.b, i.c, N], [false, false, true, false], true],
|
|
900
|
+
[chunkIR74FJHU_js.DATA_PICK]: [[N, i.b, i.c, N], [false, false, true, false], false],
|
|
901
|
+
[chunkIR74FJHU_js.DATA_PSET]: [[N, i.b, i.c, ext.a], [false, false, false, true], false],
|
|
902
|
+
[chunkIR74FJHU_js.DATA_SEND]: [[N, i.b, i.c, ext.a], [false, false, false, true], false],
|
|
903
|
+
[chunkIR74FJHU_js.DATA_TALLY]: [[N, i.b, N, N], [false, true, false, false], false]
|
|
904
|
+
}, [inputs, masks, result] = plan[i.dst];
|
|
905
|
+
laneBase().get(V_ROW).simd(S.store).mem(0, 0), laneBase().get(V_VALID).simd(S.store).mem(0, 16), inputs.forEach((word, k) => {
|
|
906
|
+
laneBase(), word !== N ? get(word) : b.v128i(masks[k] ? [-1, -1, -1, -1] : [0, 0, 0, 0]), b.simd(S.store).mem(0, (2 + k) * 16);
|
|
907
|
+
}), b.get(P_CTX).i32(pc), laneBase().call(FN.data), result && laneBase().simd(S.load).mem(0, 96).set(V_REG + ext.dst);
|
|
908
|
+
}, query = (pc) => {
|
|
909
|
+
let i = code[pc], ext = code[pc + 1], from = pc + 2, to = ext.a, filtered = (ext.c & chunkIR74FJHU_js.QUERY_FILTERED) !== 0, kind = ext.c & chunkIR74FJHU_js.QUERY_SHAPE, filterAt = filtered ? pc - 2 : -1, shapeAt = kind === chunkIR74FJHU_js.QUERY_SPHERE ? -1 : filtered ? pc - 4 : pc - 2, optional = (word, fallback) => {
|
|
910
|
+
word === 4294967295 ? b.v128i([fallback, fallback, fallback, fallback]) : get(word);
|
|
911
|
+
}, params = [
|
|
912
|
+
() => ext.b === 4294967295 ? b.get(V_VALID) : get(ext.b).get(V_VALID).simd(S.and),
|
|
913
|
+
() => get(i.b),
|
|
914
|
+
() => optional(i.c, -1)
|
|
915
|
+
], shape = shapeAt < 0 ? null : [code[shapeAt].a, code[shapeAt].b, code[shapeAt].c, code[shapeAt + 1].a, code[shapeAt + 1].b, code[shapeAt + 1].c];
|
|
916
|
+
for (let k = 0; k < 6; k++) params.push(() => optional(shape === null ? 4294967295 : shape[k], 0));
|
|
917
|
+
params.push(() => optional(filterAt < 0 ? 4294967295 : code[filterAt].b, 0)), params.push(() => optional(filterAt < 0 ? 4294967295 : code[filterAt].c, 0)), params.forEach((emit, k) => {
|
|
918
|
+
b.load(P_CTX, (76)), emit(), b.simd(S.store).mem(0, k * 16);
|
|
919
|
+
}), b.load(P_CTX, (76)).get(V_ROW).simd(S.store).mem(0, (11) * 16), b.get(P_CTX).load(P_CTX, (76)).load(P_CTX, (76)).i32((11) * 16).op((106)), b.i32(kind).i32(filterAt < 0 ? -1 : code[filterAt].a).i32(filterAt < 0 ? 0 : code[filterAt + 1].a).call(FN.query).set(L_QN);
|
|
920
|
+
let stops = false;
|
|
921
|
+
for (let at = from; at < to; at++) code[at].op === chunkIR74FJHU_js.XOP && code[at].dst === chunkIR74FJHU_js.XOP_QSTOP && (stops = true);
|
|
922
|
+
if (b.i32(0).set(L_QP), b.op((2), (64)).op((3), (64)), b.get(L_QP).get(L_QN).op((79)).op((13), 1), b.get(L_QN).get(L_QP).op((107)).tee(L_PN).i32((4)).get(L_PN).i32((4)).op((73)).op((27)).set(L_PN), b.load(P_CTX, (56)).get(L_QP).i32(2).op((116)).op((106)).simd(S.load).mem(2, 0).set(V_PLANE), b.load(P_CTX, (60)).get(L_QP).i32(2).op((116)).op((106)).simd(S.load).mem(2, 0).set(V_PROW), stops) {
|
|
923
|
+
b.v128i([0, 0, 0, 0]).set(V_STOP), dry = true;
|
|
924
|
+
let ok2 = emitRange(from, to, true);
|
|
925
|
+
if (dry = false, !ok2) return false;
|
|
926
|
+
b.load(P_CTX, (76)).get(V_STOP).simd(S.store).mem(0, ((11) + 1) * 16), b.get(P_CTX).load(P_CTX, (76)).i32(((11) + 1) * 16).op((106)).get(L_QP).load(P_CTX, (76)).i32(((11) + 2) * 16).op((106)).call(FN.queryKeep), b.load(P_CTX, (76)).simd(S.load).mem(0, ((11) + 2) * 16).set(V_KEEP), keeping = true;
|
|
927
|
+
}
|
|
928
|
+
let ok = emitRange(from, to, true);
|
|
929
|
+
return keeping = false, ok ? (b.get(L_QP).i32((4)).op((106)).set(L_QP).op((12), 0).op((11)).op((11)), true) : false;
|
|
930
|
+
}, recordOp = (pc) => {
|
|
931
|
+
let i = code[pc], k = program.cross.indexOf(pc);
|
|
932
|
+
if (k < 0) return false;
|
|
933
|
+
let ext = i.op === chunkIR74FJHU_js.CROSS_OP.SCATTER || i.op === chunkIR74FJHU_js.XOP ? code[pc + 1] : i, recur = i.op === chunkIR74FJHU_js.XOP && chunkIR74FJHU_js.recurSub(i.dst), value = i.op === chunkIR74FJHU_js.CROSS_OP.COMPACT ? 4294967295 : i.a, aux = i.op === chunkIR74FJHU_js.CROSS_OP.SCATTER || recur ? i.b : i.op === chunkIR74FJHU_js.XOP && i.dst === chunkIR74FJHU_js.XOP_COMPONENTS_EDGES ? i.c : 4294967295, mask = i.op === chunkIR74FJHU_js.CROSS_OP.SCATTER ? ext.b : i.op === chunkIR74FJHU_js.CROSS_OP.COMPACT ? i.a : recur ? i.c : i.b;
|
|
934
|
+
b.get(P_CTX).op((40)).mem(2, k * (4)).set(L_BASE);
|
|
935
|
+
for (let lane = 0; lane < (4); lane++) {
|
|
936
|
+
laneInside(lane), b.op((4), (64)), b.get(L_BASE).get(L_I).i32(lane).op((106)).i32((4)).op((116)).op((106)).set(L_IDX);
|
|
937
|
+
let put = (at, word) => {
|
|
938
|
+
b.get(L_IDX), word(), b.op((54)).mem(2, at * (4));
|
|
939
|
+
};
|
|
940
|
+
put(0, () => value === 4294967295 ? b.i32(0) : get(value).simd(S.i32extract).op(lane)), put(1, () => aux === 4294967295 ? b.i32(0) : get(aux).simd(S.i32extract).op(lane)), put(2, () => mask === 4294967295 ? b.i32(1) : get(mask).simd(S.i32extract).op(lane).i32(0).op((71))), put(3, () => b.get(V_ROW).simd(S.i32extract).op(lane)), b.op((11));
|
|
941
|
+
}
|
|
942
|
+
return true;
|
|
943
|
+
}, emitRange = (from, to, pair) => {
|
|
944
|
+
let open = [], depthOf = (index) => open.length - 1 - index;
|
|
945
|
+
for (let pc = from; pc <= to; pc++) {
|
|
946
|
+
for (; open.length > 0 && open[open.length - 1].end === pc; )
|
|
947
|
+
open.pop(), b.op((11));
|
|
948
|
+
if (pc === to) break;
|
|
949
|
+
let i = code[pc]; V_REG + i.dst;
|
|
950
|
+
if (narrowXop(i.op, i.dst)) {
|
|
951
|
+
if (pair) return false;
|
|
952
|
+
laneOp(pc), pc++;
|
|
953
|
+
continue;
|
|
954
|
+
}
|
|
955
|
+
if (dataXop(i.op, i.dst)) {
|
|
956
|
+
if (pair) return false;
|
|
957
|
+
dataOp(pc), pc++;
|
|
958
|
+
continue;
|
|
959
|
+
}
|
|
960
|
+
if (gatherXop(i.op, i.dst)) {
|
|
961
|
+
let ext = code[pc + 1], field2 = i.dst === chunkIR74FJHU_js.XOP_FIELD, span = field2 ? i.c : 1;
|
|
962
|
+
if (field2 && pair || span < 1 || i.a + span > slotCount) return false;
|
|
963
|
+
for (let s = i.a; s < i.a + span; s++) if (!exactStorage(program.slots[s].kind, storages[s])) return false;
|
|
964
|
+
b.v128i([0, 0, 0, 0]).set(temp(7));
|
|
965
|
+
for (let lane = 0; lane < (4); lane++)
|
|
966
|
+
get(i.b).simd(S.i32extract).op(lane).set(L_A), b.get(L_A), field2 ? b.i32(i.c) : get(i.c).simd(S.i32extract).op(lane), b.op((73)).op((4), (64)), b.get(temp(7)), field2 ? (b.get(P_COLS).get(L_A).i32(i.a).op((106)).i32(2).op((116)).op((106)).op((40)).mem(2, 0), b.get(V_ROW).simd(S.i32extract).op(lane).i32(2).op((116)).op((106))) : b.get(L_SLOT + i.a).get(L_A).i32(2).op((116)).op((106)), b.op((40)).mem(2, 0).simd(S.i32replace).op(lane).set(temp(7)), b.op((11));
|
|
967
|
+
ext.a !== 4294967295 ? b.get(temp(7)).reg(ext.a).simd(S.and).set(V_REG + ext.dst) : b.get(temp(7)).set(V_REG + ext.dst), pc++;
|
|
968
|
+
continue;
|
|
969
|
+
}
|
|
970
|
+
if (i.op === chunkIR74FJHU_js.XOP && i.dst === chunkIR74FJHU_js.XOP_QUERY) {
|
|
971
|
+
if (pair || !query(pc)) return false;
|
|
972
|
+
pc = code[pc + 1].a - 1;
|
|
973
|
+
continue;
|
|
974
|
+
}
|
|
975
|
+
if (i.op === chunkIR74FJHU_js.XOP && (i.dst === chunkIR74FJHU_js.XOP_QSHAPE || i.dst === chunkIR74FJHU_js.XOP_QFILTER)) {
|
|
976
|
+
pc++;
|
|
977
|
+
continue;
|
|
978
|
+
}
|
|
979
|
+
if (i.op === chunkIR74FJHU_js.XOP && i.dst === chunkIR74FJHU_js.XOP_QSTOP) {
|
|
980
|
+
if (!pair) return false;
|
|
981
|
+
dry && get(i.a).get(V_STOP).simd(S.or).set(V_STOP), pc++;
|
|
982
|
+
continue;
|
|
983
|
+
}
|
|
984
|
+
if (chunkIR74FJHU_js.crossRow(i.op) || chunkIR74FJHU_js.stageEndingOp(i.op, i.dst)) {
|
|
985
|
+
if (pair || !recordOp(pc)) return false;
|
|
986
|
+
(i.op === chunkIR74FJHU_js.CROSS_OP.SCATTER || i.op === chunkIR74FJHU_js.XOP) && pc++;
|
|
987
|
+
continue;
|
|
988
|
+
}
|
|
989
|
+
let vector = chunkKZJRSXHK_js.isSimd(i), batch = vector ? chunkKZJRSXHK_js.simdScalarize(i, code[pc + 1], simdTemp) : [i];
|
|
990
|
+
if (batch === null) return false;
|
|
991
|
+
vector && pc++;
|
|
992
|
+
for (let one of batch) {
|
|
993
|
+
let i2 = one, d2 = V_REG + i2.dst;
|
|
994
|
+
switch (i2.op) {
|
|
995
|
+
case Op2.NOP:
|
|
996
|
+
case Op2.EXT:
|
|
997
|
+
break;
|
|
998
|
+
case Op2.MOV:
|
|
999
|
+
get(i2.a).set(d2);
|
|
1000
|
+
break;
|
|
1001
|
+
case Op2.LOAD:
|
|
1002
|
+
loadSlot(i2.a, d2);
|
|
1003
|
+
break;
|
|
1004
|
+
case Op2.STORE:
|
|
1005
|
+
storeSlot(i2.a, i2.b);
|
|
1006
|
+
break;
|
|
1007
|
+
case Op2.ROW:
|
|
1008
|
+
b.get(V_ROW).set(d2);
|
|
1009
|
+
break;
|
|
1010
|
+
case Op2.SEL:
|
|
1011
|
+
get(i2.b).reg(i2.c).reg(i2.a).simd(S.bitselect).set(d2);
|
|
1012
|
+
break;
|
|
1013
|
+
case Op2.JNONE: {
|
|
1014
|
+
let known2 = open.findIndex((o) => o.kind === "block" && o.end === i2.b);
|
|
1015
|
+
if (known2 >= 0)
|
|
1016
|
+
get(i2.a).simd(S.anyTrue).op((69)).op((13)), uleb2(b.code, depthOf(known2));
|
|
1017
|
+
else {
|
|
1018
|
+
if (open.length > 0 && open[open.length - 1].end < i2.b || i2.b > to) return false;
|
|
1019
|
+
b.op((2), (64)), open.push({ kind: "block", end: i2.b, pc, counter: -1 }), get(i2.a).simd(S.anyTrue).op((69)).op((13), 0);
|
|
1020
|
+
}
|
|
1021
|
+
break;
|
|
1022
|
+
}
|
|
1023
|
+
case Op2.LOOP_INIT: {
|
|
1024
|
+
let counter = L_COUNTERS + (i2.a - args), nextPc = code.findIndex((c, k) => k > pc && c.op === Op2.LOOP_NEXT && c.a === i2.a && c.c === pc + 1);
|
|
1025
|
+
if (nextPc < 0 || i2.c > to || open.length > 0 && open[open.length - 1].end < i2.c) return false;
|
|
1026
|
+
b.i32(0).set(counter), b.op((2), (64)), open.push({ kind: "block", end: i2.c, pc, counter: i2.a }), trips(b, scalarLocal(i2.b), i2.dst, L_TMP), b.op((69)).op((13), 0), b.op((3), (64)), open.push({ kind: "loop", end: nextPc + 1, pc, counter: i2.a }), b.get(counter).simd(S.i32splat).set(V_UNIFORM + i2.a);
|
|
1027
|
+
break;
|
|
1028
|
+
}
|
|
1029
|
+
case Op2.LOOP_NEXT: {
|
|
1030
|
+
let counter = L_COUNTERS + (i2.a - args);
|
|
1031
|
+
b.get(counter).i32(1).op((106)).tee(counter), b.simd(S.i32splat).set(V_UNIFORM + i2.a), b.get(counter), trips(b, scalarLocal(i2.b), i2.dst, L_TMP), b.op((72)).op((13), 0);
|
|
1032
|
+
break;
|
|
1033
|
+
}
|
|
1034
|
+
case Op2.NEIGHBOURS: {
|
|
1035
|
+
if (pair || !neighbours(pc + 1, i2.b, i2.c)) return false;
|
|
1036
|
+
pc = i2.b - 1;
|
|
1037
|
+
break;
|
|
1038
|
+
}
|
|
1039
|
+
case Op2.NLOAD: {
|
|
1040
|
+
let index = snapshotIndex[i2.a];
|
|
1041
|
+
b.v128i([0, 0, 0, 0]).set(d2);
|
|
1042
|
+
for (let lane = 0; lane < (4); lane++)
|
|
1043
|
+
b.get(d2), field((0)), field((4)).i32(index).op((108)).get(V_PROW).simd(S.i32extract).op(lane).op((106)).i32(2).op((116)).op((106)), b.op((40)).mem(2, 0).simd(S.i32replace).op(lane).set(d2);
|
|
1044
|
+
break;
|
|
1045
|
+
}
|
|
1046
|
+
case Op2.OUTER: {
|
|
1047
|
+
b.get(P_CTX).get(reg(i2.a)).simd(S.store).mem(2, (112)), b.v128i([0, 0, 0, 0]).set(temp(7));
|
|
1048
|
+
for (let lane = 0; lane < (4); lane++)
|
|
1049
|
+
b.get(temp(7)), b.get(P_CTX).get(V_PLANE).simd(S.i32extract).op(lane).i32(2).op((116)).op((106)).op((40)).mem(2, (112)), b.simd(S.i32replace).op(lane).set(temp(7));
|
|
1050
|
+
b.get(temp(7)).set(d2);
|
|
1051
|
+
break;
|
|
1052
|
+
}
|
|
1053
|
+
case Op2.NROW:
|
|
1054
|
+
b.get(V_PROW).set(d2);
|
|
1055
|
+
break;
|
|
1056
|
+
case Op2.ACC_FADD:
|
|
1057
|
+
case Op2.ACC_FMIN:
|
|
1058
|
+
case Op2.ACC_FMAX:
|
|
1059
|
+
case Op2.ACC_IADD:
|
|
1060
|
+
accumulate(i2);
|
|
1061
|
+
break;
|
|
1062
|
+
case Op2.EMIT: {
|
|
1063
|
+
if (pair || !emitEvent(pc, open)) return false;
|
|
1064
|
+
pc += Math.ceil(program.channels[i2.dst] / 3);
|
|
1065
|
+
break;
|
|
1066
|
+
}
|
|
1067
|
+
case Op2.FADD:
|
|
1068
|
+
case Op2.FSUB:
|
|
1069
|
+
case Op2.FMUL:
|
|
1070
|
+
case Op2.FDIV:
|
|
1071
|
+
get(i2.a).reg(i2.b).simd(i2.op === Op2.FADD ? S.f32add : i2.op === Op2.FSUB ? S.f32sub : i2.op === Op2.FMUL ? S.f32mul : S.f32div).set(d2);
|
|
1072
|
+
break;
|
|
1073
|
+
case Op2.FMIN:
|
|
1074
|
+
case Op2.FMAX:
|
|
1075
|
+
jsMin(() => get(i2.a), () => get(i2.b), d2, i2.op === Op2.FMAX);
|
|
1076
|
+
break;
|
|
1077
|
+
case Op2.FMOD:
|
|
1078
|
+
lanes(noise("fmod"), [i2.a, i2.b], d2);
|
|
1079
|
+
break;
|
|
1080
|
+
case Op2.FPOW:
|
|
1081
|
+
lanes(fmath("pow"), [i2.a, i2.b], d2);
|
|
1082
|
+
break;
|
|
1083
|
+
case Op2.FATAN2:
|
|
1084
|
+
lanes(fmath("atan2"), [i2.a, i2.b], d2);
|
|
1085
|
+
break;
|
|
1086
|
+
case Op2.NOISE2:
|
|
1087
|
+
lanes(noise("noise2"), [i2.a, i2.b], d2);
|
|
1088
|
+
break;
|
|
1089
|
+
case Op2.NOISE3:
|
|
1090
|
+
lanes(noise("noise3"), [i2.a, i2.b, i2.c], d2);
|
|
1091
|
+
break;
|
|
1092
|
+
case Op2.FLOG2:
|
|
1093
|
+
case Op2.FSIN:
|
|
1094
|
+
case Op2.FCOS:
|
|
1095
|
+
case Op2.FTAN:
|
|
1096
|
+
case Op2.FASIN:
|
|
1097
|
+
case Op2.FACOS:
|
|
1098
|
+
case Op2.FATAN:
|
|
1099
|
+
case Op2.FEXP:
|
|
1100
|
+
case Op2.FLOG: {
|
|
1101
|
+
i2.op === Op2.FSIN || i2.op === Op2.FCOS ? get(i2.a).call(fmathSimd(i2.op === Op2.FSIN ? "sin" : "cos")).set(d2) : lanes(fmath(UNARY_FMATH[i2.op]), [i2.a], d2);
|
|
1102
|
+
break;
|
|
1103
|
+
}
|
|
1104
|
+
case Op2.FMULADD:
|
|
1105
|
+
get(i2.a).reg(i2.b).simd(S.f32mul).reg(i2.c).simd(S.f32add).set(d2);
|
|
1106
|
+
break;
|
|
1107
|
+
case Op2.FMULSUB:
|
|
1108
|
+
get(i2.a).reg(i2.b).simd(S.f32mul).reg(i2.c).simd(S.f32sub).set(d2);
|
|
1109
|
+
break;
|
|
1110
|
+
case Op2.FSUBMUL:
|
|
1111
|
+
get(i2.a).reg(i2.b).simd(S.f32sub).reg(i2.c).simd(S.f32mul).set(d2);
|
|
1112
|
+
break;
|
|
1113
|
+
case Op2.FADDMUL:
|
|
1114
|
+
get(i2.a).reg(i2.b).simd(S.f32add).reg(i2.c).simd(S.f32mul).set(d2);
|
|
1115
|
+
break;
|
|
1116
|
+
case Op2.FCLAMP:
|
|
1117
|
+
jsMin(() => get(i2.a), () => get(i2.b), temp(3), true), jsMin(() => b.get(temp(3)), () => get(i2.c), d2, false);
|
|
1118
|
+
break;
|
|
1119
|
+
case Op2.FLERP:
|
|
1120
|
+
get(i2.a).reg(i2.b).reg(i2.a).simd(S.f32sub).reg(i2.c).simd(S.f32mul).simd(S.f32add).set(d2);
|
|
1121
|
+
break;
|
|
1122
|
+
case Op2.FNEG:
|
|
1123
|
+
get(i2.a).simd(S.f32neg).set(d2);
|
|
1124
|
+
break;
|
|
1125
|
+
case Op2.FABS:
|
|
1126
|
+
get(i2.a).simd(S.f32abs).set(d2);
|
|
1127
|
+
break;
|
|
1128
|
+
case Op2.FSQRT:
|
|
1129
|
+
get(i2.a).simd(S.f32sqrt).set(d2);
|
|
1130
|
+
break;
|
|
1131
|
+
case Op2.FFLOOR:
|
|
1132
|
+
get(i2.a).simd(S.f32floor).set(d2);
|
|
1133
|
+
break;
|
|
1134
|
+
case Op2.FCEIL:
|
|
1135
|
+
get(i2.a).simd(S.f32ceil).set(d2);
|
|
1136
|
+
break;
|
|
1137
|
+
case Op2.FTRUNC:
|
|
1138
|
+
get(i2.a).simd(S.f32trunc).set(d2);
|
|
1139
|
+
break;
|
|
1140
|
+
case Op2.FROUND:
|
|
1141
|
+
get(i2.a).simd(S.f32floor).set(temp(0)), b.get(temp(0)).v128f(1).simd(S.f32add).get(temp(0)), get(i2.a).get(temp(0)).simd(S.f32sub).v128f(0.5).simd(S.f32ge).simd(S.bitselect).set(d2);
|
|
1142
|
+
break;
|
|
1143
|
+
case Op2.FSIGN:
|
|
1144
|
+
get(i2.a).set(temp(0)), b.v128f(1).v128f(-1).get(temp(0)).get(temp(0)).v128f(0).simd(S.f32lt).simd(S.bitselect), b.v128f(0).get(temp(0)).simd(S.f32lt).simd(S.bitselect).set(d2);
|
|
1145
|
+
break;
|
|
1146
|
+
case Op2.FLEN2:
|
|
1147
|
+
get(i2.a).reg(i2.a).simd(S.f32mul).reg(i2.b).reg(i2.b).simd(S.f32mul).simd(S.f32add).simd(S.f32sqrt).set(d2);
|
|
1148
|
+
break;
|
|
1149
|
+
case Op2.FLEN3:
|
|
1150
|
+
get(i2.a).reg(i2.a).simd(S.f32mul).reg(i2.b).reg(i2.b).simd(S.f32mul).simd(S.f32add).reg(i2.c).reg(i2.c).simd(S.f32mul).simd(S.f32add).simd(S.f32sqrt).set(d2);
|
|
1151
|
+
break;
|
|
1152
|
+
case Op2.FDOT2: {
|
|
1153
|
+
let e = code[pc + 1];
|
|
1154
|
+
get(i2.a).reg(i2.b).simd(S.f32mul).reg(i2.c).reg(e.a).simd(S.f32mul).simd(S.f32add).set(d2), pc++;
|
|
1155
|
+
break;
|
|
1156
|
+
}
|
|
1157
|
+
case Op2.FDOT3: {
|
|
1158
|
+
let e = code[pc + 1];
|
|
1159
|
+
get(i2.a).reg(i2.b).simd(S.f32mul).reg(i2.c).reg(e.a).simd(S.f32mul).simd(S.f32add).reg(e.b).reg(e.c).simd(S.f32mul).simd(S.f32add).set(d2), pc++;
|
|
1160
|
+
break;
|
|
1161
|
+
}
|
|
1162
|
+
case Op2.FLT:
|
|
1163
|
+
get(i2.a).reg(i2.b).simd(S.f32lt).set(d2);
|
|
1164
|
+
break;
|
|
1165
|
+
case Op2.FLE:
|
|
1166
|
+
get(i2.a).reg(i2.b).simd(S.f32le).set(d2);
|
|
1167
|
+
break;
|
|
1168
|
+
case Op2.FEQ:
|
|
1169
|
+
get(i2.a).reg(i2.b).simd(S.f32eq).set(d2);
|
|
1170
|
+
break;
|
|
1171
|
+
case Op2.FNE:
|
|
1172
|
+
get(i2.a).reg(i2.b).simd(S.f32ne).set(d2);
|
|
1173
|
+
break;
|
|
1174
|
+
case Op2.IADD:
|
|
1175
|
+
case Op2.ISUB:
|
|
1176
|
+
case Op2.IMUL:
|
|
1177
|
+
case Op2.IAND:
|
|
1178
|
+
case Op2.IOR:
|
|
1179
|
+
case Op2.IXOR:
|
|
1180
|
+
case Op2.IMIN:
|
|
1181
|
+
case Op2.IMAX:
|
|
1182
|
+
case Op2.UMIN:
|
|
1183
|
+
case Op2.UMAX:
|
|
1184
|
+
case Op2.ILT:
|
|
1185
|
+
case Op2.ILE:
|
|
1186
|
+
case Op2.IEQ:
|
|
1187
|
+
case Op2.INE:
|
|
1188
|
+
case Op2.ULT:
|
|
1189
|
+
case Op2.ULE:
|
|
1190
|
+
case Op2.MAND:
|
|
1191
|
+
case Op2.MOR:
|
|
1192
|
+
case Op2.MANDN: {
|
|
1193
|
+
let table = {
|
|
1194
|
+
[Op2.IADD]: S.i32add,
|
|
1195
|
+
[Op2.ISUB]: S.i32sub,
|
|
1196
|
+
[Op2.IMUL]: S.i32mul,
|
|
1197
|
+
[Op2.IAND]: S.and,
|
|
1198
|
+
[Op2.IOR]: S.or,
|
|
1199
|
+
[Op2.IXOR]: S.xor,
|
|
1200
|
+
[Op2.IMIN]: S.i32min_s,
|
|
1201
|
+
[Op2.IMAX]: S.i32max_s,
|
|
1202
|
+
[Op2.UMIN]: S.i32min_u,
|
|
1203
|
+
[Op2.UMAX]: S.i32max_u,
|
|
1204
|
+
[Op2.ILT]: S.i32lt_s,
|
|
1205
|
+
[Op2.ILE]: S.i32le_s,
|
|
1206
|
+
[Op2.IEQ]: S.i32eq,
|
|
1207
|
+
[Op2.INE]: S.i32ne,
|
|
1208
|
+
[Op2.ULT]: S.i32lt_u,
|
|
1209
|
+
[Op2.ULE]: S.i32le_u,
|
|
1210
|
+
[Op2.MAND]: S.and,
|
|
1211
|
+
[Op2.MOR]: S.or,
|
|
1212
|
+
[Op2.MANDN]: S.andnot
|
|
1213
|
+
};
|
|
1214
|
+
get(i2.a).reg(i2.b).simd(table[i2.op]).set(d2);
|
|
1215
|
+
break;
|
|
1216
|
+
}
|
|
1217
|
+
case Op2.IREM:
|
|
1218
|
+
case Op2.UREM: {
|
|
1219
|
+
let signed = i2.op === Op2.IREM;
|
|
1220
|
+
perLane(i2.a, i2.b, d2, () => {
|
|
1221
|
+
b.i32(0), b.get(L_A), b.get(L_B).op((69)), signed && b.get(L_A).i32((-2147483648)).op((70)).get(L_B).i32(-1).op((70)).op((113)).op((114)), b.op((4), (127)).i32(1).op((5)).get(L_B).op((11)), b.op(signed ? (111) : (112)), b.get(L_B).op((69)), signed && b.get(L_A).i32((-2147483648)).op((70)).get(L_B).i32(-1).op((70)).op((113)).op((114)), b.op((27));
|
|
1222
|
+
});
|
|
1223
|
+
break;
|
|
1224
|
+
}
|
|
1225
|
+
case Op2.ISHL:
|
|
1226
|
+
case Op2.ISHR:
|
|
1227
|
+
case Op2.IUSHR: {
|
|
1228
|
+
let vector2 = i2.op === Op2.ISHL ? S.i32shl : i2.op === Op2.ISHR ? S.i32shr_s : S.i32shr_u;
|
|
1229
|
+
if ((i2.b & 2147483648) !== 0 && i2.b !== 4294967295)
|
|
1230
|
+
get(i2.a).get(scalarLocal(i2.b)).i32((31)).op((113)).simd(vector2).set(d2);
|
|
1231
|
+
else {
|
|
1232
|
+
let scalar = i2.op === Op2.ISHL ? (116) : i2.op === Op2.ISHR ? (117) : (118);
|
|
1233
|
+
perLane(i2.a, i2.b, d2, () => {
|
|
1234
|
+
b.get(L_A).get(L_B).i32((31)).op((113)).op(scalar);
|
|
1235
|
+
});
|
|
1236
|
+
}
|
|
1237
|
+
break;
|
|
1238
|
+
}
|
|
1239
|
+
case Op2.INEG:
|
|
1240
|
+
get(i2.a).simd(S.i32neg).set(d2);
|
|
1241
|
+
break;
|
|
1242
|
+
case Op2.IABS:
|
|
1243
|
+
get(i2.a).simd(S.i32abs).set(d2);
|
|
1244
|
+
break;
|
|
1245
|
+
case Op2.INOT:
|
|
1246
|
+
case Op2.MNOT:
|
|
1247
|
+
get(i2.a).simd(S.not).set(d2);
|
|
1248
|
+
break;
|
|
1249
|
+
case Op2.ITOF:
|
|
1250
|
+
get(i2.a).simd(S.convertS).set(d2);
|
|
1251
|
+
break;
|
|
1252
|
+
case Op2.UTOF:
|
|
1253
|
+
get(i2.a).simd(S.convertU).set(d2);
|
|
1254
|
+
break;
|
|
1255
|
+
case Op2.FTOI:
|
|
1256
|
+
get(i2.a).set(temp(0)), toInt(temp(0), d2);
|
|
1257
|
+
break;
|
|
1258
|
+
case Op2.BTOF:
|
|
1259
|
+
b.v128f(1).v128f(0), get(i2.a).v128i([0, 0, 0, 0]).simd(S.i32ne).simd(S.bitselect).set(d2);
|
|
1260
|
+
break;
|
|
1261
|
+
case Op2.BTOI:
|
|
1262
|
+
b.v128i([1, 1, 1, 1]).v128i([0, 0, 0, 0]), get(i2.a).v128i([0, 0, 0, 0]).simd(S.i32ne).simd(S.bitselect).set(d2);
|
|
1263
|
+
break;
|
|
1264
|
+
case Op2.FTOB:
|
|
1265
|
+
get(i2.a).v128f(0).simd(S.f32ne), get(i2.a).reg(i2.a).simd(S.f32eq).simd(S.and).set(d2);
|
|
1266
|
+
break;
|
|
1267
|
+
case Op2.ITOB:
|
|
1268
|
+
get(i2.a).v128i([0, 0, 0, 0]).simd(S.i32ne).set(d2);
|
|
1269
|
+
break;
|
|
1270
|
+
case Op2.UADDC:
|
|
1271
|
+
case Op2.USUBB:
|
|
1272
|
+
case Op2.UMULHI:
|
|
1273
|
+
wideCarry(i2);
|
|
1274
|
+
break;
|
|
1275
|
+
case Op2.HASH:
|
|
1276
|
+
hashInto(i2), b.set(d2);
|
|
1277
|
+
break;
|
|
1278
|
+
case Op2.RAND:
|
|
1279
|
+
hashInto(i2), b.i32(8).simd(S.i32shr_u).simd(S.convertU).v128f(UNIT_SCALE).simd(S.f32mul).set(d2);
|
|
1280
|
+
break;
|
|
1281
|
+
default:
|
|
1282
|
+
return false;
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
return open.length === 0;
|
|
1287
|
+
}, axis = (value) => {
|
|
1288
|
+
value(), field((36)).op((190)).op((148)).op((142)).op((252)), uleb2(b.code, (0));
|
|
1289
|
+
}, chunk = (from, to, count) => (count(), b.set(L_PN), b.get(P_CTX).simd(S.load).mem(2, (128)).set(V_PLANE), b.get(P_CTX).simd(S.load).mem(2, (144)).set(V_PROW), emitRange(from, to, true)), snapshotAt = (slot, row) => {
|
|
1290
|
+
field((0)), field((4)).i32(snapshotIndex[slot]).op((108)).get(row).op((106)).i32(2).op((116)).op((106)).op((42)).mem(2, 0);
|
|
1291
|
+
}, neighbours = (from, to, active) => {
|
|
1292
|
+
let position = program.position;
|
|
1293
|
+
if (position === null) return false;
|
|
1294
|
+
let [px, py, pz] = position;
|
|
1295
|
+
return b.get(P_CTX).get(V_ROW).simd(S.store).mem(2, (80)), b.get(P_CTX), active === 4294967295 ? b.get(V_VALID) : get(active).get(V_VALID).simd(S.and), b.simd(S.store).mem(2, (96)), b.i32(0).set(L_PCOUNT), b.op((2), (64)), b.load(P_CTX, (48)).op((69)).op((13), 0), b.i32(0).set(L_LANE), b.op((2), (64)).op((3), (64)), b.get(L_LANE).i32((4)).op((79)).op((13), 1), b.get(P_CTX).get(L_LANE).i32(2).op((116)).op((106)).op((40)).mem(2, (96)).op((4), (64)), b.get(P_CTX).get(L_LANE).i32(2).op((116)).op((106)).op((40)).mem(2, (80)).set(L_ROW), snapshotAt(px, L_ROW), b.set(F_CX), snapshotAt(py, L_ROW), b.set(F_CY), pz === 4294967295 ? b.f32(0).set(F_CZ) : (snapshotAt(pz, L_ROW), b.set(F_CZ)), walkCells(from, to, () => field((40)).op((190)), pz);
|
|
1296
|
+
}, walkCells = (from, to, radius, pz) => {
|
|
1297
|
+
let low = (center) => axis(() => {
|
|
1298
|
+
b.get(center), radius(), b.op((147));
|
|
1299
|
+
}), high = (center) => axis(() => {
|
|
1300
|
+
b.get(center), radius(), b.op((146));
|
|
1301
|
+
});
|
|
1302
|
+
low(F_CX), b.set(L_GX), high(F_CX), b.set(L_HX), low(F_CY), b.set(L_LY), high(F_CY), b.set(L_HY), pz === 4294967295 ? (b.i32(0).set(L_LZ), b.i32(0).set(L_HZ)) : (low(F_CZ), b.set(L_LZ), high(F_CZ), b.set(L_HZ)), b.op((2), (64)).op((3), (64)), b.get(L_LY).set(L_GY), b.op((2), (64)).op((3), (64)), b.get(L_LZ).set(L_GZ), b.op((2), (64)).op((3), (64)), b.get(L_GY).get(L_GX).i32((1021)).op((108)).op((106)).get(L_GZ).i32((65539)).op((108)).op((106)), field((32)).op((113)).set(L_IDX), field((8)).get(L_IDX).i32(2).op((116)).op((106)).tee(L_BASE).op((40)).mem(2, 0).set(L_SLOT_AT), b.get(L_BASE).op((40)).mem(2, 4).set(L_END), b.op((2), (64)).op((3), (64)), b.get(L_SLOT_AT).get(L_END).op((79)).op((13), 1), field((12)).get(L_SLOT_AT).i32(12).op((108)).op((106)).set(L_BASE), b.get(L_BASE).op((40)).mem(2, 0).get(L_GX).op((70)), b.get(L_BASE).op((40)).mem(2, 4).get(L_GY).op((70)).op((113)), b.get(L_BASE).op((40)).mem(2, 8).get(L_GZ).op((70)).op((113)), b.op((4), (64));
|
|
1303
|
+
let coordinate = (ctxOffset, center, out) => {
|
|
1304
|
+
field(ctxOffset).get(L_SLOT_AT).i32(2).op((116)).op((106)).op((42)).mem(2, 0).get(center).op((147)).set(out);
|
|
1305
|
+
};
|
|
1306
|
+
return coordinate((16), F_CX, F_DX), coordinate((20), F_CY, F_DY), coordinate((24), F_CZ, F_DZ), field((28)).get(L_SLOT_AT).i32(2).op((116)).op((106)).op((40)).mem(2, 0).set(L_NROW), b.get(F_DX).get(F_DX).op((148)).get(F_DY).get(F_DY).op((148)).op((146)).get(F_DZ).get(F_DZ).op((148)).op((146)), field((44)).op((190)).op((95)), b.get(L_NROW).get(L_ROW).op((71)).op((113)), b.op((4), (64)), b.get(P_CTX).get(L_PCOUNT).i32(2).op((116)).op((106)).get(L_LANE).op((54)).mem(2, (128)), b.get(P_CTX).get(L_PCOUNT).i32(2).op((116)).op((106)).get(L_NROW).op((54)).mem(2, (144)), b.get(L_PCOUNT).i32(1).op((106)).tee(L_PCOUNT).i32((4)).op((70)).op((4), (64)), !chunk(from, to, () => b.i32((4))) || (b.i32(0).set(L_PCOUNT), b.op((11)), b.op((11)), b.op((11)), b.get(L_SLOT_AT).i32(1).op((106)).set(L_SLOT_AT).op((12), 0).op((11)).op((11)), b.get(L_GZ).get(L_HZ).op((70)).op((13), 1), b.get(L_GZ).i32(1).op((106)).set(L_GZ).op((12), 0).op((11)).op((11)), b.get(L_GY).get(L_HY).op((70)).op((13), 1), b.get(L_GY).i32(1).op((106)).set(L_GY).op((12), 0).op((11)).op((11)), b.get(L_GX).get(L_HX).op((70)).op((13), 1), b.get(L_GX).i32(1).op((106)).set(L_GX).op((12), 0).op((11)).op((11)), b.op((11)), b.get(L_LANE).i32(1).op((106)).set(L_LANE).op((12), 0).op((11)).op((11)), b.get(L_PCOUNT).op((4), (64)), !chunk(from, to, () => b.get(L_PCOUNT))) ? false : (b.op((11)), b.op((11)), true);
|
|
1307
|
+
};
|
|
1308
|
+
b.get(P_ROWS).op((69)).op((4), (64)), b.op((2), (64)).op((3), (64)), b.get(L_I).i32((4) * (2)).op((106)).get(P_N).op((75)).op((13), 1);
|
|
1309
|
+
for (let copy = 0; copy < (2); copy++) {
|
|
1310
|
+
if (chunkRows("full"), !emitRange(start, end, false)) return null;
|
|
1311
|
+
advance();
|
|
1312
|
+
}
|
|
1313
|
+
if (b.op((12), 0).op((11)).op((11)), b.op((2), (64)).op((3), (64)), b.get(L_I).i32((4)).op((106)).get(P_N).op((75)).op((13), 1), chunkRows("full"), !emitRange(start, end, false) || (advance(), b.op((12), 0).op((11)).op((11)), b.get(L_I).get(P_N).op((73)).op((4), (64)), chunkRows("tail"), !emitRange(start, end, false)) || (b.op((11)), b.op((5)), b.op((2), (64)).op((3), (64)), b.get(L_I).get(P_N).op((73)).op((69)).op((13), 1), chunkRows("list"), !emitRange(start, end, false))) return null;
|
|
1314
|
+
advance(), b.op((12), 0).op((11)).op((11)), b.op((11)).op((11));
|
|
1315
|
+
let body = [];
|
|
1316
|
+
uleb2(body, 3), uleb2(body, i32Locals), body.push((127)), uleb2(body, f32Locals), body.push((125)), uleb2(body, v128Locals), body.push((123));
|
|
1317
|
+
for (let x of b.code) body.push(x);
|
|
1318
|
+
return body;
|
|
1319
|
+
}
|
|
1320
|
+
var GROUP_VALUE = new Float32Array(1), GROUP_BITS = new Uint32Array(GROUP_VALUE.buffer), groupCursor = new Uint32Array(0);
|
|
1321
|
+
function groupOf(groups, isFloat, fallback, raw) {
|
|
1322
|
+
for (let g = 0; g < groups.length; g++)
|
|
1323
|
+
if (!groups[g].isDefault) {
|
|
1324
|
+
if (isFloat) {
|
|
1325
|
+
if (GROUP_BITS[0] = groups[g].value, raw === GROUP_VALUE[0]) return g;
|
|
1326
|
+
} else if (raw >>> 0 === groups[g].value >>> 0) return g;
|
|
1327
|
+
}
|
|
1328
|
+
return fallback;
|
|
1329
|
+
}
|
|
1330
|
+
function bucketGroups(program, state, count, rows, offsets) {
|
|
1331
|
+
let groups = program.groups, isFloat = program.slots[program.state].kind === 0, fallback = -1;
|
|
1332
|
+
for (let g = 0; g < groups.length; g++)
|
|
1333
|
+
if (groups[g].isDefault) {
|
|
1334
|
+
fallback = g;
|
|
1335
|
+
break;
|
|
1336
|
+
}
|
|
1337
|
+
offsets.fill(0);
|
|
1338
|
+
for (let row = 0; row < count; row++) {
|
|
1339
|
+
let g = groupOf(groups, isFloat, fallback, state[row]);
|
|
1340
|
+
g >= 0 && offsets[g + 1]++;
|
|
1341
|
+
}
|
|
1342
|
+
for (let g = 1; g <= groups.length; g++) offsets[g] += offsets[g - 1];
|
|
1343
|
+
groupCursor.length < groups.length && (groupCursor = new Uint32Array(groups.length));
|
|
1344
|
+
let cursor = groupCursor;
|
|
1345
|
+
for (let g = 0; g < groups.length; g++) cursor[g] = offsets[g];
|
|
1346
|
+
for (let row = 0; row < count; row++) {
|
|
1347
|
+
let g = groupOf(groups, isFloat, fallback, state[row]);
|
|
1348
|
+
g >= 0 && (rows[cursor[g]++] = row);
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
function wasmExportName(group) {
|
|
1352
|
+
return group < 0 ? "run" : `g${group}`;
|
|
1353
|
+
}
|
|
1354
|
+
function compileWasmKernel(program, storages, sharedMaxPages = null) {
|
|
1355
|
+
if (!wasmSupports(program, storages)) return null;
|
|
1356
|
+
let plan = staged(program) ? wasmStages(program) : null, ranges = plan !== null ? plan.map((p) => [p.start, p.end]) : program.state >= 0 ? program.groups.map((g) => [g.start, g.end]) : [[0, program.code.length]], bodies = [], fmathBase = IMPORTS.length + ranges.length, usesFmath = program.code.some((i) => FMATH_OPS.has(i.op)), usesNoise = program.code.some((i) => NOISE_OPS.has(i.op)), fmathCount = usesFmath ? WASM_FMATH.length + WASM_FMATH_SIMD.length : 0, noiseBase = fmathBase + fmathCount;
|
|
1357
|
+
for (let [start, end] of ranges) {
|
|
1358
|
+
let body = functionBody(program, storages, start, end, fmathBase, noiseBase);
|
|
1359
|
+
if (body === null) return null;
|
|
1360
|
+
bodies.push(body);
|
|
1361
|
+
}
|
|
1362
|
+
let internal = [...usesFmath ? [...wasmFmathBodies(), ...wasmFmathSimdBodies(fmathBase)] : [], ...usesNoise ? wasmNoiseBodies() : []], internalType = (k) => k >= fmathCount ? WASM_NOISE[k - fmathCount] === "noise3" ? (4) : (3) : k >= WASM_FMATH.length ? (8) : WASM_FMATH_BINARY.has(WASM_FMATH[k]) ? (3) : (2), out = [0, 97, 115, 109, 1, 0, 0, 0], types = [];
|
|
1363
|
+
uleb2(types, 9), types.push(96, 1, (125), 1, (127)), types.push(96, 5, (127), (127), (127), (127), (127), 0), types.push(96, 1, (125), 1, (125)), types.push(96, 2, (125), (125), 1, (125)), types.push(96, 3, (125), (125), (125), 1, (125)), types.push(96, 3, (127), (127), (127), 0), types.push(96, 6, (127), (127), (127), (127), (127), (127), 1, (127)), types.push(96, 4, (127), (127), (127), (127), 0), types.push(96, 1, (123), 1, (123)), section(out, 1, types);
|
|
1364
|
+
let imports = [];
|
|
1365
|
+
uleb2(imports, IMPORTS.length + 1);
|
|
1366
|
+
for (let fn of IMPORTS)
|
|
1367
|
+
name(imports, "env"), name(imports, fn), imports.push(0), uleb2(imports, IMPORT_TYPE[fn]);
|
|
1368
|
+
name(imports, "env"), name(imports, "memory"), sharedMaxPages === null ? imports.push(2, 0, 1) : (imports.push(2, 3, 1), uleb2(imports, sharedMaxPages)), section(out, 2, imports);
|
|
1369
|
+
let functions = [];
|
|
1370
|
+
uleb2(functions, bodies.length + internal.length);
|
|
1371
|
+
for (let k = 0; k < bodies.length; k++) uleb2(functions, 1);
|
|
1372
|
+
for (let k = 0; k < internal.length; k++) uleb2(functions, internalType(k));
|
|
1373
|
+
section(out, 3, functions);
|
|
1374
|
+
let exports = [];
|
|
1375
|
+
uleb2(exports, bodies.length), bodies.forEach((_, k) => {
|
|
1376
|
+
name(exports, plan !== null ? wasmStageName(k) : wasmExportName(program.state >= 0 ? k : -1)), exports.push(0), uleb2(exports, k + IMPORTS.length);
|
|
1377
|
+
}), section(out, 7, exports);
|
|
1378
|
+
let codeSection = [];
|
|
1379
|
+
uleb2(codeSection, bodies.length + internal.length);
|
|
1380
|
+
for (let body of [...bodies, ...internal]) {
|
|
1381
|
+
uleb2(codeSection, body.length);
|
|
1382
|
+
for (let x of body) codeSection.push(x);
|
|
1383
|
+
}
|
|
1384
|
+
return section(out, 10, codeSection), { bytes: new Uint8Array(out), slots: program.slots.length, groups: plan === null && program.state >= 0 ? bodies.length : 0, stages: plan === null ? [] : plan.map((p) => p.stage) };
|
|
1385
|
+
}
|
|
1386
|
+
function trips(b, local, flags, tmp) {
|
|
1387
|
+
let get = () => b.get(local);
|
|
1388
|
+
(flags & chunkIR74FJHU_js.LOOP_COUNT_F32) !== 0 ? (get().op((190)).op((141)).op((252)), uleb2(b.code, (1)), b.i32(0), get().op((190)).f32(0).op((94)), b.op((27))) : b.i32(0).get(local).get(local).i32(0).op((72)).op((27)), b.tee(tmp).i32(65536).get(tmp).i32(65536).op((72)).op((27));
|
|
1389
|
+
}
|
|
1390
|
+
function readAsBits(kind, storage, raw) {
|
|
1391
|
+
if (kind === 0)
|
|
1392
|
+
return storage === 0 ? raw >>> 0 : storage === 1 ? chunkIR74FJHU_js.f32Bits(Math.fround(raw | 0)) : storage === 2 ? chunkIR74FJHU_js.f32Bits(Math.fround(raw >>> 0)) : chunkIR74FJHU_js.f32Bits(raw & (255));
|
|
1393
|
+
if (kind === 3) {
|
|
1394
|
+
if (storage === 0) {
|
|
1395
|
+
let f3 = chunkIR74FJHU_js.f32From(raw);
|
|
1396
|
+
return f3 !== 0 && !Number.isNaN(f3) ? 4294967295 : 0;
|
|
1397
|
+
}
|
|
1398
|
+
return (storage === 3 ? raw & (255) : raw) !== 0 ? 4294967295 : 0;
|
|
1399
|
+
}
|
|
1400
|
+
return storage === 0 ? chunkIR74FJHU_js.f32From(raw) | 0 : (storage === 3 ? raw & (255) : raw) >>> 0;
|
|
1401
|
+
}
|
|
1402
|
+
var WasmKernelHost = class {
|
|
1403
|
+
constructor(program, capacity, memory, alloc, eventCapacity = chunkIR74FJHU_js.DEFAULT_EVENT_CAPACITY) {
|
|
1404
|
+
this.program = program;
|
|
1405
|
+
this.capacity = capacity;
|
|
1406
|
+
this.memory = memory;
|
|
1407
|
+
this.shape = { kind: 0, vx: 0, vy: 0, vz: 0, p0: 0, p1: 0, p2: 0, reach: 0 };
|
|
1408
|
+
this.stopped = new Uint8Array((4));
|
|
1409
|
+
this.pairs = 0;
|
|
1410
|
+
this.heapBuffer = null;
|
|
1411
|
+
this.u32 = new Uint32Array(0);
|
|
1412
|
+
this.f32 = new Float32Array(0);
|
|
1413
|
+
this.i32 = new Int32Array(0);
|
|
1414
|
+
this.u8 = new Uint8Array(0);
|
|
1415
|
+
this.ctxWords = new Uint32Array(0);
|
|
1416
|
+
this.stageView = new Uint32Array(0);
|
|
1417
|
+
this.snapshotColumns = [];
|
|
1418
|
+
this.snapshotAxes = [];
|
|
1419
|
+
this.neighbourIndex = null;
|
|
1420
|
+
this.rowCells = new Int32Array(0);
|
|
1421
|
+
this.eventOrder = new Uint32Array(0);
|
|
1422
|
+
this.eventScratch = new Uint32Array(0);
|
|
1423
|
+
let table = (1024);
|
|
1424
|
+
for (; table < capacity * (2); ) table *= 2;
|
|
1425
|
+
this.table = table, this.snapshots = program.slots.filter((s) => s.neighbour).length, this.stageCapacity = program.channels.length > 0 ? eventCapacity * (2) : 0, this.bucket = new Uint32Array(program.position === null ? 0 : capacity), this.ring = new Uint32Array(chunkIR74FJHU_js.RING_HEADER_WORDS + (program.channels.length > 0 ? eventCapacity * 10 : 0));
|
|
1426
|
+
let grid = program.position === null ? 0 : (table + 1 + capacity * 3 + capacity * 4) * (4), queries = program.position !== null && wasmQueries(program);
|
|
1427
|
+
this.pairCapacity = queries ? (4) * capacity + (4) : 0, this.grid = queries ? new chunkKZJRSXHK_js.CellGrid(capacity) : null, this.search = queries ? new chunkKZJRSXHK_js.QuerySearch(capacity) : null;
|
|
1428
|
+
let queryBytes = queries ? QUERY_SCRATCH_BYTES + 2 * this.pairCapacity * (4) : 0, lanes = !staged(program) && laneOps(program), bytes = (208) + this.snapshots * capacity * (4) + grid + this.stageCapacity * STAGE_WORDS * (4) + queryBytes + (lanes ? LANE_SCRATCH_BYTES : 0);
|
|
1429
|
+
this.ctx = alloc(bytes);
|
|
1430
|
+
let words = new Uint32Array(memory.buffer, this.ctx, (208) / (4));
|
|
1431
|
+
words.fill(0);
|
|
1432
|
+
let at = this.ctx + (208), take = (n) => {
|
|
1433
|
+
let here = at;
|
|
1434
|
+
return at += n * (4), here;
|
|
1435
|
+
};
|
|
1436
|
+
words[(0) / (4)] = take(this.snapshots * capacity), words[(4) / (4)] = capacity, program.position !== null && (words[(8) / (4)] = take(table + 1), words[(12) / (4)] = take(capacity * 3), words[(16) / (4)] = take(capacity), words[(20) / (4)] = take(capacity), words[(24) / (4)] = take(capacity), words[(28) / (4)] = take(capacity), words[(32) / (4)] = table - 1, words[(52) / (4)] = program.position[2] === 4294967295 ? 1 : 0), words[(64) / (4)] = take(this.stageCapacity * STAGE_WORDS), words[(68) / (4)] = this.stageCapacity, lanes && (words[(192) / (4)] = take(LANE_SCRATCH_BYTES / (4))), queries && (words[(76) / (4)] = take(QUERY_SCRATCH_BYTES / (4)), words[(56) / (4)] = take(this.pairCapacity), words[(60) / (4)] = take(this.pairCapacity), QUERY_HOSTS.set(this.ctx >>> 0, this));
|
|
1437
|
+
}
|
|
1438
|
+
dispose() {
|
|
1439
|
+
QUERY_HOSTS.delete(this.ctx >>> 0);
|
|
1440
|
+
}
|
|
1441
|
+
heap() {
|
|
1442
|
+
let buffer = this.memory.buffer;
|
|
1443
|
+
if (buffer === this.heapBuffer) return;
|
|
1444
|
+
this.heapBuffer = buffer, this.u32 = new Uint32Array(buffer), this.f32 = new Float32Array(buffer), this.i32 = new Int32Array(buffer), this.u8 = new Uint8Array(buffer);
|
|
1445
|
+
let words = new Uint32Array(buffer, this.ctx, (208) / (4));
|
|
1446
|
+
this.ctxWords = words;
|
|
1447
|
+
let snapshot = words[(0) / (4)], columns = [], axes = [];
|
|
1448
|
+
for (let k = 0; k < this.snapshots; k++) {
|
|
1449
|
+
let at = snapshot + k * this.capacity * (4);
|
|
1450
|
+
columns.push(new Uint32Array(buffer, at, this.capacity)), axes.push(new Float32Array(buffer, at, this.capacity));
|
|
1451
|
+
}
|
|
1452
|
+
this.snapshotColumns = columns, this.snapshotAxes = axes, this.stageView = this.stageCapacity === 0 ? new Uint32Array(0) : new Uint32Array(buffer, words[(64) / (4)], this.stageCapacity * STAGE_WORDS);
|
|
1453
|
+
}
|
|
1454
|
+
neighbourOf(slot) {
|
|
1455
|
+
let index = this.neighbourIndex;
|
|
1456
|
+
if (index === null) {
|
|
1457
|
+
let slots = this.program.slots;
|
|
1458
|
+
index = new Int32Array(slots.length + 1);
|
|
1459
|
+
let k = 0;
|
|
1460
|
+
for (let s = 0; s <= slots.length; s++)
|
|
1461
|
+
index[s] = k, s < slots.length && slots[s].neighbour && k++;
|
|
1462
|
+
this.neighbourIndex = index;
|
|
1463
|
+
}
|
|
1464
|
+
return index[slot];
|
|
1465
|
+
}
|
|
1466
|
+
snapshotColumn(slot) {
|
|
1467
|
+
return this.heap(), this.snapshotColumns[this.neighbourOf(slot)];
|
|
1468
|
+
}
|
|
1469
|
+
axis(slot) {
|
|
1470
|
+
return this.heap(), this.snapshotAxes[this.neighbourOf(slot)];
|
|
1471
|
+
}
|
|
1472
|
+
query(params, rows, kind, filter, mode) {
|
|
1473
|
+
let grid = this.grid, search = this.search, position = this.program.position;
|
|
1474
|
+
this.heap();
|
|
1475
|
+
let u32 = this.u32, f32 = this.f32, at = params >>> 2, xs = this.axis(position[0]), ys = this.axis(position[1]), zs = position[2] === 4294967295 ? null : this.axis(position[2]), filterColumn = filter >>> 0 === 4294967295 ? null : this.snapshotColumn(filter >>> 0), words = this.words(), lanes = words[(56) / (4)] >>> 2, out = words[(60) / (4)] >>> 2, s = this.shape;
|
|
1476
|
+
s.kind = kind, this.stopped.fill(0);
|
|
1477
|
+
let pairs = 0;
|
|
1478
|
+
for (let lane = 0; lane < (4); lane++) {
|
|
1479
|
+
if (u32[at + lane] === 0) continue;
|
|
1480
|
+
let row = u32[(rows >>> 2) + lane];
|
|
1481
|
+
s.reach = f32[at + (4) + lane], s.vx = f32[at + 3 * (4) + lane], s.vy = f32[at + 4 * (4) + lane], s.vz = f32[at + 5 * (4) + lane], s.p0 = f32[at + 6 * (4) + lane], s.p1 = f32[at + 7 * (4) + lane], s.p2 = f32[at + 8 * (4) + lane];
|
|
1482
|
+
let found = search.runFrom(grid, s, mode, u32, at + 9 * (4) + lane, at + 10 * (4) + lane, at + 2 * (4) + lane, filterColumn, xs, ys, zs, row);
|
|
1483
|
+
for (let k = 0; k < found; k++)
|
|
1484
|
+
u32[lanes + pairs] = lane, u32[out + pairs] = search.rows[k], pairs++;
|
|
1485
|
+
}
|
|
1486
|
+
if (this.pairs = pairs, pairs > 0)
|
|
1487
|
+
for (let pad = pairs; pad % (4) !== 0; pad++)
|
|
1488
|
+
u32[lanes + pad] = u32[lanes + pairs - 1], u32[out + pad] = u32[out + pairs - 1];
|
|
1489
|
+
return pairs;
|
|
1490
|
+
}
|
|
1491
|
+
keep(stops, p, out) {
|
|
1492
|
+
this.heap();
|
|
1493
|
+
let u32 = this.u32, lanes = this.words()[(56) / (4)] >>> 2;
|
|
1494
|
+
for (let q = 0; q < (4); q++) {
|
|
1495
|
+
let at = p + q, keep = 0;
|
|
1496
|
+
if (at < this.pairs) {
|
|
1497
|
+
let lane = u32[lanes + at];
|
|
1498
|
+
this.stopped[lane] === 0 && (keep = 4294967295, u32[(stops >>> 2) + q] !== 0 && (this.stopped[lane] = 1));
|
|
1499
|
+
}
|
|
1500
|
+
u32[(out >>> 2) + q] = keep;
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
words() {
|
|
1504
|
+
return this.heap(), this.ctxWords;
|
|
1505
|
+
}
|
|
1506
|
+
prepare(columns, count, uniforms) {
|
|
1507
|
+
let p = this.program, words = this.words();
|
|
1508
|
+
if (words[(72) / (4)] = 0, p.position === null) return 0;
|
|
1509
|
+
let u32 = this.u32, u8 = this.u8, snapshot = words[(0) / (4)] / (4), k = 0, slots = p.slots;
|
|
1510
|
+
for (let index = 0; index < slots.length; index++) {
|
|
1511
|
+
let slot = slots[index];
|
|
1512
|
+
if (!slot.neighbour) continue;
|
|
1513
|
+
let column = columns[index], base = snapshot + k * this.capacity;
|
|
1514
|
+
for (let row = 0; row < count; row++) {
|
|
1515
|
+
let raw = column.storage === 3 ? u8[column.at + row] : u32[column.at / (4) + row];
|
|
1516
|
+
u32[base + row] = readAsBits(slot.kind, column.storage, raw);
|
|
1517
|
+
}
|
|
1518
|
+
k++;
|
|
1519
|
+
}
|
|
1520
|
+
let f32 = this.f32, radius = chunkIR74FJHU_js.f32From(uniforms[p.radius & 2147483647]), position = p.position, x = position[0], y = position[1], z = position[2];
|
|
1521
|
+
if (this.grid !== null && this.grid.rebuild(radius, this.axis(x), this.axis(y), z === 4294967295 ? null : this.axis(z), count), words[(48) / (4)] = 0, words[(40) / (4)] = chunkIR74FJHU_js.f32Bits(radius), !(radius > 0) || !Number.isFinite(radius)) return 0;
|
|
1522
|
+
let inverse = Math.fround(1 / radius);
|
|
1523
|
+
words[(36) / (4)] = chunkIR74FJHU_js.f32Bits(inverse), words[(44) / (4)] = chunkIR74FJHU_js.f32Bits(Math.fround(radius * radius));
|
|
1524
|
+
let xs = snapshot + this.neighbourOf(x) * this.capacity, ys = snapshot + this.neighbourOf(y) * this.capacity, zs = z === 4294967295 ? -1 : snapshot + this.neighbourOf(z) * this.capacity, mask = this.table - 1, starts = words[(8) / (4)] / (4), cells = words[(12) / (4)] / (4), gx = words[(16) / (4)] / (4), gy = words[(20) / (4)] / (4), gz = words[(24) / (4)] / (4), rows = words[(28) / (4)] / (4), i32 = this.i32;
|
|
1525
|
+
u32.fill(0, starts, starts + this.table + 1), this.rowCells.length < count * 3 && (this.rowCells = new Int32Array(this.capacity * 3));
|
|
1526
|
+
let rowCells = this.rowCells;
|
|
1527
|
+
for (let row = 0; row < count; row++) {
|
|
1528
|
+
let fx = Math.floor(Math.fround(f32[xs + row] * inverse)), fy = Math.floor(Math.fround(f32[ys + row] * inverse)), fz = Math.floor(Math.fround((zs < 0 ? 0 : f32[zs + row]) * inverse)), cx = fx !== fx ? 0 : fx >= (2147483648) ? (2147483648) - 1 : fx < -(2147483648) ? -(2147483648) : fx | 0, cy = fy !== fy ? 0 : fy >= (2147483648) ? (2147483648) - 1 : fy < -(2147483648) ? -(2147483648) : fy | 0, cz = fz !== fz ? 0 : fz >= (2147483648) ? (2147483648) - 1 : fz < -(2147483648) ? -(2147483648) : fz | 0;
|
|
1529
|
+
rowCells[3 * row] = cx, rowCells[3 * row + 1] = cy, rowCells[3 * row + 2] = cz;
|
|
1530
|
+
let bucket = cy + Math.imul(cx, (1021)) + Math.imul(cz, (65539)) & mask;
|
|
1531
|
+
this.bucket[row] = bucket >>> 0, u32[starts + bucket + 1]++;
|
|
1532
|
+
}
|
|
1533
|
+
for (let at = 1; at <= this.table; at++) u32[starts + at] += u32[starts + at - 1];
|
|
1534
|
+
for (let row = 0; row < count; row++) {
|
|
1535
|
+
let bucket = this.bucket[row], slot = u32[starts + bucket]++, zv = zs < 0 ? 0 : f32[zs + row];
|
|
1536
|
+
u32[rows + slot] = row, f32[gx + slot] = f32[xs + row], f32[gy + slot] = f32[ys + row], f32[gz + slot] = zv, i32[cells + 3 * slot] = rowCells[3 * row], i32[cells + 3 * slot + 1] = rowCells[3 * row + 1], i32[cells + 3 * slot + 2] = rowCells[3 * row + 2];
|
|
1537
|
+
}
|
|
1538
|
+
for (let at = this.table; at > 0; at--) u32[starts + at] = u32[starts + at - 1];
|
|
1539
|
+
return u32[starts] = 0, words[(48) / (4)] = count, words[(28) / (4)];
|
|
1540
|
+
}
|
|
1541
|
+
flush() {
|
|
1542
|
+
if (this.stageCapacity === 0) return;
|
|
1543
|
+
let words = this.words(), attempted = words[(72) / (4)], stored = Math.min(attempted, this.stageCapacity), stage = this.stageView, order = this.sortedEvents(stage, stored), ring = this.ring, capacity = (ring.length - chunkIR74FJHU_js.RING_HEADER_WORDS) / 10, count = ring[chunkIR74FJHU_js.RING_COUNT], dropped = ring[chunkIR74FJHU_js.RING_DROPPED] + (attempted - stored), payload = STAGE_WORDS - 2 - (8);
|
|
1544
|
+
for (let i = 0; i < stored; i++) {
|
|
1545
|
+
if (count >= capacity) {
|
|
1546
|
+
dropped++;
|
|
1547
|
+
continue;
|
|
1548
|
+
}
|
|
1549
|
+
let from = order[i] * STAGE_WORDS + 2 + (8), to = chunkIR74FJHU_js.RING_HEADER_WORDS + count * 10;
|
|
1550
|
+
for (let w = 0; w < payload; w++) ring[to + w] = stage[from + w];
|
|
1551
|
+
count++;
|
|
1552
|
+
}
|
|
1553
|
+
ring[chunkIR74FJHU_js.RING_COUNT] = count, ring[chunkIR74FJHU_js.RING_DROPPED] = dropped, words[(72) / (4)] = 0;
|
|
1554
|
+
}
|
|
1555
|
+
eventBefore(stage, a, b) {
|
|
1556
|
+
let pa = a * STAGE_WORDS, pb = b * STAGE_WORDS;
|
|
1557
|
+
for (let w = 0; w < 2 + (8); w++) {
|
|
1558
|
+
let d = stage[pa + w] - stage[pb + w];
|
|
1559
|
+
if (d !== 0) return d < 0;
|
|
1560
|
+
}
|
|
1561
|
+
return false;
|
|
1562
|
+
}
|
|
1563
|
+
sortedEvents(stage, stored) {
|
|
1564
|
+
this.eventOrder.length < stored && (this.eventOrder = new Uint32Array(this.stageCapacity), this.eventScratch = new Uint32Array(this.stageCapacity));
|
|
1565
|
+
let from = this.eventOrder, into = this.eventScratch;
|
|
1566
|
+
for (let k = 0; k < stored; k++) from[k] = k;
|
|
1567
|
+
for (let width = 1; width < stored; width *= 2) {
|
|
1568
|
+
for (let lo = 0; lo < stored; lo += 2 * width) {
|
|
1569
|
+
let mid = Math.min(lo + width, stored), hi = Math.min(lo + 2 * width, stored), i = lo, j = mid, out = lo;
|
|
1570
|
+
for (; i < mid && j < hi; ) into[out++] = this.eventBefore(stage, from[j], from[i]) ? from[j++] : from[i++];
|
|
1571
|
+
for (; i < mid; ) into[out++] = from[i++];
|
|
1572
|
+
for (; j < hi; ) into[out++] = from[j++];
|
|
1573
|
+
}
|
|
1574
|
+
let swap = from;
|
|
1575
|
+
from = into, into = swap;
|
|
1576
|
+
}
|
|
1577
|
+
return from;
|
|
1578
|
+
}
|
|
1579
|
+
clearEvents() {
|
|
1580
|
+
this.ring[chunkIR74FJHU_js.RING_COUNT] = 0, this.ring[chunkIR74FJHU_js.RING_DROPPED] = 0;
|
|
1581
|
+
}
|
|
1582
|
+
};
|
|
1583
|
+
|
|
1584
|
+
// src/game/kernel/native.ts
|
|
1585
|
+
var FEATURE_NAME_BYTES = 64, ADVERTISED = /* @__PURE__ */ new WeakMap();
|
|
1586
|
+
function kernelEngineFeatures(engine) {
|
|
1587
|
+
let known2 = ADVERTISED.get(engine.exports);
|
|
1588
|
+
if (known2 !== void 0) return known2;
|
|
1589
|
+
let exports = engine.exports, count = exports.engine_feature_count, name2 = exports.engine_feature_name, found = /* @__PURE__ */ new Set();
|
|
1590
|
+
if (typeof count == "function" && typeof name2 == "function") {
|
|
1591
|
+
let scratch2 = engine.exports.engine_alloc((64), 1);
|
|
1592
|
+
if (scratch2 !== 0) {
|
|
1593
|
+
let decoder = new TextDecoder();
|
|
1594
|
+
for (let i = 0; i < count(); i++) {
|
|
1595
|
+
let length = name2(i, scratch2, (64));
|
|
1596
|
+
length > 0 && length <= (64) && found.add(decoder.decode(new Uint8Array(engine.memory.buffer, scratch2, length).slice()));
|
|
1597
|
+
}
|
|
1598
|
+
engine.exports.engine_free(scratch2, (64), 1);
|
|
1599
|
+
}
|
|
1600
|
+
}
|
|
1601
|
+
return ADVERTISED.set(engine.exports, found), found;
|
|
1602
|
+
}
|
|
1603
|
+
var NO_LIST = 255, WORD2 = 4, MAX_ARG_WORDS = 64, TRUE_BITS = 4294967295, AXES2 = ["x", "y", "z", "w"];
|
|
1604
|
+
function bindKernelEngine(symbols, memory) {
|
|
1605
|
+
for (let name2 of chunkIR74FJHU_js.KERNEL_EXPORT_NAMES) if (typeof symbols[name2] != "function") return null;
|
|
1606
|
+
if (typeof symbols.engine_alloc != "function" || typeof symbols.engine_free != "function") return null;
|
|
1607
|
+
let exports = symbols, isa = typeof symbols.engine_kernel_isa_max == "function" ? symbols.engine_kernel_isa_max() : exports.engine_kernel_isa();
|
|
1608
|
+
if (isa < 1) return null;
|
|
1609
|
+
let attach = typeof symbols.engine_kernel_attach == "function" ? symbols.engine_kernel_attach : null, attachHandle = typeof symbols.engine_kernel_attach_handle == "function" ? symbols.engine_kernel_attach_handle : null, spawns = typeof symbols.engine_kernel_spawns == "function" ? symbols.engine_kernel_spawns : null, data = chunkIR74FJHU_js.KERNEL_DATA_EXPORT_NAMES.every((name2) => typeof symbols[name2] == "function") ? {
|
|
1610
|
+
bindTable: symbols.engine_kernel_bind_table,
|
|
1611
|
+
bindPool: symbols.engine_kernel_bind_pool,
|
|
1612
|
+
report: symbols.engine_kernel_data
|
|
1613
|
+
} : null, runRegion = typeof symbols.engine_kernel_run_region == "function" ? symbols.engine_kernel_run_region : null;
|
|
1614
|
+
return { exports, memory, isa, attach, attachHandle, spawns, data, runRegion };
|
|
1615
|
+
}
|
|
1616
|
+
function check(code, what) {
|
|
1617
|
+
if (code >= 0) return code;
|
|
1618
|
+
throw code === -1 ? new chunk2V7IL4HC_js.GameError("capacity_exceeded", `${what}: the engine is out of kernel slots`) : code === -3 ? new chunk2V7IL4HC_js.GameError("unknown_resource", `${what}: the kernel or table is gone`) : code === -5 ? new chunk2V7IL4HC_js.GameError("unsupported_feature", `${what}: the engine does not run this kernel instruction set`) : code === chunk7AAIAVAA_js.COMPUTE_STOPPED ? new chunk2V7IL4HC_js.GameError("capacity_exceeded", `${what}: the kernel ran too long and was stopped so the game stays responsive; split the work across frames or lower its row count`) : new chunk2V7IL4HC_js.GameError("invalid_argument", `${what}: the engine refused the kernel (${code})`);
|
|
1619
|
+
}
|
|
1620
|
+
var H_COLUMN_TABLE = 32, MAX_SLOTS = 256, MAX_SHARED_PAGES = 65536, VECTOR_ALIGN = 16;
|
|
1621
|
+
function sharedBuffer(buffer) {
|
|
1622
|
+
return Object.prototype.toString.call(buffer) === "[object SharedArrayBuffer]";
|
|
1623
|
+
}
|
|
1624
|
+
function sameTables(a, b) {
|
|
1625
|
+
if (a === null || b === null) return a === b;
|
|
1626
|
+
if (a.length !== b.length) return false;
|
|
1627
|
+
for (let k = 0; k < a.length; k++) if (a[k] !== b[k] || !a[k].valid) return false;
|
|
1628
|
+
return true;
|
|
1629
|
+
}
|
|
1630
|
+
function isEntityTable(value) {
|
|
1631
|
+
return typeof value == "object" && value !== null && "schema" in value && "capacity" in value && "values" in value;
|
|
1632
|
+
}
|
|
1633
|
+
function allNative(tables) {
|
|
1634
|
+
for (let k = 0; k < tables.length; k++) if (!tables[k].native) return false;
|
|
1635
|
+
return true;
|
|
1636
|
+
}
|
|
1637
|
+
function slotsSpawnOrScratch(program) {
|
|
1638
|
+
let slots = program.slots;
|
|
1639
|
+
for (let k = 0; k < slots.length; k++) if (slots[k].spawn || slots[k].scratch) return true;
|
|
1640
|
+
return false;
|
|
1641
|
+
}
|
|
1642
|
+
function sameStorages(known2, fresh) {
|
|
1643
|
+
if (known2.length !== fresh.length) return false;
|
|
1644
|
+
for (let k = 0; k < fresh.length; k++) if (known2[k] !== fresh[k]) return false;
|
|
1645
|
+
return true;
|
|
1646
|
+
}
|
|
1647
|
+
var NativeKernels = class {
|
|
1648
|
+
constructor(engine) {
|
|
1649
|
+
this.engine = engine;
|
|
1650
|
+
this.programs = /* @__PURE__ */ new Map();
|
|
1651
|
+
this.bindings = /* @__PURE__ */ new Map();
|
|
1652
|
+
this.argsAt = 0;
|
|
1653
|
+
this.argsBuffer = null;
|
|
1654
|
+
this.words = new Uint32Array(0);
|
|
1655
|
+
this.floats = new Float32Array(0);
|
|
1656
|
+
this.world = null;
|
|
1657
|
+
this.into = null;
|
|
1658
|
+
this.priority = 0;
|
|
1659
|
+
this.compute = null;
|
|
1660
|
+
this.report = { spawned: 0, dropped: 0, killed: 0 };
|
|
1661
|
+
this.spawnStats = new Uint32Array(0);
|
|
1662
|
+
this.spawnCounts = { spawned: 0, dropped: 0, killed: 0 };
|
|
1663
|
+
this.columnsView = new Uint32Array(0);
|
|
1664
|
+
this.recordsView = new Uint32Array(0);
|
|
1665
|
+
this.hookBinding = 0;
|
|
1666
|
+
this.hookDispatched = 0;
|
|
1667
|
+
this.hookStage = null;
|
|
1668
|
+
this.hookCtxs = /* @__PURE__ */ new Set();
|
|
1669
|
+
this.dataHook = (pc, chunk) => {
|
|
1670
|
+
let code = this.hookData(this.hookBinding, pc, this.hookDispatched, chunk);
|
|
1671
|
+
code < 0 && check(code, "running a data op from a kernel");
|
|
1672
|
+
};
|
|
1673
|
+
this.hookData = null;
|
|
1674
|
+
this.reportCopies = /* @__PURE__ */ new Map();
|
|
1675
|
+
this.heapView = new Uint32Array(0);
|
|
1676
|
+
this.joinedTables = /* @__PURE__ */ new Map();
|
|
1677
|
+
this.scalarMaps = /* @__PURE__ */ new Map();
|
|
1678
|
+
this.staged = /* @__PURE__ */ new Map();
|
|
1679
|
+
this.stagedRuns = 0;
|
|
1680
|
+
this.compiledRuns = 0;
|
|
1681
|
+
this.recordsAt = 0;
|
|
1682
|
+
this.recordsCapacity = 0;
|
|
1683
|
+
this.compiled = /* @__PURE__ */ new Map();
|
|
1684
|
+
this.columnsAt = 0;
|
|
1685
|
+
this.compiling = /* @__PURE__ */ new Set();
|
|
1686
|
+
this.groupRowsAt = 0;
|
|
1687
|
+
this.groupRowsCapacity = 0;
|
|
1688
|
+
this.groupRowsView = new Uint32Array(0);
|
|
1689
|
+
this.rings = /* @__PURE__ */ new Map();
|
|
1690
|
+
engine.data !== null && engine.data !== void 0 && chunk7AAIAVAA_js.setPoolEngine({ alloc: (bytes) => engine.exports.engine_alloc(bytes, (4)), memory: engine.memory });
|
|
1691
|
+
}
|
|
1692
|
+
acceptsData() {
|
|
1693
|
+
return this.engine.data !== null && this.engine.data !== void 0;
|
|
1694
|
+
}
|
|
1695
|
+
accepts(program) {
|
|
1696
|
+
let version = program.byteLength >= 8 ? program[4] : 0;
|
|
1697
|
+
return version < 2 ? true : version >= 3 && (typeof this.engine.attachHandle != "function" || typeof this.engine.spawns != "function") ? false : (this.engine.isa ?? 1) >= version && typeof this.engine.attach == "function";
|
|
1698
|
+
}
|
|
1699
|
+
attach(world) {
|
|
1700
|
+
this.world = world;
|
|
1701
|
+
}
|
|
1702
|
+
copyIn(bytes) {
|
|
1703
|
+
let at = this.engine.exports.engine_alloc(Math.max(bytes.byteLength, (4)), (4));
|
|
1704
|
+
if (at === 0) throw new chunk2V7IL4HC_js.GameError("capacity_exceeded", "engine memory cannot hold a kernel program");
|
|
1705
|
+
return new Uint8Array(this.engine.memory.buffer, at, bytes.byteLength).set(bytes), at;
|
|
1706
|
+
}
|
|
1707
|
+
program(meta, bytes) {
|
|
1708
|
+
let known2 = this.programs.get(bytes);
|
|
1709
|
+
if (known2 !== void 0) return known2;
|
|
1710
|
+
let exports = this.engine.exports, at = this.copyIn(bytes), id = exports.engine_kernel_load(at, bytes.byteLength);
|
|
1711
|
+
return exports.engine_free(at, Math.max(bytes.byteLength, (4)), (4)), check(id, `loading kernel ${meta.name}`), this.programs.set(bytes, id), id;
|
|
1712
|
+
}
|
|
1713
|
+
binding(meta, bytes, program, table, joined) {
|
|
1714
|
+
let bound = this.bindings.get(bytes);
|
|
1715
|
+
bound === void 0 && (bound = [], this.bindings.set(bytes, bound));
|
|
1716
|
+
let into = this.into !== null && this.into !== table ? this.into : null;
|
|
1717
|
+
for (let k = 0; k < bound.length; k++) {
|
|
1718
|
+
let entry = bound[k];
|
|
1719
|
+
if (entry.table === table && entry.into === into && sameTables(entry.joined, joined) && table.valid && (into === null || into.valid)) return entry.binding;
|
|
1720
|
+
}
|
|
1721
|
+
return this.bindNew(meta, program, table, joined, into, bound);
|
|
1722
|
+
}
|
|
1723
|
+
bindNew(meta, program, table, joined, into, bound) {
|
|
1724
|
+
let exports = this.engine.exports;
|
|
1725
|
+
for (let k = bound.length - 1; k >= 0; k--)
|
|
1726
|
+
bound[k].table.valid && (bound[k].into === null || bound[k].into.valid) || (exports.engine_kernel_unbind(bound[k].binding), this.compute?.unbound(chunk7AAIAVAA_js.COMPUTE_SPACE_CPU, bound[k].binding), bound.splice(k, 1));
|
|
1727
|
+
let spawnTable = into ?? table, columns = new Uint32Array(meta.slots.length);
|
|
1728
|
+
for (let k = 0; k < meta.slots.length; k++) {
|
|
1729
|
+
let slot = meta.slots[k];
|
|
1730
|
+
if (slot.scratch === true || slot.pool !== void 0) {
|
|
1731
|
+
columns[k] = 4294967295;
|
|
1732
|
+
continue;
|
|
1733
|
+
}
|
|
1734
|
+
let source = slot.spawn === true ? spawnTable : slot.table !== void 0 && slot.table > 0 && joined !== null ? joined[slot.table] : table;
|
|
1735
|
+
if (!(slot.field in source.schema)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", `kernel ${meta.name} ${slot.spawn === true ? "spawns" : "reads"} ${slot.field}, which the ${slot.spawn === true ? "spawn " : ""}table does not have`);
|
|
1736
|
+
columns[k] = source.column(slot.field, slot.component);
|
|
1737
|
+
}
|
|
1738
|
+
let at = this.copyIn(new Uint8Array(columns.buffer)), binding = exports.engine_kernel_bind(program, table.id, at, columns.length);
|
|
1739
|
+
if (exports.engine_free(at, Math.max(columns.byteLength, (4)), (4)), check(binding, `binding kernel ${meta.name}`), this.compute?.bound(chunk7AAIAVAA_js.COMPUTE_SPACE_CPU, binding, meta.name, this.priority), into !== null) {
|
|
1740
|
+
let attach = this.engine.attachHandle;
|
|
1741
|
+
if (attach == null) throw new chunk2V7IL4HC_js.GameError("unsupported_feature", `kernel ${meta.name} spawns into another table; this engine predates kernel_isa_3`);
|
|
1742
|
+
check(attach(binding, chunkIR74FJHU_js.ATTACH_SPAWN_TABLE, into.id), `attaching the spawn table to kernel ${meta.name}`);
|
|
1743
|
+
}
|
|
1744
|
+
if (joined !== null) {
|
|
1745
|
+
let data = this.engine.data;
|
|
1746
|
+
for (let t of meta.data?.tables ?? []) check(data.bindTable(binding, t.table, joined[t.table].id), `binding table ${t.name} to kernel ${meta.name}`);
|
|
1747
|
+
meta.slots.forEach((slot, k) => {
|
|
1748
|
+
if (slot.pool === void 0) return;
|
|
1749
|
+
let owner = joined[slot.table ?? 0], pool = chunk7AAIAVAA_js.listPoolAddress(owner, slot.field, slot.pool, slot.kind, slot.component);
|
|
1750
|
+
if (pool.at === 0) throw new chunk2V7IL4HC_js.GameError("unsupported_feature", `kernel ${meta.name} keeps the ${slot.field} list outside engine memory`);
|
|
1751
|
+
check(data.bindPool(binding, k, pool.at, pool.words), `binding the ${slot.field} list to kernel ${meta.name}`);
|
|
1752
|
+
});
|
|
1753
|
+
}
|
|
1754
|
+
return bound.push({ table, into, joined: joined === null ? null : joined.slice(), binding }), binding;
|
|
1755
|
+
}
|
|
1756
|
+
spawned(binding, table) {
|
|
1757
|
+
let read = this.engine.spawns;
|
|
1758
|
+
if (read == null) return;
|
|
1759
|
+
let at = read(binding);
|
|
1760
|
+
if (at === 0) return;
|
|
1761
|
+
let buffer = this.engine.memory.buffer, stats = this.spawnStats;
|
|
1762
|
+
(stats.length === 0 || stats.byteOffset !== at || stats.buffer !== buffer) && (stats = new Uint32Array(buffer, at, chunkIR74FJHU_js.SPAWN_STATS_WORDS), this.spawnStats = stats);
|
|
1763
|
+
let counts = this.spawnCounts;
|
|
1764
|
+
counts.spawned = stats[0], counts.dropped = stats[1], counts.killed = stats[2];
|
|
1765
|
+
let into = this.into !== null && this.into !== table ? this.into : table;
|
|
1766
|
+
reportSpawns(counts, into, this.report);
|
|
1767
|
+
}
|
|
1768
|
+
columnPointers() {
|
|
1769
|
+
let buffer = this.engine.memory.buffer, view = this.columnsView;
|
|
1770
|
+
return (view.length === 0 || view.byteOffset !== this.columnsAt || view.buffer !== buffer) && (view = new Uint32Array(buffer, this.columnsAt, (256)), this.columnsView = view), view;
|
|
1771
|
+
}
|
|
1772
|
+
recordWords() {
|
|
1773
|
+
let buffer = this.engine.memory.buffer, view = this.recordsView;
|
|
1774
|
+
return (view.length === 0 || view.byteOffset !== this.recordsAt || view.buffer !== buffer) && (view = new Uint32Array(buffer, this.recordsAt, this.recordsCapacity / (4)), this.recordsView = view), view;
|
|
1775
|
+
}
|
|
1776
|
+
armDataHook(ctx, stage, binding) {
|
|
1777
|
+
this.hookStage = stage, this.hookData = stage.engine_kernel_stage_data ?? null, this.hookBinding = binding, this.hookDispatched = 0, !this.hookCtxs.has(ctx) && (this.hookCtxs.add(ctx), setWasmDataHook(ctx, this.dataHook));
|
|
1778
|
+
}
|
|
1779
|
+
disarmDataHook(ctx) {
|
|
1780
|
+
this.hookCtxs.delete(ctx) && setWasmDataHook(ctx, null);
|
|
1781
|
+
}
|
|
1782
|
+
argViews() {
|
|
1783
|
+
let buffer = this.engine.memory.buffer;
|
|
1784
|
+
if (this.argsAt === 0 && (this.argsAt = this.engine.exports.engine_alloc((64) * (4), (4)), this.argsAt === 0))
|
|
1785
|
+
throw new chunk2V7IL4HC_js.GameError("capacity_exceeded", "engine memory cannot hold kernel arguments");
|
|
1786
|
+
this.argsBuffer !== buffer && (this.words = new Uint32Array(buffer, this.argsAt, (64)), this.floats = new Float32Array(buffer, this.argsAt, (64)), this.argsBuffer = buffer);
|
|
1787
|
+
}
|
|
1788
|
+
writeArg(at, arg, value) {
|
|
1789
|
+
if (arg.kind === "f64" || arg.kind === "u64") return chunk7AAIAVAA_js.writeWideArg(this.words, at, arg.kind, value);
|
|
1790
|
+
if (arg.width > 1 && (Array.isArray(value) || ArrayBuffer.isView(value))) {
|
|
1791
|
+
let items = value;
|
|
1792
|
+
for (let k = 0; k < arg.width; k++)
|
|
1793
|
+
arg.kind === "f32" ? this.floats[at + k] = items[k] : this.words[at + k] = items[k] >>> 0;
|
|
1794
|
+
return at + arg.width;
|
|
1795
|
+
}
|
|
1796
|
+
if (arg.width > 1) {
|
|
1797
|
+
let vector = value;
|
|
1798
|
+
for (let k = 0; k < arg.width; k++) this.floats[at + k] = vector[AXES2[k]];
|
|
1799
|
+
return at + arg.width;
|
|
1800
|
+
}
|
|
1801
|
+
switch (arg.kind) {
|
|
1802
|
+
case "f32":
|
|
1803
|
+
this.floats[at] = value;
|
|
1804
|
+
break;
|
|
1805
|
+
case "bool":
|
|
1806
|
+
this.words[at] = value ? (4294967295) : 0;
|
|
1807
|
+
break;
|
|
1808
|
+
default:
|
|
1809
|
+
this.words[at] = value >>> 0;
|
|
1810
|
+
}
|
|
1811
|
+
return at + 1;
|
|
1812
|
+
}
|
|
1813
|
+
run(meta, bytes, table, selection, args) {
|
|
1814
|
+
if (!table.native) throw new chunk2V7IL4HC_js.GameError("unsupported_feature", "native kernels run on engine tables");
|
|
1815
|
+
if (meta.argWords > (64)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", `kernel ${meta.name} takes more than ${(64)} argument words`);
|
|
1816
|
+
let joined = chunk7AAIAVAA_js.hasData(meta) ? this.joinedOf(meta, table, args) : null;
|
|
1817
|
+
if (joined !== null && (!this.acceptsData() || !allNative(joined))) throw new chunk2V7IL4HC_js.GameError("unsupported_feature", `kernel ${meta.name} joins tables; this engine predates native data ops or a joined table is not an engine table`);
|
|
1818
|
+
let scalars = joined === null ? null : this.scalarMap(meta), program = this.program(meta, bytes), binding = this.binding(meta, bytes, program, table, joined);
|
|
1819
|
+
this.argViews();
|
|
1820
|
+
let at = 0, metaArgs = meta.args;
|
|
1821
|
+
for (let k = 0; k < metaArgs.length; k++) {
|
|
1822
|
+
let arg = metaArgs[k], from = scalars === null ? k : scalars[k];
|
|
1823
|
+
arg.width === 1 && arg.kind === "f32" ? this.floats[at++] = args[from] : arg.width === 1 && (arg.kind === "u32" || arg.kind === "i32") ? this.words[at++] = args[from] >>> 0 : at = this.writeArg(at, arg, args[from]);
|
|
1824
|
+
}
|
|
1825
|
+
let calls = bytes.byteLength >= 8 && bytes[4] >= 2, writes = bytes.byteLength >= 8 && bytes[4] >= 3;
|
|
1826
|
+
if (calls) {
|
|
1827
|
+
let h = this.world?.handles() ?? null;
|
|
1828
|
+
if (h === null && !writes) throw new chunk2V7IL4HC_js.GameError("unsupported_feature", `kernel ${meta.name} calls engine services; attach them with world.kernelServices({ physics, nav, flow, terrain, graphics })`);
|
|
1829
|
+
let attached = this.engine.attach(binding, h?.physics ?? 0, h?.nav ?? 0, h?.flow ?? 0, h?.render ?? 0);
|
|
1830
|
+
if (attached < 0 && check(attached, `attaching services to kernel ${meta.name}`), writes) {
|
|
1831
|
+
let attach = this.engine.attachHandle;
|
|
1832
|
+
attach(binding, chunkIR74FJHU_js.ATTACH_UI, h?.ui ?? 0), attach(binding, chunkIR74FJHU_js.ATTACH_AUDIO, h?.audio ?? 0), attach(binding, chunkIR74FJHU_js.ATTACH_VOXELS, h?.voxels ?? 0), attach(binding, chunkIR74FJHU_js.ATTACH_CHEMISTRY_GRID, h?.chemistry ?? 0);
|
|
1833
|
+
}
|
|
1834
|
+
}
|
|
1835
|
+
if (this.runStaged(bytes, table, binding, at, selection))
|
|
1836
|
+
return joined !== null && this.readReport(meta, bytes, binding), writes && this.spawned(binding, table), selection === null ? table.count : selection.length;
|
|
1837
|
+
if (selection === null && this.runCompiled(meta, bytes, table, binding, at))
|
|
1838
|
+
return joined !== null && this.readReport(meta, bytes, binding), table.count;
|
|
1839
|
+
let list = selection ? selection.index : (255);
|
|
1840
|
+
this.compute?.prioritise(chunk7AAIAVAA_js.COMPUTE_SPACE_CPU, binding, this.priority);
|
|
1841
|
+
let ran = this.engine.exports.engine_kernel_run(binding, list, this.argsAt, at);
|
|
1842
|
+
return ran === chunk7AAIAVAA_js.COMPUTE_DEFERRED && this.priority !== 0 ? 0 : (ran >= 0 || check(ran, `running kernel ${meta.name}`), joined !== null && this.readReport(meta, bytes, binding), meta.channels !== void 0 && meta.channels.length > 0 && (chunk7AAIAVAA_js.routeEvents(this.ring(binding), meta.channels), this.engine.exports.engine_kernel_clear_events(binding)), writes && this.spawned(binding, table), ran);
|
|
1843
|
+
}
|
|
1844
|
+
readReport(meta, bytes, binding) {
|
|
1845
|
+
let report = this.engine.data.report(binding);
|
|
1846
|
+
if (report === 0) return;
|
|
1847
|
+
let heap = this.heapWords(), base = report >>> 2, sites = heap[base + chunkIR74FJHU_js.DATA_REPORT_HEADER - 1], words = chunkIR74FJHU_js.DATA_REPORT_HEADER + sites;
|
|
1848
|
+
for (let s = 0; s < sites; s++) words += heap[base + chunkIR74FJHU_js.DATA_REPORT_HEADER + s];
|
|
1849
|
+
let copy = this.reportCopies.get(bytes);
|
|
1850
|
+
copy === void 0 && (copy = { meta, words: new Uint32Array(words), length: 0, report: null }, this.reportCopies.set(bytes, copy)), copy.words.length < words && (copy.words = new Uint32Array(Math.max(words, copy.words.length * 2)));
|
|
1851
|
+
let into = copy.words;
|
|
1852
|
+
for (let k = 0; k < words; k++) into[k] = heap[base + k];
|
|
1853
|
+
copy.meta = meta, copy.length = words, copy.report = null;
|
|
1854
|
+
}
|
|
1855
|
+
dataReport(bytes) {
|
|
1856
|
+
let copy = this.reportCopies.get(bytes);
|
|
1857
|
+
return copy === void 0 ? null : (copy.report === null && (copy.report = chunk7AAIAVAA_js.readDataReport(copy.meta, copy.words.slice(0, copy.length))), copy.report);
|
|
1858
|
+
}
|
|
1859
|
+
heapWords() {
|
|
1860
|
+
let buffer = this.engine.memory.buffer;
|
|
1861
|
+
return (this.heapView.buffer !== buffer || this.heapView.length === 0) && (this.heapView = new Uint32Array(buffer)), this.heapView;
|
|
1862
|
+
}
|
|
1863
|
+
joinedOf(meta, own, args) {
|
|
1864
|
+
let known2 = this.joinedTables.get(meta), list = meta.data?.tables;
|
|
1865
|
+
if (known2 === void 0) {
|
|
1866
|
+
let fresh = chunk7AAIAVAA_js.dataTables(meta, own, args);
|
|
1867
|
+
return this.joinedTables.set(meta, fresh), fresh;
|
|
1868
|
+
}
|
|
1869
|
+
if (known2[0] = own, list === void 0) return known2;
|
|
1870
|
+
for (let k = 0; k < list.length; k++) {
|
|
1871
|
+
let t = list[k], value = args[t.position];
|
|
1872
|
+
if (!isEntityTable(value)) return chunk7AAIAVAA_js.dataTables(meta, own, args);
|
|
1873
|
+
known2[t.table] = value;
|
|
1874
|
+
}
|
|
1875
|
+
return known2;
|
|
1876
|
+
}
|
|
1877
|
+
scalarMap(meta) {
|
|
1878
|
+
let map = this.scalarMaps.get(meta);
|
|
1879
|
+
if (map === void 0) {
|
|
1880
|
+
let skip = meta.data?.tables, positions = [];
|
|
1881
|
+
for (let k = 0; positions.length < meta.args.length; k++) {
|
|
1882
|
+
let table = false;
|
|
1883
|
+
if (skip !== void 0) for (let s = 0; s < skip.length; s++) skip[s].position === k && (table = true);
|
|
1884
|
+
table || positions.push(k);
|
|
1885
|
+
}
|
|
1886
|
+
map = Int32Array.from(positions), this.scalarMaps.set(meta, map);
|
|
1887
|
+
}
|
|
1888
|
+
return map;
|
|
1889
|
+
}
|
|
1890
|
+
runStaged(bytes, table, binding, argWords, selection) {
|
|
1891
|
+
let memory = this.engine.memory, ex = this.engine.exports;
|
|
1892
|
+
if (typeof WebAssembly > "u" || !(memory instanceof WebAssembly.Memory) || typeof ex.engine_kernel_stage_begin != "function") return false;
|
|
1893
|
+
let stage = ex, entry = this.staged.get(bytes);
|
|
1894
|
+
if (entry === void 0) {
|
|
1895
|
+
let program2 = chunkKZJRSXHK_js.parseProgram(bytes);
|
|
1896
|
+
entry = wasmStaged(program2) ? { program: program2, data: wasmDataOps(program2), storages: "", planned: false, storageWords: new Float64Array(program2.slots.length), probe: new Array(program2.slots.length).fill(0), runs: null, stages: [] } : null, this.staged.set(bytes, entry);
|
|
1897
|
+
}
|
|
1898
|
+
if (entry === null) return false;
|
|
1899
|
+
let count = table.count, rowsAt = 0, n = count;
|
|
1900
|
+
if (selection !== null) {
|
|
1901
|
+
if (entry.program.calls.length > 0 || entry.program.cross.length > 0 || selection.rows.buffer !== memory.buffer) return false;
|
|
1902
|
+
n = selection.length;
|
|
1903
|
+
for (let k = 0; k < n; k++) if (selection.rows[k] >= count) return false;
|
|
1904
|
+
rowsAt = selection.rows.byteOffset;
|
|
1905
|
+
}
|
|
1906
|
+
let stageData = stage.engine_kernel_stage_data;
|
|
1907
|
+
if (entry.data && typeof stageData != "function") return false;
|
|
1908
|
+
let program = entry.program;
|
|
1909
|
+
check(stage.engine_kernel_stage_begin(binding, this.argsAt, argWords), "starting a staged kernel");
|
|
1910
|
+
let probe = entry.probe;
|
|
1911
|
+
for (let k = 0; k < probe.length; k++) probe[k] = stage.engine_kernel_stage_storage(binding, k);
|
|
1912
|
+
if (!entry.planned || !sameStorages(entry.storageWords, probe)) {
|
|
1913
|
+
let storages = probe.slice(), key = storages.join(",");
|
|
1914
|
+
entry.planned = true, entry.storages = key, entry.storageWords.set(storages), entry.runs = null;
|
|
1915
|
+
let plan = compileWasmKernel(program, storages, sharedBuffer(memory.buffer) ? (65536) : null);
|
|
1916
|
+
if (plan !== null) {
|
|
1917
|
+
let target = entry;
|
|
1918
|
+
this.track(
|
|
1919
|
+
chunk6SWKWCMS_js.instantiateApproved(plan.bytes, wasmKernelImports(memory)).then((instance) => {
|
|
1920
|
+
target.storages === key && (target.stages = plan.stages, target.runs = plan.stages.map((_, k) => instance.exports[wasmStageName(k)]));
|
|
1921
|
+
}).catch(() => {
|
|
1922
|
+
})
|
|
1923
|
+
);
|
|
1924
|
+
}
|
|
1925
|
+
}
|
|
1926
|
+
if (entry.runs === null || this.columnsAt === 0 && (this.columnsAt = this.engine.exports.engine_alloc((256) * (4), (4)), this.columnsAt === 0))
|
|
1927
|
+
return false;
|
|
1928
|
+
let ctxBytes = laneScratchOffset(program) + LANE_SCRATCH_BYTES;
|
|
1929
|
+
if (this.recordsCapacity < ctxBytes && (this.recordsAt !== 0 && (this.disarmDataHook(this.recordsAt), this.engine.exports.engine_free(this.recordsAt, this.recordsCapacity, (16))), this.recordsAt = this.engine.exports.engine_alloc(ctxBytes, (16)), this.recordsCapacity = this.recordsAt === 0 ? 0 : ctxBytes, this.recordsAt === 0))
|
|
1930
|
+
return false;
|
|
1931
|
+
let pointers = this.columnPointers();
|
|
1932
|
+
for (let k = 0; k < program.slots.length; k++) pointers[k] = stage.engine_kernel_stage_column(binding, k);
|
|
1933
|
+
let records = this.recordWords(), cross = program.cross;
|
|
1934
|
+
for (let k = 0; k < cross.length; k++) records[k] = stage.engine_kernel_stage_records(binding, cross[k]);
|
|
1935
|
+
let uniformsAt = stage.engine_kernel_stage_uniforms(binding);
|
|
1936
|
+
entry.data && stageData !== void 0 && this.armDataHook(this.recordsAt, stage, binding);
|
|
1937
|
+
let runs = entry.runs, stages = entry.stages;
|
|
1938
|
+
for (let k = 0; k < stages.length; k++) {
|
|
1939
|
+
let s = stages[k];
|
|
1940
|
+
if (runs[k](this.columnsAt, n, rowsAt, uniformsAt, this.recordsAt), n > 0 && this.hookDispatched++, s.barrier === "call") check(stage.engine_kernel_stage_call(binding, s.pcs[0]), "calling the engine from a kernel");
|
|
1941
|
+
else if (s.barrier === "cross") for (let p = 0; p < s.pcs.length; p++) check(stage.engine_kernel_stage_finish(binding, s.pcs[p]), "finishing a cross-row stage");
|
|
1942
|
+
}
|
|
1943
|
+
return check(stage.engine_kernel_stage_end(binding), "ending a staged kernel"), this.stagedRuns++, true;
|
|
1944
|
+
}
|
|
1945
|
+
compiledEntry(meta, bytes, stage) {
|
|
1946
|
+
let known2 = this.compiled.get(bytes);
|
|
1947
|
+
if (known2 !== void 0) return known2;
|
|
1948
|
+
let program = chunkKZJRSXHK_js.parseProgram(bytes), data = wasmDataOps(program), usable = !wasmStaged(program) && !slotsSpawnOrScratch(program) && (!data || typeof stage.engine_kernel_stage_data == "function" && typeof stage.engine_kernel_stage_begin == "function"), slots = meta.slots.length, entry = usable ? {
|
|
1949
|
+
runs: null,
|
|
1950
|
+
storages: "",
|
|
1951
|
+
planned: false,
|
|
1952
|
+
program,
|
|
1953
|
+
data,
|
|
1954
|
+
needsHost: wasmNeedsHost(program),
|
|
1955
|
+
offsets: new Uint32Array(program.groups.length + 1),
|
|
1956
|
+
columns: new Int32Array(slots),
|
|
1957
|
+
probe: new Array(slots).fill(0),
|
|
1958
|
+
storageWords: new Float64Array(slots),
|
|
1959
|
+
hostColumns: Array.from({ length: slots }, () => ({ at: 0, storage: 0 })),
|
|
1960
|
+
uniforms: null,
|
|
1961
|
+
host: null,
|
|
1962
|
+
state: null
|
|
1963
|
+
} : null;
|
|
1964
|
+
return this.compiled.set(bytes, entry), entry;
|
|
1965
|
+
}
|
|
1966
|
+
planCompiled(entry, memory) {
|
|
1967
|
+
entry.planned = true;
|
|
1968
|
+
let storages = entry.probe.slice();
|
|
1969
|
+
entry.storageWords.set(storages), entry.storages = storages.join(",");
|
|
1970
|
+
let plan = compileWasmKernel(entry.program, storages, sharedBuffer(memory.buffer) ? (65536) : null);
|
|
1971
|
+
plan !== null && this.track(
|
|
1972
|
+
chunk6SWKWCMS_js.instantiateApproved(plan.bytes, wasmKernelImports(memory)).then((instance) => {
|
|
1973
|
+
let names = plan.groups > 0 ? Array.from({ length: plan.groups }, (_, g) => wasmExportName(g)) : [wasmExportName(-1)];
|
|
1974
|
+
entry.runs = names.map((name2) => instance.exports[name2]);
|
|
1975
|
+
}).catch(() => {
|
|
1976
|
+
})
|
|
1977
|
+
);
|
|
1978
|
+
}
|
|
1979
|
+
track(job) {
|
|
1980
|
+
this.compiling.add(job), job.finally(() => this.compiling.delete(job));
|
|
1981
|
+
}
|
|
1982
|
+
async settled() {
|
|
1983
|
+
for (; this.compiling.size > 0; ) await Promise.all([...this.compiling]);
|
|
1984
|
+
}
|
|
1985
|
+
finishCompiled(entry, meta, exports, binding) {
|
|
1986
|
+
let host = entry.host;
|
|
1987
|
+
return entry.data && check(exports.engine_kernel_stage_end(binding), "ending a data kernel"), host !== null && meta.channels !== void 0 && meta.channels.length > 0 && (host.flush(), chunk7AAIAVAA_js.routeEvents(host.ring, meta.channels), host.clearEvents()), true;
|
|
1988
|
+
}
|
|
1989
|
+
stateView(entry, at, storage, capacity) {
|
|
1990
|
+
let buffer = this.engine.memory.buffer, known2 = entry.state, float = storage === 0;
|
|
1991
|
+
if (known2 !== null && known2.buffer === buffer && known2.byteOffset === at && known2.length === capacity && known2 instanceof Float32Array === float) return known2;
|
|
1992
|
+
let view = float ? new Float32Array(buffer, at, capacity) : new Uint32Array(buffer, at, capacity);
|
|
1993
|
+
return entry.state = view, view;
|
|
1994
|
+
}
|
|
1995
|
+
groupRows(capacity) {
|
|
1996
|
+
let buffer = this.engine.memory.buffer, view = this.groupRowsView;
|
|
1997
|
+
return (view.length !== capacity || view.byteOffset !== this.groupRowsAt || view.buffer !== buffer) && (view = new Uint32Array(buffer, this.groupRowsAt, capacity), this.groupRowsView = view), view;
|
|
1998
|
+
}
|
|
1999
|
+
runCompiled(meta, bytes, table, binding, argWords) {
|
|
2000
|
+
let memory = this.engine.memory;
|
|
2001
|
+
if (typeof WebAssembly > "u" || !(memory instanceof WebAssembly.Memory)) return false;
|
|
2002
|
+
let stage = this.engine.exports, entry = this.compiledEntry(meta, bytes, stage);
|
|
2003
|
+
if (entry === null) return false;
|
|
2004
|
+
let exports = stage, data = entry.data;
|
|
2005
|
+
data && check(exports.engine_kernel_stage_begin(binding, this.argsAt, argWords), "starting a data kernel");
|
|
2006
|
+
let slots = meta.slots, columns = entry.columns, probe = entry.probe;
|
|
2007
|
+
if (data) for (let k = 0; k < slots.length; k++) probe[k] = exports.engine_kernel_stage_storage(binding, k);
|
|
2008
|
+
else
|
|
2009
|
+
for (let k = 0; k < slots.length; k++) {
|
|
2010
|
+
let c = table.column(slots[k].field, slots[k].component);
|
|
2011
|
+
columns[k] = c, probe[k] = table.header[(32) + 2 * c + 1];
|
|
2012
|
+
}
|
|
2013
|
+
if (entry.planned || this.planCompiled(entry, memory), entry.runs === null || !sameStorages(entry.storageWords, probe) || this.columnsAt === 0 && (this.columnsAt = this.engine.exports.engine_alloc((256) * (4), (4)), this.columnsAt === 0))
|
|
2014
|
+
return false;
|
|
2015
|
+
let pointers = this.columnPointers();
|
|
2016
|
+
for (let k = 0; k < slots.length; k++) pointers[k] = data ? exports.engine_kernel_stage_column(binding, k) : table.header[(32) + 2 * columns[k]];
|
|
2017
|
+
let count = table.count, program = entry.program, ctx = 0, sorted = 0;
|
|
2018
|
+
if (entry.needsHost) {
|
|
2019
|
+
if (entry.host === null || entry.host.capacity !== table.capacity) {
|
|
2020
|
+
entry.host !== null && (this.disarmDataHook(entry.host.ctx), entry.host.dispose());
|
|
2021
|
+
let alloc = this.engine.exports;
|
|
2022
|
+
entry.host = new WasmKernelHost(program, table.capacity, this.engine.memory, (bytes2) => alloc.engine_alloc(bytes2, (4)));
|
|
2023
|
+
}
|
|
2024
|
+
ctx = entry.host.ctx;
|
|
2025
|
+
let uniforms = entry.uniforms;
|
|
2026
|
+
uniforms === null && (uniforms = program.uniforms.slice(), entry.uniforms = uniforms);
|
|
2027
|
+
let words = this.words;
|
|
2028
|
+
for (let k = 0; k < program.args; k++) uniforms[k] = words[k];
|
|
2029
|
+
let hostColumns = entry.hostColumns;
|
|
2030
|
+
for (let k = 0; k < slots.length; k++)
|
|
2031
|
+
hostColumns[k].at = pointers[k], hostColumns[k].storage = probe[k];
|
|
2032
|
+
sorted = entry.host.prepare(hostColumns, count, uniforms);
|
|
2033
|
+
}
|
|
2034
|
+
this.compiledRuns++, data && this.armDataHook(ctx, exports, binding);
|
|
2035
|
+
let runs = entry.runs;
|
|
2036
|
+
if (program.state < 0)
|
|
2037
|
+
return runs[0](this.columnsAt, count, sorted, this.argsAt, ctx), this.finishCompiled(entry, meta, exports, binding);
|
|
2038
|
+
if (this.groupRowsCapacity < table.capacity && (this.groupRowsAt !== 0 && this.engine.exports.engine_free(this.groupRowsAt, this.groupRowsCapacity * (4), (4)), this.groupRowsAt = this.engine.exports.engine_alloc(table.capacity * (4), (4)), this.groupRowsCapacity = this.groupRowsAt === 0 ? 0 : table.capacity, this.groupRowsAt === 0))
|
|
2039
|
+
return false;
|
|
2040
|
+
let state = this.stateView(entry, pointers[program.state], probe[program.state], table.capacity);
|
|
2041
|
+
bucketGroups(program, state, count, this.groupRows(table.capacity), entry.offsets);
|
|
2042
|
+
let offsets = entry.offsets, flushes = entry.host !== null && meta.channels !== void 0 && meta.channels.length > 0;
|
|
2043
|
+
for (let g = 0; g < runs.length; g++) {
|
|
2044
|
+
let n = offsets[g + 1] - offsets[g];
|
|
2045
|
+
n > 0 && (runs[g](this.columnsAt, n, this.groupRowsAt + offsets[g] * (4), this.argsAt, ctx), this.hookDispatched++, flushes && entry.host.flush());
|
|
2046
|
+
}
|
|
2047
|
+
return this.finishCompiled(entry, meta, exports, binding);
|
|
2048
|
+
}
|
|
2049
|
+
ring(binding) {
|
|
2050
|
+
let known2 = this.rings.get(binding);
|
|
2051
|
+
if (known2 !== void 0 && known2.buffer === this.engine.memory.buffer) return known2;
|
|
2052
|
+
let at = this.engine.exports.engine_kernel_events(binding), view = new Uint32Array(this.engine.memory.buffer, at, chunkIR74FJHU_js.RING_HEADER_WORDS + chunkIR74FJHU_js.DEFAULT_EVENT_CAPACITY * 10);
|
|
2053
|
+
return this.rings.set(binding, view), view;
|
|
2054
|
+
}
|
|
2055
|
+
dispose() {
|
|
2056
|
+
let exports = this.engine.exports;
|
|
2057
|
+
for (let bound of this.bindings.values()) for (let entry of bound) exports.engine_kernel_unbind(entry.binding);
|
|
2058
|
+
for (let id of this.programs.values()) exports.engine_kernel_unload(id);
|
|
2059
|
+
this.argsAt !== 0 && exports.engine_free(this.argsAt, (64) * (4), (4)), this.bindings.clear(), this.programs.clear(), this.argsAt = 0;
|
|
2060
|
+
}
|
|
2061
|
+
};
|
|
2062
|
+
|
|
2063
|
+
// src/game/nav/types.ts
|
|
2064
|
+
var AGENT_X = 0;
|
|
2065
|
+
var AGENT_STRIDE = 8, AGENT_IDLE = 0, AGENT_REQUESTING = 1, AGENT_MOVING = 2, AGENT_ARRIVED = 3, AGENT_LOST = 4, AGENT_ON_LINK = 5, NO_LINK = -1, POSE_X = 0;
|
|
2066
|
+
var POSE_Z = 2, POSE_DIR_X = 3, POSE_DIR_Z = 4, POSE_SPEED = 5, POSE_LANE = 6, POSE_STRIDE = 8, SIGNAL_GREEN = 0, SIGNAL_AMBER = 1, SIGNAL_RED = 2;
|
|
2067
|
+
var DEFAULT_EXTENTS = [2, 4, 2], MAX_CORNERS = 16;
|
|
2068
|
+
|
|
2069
|
+
// src/game/physics/rules.ts
|
|
2070
|
+
var MAX_COLLIDER_CLASSES = 16, DEFAULT_COLLIDER_CLASS = 0;
|
|
2071
|
+
var RULE_IGNORE = 1, RULE_FRICTION = 2, RULE_RESTITUTION = 4, RULE_ONE_WAY = 8, RULE_CLASS_BITS = 8, RULE_FLAGS_SHIFT = 16, RULE_PAYLOAD_FRICTION = 0, RULE_PAYLOAD_RESTITUTION = 1, RULE_PAYLOAD_ONE_WAY = 2, NO_CONTACT_RULE = {};
|
|
2072
|
+
function checkColliderClass(value) {
|
|
2073
|
+
if (!Number.isInteger(value) || value < 0 || value >= (16))
|
|
2074
|
+
throw new chunk2V7IL4HC_js.GameError("invalid_argument", `collider classes are integers from 0 to ${(16) - 1}`);
|
|
2075
|
+
return value;
|
|
2076
|
+
}
|
|
2077
|
+
function contactRuleFlags(rule) {
|
|
2078
|
+
return (rule.ignore ? (1) : 0) | (rule.friction !== void 0 ? (2) : 0) | (rule.restitution !== void 0 ? (4) : 0) | (rule.oneWay !== void 0 ? (8) : 0);
|
|
2079
|
+
}
|
|
2080
|
+
function packContactRuleHeader(platform, other, rule) {
|
|
2081
|
+
return (checkColliderClass(platform) | checkColliderClass(other) << (8) | contactRuleFlags(rule) << (16)) >>> 0;
|
|
2082
|
+
}
|
|
2083
|
+
function writeContactRulePayload(rule, floats, offset) {
|
|
2084
|
+
floats[offset + (0)] = rule.friction ?? 0, floats[offset + (1)] = rule.restitution ?? 0;
|
|
2085
|
+
let n = rule.oneWay;
|
|
2086
|
+
if (n === void 0) {
|
|
2087
|
+
floats[offset + (2)] = 0, floats[offset + (2) + 1] = 0, floats[offset + (2) + 2] = 0;
|
|
2088
|
+
return;
|
|
2089
|
+
}
|
|
2090
|
+
let length = Math.hypot(n[0], n[1], n[2]);
|
|
2091
|
+
if (!(length > 0)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", "a one-way normal must be a non-zero vector");
|
|
2092
|
+
floats[offset + (2)] = n[0] / length, floats[offset + (2) + 1] = n[1] / length, floats[offset + (2) + 2] = n[2] / length;
|
|
2093
|
+
}
|
|
2094
|
+
var TABLE = (16) * (16), NO_VALUE = Number.NaN, ContactRuleTable = class {
|
|
2095
|
+
constructor() {
|
|
2096
|
+
this.flags = new Uint8Array(TABLE);
|
|
2097
|
+
this.friction = new Float32Array(TABLE).fill(NO_VALUE);
|
|
2098
|
+
this.restitution = new Float32Array(TABLE).fill(NO_VALUE);
|
|
2099
|
+
this.normal = new Float32Array(TABLE * 3);
|
|
2100
|
+
this.active = 0;
|
|
2101
|
+
}
|
|
2102
|
+
get count() {
|
|
2103
|
+
return this.active;
|
|
2104
|
+
}
|
|
2105
|
+
set(platform, other, rule) {
|
|
2106
|
+
let a = checkColliderClass(platform), b = checkColliderClass(other);
|
|
2107
|
+
this.write(a * (16) + b, rule, true), a !== b && this.write(b * (16) + a, rule, false);
|
|
2108
|
+
let active = 0;
|
|
2109
|
+
for (let i = 0; i < TABLE; i++) this.flags[i] !== 0 && active++;
|
|
2110
|
+
this.active = active;
|
|
2111
|
+
}
|
|
2112
|
+
index(a, b) {
|
|
2113
|
+
return a * (16) + b;
|
|
2114
|
+
}
|
|
2115
|
+
write(at, rule, oneWay) {
|
|
2116
|
+
let flags = contactRuleFlags(rule) & (oneWay ? 255 : ~(8));
|
|
2117
|
+
this.flags[at] = flags, this.friction[at] = rule.friction ?? NO_VALUE, this.restitution[at] = rule.restitution ?? NO_VALUE;
|
|
2118
|
+
let n = oneWay ? rule.oneWay : void 0, length = n ? Math.hypot(n[0], n[1], n[2]) : 0;
|
|
2119
|
+
this.normal[at * 3] = n && length > 0 ? n[0] / length : 0, this.normal[at * 3 + 1] = n && length > 0 ? n[1] / length : 0, this.normal[at * 3 + 2] = n && length > 0 ? n[2] / length : 0;
|
|
2120
|
+
}
|
|
2121
|
+
};
|
|
2122
|
+
|
|
2123
|
+
// src/game/physics/craft/types.ts
|
|
2124
|
+
var CRAFT_CHANNELS = 16, CRAFT_TELEMETRY_WORDS = 16;
|
|
2125
|
+
var NO_CHANNEL = 255, MAX_FOILS = 16, MAX_THRUSTERS = 8, MAX_ROTORS = 8, MAX_CRAFT_WHEELS = 8, MAX_HULL_POINTS = 512, MAX_HULL_RESOLUTION = 16, MAX_AERO_TABLE = 64, TELEMETRY_SPEED = 0, TELEMETRY_SUBMERGED = 1, TELEMETRY_PLANING = 2, TELEMETRY_BANK = 3, TELEMETRY_AIRSPEED = 4, TELEMETRY_ALPHA = 5, TELEMETRY_STALLED = 6, TELEMETRY_GROUND_EFFECT = 7, TELEMETRY_CONTACTS = 8, TELEMETRY_GEAR = 9, TELEMETRY_SPOOL = 10, TELEMETRY_ROTOR = 11, TELEMETRY_THRUST = 12, TELEMETRY_CLIMB = 13, TELEMETRY_APPARENT_WIND = 14, TELEMETRY_PITCH = 15, BOAT_THROTTLE = 0, BOAT_STEER = 1, BOAT_SHEET = 2, FLIGHT_PITCH = 0, FLIGHT_ROLL = 1, FLIGHT_YAW = 2, FLIGHT_THROTTLE = 3, FLIGHT_FLAPS = 4, FLIGHT_BRAKE = 5, FLIGHT_GEAR = 6, FLIGHT_TILT = 7, ROTOR_COLLECTIVE = 0, ROTOR_CYCLIC_PITCH = 1, ROTOR_CYCLIC_ROLL = 2, ROTOR_PEDAL = 3, ROTOR_ENGINE = 4, CRAFT_PRESETS = [
|
|
2126
|
+
"canoe",
|
|
2127
|
+
"speedboat",
|
|
2128
|
+
"ferry",
|
|
2129
|
+
"cargo_ship",
|
|
2130
|
+
"sailboat",
|
|
2131
|
+
"light_plane",
|
|
2132
|
+
"jet",
|
|
2133
|
+
"glider",
|
|
2134
|
+
"helicopter",
|
|
2135
|
+
"quadcopter",
|
|
2136
|
+
"tiltrotor",
|
|
2137
|
+
"blimp"
|
|
2138
|
+
];
|
|
2139
|
+
function mix(channel, gain, bias = 0) {
|
|
2140
|
+
let gains = Array.from({ length: 16 }, (_, i) => i === channel ? gain : 0);
|
|
2141
|
+
return { bias, gains };
|
|
2142
|
+
}
|
|
2143
|
+
function mixWith(base, channel, gain) {
|
|
2144
|
+
let gains = Array.from({ length: 16 }, (_, i) => base.gains?.[i] ?? 0);
|
|
2145
|
+
return gains[channel] = gain, { bias: base.bias ?? 0, gains };
|
|
2146
|
+
}
|
|
2147
|
+
function constant(bias) {
|
|
2148
|
+
return { bias };
|
|
2149
|
+
}
|
|
2150
|
+
|
|
2151
|
+
// src/game/physics/craft/dmath.ts
|
|
2152
|
+
var f = Math.fround, PI = f(Math.PI), TAU = f(Math.PI * 2), FRAC_PI_2 = f(Math.PI / 2), INV_TAU = f(1 / TAU), FRAC_2_PI = f(2 / Math.PI), ROUND_MAGIC = 12582912, ROUND_LIMIT = 4194304, HALF_PI_A = f(1.5703125), HALF_PI_B = f(4837513e-10), HALF_PI_C = f(754979e-13), SIN_1 = f(-0.16666655), SIN_2 = f(8332161e-9), SIN_3 = f(-19515296e-11), COS_1 = f(0.041666646), COS_2 = f(-0.0013887316), COS_3 = f(24433157e-12), QUADRANT = 0.25, QUADRANT_LOW = 0.125, QUADRANT_HIGH = 0.375, ATAN_0 = f(0.99997726), ATAN_1 = f(-0.33262347), ATAN_2 = f(0.19354346), ATAN_3 = f(-0.11643287), ATAN_4 = f(0.05265332), ATAN_5 = f(-0.0117212), LOG2_E = f(Math.LOG2E), LN2_HI = f(0.69314575), LN2_LO = f(14286068e-13), EXP_2 = 0.5, EXP_3 = f(0.16666667), EXP_4 = f(0.041666668), EXP_5 = f(8333334e-9), EXP_6 = f(0.0013888889), EXP_LIMIT = 87, TANH_LIMIT = 9;
|
|
2153
|
+
function clamp2(x, low, high) {
|
|
2154
|
+
let lifted = x > low ? x : low;
|
|
2155
|
+
return lifted < high ? lifted : high;
|
|
2156
|
+
}
|
|
2157
|
+
function round(x) {
|
|
2158
|
+
return Math.abs(x) < (4194304) ? f(f(x + (12582912)) - (12582912)) : x;
|
|
2159
|
+
}
|
|
2160
|
+
function wrapAngle(x) {
|
|
2161
|
+
return f(x - f(round(f(x * INV_TAU)) * TAU));
|
|
2162
|
+
}
|
|
2163
|
+
function sinCos(x, out) {
|
|
2164
|
+
let n = round(f(x * FRAC_2_PI)), r = f(f(f(x - f(n * HALF_PI_A)) - f(n * HALF_PI_B)) - f(n * HALF_PI_C)), z = f(r * r), s = f(f(f(f(f(f(f(SIN_3 * z) + SIN_2) * z) + SIN_1) * z) * r) + r), c = f(f(1 - f(0.5 * z)) + f(f(z * z) * f(f(f(f(COS_3 * z) + COS_2) * z) + COS_1))), quarter = f(n * (0.25)), q = f(quarter - round(quarter)), aq = Math.abs(q), swap = aq > (0.125) && aq < (0.375), sinNegative = q < -(0.125) || q > (0.375), cosNegative = q > (0.125) || q < -(0.375), sin2 = swap ? c : s, cos = swap ? s : c;
|
|
2165
|
+
return out.sin = sinNegative ? -sin2 : sin2, out.cos = cosNegative ? -cos : cos, out;
|
|
2166
|
+
}
|
|
2167
|
+
var scratch = { sin: 0, cos: 0 };
|
|
2168
|
+
function sin(x) {
|
|
2169
|
+
return sinCos(x, scratch).sin;
|
|
2170
|
+
}
|
|
2171
|
+
function atan2(y, x) {
|
|
2172
|
+
let ax = Math.abs(x), ay = Math.abs(y), big = ax > ay ? ax : ay, small = ax < ay ? ax : ay, a = big > 0 ? f(small / big) : 0, s = f(a * a), r = f(
|
|
2173
|
+
f(f(f(f(f(f(f(f(f(f(ATAN_5 * s) + ATAN_4) * s) + ATAN_3) * s) + ATAN_2) * s) + ATAN_1) * s) + ATAN_0) * a
|
|
2174
|
+
);
|
|
2175
|
+
return ay > ax && (r = f(FRAC_PI_2 - r)), x < 0 && (r = f(PI - r)), y < 0 ? -r : r;
|
|
2176
|
+
}
|
|
2177
|
+
var exponentView = new DataView(new ArrayBuffer(4));
|
|
2178
|
+
function exp(input) {
|
|
2179
|
+
let x = clamp2(f(input), -(87), (87)), n = round(f(x * LOG2_E)), r = f(f(x - f(n * LN2_HI)) - f(n * LN2_LO)), p = f(
|
|
2180
|
+
f(f(f(f(f(f(f(f(f(f(f(EXP_6 * r) + EXP_5) * r) + EXP_4) * r) + EXP_3) * r) + (0.5)) * r) * r) + r) + 1
|
|
2181
|
+
);
|
|
2182
|
+
return exponentView.setUint32(0, n + 127 << 23 >>> 0), f(p * exponentView.getFloat32(0));
|
|
2183
|
+
}
|
|
2184
|
+
function tanh(x) {
|
|
2185
|
+
if (x > (9)) return 1;
|
|
2186
|
+
if (x < -(9)) return -1;
|
|
2187
|
+
let e = exp(f(x + x));
|
|
2188
|
+
return f(f(e - 1) / f(e + 1));
|
|
2189
|
+
}
|
|
2190
|
+
var Basis = class {
|
|
2191
|
+
constructor() {
|
|
2192
|
+
this.rx = 1;
|
|
2193
|
+
this.ry = 0;
|
|
2194
|
+
this.rz = 0;
|
|
2195
|
+
this.ux = 0;
|
|
2196
|
+
this.uy = 1;
|
|
2197
|
+
this.uz = 0;
|
|
2198
|
+
this.bx = 0;
|
|
2199
|
+
this.by = 0;
|
|
2200
|
+
this.bz = 1;
|
|
2201
|
+
}
|
|
2202
|
+
fromQuaternion(x, y, z, w) {
|
|
2203
|
+
let x2 = x + x, y2 = y + y, z2 = z + z, xx = x * x2, xy = x * y2, xz = x * z2, yy = y * y2, yz = y * z2, zz = z * z2, wx = w * x2, wy = w * y2, wz = w * z2;
|
|
2204
|
+
return this.rx = 1 - (yy + zz), this.ry = xy + wz, this.rz = xz - wy, this.ux = xy - wz, this.uy = 1 - (xx + zz), this.uz = yz + wx, this.bx = xz + wy, this.by = yz - wx, this.bz = 1 - (xx + yy), this;
|
|
2205
|
+
}
|
|
2206
|
+
toWorld(x, y, z, out, at = 0) {
|
|
2207
|
+
return out[at] = this.rx * x + this.ux * y + this.bx * z, out[at + 1] = this.ry * x + this.uy * y + this.by * z, out[at + 2] = this.rz * x + this.uz * y + this.bz * z, out;
|
|
2208
|
+
}
|
|
2209
|
+
toLocal(x, y, z, out, at = 0) {
|
|
2210
|
+
return out[at] = this.rx * x + this.ry * y + this.rz * z, out[at + 1] = this.ux * x + this.uy * y + this.uz * z, out[at + 2] = this.bx * x + this.by * y + this.bz * z, out;
|
|
2211
|
+
}
|
|
2212
|
+
};
|
|
2213
|
+
|
|
2214
|
+
// src/game/physics/water.ts
|
|
2215
|
+
var f2 = Math.fround, MAX_WAVES = 16, SEA_WATER_DENSITY = 1025, FRESH_WATER_DENSITY = 1e3, AIR_DENSITY = f2(1.225), DEFAULT_WATER_GRAVITY = f2(9.81), DEFAULT_WATER_ITERATIONS = 2, MAX_WATER_ITERATIONS = 8, WATER_SAMPLE_WORDS = 7, MIN_WAVELENGTH = f2(0.05), MIN_DIRECTION = f2(1e-6), PEAK_FACTOR = f2(0.877), SIGNIFICANT_HEIGHT = f2(0.21), WAVES_PER_SEA = 8, SPREAD_RADIANS = f2(0.7), SHORTEST = f2(0.35), LONGEST = f2(1.6), LAKE_FETCH_CAP = 6, LAKE_DEPTH = 8, UNIT_SHIFT = 40n, UNIT_SCALE2 = 16777216, MASK_64 = (1n << 64n) - 1n, SPLITMIX_INCREMENT = 0x9e3779b97f4a7c15n, SPLITMIX_MUL_A = 0xbf58476d1ce4e5b9n, SPLITMIX_MUL_B = 0x94d049bb133111ebn, SEA_STATES = ["mirror", "lake", "calm", "moderate", "rough", "storm"], SEA_WIND = { mirror: 0, lake: 4, calm: 5, moderate: 9, rough: 14, storm: 22 }, SEA_STEEPNESS = {
|
|
2216
|
+
mirror: 0,
|
|
2217
|
+
lake: f2(0.25),
|
|
2218
|
+
calm: f2(0.3),
|
|
2219
|
+
moderate: f2(0.45),
|
|
2220
|
+
rough: f2(0.6),
|
|
2221
|
+
storm: f2(0.75)
|
|
2222
|
+
}, WaterSample = class {
|
|
2223
|
+
constructor() {
|
|
2224
|
+
this.height = 0;
|
|
2225
|
+
this.normalX = 0;
|
|
2226
|
+
this.normalY = 1;
|
|
2227
|
+
this.normalZ = 0;
|
|
2228
|
+
this.velocityX = 0;
|
|
2229
|
+
this.velocityY = 0;
|
|
2230
|
+
this.velocityZ = 0;
|
|
2231
|
+
}
|
|
2232
|
+
}, SplitMix64 = class {
|
|
2233
|
+
constructor(seed) {
|
|
2234
|
+
this.state = BigInt(seed) & MASK_64;
|
|
2235
|
+
}
|
|
2236
|
+
next() {
|
|
2237
|
+
this.state = this.state + SPLITMIX_INCREMENT & MASK_64;
|
|
2238
|
+
let z = this.state;
|
|
2239
|
+
return z = (z ^ z >> 30n) * SPLITMIX_MUL_A & MASK_64, z = (z ^ z >> 27n) * SPLITMIX_MUL_B & MASK_64, z ^ z >> 31n;
|
|
2240
|
+
}
|
|
2241
|
+
unit() {
|
|
2242
|
+
return f2(Number(this.next() >> UNIT_SHIFT) / (16777216));
|
|
2243
|
+
}
|
|
2244
|
+
range(low, high) {
|
|
2245
|
+
return f2(low + f2(f2(high - low) * this.unit()));
|
|
2246
|
+
}
|
|
2247
|
+
};
|
|
2248
|
+
function seaDesc(state, windRadians, seed) {
|
|
2249
|
+
let speed = SEA_WIND[state], angle = f2(windRadians), sc = { sin: 0, cos: 0 };
|
|
2250
|
+
sinCos(angle, sc);
|
|
2251
|
+
let wind = [f2(sc.cos * speed), f2(sc.sin * speed)];
|
|
2252
|
+
if (state === "mirror") return { wind };
|
|
2253
|
+
let g = DEFAULT_WATER_GRAVITY, omegaPeak = f2(f2(PEAK_FACTOR * g) / speed), peak = f2(f2(TAU * g) / f2(omegaPeak * omegaPeak)), depth = Number.POSITIVE_INFINITY, density = (1025);
|
|
2254
|
+
state === "lake" && (depth = (8), density = (1e3), peak = clamp2(peak, 0, (6)));
|
|
2255
|
+
let height = f2(f2(f2(SIGNIFICANT_HEIGHT * speed) * speed) / g), random = new SplitMix64(seed), count = Math.min((8), (16)), share = f2(1 / f2(Math.sqrt(count))), waves = [];
|
|
2256
|
+
for (let i = 0; i < count; i++) {
|
|
2257
|
+
let t = f2(f2(i + random.unit()) / count), wavelength = f2(peak * f2(SHORTEST + f2(f2(LONGEST - SHORTEST) * t))), direction = f2(angle + random.range(-SPREAD_RADIANS, SPREAD_RADIANS));
|
|
2258
|
+
sinCos(direction, sc);
|
|
2259
|
+
let amplitude = f2(f2(f2(f2(0.5 * height) * share)) * f2(wavelength / peak));
|
|
2260
|
+
waves.push({
|
|
2261
|
+
direction: [sc.cos, sc.sin],
|
|
2262
|
+
wavelength,
|
|
2263
|
+
amplitude,
|
|
2264
|
+
steepness: f2(f2(f2(SEA_STEEPNESS[state] / count)) * 2),
|
|
2265
|
+
phase: random.range(0, TAU)
|
|
2266
|
+
});
|
|
2267
|
+
}
|
|
2268
|
+
return { wind, depth, density, waves };
|
|
2269
|
+
}
|
|
2270
|
+
var Water = class {
|
|
2271
|
+
constructor(desc = {}) {
|
|
2272
|
+
this.kx = new Float32Array((16));
|
|
2273
|
+
this.kz = new Float32Array((16));
|
|
2274
|
+
this.phase = new Float32Array((16));
|
|
2275
|
+
this.amplitude = new Float32Array((16));
|
|
2276
|
+
this.qax = new Float32Array((16));
|
|
2277
|
+
this.qaz = new Float32Array((16));
|
|
2278
|
+
this.kax = new Float32Array((16));
|
|
2279
|
+
this.kaz = new Float32Array((16));
|
|
2280
|
+
this.kqa = new Float32Array((16));
|
|
2281
|
+
this.wqax = new Float32Array((16));
|
|
2282
|
+
this.wqaz = new Float32Array((16));
|
|
2283
|
+
this.wa = new Float32Array((16));
|
|
2284
|
+
this.omega = new Float32Array((16));
|
|
2285
|
+
this.sc = { sin: 0, cos: 0 };
|
|
2286
|
+
this.seconds = new Float64Array(1);
|
|
2287
|
+
this.count = 0;
|
|
2288
|
+
this.iterations = (2);
|
|
2289
|
+
this.currentX = 0;
|
|
2290
|
+
this.currentZ = 0;
|
|
2291
|
+
this.windX = 0;
|
|
2292
|
+
this.windZ = 0;
|
|
2293
|
+
this.gust = 0;
|
|
2294
|
+
this.gustOmega = 0;
|
|
2295
|
+
this.gustPhase = 0;
|
|
2296
|
+
this.time = 0;
|
|
2297
|
+
this.level = 0;
|
|
2298
|
+
this.density = (1025);
|
|
2299
|
+
this.gravity = DEFAULT_WATER_GRAVITY;
|
|
2300
|
+
this.batchSample = new WaterSample();
|
|
2301
|
+
this.px = 0;
|
|
2302
|
+
this.pz = 0;
|
|
2303
|
+
this.configure(desc);
|
|
2304
|
+
}
|
|
2305
|
+
configure(desc) {
|
|
2306
|
+
let waves = desc.waves ?? [], gravity = f2(desc.gravity ?? DEFAULT_WATER_GRAVITY), density = f2(desc.density ?? (1025)), depth = desc.depth ?? Number.POSITIVE_INFINITY, iterations = desc.iterations ?? (2);
|
|
2307
|
+
if (waves.length > (16) || iterations > (8) || !(gravity > 0) || !(density > 0) || Number.isNaN(depth) || depth <= 0)
|
|
2308
|
+
throw new chunk2V7IL4HC_js.GameError("invalid_argument", "water description is out of range");
|
|
2309
|
+
let total = 0;
|
|
2310
|
+
for (let wave of waves) {
|
|
2311
|
+
let length = f2(Math.sqrt(f2(f2(f2(wave.direction[0]) * f2(wave.direction[0])) + f2(f2(wave.direction[1]) * f2(wave.direction[1])))));
|
|
2312
|
+
if (!(f2(wave.wavelength) >= MIN_WAVELENGTH) || !(wave.amplitude >= 0) || !(length > MIN_DIRECTION))
|
|
2313
|
+
throw new chunk2V7IL4HC_js.GameError("invalid_argument", "wave description is out of range");
|
|
2314
|
+
total = f2(total + clamp2(f2(wave.steepness), 0, 1));
|
|
2315
|
+
}
|
|
2316
|
+
let normalizer = total > 1 ? f2(1 / total) : 1;
|
|
2317
|
+
for (let i = 0; i < (16); i++) {
|
|
2318
|
+
let wave = waves[i];
|
|
2319
|
+
if (!wave) {
|
|
2320
|
+
this.kx[i] = this.kz[i] = this.phase[i] = this.amplitude[i] = 0, this.qax[i] = this.qaz[i] = this.kax[i] = this.kaz[i] = this.kqa[i] = 0, this.wqax[i] = this.wqaz[i] = this.wa[i] = this.omega[i] = 0;
|
|
2321
|
+
continue;
|
|
2322
|
+
}
|
|
2323
|
+
let x = f2(wave.direction[0]), z = f2(wave.direction[1]), length = f2(Math.sqrt(f2(f2(x * x) + f2(z * z)))), dx = f2(x / length), dz = f2(z / length), k = f2(TAU / f2(wave.wavelength)), deep = f2(gravity * k), omega = Number.isFinite(depth) ? f2(Math.sqrt(f2(deep * tanh(f2(k * f2(depth)))))) : f2(Math.sqrt(deep)), a = f2(wave.amplitude), ka = f2(k * a), q = ka > 0 ? f2(f2(clamp2(f2(wave.steepness), 0, 1) * normalizer) / ka) : 0, qa = f2(q * a);
|
|
2324
|
+
this.kx[i] = f2(k * dx), this.kz[i] = f2(k * dz), this.phase[i] = wrapAngle(f2(wave.phase)), this.amplitude[i] = a, this.qax[i] = f2(dx * qa), this.qaz[i] = f2(dz * qa), this.kax[i] = f2(dx * ka), this.kaz[i] = f2(dz * ka), this.kqa[i] = f2(k * qa), this.wqax[i] = f2(omega * f2(dx * qa)), this.wqaz[i] = f2(omega * f2(dz * qa)), this.wa[i] = f2(omega * a), this.omega[i] = omega;
|
|
2325
|
+
}
|
|
2326
|
+
this.count = waves.length, this.iterations = iterations, this.level = f2(desc.level ?? 0), this.density = density, this.gravity = gravity, this.currentX = f2(desc.current?.[0] ?? 0), this.currentZ = f2(desc.current?.[1] ?? 0), this.setWind(desc.wind?.[0] ?? 0, desc.wind?.[1] ?? 0, desc.gust ?? 0, desc.gustPeriod ?? 0), this.gustPhase = 0, this.time = 0;
|
|
2327
|
+
}
|
|
2328
|
+
setWind(x, z, gust = 0, gustPeriod = 0) {
|
|
2329
|
+
this.windX = f2(x), this.windZ = f2(z), this.gust = f2(gust), this.gustOmega = gustPeriod > 0 ? f2(TAU / f2(gustPeriod)) : 0;
|
|
2330
|
+
}
|
|
2331
|
+
setCurrent(x, z) {
|
|
2332
|
+
this.currentX = f2(x), this.currentZ = f2(z);
|
|
2333
|
+
}
|
|
2334
|
+
crest() {
|
|
2335
|
+
let swell = 0;
|
|
2336
|
+
for (let i = 0; i < this.count; i++) swell += this.amplitude[i];
|
|
2337
|
+
return this.level + swell;
|
|
2338
|
+
}
|
|
2339
|
+
get elapsed() {
|
|
2340
|
+
return this.time;
|
|
2341
|
+
}
|
|
2342
|
+
advance(dt) {
|
|
2343
|
+
this.seconds[0] = dt, this.advanceFrom(this.seconds, 0);
|
|
2344
|
+
}
|
|
2345
|
+
advanceFrom(values, at) {
|
|
2346
|
+
let step = f2(values[at]);
|
|
2347
|
+
for (let i = 0; i < this.count; i++) this.phase[i] = wrapAngle(f2(this.phase[i] - f2(this.omega[i] * step)));
|
|
2348
|
+
this.gustPhase = wrapAngle(f2(this.gustPhase + f2(this.gustOmega * step))), this.time += step;
|
|
2349
|
+
}
|
|
2350
|
+
windInto(out, at = 0) {
|
|
2351
|
+
let gain = f2(1 + f2(this.gust * sin(this.gustPhase)));
|
|
2352
|
+
return out[at] = f2(this.windX * gain), out[at + 1] = 0, out[at + 2] = f2(this.windZ * gain), out;
|
|
2353
|
+
}
|
|
2354
|
+
height(x, z) {
|
|
2355
|
+
this.undisplace(f2(x), f2(z));
|
|
2356
|
+
let height = 0;
|
|
2357
|
+
for (let i = 0; i < this.count; i++)
|
|
2358
|
+
sinCos(this.theta(i), this.sc), height = f2(height + f2(this.amplitude[i] * this.sc.sin));
|
|
2359
|
+
return f2(this.level + height);
|
|
2360
|
+
}
|
|
2361
|
+
sample(x, z, out) {
|
|
2362
|
+
this.undisplace(f2(x), f2(z));
|
|
2363
|
+
let height = 0, nx = 0, ny = 0, nz = 0, vx = 0, vy = 0, vz = 0;
|
|
2364
|
+
for (let i = 0; i < this.count; i++) {
|
|
2365
|
+
sinCos(this.theta(i), this.sc);
|
|
2366
|
+
let s = this.sc.sin, c = this.sc.cos;
|
|
2367
|
+
height = f2(height + f2(this.amplitude[i] * s)), nx = f2(nx + f2(this.kax[i] * c)), ny = f2(ny + f2(this.kqa[i] * s)), nz = f2(nz + f2(this.kaz[i] * c)), vx = f2(vx + f2(this.wqax[i] * s)), vy = f2(vy + f2(this.wa[i] * c)), vz = f2(vz + f2(this.wqaz[i] * s));
|
|
2368
|
+
}
|
|
2369
|
+
let gx = -nx, gy = f2(1 - ny), gz = -nz, inverse = f2(1 / f2(Math.sqrt(f2(f2(f2(gx * gx) + f2(gy * gy)) + f2(gz * gz)))));
|
|
2370
|
+
return out.height = f2(this.level + height), out.normalX = f2(gx * inverse), out.normalY = f2(gy * inverse), out.normalZ = f2(gz * inverse), out.velocityX = f2(vx + this.currentX), out.velocityY = -vy, out.velocityZ = f2(vz + this.currentZ), out;
|
|
2371
|
+
}
|
|
2372
|
+
sampleBatch(points, count, out) {
|
|
2373
|
+
let sample = this.batchSample;
|
|
2374
|
+
for (let i = 0; i < count; i++) {
|
|
2375
|
+
this.sample(points[i * 2], points[i * 2 + 1], sample);
|
|
2376
|
+
let o = i * (7);
|
|
2377
|
+
out[o] = sample.height, out[o + 1] = sample.normalX, out[o + 2] = sample.normalY, out[o + 3] = sample.normalZ, out[o + 4] = sample.velocityX, out[o + 5] = sample.velocityY, out[o + 6] = sample.velocityZ;
|
|
2378
|
+
}
|
|
2379
|
+
}
|
|
2380
|
+
theta(i) {
|
|
2381
|
+
return f2(f2(f2(this.kx[i] * this.px) + f2(this.kz[i] * this.pz)) + this.phase[i]);
|
|
2382
|
+
}
|
|
2383
|
+
undisplace(x, z) {
|
|
2384
|
+
this.px = x, this.pz = z;
|
|
2385
|
+
for (let n = 0; n < this.iterations; n++) {
|
|
2386
|
+
let dx = 0, dz = 0;
|
|
2387
|
+
for (let i = 0; i < this.count; i++)
|
|
2388
|
+
sinCos(this.theta(i), this.sc), dx = f2(dx + f2(this.qax[i] * this.sc.cos)), dz = f2(dz + f2(this.qaz[i] * this.sc.cos));
|
|
2389
|
+
this.px = f2(x - dx), this.pz = f2(z - dz);
|
|
2390
|
+
}
|
|
2391
|
+
}
|
|
2392
|
+
};
|
|
2393
|
+
|
|
2394
|
+
// src/game/physics/curves.ts
|
|
2395
|
+
function validateCurve(curve, maxPoints, what) {
|
|
2396
|
+
let n = curve.x.length;
|
|
2397
|
+
if (n < 1 || n > maxPoints || curve.y.length !== n)
|
|
2398
|
+
throw new chunk2V7IL4HC_js.GameError("invalid_argument", `${what} needs 1 to ${maxPoints} matching x and y points`);
|
|
2399
|
+
for (let k = 0; k < n; k++) {
|
|
2400
|
+
if (!Number.isFinite(curve.x[k]) || !Number.isFinite(curve.y[k])) throw new chunk2V7IL4HC_js.GameError("invalid_argument", `${what} has a non-finite point`);
|
|
2401
|
+
if (k > 0 && !(curve.x[k] > curve.x[k - 1])) throw new chunk2V7IL4HC_js.GameError("invalid_argument", `${what} x values must increase`);
|
|
2402
|
+
}
|
|
2403
|
+
}
|
|
2404
|
+
function sampleCurve(curve, x) {
|
|
2405
|
+
let n = curve.x.length;
|
|
2406
|
+
if (x <= curve.x[0]) return curve.y[0];
|
|
2407
|
+
for (let k = 1; k < n; k++)
|
|
2408
|
+
if (x < curve.x[k]) {
|
|
2409
|
+
let t = (x - curve.x[k - 1]) / (curve.x[k] - curve.x[k - 1]);
|
|
2410
|
+
return curve.y[k - 1] + (curve.y[k] - curve.y[k - 1]) * t;
|
|
2411
|
+
}
|
|
2412
|
+
return curve.y[n - 1];
|
|
2413
|
+
}
|
|
2414
|
+
function peakCurve(peakSlip, peakValue, slideSlip, slideValue) {
|
|
2415
|
+
return { x: [0, peakSlip, slideSlip], y: [0, peakValue, slideValue] };
|
|
2416
|
+
}
|
|
2417
|
+
|
|
2418
|
+
// src/game/physics/vehicle.ts
|
|
2419
|
+
var MAX_WHEELS = 16, MAX_GEARS = 8, MAX_TORQUE_POINTS = 8, MAX_CURVE_POINTS = 8, GEAR_AUTO = 100, GEAR_REVERSE = -1, GEAR_NEUTRAL = 0, NO_AXLE = -1, RAY_WHEEL = 0, STEER_LIMIT = 1.2, INPUT_THROTTLE = 0, INPUT_BRAKE = 1, INPUT_STEER = 2, INPUT_HANDBRAKE = 3, INPUT_GEAR = 4, INPUT_STRIDE = 8, STATE_SPEED = 0, STATE_RPM = 1, STATE_GEAR = 2, STATE_STEER = 3, STATE_GROUNDED = 4, STATE_SHIFTING = 5, STATE_HEADER = 8, WHEEL_CENTER = 0, WHEEL_SPIN = 3, WHEEL_STEER = 4, WHEEL_LENGTH = 5, WHEEL_GROUND = 6, WHEEL_POINT = 7, WHEEL_SLIP = 10, WHEEL_SLIP_ANGLE = 11, WHEEL_LOAD = 12, WHEEL_OMEGA = 13, WHEEL_FORCE_LONG = 14, WHEEL_FORCE_LAT = 15, WHEEL_STRIDE = 16, NO_GROUND = -1, STATE_STRIDE = (8) + (16) * (16), DESC_WHEEL_COUNT = 0, DESC_MAX_STEER = 1, DESC_STEER_RATE = 2, DESC_ANTI_ROLL = 3, DESC_DOWNFORCE = 4, DESC_DRAG = 5, DESC_ROLLING = 6, DESC_HANDBRAKE_GRIP = 7, DESC_IDLE_RPM = 8, DESC_MAX_RPM = 9, DESC_ENGINE_BRAKING = 10, DESC_TORQUE_POINTS = 11, DESC_TORQUE_RPM = 12, DESC_TORQUE = (12) + (8), DESC_GEAR_COUNT = DESC_TORQUE + (8), DESC_REVERSE = DESC_GEAR_COUNT + 1, DESC_FINAL_DRIVE = DESC_GEAR_COUNT + 2, DESC_EFFICIENCY = DESC_GEAR_COUNT + 3, DESC_SHIFT_UP = DESC_GEAR_COUNT + 4, DESC_SHIFT_DOWN = DESC_GEAR_COUNT + 5, DESC_SHIFT_SECONDS = DESC_GEAR_COUNT + 6, DESC_RATIOS = DESC_GEAR_COUNT + 7, DESC_ENGINE_INERTIA = DESC_RATIOS + (8), DESC_DIFFERENTIAL_LOCK = DESC_ENGINE_INERTIA + 1, DESC_CENTER_LOCK = DESC_ENGINE_INERTIA + 2, DESC_SKID_TORQUE = DESC_ENGINE_INERTIA + 3, DESC_LEAN_MAX = DESC_ENGINE_INERTIA + 4, DESC_LEAN_STIFFNESS = DESC_ENGINE_INERTIA + 5, DESC_LEAN_DAMPING = DESC_ENGINE_INERTIA + 6, DESC_LEAN_SPEED = DESC_ENGINE_INERTIA + 7, DESC_FORCE_HEIGHT = DESC_ENGINE_INERTIA + 8, DESC_ACKERMANN = DESC_ENGINE_INERTIA + 9, DESC_HEADER = 56, WHEEL_DESC_POSITION = 0, WHEEL_DESC_RADIUS = 3, WHEEL_DESC_INERTIA = 4, WHEEL_DESC_REST = 5, WHEEL_DESC_TRAVEL = 6, WHEEL_DESC_STIFFNESS = 7, WHEEL_DESC_COMPRESSION = 8, WHEEL_DESC_RELAXATION = 9, WHEEL_DESC_MAX_FORCE = 10, WHEEL_DESC_STEER = 11, WHEEL_DESC_DRIVE = 12, WHEEL_DESC_BRAKE = 13, WHEEL_DESC_HANDBRAKE = 14, WHEEL_DESC_GRIP = 15, WHEEL_DESC_AXLE = 16, WHEEL_DESC_SIDE = 17, CURVE_POINTS = 0, CURVE_SLIP = 1, CURVE_VALUE = (1) + (8), CURVE_WORDS = CURVE_VALUE + (8), WHEEL_DESC_LONGITUDINAL = 18, WHEEL_DESC_LATERAL = (18) + CURVE_WORDS, WHEEL_DESC_WIDTH = WHEEL_DESC_LATERAL + CURVE_WORDS, WHEEL_DESC_WORDS = 56, VEHICLE_DESC_WORDS = (56) + (16) * (56), DEFAULT_LONGITUDINAL = peakCurve(0.12, 1.1, 0.8, 0.85), DEFAULT_LATERAL = peakCurve(0.2, 1.05, 0.9, 0.8), DEFAULT_INERTIA = 1.2, DEFAULT_REST = 0.35, DEFAULT_TRAVEL = 0.15, DEFAULT_STIFFNESS = 35e3, DEFAULT_DAMPING = 3500, DEFAULT_MAX_FORCE = 4e4, DEFAULT_BRAKE = 1500, DEFAULT_ENGINE_BRAKING = 60, DEFAULT_ENGINE_INERTIA = 0.2, DEFAULT_EFFICIENCY = 0.9, DEFAULT_SHIFT_SECONDS = 0.18, DEFAULT_STEER_RATE = 3, DEFAULT_DRAG = 0.4, DEFAULT_ROLLING = 0.02, DEFAULT_HANDBRAKE_GRIP = 0.5, DEFAULT_LEAN_SPEED = 8;
|
|
2420
|
+
function writeCurve(out, at, curve, what) {
|
|
2421
|
+
validateCurve(curve, (8), what), out[at + (0)] = curve.x.length;
|
|
2422
|
+
for (let k = 0; k < curve.x.length; k++)
|
|
2423
|
+
out[at + (1) + k] = curve.x[k], out[at + CURVE_VALUE + k] = curve.y[k];
|
|
2424
|
+
}
|
|
2425
|
+
function encodeVehicleDesc(desc, out = new Float32Array(VEHICLE_DESC_WORDS)) {
|
|
2426
|
+
let wheels = desc.wheels.length;
|
|
2427
|
+
if (wheels < 1 || wheels > (16)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", `vehicles take 1 to ${(16)} wheels`);
|
|
2428
|
+
validateCurve(desc.engine.torque, (8), "engine torque curve");
|
|
2429
|
+
let forceHeight = desc.forceHeight ?? 0;
|
|
2430
|
+
if (!(forceHeight >= 0 && forceHeight <= 1)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", "forceHeight must be between 0 and 1");
|
|
2431
|
+
let ackermann = desc.ackermann ?? 0;
|
|
2432
|
+
if (!(ackermann >= 0 && ackermann <= 1)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", "ackermann must be between 0 and 1");
|
|
2433
|
+
let gears = desc.gearbox.ratios.length;
|
|
2434
|
+
if (gears < 1 || gears > (8)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", `gearboxes take 1 to ${(8)} ratios`);
|
|
2435
|
+
out.fill(0), out[(0)] = wheels, out[(1)] = desc.maxSteerRadians, out[(2)] = desc.steerRate ?? (3), out[(3)] = desc.antiRoll ?? 0, out[(4)] = desc.downforce ?? 0, out[(5)] = desc.drag ?? (0.4), out[(6)] = desc.rollingResistance ?? (0.02), out[(7)] = desc.handbrakeGrip ?? (0.5), out[(8)] = desc.engine.idleRpm, out[(9)] = desc.engine.maxRpm, out[(10)] = desc.engine.engineBraking ?? (60), out[DESC_ENGINE_INERTIA] = desc.engine.inertia ?? (0.2);
|
|
2436
|
+
let torque = desc.engine.torque;
|
|
2437
|
+
out[(11)] = torque.x.length;
|
|
2438
|
+
for (let k = 0; k < torque.x.length; k++)
|
|
2439
|
+
out[(12) + k] = torque.x[k], out[DESC_TORQUE + k] = torque.y[k];
|
|
2440
|
+
out[DESC_GEAR_COUNT] = gears, out[DESC_REVERSE] = desc.gearbox.reverse, out[DESC_FINAL_DRIVE] = desc.gearbox.finalDrive, out[DESC_EFFICIENCY] = desc.gearbox.efficiency ?? (0.9), out[DESC_SHIFT_UP] = desc.gearbox.shiftUpRpm, out[DESC_SHIFT_DOWN] = desc.gearbox.shiftDownRpm, out[DESC_SHIFT_SECONDS] = desc.gearbox.shiftSeconds ?? (0.18);
|
|
2441
|
+
for (let k = 0; k < gears; k++) out[DESC_RATIOS + k] = desc.gearbox.ratios[k];
|
|
2442
|
+
out[DESC_DIFFERENTIAL_LOCK] = desc.differentialLock ?? 0, out[DESC_CENTER_LOCK] = desc.centerLock ?? 0, out[DESC_SKID_TORQUE] = desc.skidTorque ?? 0, out[DESC_FORCE_HEIGHT] = desc.forceHeight ?? 0, out[DESC_ACKERMANN] = desc.ackermann ?? 0, out[DESC_LEAN_MAX] = desc.lean?.maxAngle ?? 0, out[DESC_LEAN_STIFFNESS] = desc.lean?.stiffness ?? 0, out[DESC_LEAN_DAMPING] = desc.lean?.damping ?? 0, out[DESC_LEAN_SPEED] = desc.lean?.fullSpeed ?? (8);
|
|
2443
|
+
for (let w = 0; w < wheels; w++) {
|
|
2444
|
+
let wheel = desc.wheels[w], at = (56) + w * (56);
|
|
2445
|
+
out[at + (0)] = wheel.position[0], out[at + (0) + 1] = wheel.position[1], out[at + (0) + 2] = wheel.position[2], out[at + (3)] = wheel.radius, out[at + (4)] = wheel.inertia ?? (1.2), out[at + (5)] = wheel.restLength ?? (0.35), out[at + (6)] = wheel.travel ?? (0.15), out[at + (7)] = wheel.stiffness ?? (35e3), out[at + (8)] = wheel.compressionDamping ?? (3500), out[at + (9)] = wheel.relaxationDamping ?? wheel.compressionDamping ?? (3500), out[at + (10)] = wheel.maxSuspensionForce ?? (4e4), out[at + (11)] = wheel.steer ?? 0, out[at + (12)] = wheel.drive ?? 0, out[at + (13)] = wheel.brakeTorque ?? (1500), out[at + (14)] = wheel.handbrakeTorque ?? 0, out[at + (15)] = wheel.grip ?? 1, out[at + (16)] = wheel.axle ?? (-1), out[at + (17)] = wheel.side ?? 0, out[at + WHEEL_DESC_WIDTH] = wheel.width ?? (0), writeCurve(out, at + (18), wheel.longitudinal ?? DEFAULT_LONGITUDINAL, "longitudinal tyre curve"), writeCurve(out, at + WHEEL_DESC_LATERAL, wheel.lateral ?? DEFAULT_LATERAL, "lateral tyre curve");
|
|
2446
|
+
}
|
|
2447
|
+
return out;
|
|
2448
|
+
}
|
|
2449
|
+
var Vehicle = class {
|
|
2450
|
+
constructor(port, id, entity, wheelCount) {
|
|
2451
|
+
this.port = port, this.id = id, this.entity = entity, this.wheelCount = wheelCount, this.inputs = port.vehicleInputs(), this.states = port.vehicleStates(), this.input = id * (8), this.state = id * STATE_STRIDE;
|
|
2452
|
+
}
|
|
2453
|
+
refresh() {
|
|
2454
|
+
this.inputs = this.port.vehicleInputs(), this.states = this.port.vehicleStates();
|
|
2455
|
+
}
|
|
2456
|
+
drive(throttle, brake, steer, handbrake = 0, gear = (100)) {
|
|
2457
|
+
let i = this.inputs, o = this.input;
|
|
2458
|
+
i[o + (0)] = throttle, i[o + (1)] = brake, i[o + (2)] = steer, i[o + (3)] = handbrake, i[o + (4)] = gear;
|
|
2459
|
+
}
|
|
2460
|
+
driveFrom(source, at) {
|
|
2461
|
+
let i = this.inputs, o = this.input;
|
|
2462
|
+
i[o + (0)] = source[at + (0)], i[o + (1)] = source[at + (1)], i[o + (2)] = source[at + (2)], i[o + (3)] = source[at + (3)], i[o + (4)] = source[at + (4)];
|
|
2463
|
+
}
|
|
2464
|
+
get speed() {
|
|
2465
|
+
return this.states[this.state + (0)];
|
|
2466
|
+
}
|
|
2467
|
+
get rpm() {
|
|
2468
|
+
return this.states[this.state + (1)];
|
|
2469
|
+
}
|
|
2470
|
+
get gear() {
|
|
2471
|
+
return this.states[this.state + (2)];
|
|
2472
|
+
}
|
|
2473
|
+
get steer() {
|
|
2474
|
+
return this.states[this.state + (3)];
|
|
2475
|
+
}
|
|
2476
|
+
get groundedWheels() {
|
|
2477
|
+
return this.states[this.state + (4)];
|
|
2478
|
+
}
|
|
2479
|
+
get shifting() {
|
|
2480
|
+
return this.states[this.state + (5)] !== 0;
|
|
2481
|
+
}
|
|
2482
|
+
wheel(index, field) {
|
|
2483
|
+
return this.states[this.state + (8) + index * (16) + field];
|
|
2484
|
+
}
|
|
2485
|
+
get stateView() {
|
|
2486
|
+
return this.states;
|
|
2487
|
+
}
|
|
2488
|
+
get stateOffset() {
|
|
2489
|
+
return this.state;
|
|
2490
|
+
}
|
|
2491
|
+
};
|
|
2492
|
+
|
|
2493
|
+
// src/game/ai/types.ts
|
|
2494
|
+
var AI_EVENT_WORDS = 5, AI_NONE = 4294967295;
|
|
2495
|
+
var AI_MAX_GAME_SLOTS = 16;
|
|
2496
|
+
var BUILTIN_INPUTS = [
|
|
2497
|
+
"focus_distance",
|
|
2498
|
+
"focus_visible",
|
|
2499
|
+
"focus_since_seen",
|
|
2500
|
+
"focus_confidence",
|
|
2501
|
+
"focus_threat",
|
|
2502
|
+
"hostiles_known",
|
|
2503
|
+
"allies_near",
|
|
2504
|
+
"attack_token_free",
|
|
2505
|
+
"action_seconds",
|
|
2506
|
+
"goal_distance",
|
|
2507
|
+
"lateness",
|
|
2508
|
+
"best_object"
|
|
2509
|
+
];
|
|
2510
|
+
var PHASE_IDLE = 0, PHASE_WINDUP = 1, PHASE_STRIKE = 2, PHASE_RECOVER = 3, AiEventKind = {
|
|
2511
|
+
actionChanged: 1,
|
|
2512
|
+
focusAcquired: 2,
|
|
2513
|
+
focusLost: 3,
|
|
2514
|
+
heard: 4,
|
|
2515
|
+
arrived: 5,
|
|
2516
|
+
attackWindup: 6,
|
|
2517
|
+
attackStrike: 7,
|
|
2518
|
+
attackDone: 8,
|
|
2519
|
+
bark: 9,
|
|
2520
|
+
objectUsed: 10,
|
|
2521
|
+
coverTaken: 11
|
|
2522
|
+
}, ENGINE_AI_EXPORT_NAMES = [
|
|
2523
|
+
"engine_ai_create",
|
|
2524
|
+
"engine_ai_destroy",
|
|
2525
|
+
"engine_ai_registers",
|
|
2526
|
+
"engine_ai_view",
|
|
2527
|
+
"engine_ai_slots",
|
|
2528
|
+
"engine_ai_archetype",
|
|
2529
|
+
"engine_ai_spawn",
|
|
2530
|
+
"engine_ai_despawn",
|
|
2531
|
+
"engine_ai_target_add",
|
|
2532
|
+
"engine_ai_target_remove",
|
|
2533
|
+
"engine_ai_target_move",
|
|
2534
|
+
"engine_ai_target_threat",
|
|
2535
|
+
"engine_ai_agent_target",
|
|
2536
|
+
"engine_ai_noise",
|
|
2537
|
+
"engine_ai_goal",
|
|
2538
|
+
"engine_ai_focus",
|
|
2539
|
+
"engine_ai_skill",
|
|
2540
|
+
"engine_ai_need",
|
|
2541
|
+
"engine_ai_speed",
|
|
2542
|
+
"engine_ai_place",
|
|
2543
|
+
"engine_ai_step",
|
|
2544
|
+
"engine_ai_events",
|
|
2545
|
+
"engine_ai_doing",
|
|
2546
|
+
"engine_ai_aim",
|
|
2547
|
+
"engine_ai_digest",
|
|
2548
|
+
"engine_ai_squad",
|
|
2549
|
+
"engine_ai_join",
|
|
2550
|
+
"engine_ai_leave",
|
|
2551
|
+
"engine_ai_object_add",
|
|
2552
|
+
"engine_ai_object_remove",
|
|
2553
|
+
"engine_ai_cover_add",
|
|
2554
|
+
"engine_ai_cover_remove"
|
|
2555
|
+
], ENGINE_AI_WORLD_STEP = "engine_ai_step_world";
|
|
2556
|
+
|
|
2557
|
+
// src/game/story/engine.ts
|
|
2558
|
+
var STORY_REGISTER_WORDS = 20, STORY_BEAT = 0, STORY_SCENE = 1, STORY_BEAT_TICK = 2, STORY_SCENE_TICK = 4, STORY_SCENE_LENGTH = 6, STORY_FLAGS = 8, STORY_EVENT_COUNT = 9, STORY_SAMPLE_COUNT = 10;
|
|
2559
|
+
var STORY_DIGEST = 12, STORY_VARIABLES = 14, STORY_TICK_RATE = 15, STORY_SAMPLE_CAPACITY = 16, STORY_MAX_EVENTS = 1024, STORY_STARTED = 1, STORY_FINISHED = 2, STORY_EVENT_WORDS = 4, STORY_INPUT_WORDS = 3, STORY_SAMPLE_WORDS = 8, STORY_MAX_INPUTS = 64, STORY_PERSIST_SHIFT = 8, STORY_TYPE_MASK = 255, STORY_NONE = 4294967295, STORY_EVENT_ENTERED = 1, STORY_EVENT_OFFERED = 2, STORY_EVENT_TAKEN = 3, STORY_EVENT_REFUSED = 4, STORY_EVENT_LOGIC = 5, STORY_EVENT_KEY = 6, STORY_EVENT_FINISHED = 7, STORY_EVENT_RULE = 8, STORY_INPUT_CHOOSE = 1, STORY_INPUT_INTERACT = 2, STORY_INPUT_GIFT = 3, ENGINE_STORY_EXPORT_NAMES = [
|
|
2560
|
+
"engine_story_create",
|
|
2561
|
+
"engine_story_destroy",
|
|
2562
|
+
"engine_story_registers",
|
|
2563
|
+
"engine_story_events",
|
|
2564
|
+
"engine_story_samples",
|
|
2565
|
+
"engine_story_start",
|
|
2566
|
+
"engine_story_step",
|
|
2567
|
+
"engine_story_seek",
|
|
2568
|
+
"engine_story_available",
|
|
2569
|
+
"engine_story_variable",
|
|
2570
|
+
"engine_story_get",
|
|
2571
|
+
"engine_story_set",
|
|
2572
|
+
"engine_story_set_text",
|
|
2573
|
+
"engine_story_variable_text",
|
|
2574
|
+
"engine_story_program_text",
|
|
2575
|
+
"engine_story_text_index",
|
|
2576
|
+
"engine_story_text_of",
|
|
2577
|
+
"engine_story_id_of"
|
|
2578
|
+
], STORY_ID = 17, STORY_ID_TRACK = 4, STORY_TEXT_VARIABLE = 0, STORY_TEXT_CHOICE = 1, STORY_TEXT_BEAT = 2, STORY_TEXT_SCENE = 3, STORY_TEXT_KEY = 4, STORY_TEXT_ACTOR = 5, STORY_TEXT_RULE = 6, STORY_TEXT_ACTION = 7, NULL = 0, BYTE_ALIGN = 1, CAPACITY = -1, UNKNOWN = -3, INVALID = -4, DOUBLE_BYTES = 8, WORD_BYTES = 4, INPUT_SCRATCH_BYTES = (64) * (3) * (4), TEXT_SCRATCH_BYTES = 4096, WORD_BITS = 32n;
|
|
2579
|
+
function engineStoryExports(runtime) {
|
|
2580
|
+
let symbols = runtime.symbols;
|
|
2581
|
+
return ENGINE_STORY_EXPORT_NAMES.every((name2) => typeof symbols[name2] == "function") ? symbols : null;
|
|
2582
|
+
}
|
|
2583
|
+
function check2(code, what) {
|
|
2584
|
+
if (code >= 0) return code;
|
|
2585
|
+
throw code === (-1) ? new chunk2V7IL4HC_js.GameError("capacity_exceeded", `the story ${what} is too large`) : code === (-3) ? new chunk2V7IL4HC_js.GameError("unknown_resource", `the story ${what} names nothing in this story`) : code === (-4) ? new chunk2V7IL4HC_js.GameError("invalid_argument", `the engine refused the story ${what}`) : new chunk2V7IL4HC_js.GameError("invalid_argument", `the engine refused the story ${what} (${code})`);
|
|
2586
|
+
}
|
|
2587
|
+
var EngineStory = class {
|
|
2588
|
+
constructor(runtime, exports) {
|
|
2589
|
+
this.runtime = runtime;
|
|
2590
|
+
this.exports = exports;
|
|
2591
|
+
this.inputs = (0);
|
|
2592
|
+
this.text = (0);
|
|
2593
|
+
this.textBytes = 0;
|
|
2594
|
+
this.encoder = new TextEncoder();
|
|
2595
|
+
this.decoder = new TextDecoder();
|
|
2596
|
+
}
|
|
2597
|
+
alloc(bytes, align) {
|
|
2598
|
+
let at = this.runtime.exports.engine_alloc(bytes, align);
|
|
2599
|
+
if (at === (0)) throw new chunk2V7IL4HC_js.GameError("capacity_exceeded", "engine memory cannot hold the story's working space");
|
|
2600
|
+
return at;
|
|
2601
|
+
}
|
|
2602
|
+
textScratch(bytes) {
|
|
2603
|
+
return bytes > this.textBytes && (this.text !== (0) && this.runtime.exports.engine_free(this.text, this.textBytes, (1)), this.textBytes = Math.max(bytes, (4096)), this.text = this.alloc(this.textBytes, (1))), this.text;
|
|
2604
|
+
}
|
|
2605
|
+
bytes() {
|
|
2606
|
+
return new Uint8Array(this.runtime.memory.buffer);
|
|
2607
|
+
}
|
|
2608
|
+
create(program) {
|
|
2609
|
+
let at = this.alloc(Math.max(program.length, 1), (1));
|
|
2610
|
+
try {
|
|
2611
|
+
this.bytes().set(program, at);
|
|
2612
|
+
let story = this.exports.engine_story_create(at, program.length);
|
|
2613
|
+
if (story === (0)) throw new chunk2V7IL4HC_js.GameError("invalid_argument", "the engine refused the story program");
|
|
2614
|
+
return story;
|
|
2615
|
+
} finally {
|
|
2616
|
+
this.runtime.exports.engine_free(at, Math.max(program.length, 1), (1));
|
|
2617
|
+
}
|
|
2618
|
+
}
|
|
2619
|
+
destroy(story) {
|
|
2620
|
+
this.exports.engine_story_destroy(story);
|
|
2621
|
+
}
|
|
2622
|
+
start(story) {
|
|
2623
|
+
check2(this.exports.engine_story_start(story), "start");
|
|
2624
|
+
}
|
|
2625
|
+
step(story, inputs, count) {
|
|
2626
|
+
if (count > (64)) throw new chunk2V7IL4HC_js.GameError("capacity_exceeded", `a story step takes at most ${(64)} inputs`);
|
|
2627
|
+
this.inputs === (0) && (this.inputs = this.alloc(INPUT_SCRATCH_BYTES, (4))), count > 0 && new Uint32Array(this.runtime.memory.buffer, this.inputs, count * (3)).set(inputs.subarray(0, count * (3))), check2(this.exports.engine_story_step(story, this.inputs, count), "step");
|
|
2628
|
+
}
|
|
2629
|
+
seek(story, tick) {
|
|
2630
|
+
check2(this.exports.engine_story_seek(story, Math.round(tick)), "seek");
|
|
2631
|
+
}
|
|
2632
|
+
available(story, choice) {
|
|
2633
|
+
return check2(this.exports.engine_story_available(story, choice), "choice") === 1;
|
|
2634
|
+
}
|
|
2635
|
+
variable(story, variable) {
|
|
2636
|
+
return check2(this.exports.engine_story_variable(story, variable), "variable");
|
|
2637
|
+
}
|
|
2638
|
+
get(story, variable) {
|
|
2639
|
+
return this.exports.engine_story_get(story, variable);
|
|
2640
|
+
}
|
|
2641
|
+
set(story, variable, value) {
|
|
2642
|
+
check2(this.exports.engine_story_set(story, variable, value), "variable value");
|
|
2643
|
+
}
|
|
2644
|
+
setText(story, variable, text) {
|
|
2645
|
+
let encoded = this.encoder.encode(text), at = this.textScratch(encoded.length);
|
|
2646
|
+
this.bytes().set(encoded, at), check2(this.exports.engine_story_set_text(story, variable, at, encoded.length), "variable text");
|
|
2647
|
+
}
|
|
2648
|
+
readText(read, what) {
|
|
2649
|
+
let length = check2(read(this.textScratch((4096)), this.textBytes), what);
|
|
2650
|
+
return length > this.textBytes && (length = check2(read(this.textScratch(length), this.textBytes), what)), this.decoder.decode(this.bytes().subarray(this.text, this.text + length));
|
|
2651
|
+
}
|
|
2652
|
+
variableText(story, variable) {
|
|
2653
|
+
return this.readText((out, capacity) => this.exports.engine_story_variable_text(story, variable, out, capacity), "variable text");
|
|
2654
|
+
}
|
|
2655
|
+
programText(story, index) {
|
|
2656
|
+
return this.readText((out, capacity) => this.exports.engine_story_program_text(story, index, out, capacity), "text");
|
|
2657
|
+
}
|
|
2658
|
+
textIndex(story, text) {
|
|
2659
|
+
let encoded = this.encoder.encode(text), at = this.textScratch(encoded.length);
|
|
2660
|
+
this.bytes().set(encoded, at);
|
|
2661
|
+
let index = this.exports.engine_story_text_index(story, at, encoded.length);
|
|
2662
|
+
return index === (-3) ? (4294967295) : check2(index, "text");
|
|
2663
|
+
}
|
|
2664
|
+
textOf(story, what, index, key) {
|
|
2665
|
+
let at = this.exports.engine_story_text_of(story, what, index, key);
|
|
2666
|
+
return at === (-3) ? (4294967295) : check2(at, "text");
|
|
2667
|
+
}
|
|
2668
|
+
idOf(story, what, index) {
|
|
2669
|
+
let code = this.exports.engine_story_id_of(story, what, index);
|
|
2670
|
+
if (code === (-3)) return null;
|
|
2671
|
+
check2(code, "id");
|
|
2672
|
+
let registers = new Uint32Array(this.runtime.memory.buffer, this.exports.engine_story_registers(story), (20));
|
|
2673
|
+
return (BigInt(registers[(17) + 1]) << WORD_BITS | BigInt(registers[(17)])).toString();
|
|
2674
|
+
}
|
|
2675
|
+
buffer() {
|
|
2676
|
+
return this.runtime.memory.buffer;
|
|
2677
|
+
}
|
|
2678
|
+
views(story) {
|
|
2679
|
+
let buffer = this.runtime.memory.buffer, registers = new Uint32Array(buffer, this.exports.engine_story_registers(story), (20)), samples = this.exports.engine_story_samples(story);
|
|
2680
|
+
if (samples % (8) !== 0) throw new chunk2V7IL4HC_js.GameError("invalid_argument", "the engine's story samples are misaligned");
|
|
2681
|
+
return {
|
|
2682
|
+
registers,
|
|
2683
|
+
events: new Uint32Array(buffer, this.exports.engine_story_events(story), (1024) * (4)),
|
|
2684
|
+
samples: samples === (0) ? new Float64Array(0) : new Float64Array(buffer, samples, registers[(16)] * (8))
|
|
2685
|
+
};
|
|
2686
|
+
}
|
|
2687
|
+
};
|
|
2688
|
+
|
|
2689
|
+
exports.AGENT_ARRIVED = (3);
|
|
2690
|
+
exports.AGENT_IDLE = (0);
|
|
2691
|
+
exports.AGENT_LOST = (4);
|
|
2692
|
+
exports.AGENT_MOVING = (2);
|
|
2693
|
+
exports.AGENT_ON_LINK = (5);
|
|
2694
|
+
exports.AGENT_REQUESTING = (1);
|
|
2695
|
+
exports.AGENT_STRIDE = (8);
|
|
2696
|
+
exports.AGENT_X = (0);
|
|
2697
|
+
exports.AIR_DENSITY = AIR_DENSITY;
|
|
2698
|
+
exports.AI_EVENT_WORDS = (5);
|
|
2699
|
+
exports.AI_MAX_GAME_SLOTS = (16);
|
|
2700
|
+
exports.AI_NONE = (4294967295);
|
|
2701
|
+
exports.AiEventKind = AiEventKind;
|
|
2702
|
+
exports.BOAT_SHEET = (2);
|
|
2703
|
+
exports.BOAT_STEER = (1);
|
|
2704
|
+
exports.BOAT_THROTTLE = (0);
|
|
2705
|
+
exports.BUILTIN_INPUTS = BUILTIN_INPUTS;
|
|
2706
|
+
exports.Basis = Basis;
|
|
2707
|
+
exports.CRAFT_CHANNELS = (16);
|
|
2708
|
+
exports.CRAFT_PRESETS = CRAFT_PRESETS;
|
|
2709
|
+
exports.CRAFT_TELEMETRY_WORDS = (16);
|
|
2710
|
+
exports.CURVE_POINTS = (0);
|
|
2711
|
+
exports.CURVE_SLIP = (1);
|
|
2712
|
+
exports.CURVE_VALUE = CURVE_VALUE;
|
|
2713
|
+
exports.ContactRuleTable = ContactRuleTable;
|
|
2714
|
+
exports.DEFAULT_COLLIDER_CLASS = (0);
|
|
2715
|
+
exports.DEFAULT_EXTENTS = DEFAULT_EXTENTS;
|
|
2716
|
+
exports.DESC_ACKERMANN = DESC_ACKERMANN;
|
|
2717
|
+
exports.DESC_ANTI_ROLL = (3);
|
|
2718
|
+
exports.DESC_CENTER_LOCK = DESC_CENTER_LOCK;
|
|
2719
|
+
exports.DESC_DIFFERENTIAL_LOCK = DESC_DIFFERENTIAL_LOCK;
|
|
2720
|
+
exports.DESC_DOWNFORCE = (4);
|
|
2721
|
+
exports.DESC_DRAG = (5);
|
|
2722
|
+
exports.DESC_EFFICIENCY = DESC_EFFICIENCY;
|
|
2723
|
+
exports.DESC_ENGINE_BRAKING = (10);
|
|
2724
|
+
exports.DESC_ENGINE_INERTIA = DESC_ENGINE_INERTIA;
|
|
2725
|
+
exports.DESC_FINAL_DRIVE = DESC_FINAL_DRIVE;
|
|
2726
|
+
exports.DESC_FORCE_HEIGHT = DESC_FORCE_HEIGHT;
|
|
2727
|
+
exports.DESC_GEAR_COUNT = DESC_GEAR_COUNT;
|
|
2728
|
+
exports.DESC_HANDBRAKE_GRIP = (7);
|
|
2729
|
+
exports.DESC_HEADER = (56);
|
|
2730
|
+
exports.DESC_IDLE_RPM = (8);
|
|
2731
|
+
exports.DESC_LEAN_DAMPING = DESC_LEAN_DAMPING;
|
|
2732
|
+
exports.DESC_LEAN_MAX = DESC_LEAN_MAX;
|
|
2733
|
+
exports.DESC_LEAN_SPEED = DESC_LEAN_SPEED;
|
|
2734
|
+
exports.DESC_LEAN_STIFFNESS = DESC_LEAN_STIFFNESS;
|
|
2735
|
+
exports.DESC_MAX_RPM = (9);
|
|
2736
|
+
exports.DESC_MAX_STEER = (1);
|
|
2737
|
+
exports.DESC_RATIOS = DESC_RATIOS;
|
|
2738
|
+
exports.DESC_REVERSE = DESC_REVERSE;
|
|
2739
|
+
exports.DESC_ROLLING = (6);
|
|
2740
|
+
exports.DESC_SHIFT_DOWN = DESC_SHIFT_DOWN;
|
|
2741
|
+
exports.DESC_SHIFT_SECONDS = DESC_SHIFT_SECONDS;
|
|
2742
|
+
exports.DESC_SHIFT_UP = DESC_SHIFT_UP;
|
|
2743
|
+
exports.DESC_SKID_TORQUE = DESC_SKID_TORQUE;
|
|
2744
|
+
exports.DESC_STEER_RATE = (2);
|
|
2745
|
+
exports.DESC_TORQUE = DESC_TORQUE;
|
|
2746
|
+
exports.DESC_TORQUE_POINTS = (11);
|
|
2747
|
+
exports.DESC_TORQUE_RPM = (12);
|
|
2748
|
+
exports.DESC_WHEEL_COUNT = (0);
|
|
2749
|
+
exports.ENGINE_AI_EXPORT_NAMES = ENGINE_AI_EXPORT_NAMES;
|
|
2750
|
+
exports.ENGINE_AI_WORLD_STEP = ENGINE_AI_WORLD_STEP;
|
|
2751
|
+
exports.EngineStory = EngineStory;
|
|
2752
|
+
exports.FLIGHT_BRAKE = (5);
|
|
2753
|
+
exports.FLIGHT_FLAPS = (4);
|
|
2754
|
+
exports.FLIGHT_GEAR = (6);
|
|
2755
|
+
exports.FLIGHT_PITCH = (0);
|
|
2756
|
+
exports.FLIGHT_ROLL = (1);
|
|
2757
|
+
exports.FLIGHT_THROTTLE = (3);
|
|
2758
|
+
exports.FLIGHT_TILT = (7);
|
|
2759
|
+
exports.FLIGHT_YAW = (2);
|
|
2760
|
+
exports.GEAR_AUTO = (100);
|
|
2761
|
+
exports.GEAR_NEUTRAL = (0);
|
|
2762
|
+
exports.GEAR_REVERSE = (-1);
|
|
2763
|
+
exports.INPUT_BRAKE = (1);
|
|
2764
|
+
exports.INPUT_GEAR = (4);
|
|
2765
|
+
exports.INPUT_HANDBRAKE = (3);
|
|
2766
|
+
exports.INPUT_STEER = (2);
|
|
2767
|
+
exports.INPUT_STRIDE = (8);
|
|
2768
|
+
exports.INPUT_THROTTLE = (0);
|
|
2769
|
+
exports.MAX_AERO_TABLE = (64);
|
|
2770
|
+
exports.MAX_COLLIDER_CLASSES = (16);
|
|
2771
|
+
exports.MAX_CORNERS = (16);
|
|
2772
|
+
exports.MAX_CRAFT_WHEELS = (8);
|
|
2773
|
+
exports.MAX_FOILS = (16);
|
|
2774
|
+
exports.MAX_HULL_POINTS = (512);
|
|
2775
|
+
exports.MAX_HULL_RESOLUTION = (16);
|
|
2776
|
+
exports.MAX_ROTORS = (8);
|
|
2777
|
+
exports.MAX_THRUSTERS = (8);
|
|
2778
|
+
exports.MAX_WAVES = (16);
|
|
2779
|
+
exports.MAX_WHEELS = (16);
|
|
2780
|
+
exports.NO_AXLE = (-1);
|
|
2781
|
+
exports.NO_CHANNEL = (255);
|
|
2782
|
+
exports.NO_CONTACT_RULE = NO_CONTACT_RULE;
|
|
2783
|
+
exports.NO_GROUND = (-1);
|
|
2784
|
+
exports.NO_LINK = (-1);
|
|
2785
|
+
exports.NativeKernels = NativeKernels;
|
|
2786
|
+
exports.PHASE_IDLE = (0);
|
|
2787
|
+
exports.PHASE_RECOVER = (3);
|
|
2788
|
+
exports.PHASE_STRIKE = (2);
|
|
2789
|
+
exports.PHASE_WINDUP = (1);
|
|
2790
|
+
exports.PI = PI;
|
|
2791
|
+
exports.POSE_DIR_X = (3);
|
|
2792
|
+
exports.POSE_DIR_Z = (4);
|
|
2793
|
+
exports.POSE_LANE = (6);
|
|
2794
|
+
exports.POSE_SPEED = (5);
|
|
2795
|
+
exports.POSE_STRIDE = (8);
|
|
2796
|
+
exports.POSE_X = (0);
|
|
2797
|
+
exports.POSE_Z = (2);
|
|
2798
|
+
exports.PlainSpawns = PlainSpawns;
|
|
2799
|
+
exports.ROTOR_COLLECTIVE = (0);
|
|
2800
|
+
exports.ROTOR_CYCLIC_PITCH = (1);
|
|
2801
|
+
exports.ROTOR_CYCLIC_ROLL = (2);
|
|
2802
|
+
exports.ROTOR_ENGINE = (4);
|
|
2803
|
+
exports.ROTOR_PEDAL = (3);
|
|
2804
|
+
exports.RULE_FRICTION = (2);
|
|
2805
|
+
exports.RULE_IGNORE = (1);
|
|
2806
|
+
exports.RULE_ONE_WAY = (8);
|
|
2807
|
+
exports.RULE_RESTITUTION = (4);
|
|
2808
|
+
exports.SEA_STATES = SEA_STATES;
|
|
2809
|
+
exports.SIGNAL_AMBER = (1);
|
|
2810
|
+
exports.SIGNAL_GREEN = (0);
|
|
2811
|
+
exports.SIGNAL_RED = (2);
|
|
2812
|
+
exports.STATE_GEAR = (2);
|
|
2813
|
+
exports.STATE_GROUNDED = (4);
|
|
2814
|
+
exports.STATE_HEADER = (8);
|
|
2815
|
+
exports.STATE_RPM = (1);
|
|
2816
|
+
exports.STATE_SHIFTING = (5);
|
|
2817
|
+
exports.STATE_SPEED = (0);
|
|
2818
|
+
exports.STATE_STEER = (3);
|
|
2819
|
+
exports.STATE_STRIDE = STATE_STRIDE;
|
|
2820
|
+
exports.STEER_LIMIT = (1.2);
|
|
2821
|
+
exports.STORY_BEAT = (0);
|
|
2822
|
+
exports.STORY_BEAT_TICK = (2);
|
|
2823
|
+
exports.STORY_DIGEST = (12);
|
|
2824
|
+
exports.STORY_EVENT_COUNT = (9);
|
|
2825
|
+
exports.STORY_EVENT_ENTERED = (1);
|
|
2826
|
+
exports.STORY_EVENT_FINISHED = (7);
|
|
2827
|
+
exports.STORY_EVENT_KEY = (6);
|
|
2828
|
+
exports.STORY_EVENT_LOGIC = (5);
|
|
2829
|
+
exports.STORY_EVENT_OFFERED = (2);
|
|
2830
|
+
exports.STORY_EVENT_REFUSED = (4);
|
|
2831
|
+
exports.STORY_EVENT_RULE = (8);
|
|
2832
|
+
exports.STORY_EVENT_TAKEN = (3);
|
|
2833
|
+
exports.STORY_EVENT_WORDS = (4);
|
|
2834
|
+
exports.STORY_FINISHED = (2);
|
|
2835
|
+
exports.STORY_FLAGS = (8);
|
|
2836
|
+
exports.STORY_ID_TRACK = (4);
|
|
2837
|
+
exports.STORY_INPUT_CHOOSE = (1);
|
|
2838
|
+
exports.STORY_INPUT_GIFT = (3);
|
|
2839
|
+
exports.STORY_INPUT_INTERACT = (2);
|
|
2840
|
+
exports.STORY_INPUT_WORDS = (3);
|
|
2841
|
+
exports.STORY_MAX_INPUTS = (64);
|
|
2842
|
+
exports.STORY_NONE = (4294967295);
|
|
2843
|
+
exports.STORY_PERSIST_SHIFT = (8);
|
|
2844
|
+
exports.STORY_SAMPLE_COUNT = (10);
|
|
2845
|
+
exports.STORY_SAMPLE_WORDS = (8);
|
|
2846
|
+
exports.STORY_SCENE = (1);
|
|
2847
|
+
exports.STORY_SCENE_LENGTH = (6);
|
|
2848
|
+
exports.STORY_SCENE_TICK = (4);
|
|
2849
|
+
exports.STORY_STARTED = (1);
|
|
2850
|
+
exports.STORY_TEXT_ACTION = (7);
|
|
2851
|
+
exports.STORY_TEXT_ACTOR = (5);
|
|
2852
|
+
exports.STORY_TEXT_BEAT = (2);
|
|
2853
|
+
exports.STORY_TEXT_CHOICE = (1);
|
|
2854
|
+
exports.STORY_TEXT_KEY = (4);
|
|
2855
|
+
exports.STORY_TEXT_RULE = (6);
|
|
2856
|
+
exports.STORY_TEXT_SCENE = (3);
|
|
2857
|
+
exports.STORY_TEXT_VARIABLE = (0);
|
|
2858
|
+
exports.STORY_TICK_RATE = (15);
|
|
2859
|
+
exports.STORY_TYPE_MASK = (255);
|
|
2860
|
+
exports.STORY_VARIABLES = (14);
|
|
2861
|
+
exports.TAU = TAU;
|
|
2862
|
+
exports.TELEMETRY_AIRSPEED = (4);
|
|
2863
|
+
exports.TELEMETRY_ALPHA = (5);
|
|
2864
|
+
exports.TELEMETRY_APPARENT_WIND = (14);
|
|
2865
|
+
exports.TELEMETRY_BANK = (3);
|
|
2866
|
+
exports.TELEMETRY_CLIMB = (13);
|
|
2867
|
+
exports.TELEMETRY_CONTACTS = (8);
|
|
2868
|
+
exports.TELEMETRY_GEAR = (9);
|
|
2869
|
+
exports.TELEMETRY_GROUND_EFFECT = (7);
|
|
2870
|
+
exports.TELEMETRY_PITCH = (15);
|
|
2871
|
+
exports.TELEMETRY_PLANING = (2);
|
|
2872
|
+
exports.TELEMETRY_ROTOR = (11);
|
|
2873
|
+
exports.TELEMETRY_SPEED = (0);
|
|
2874
|
+
exports.TELEMETRY_SPOOL = (10);
|
|
2875
|
+
exports.TELEMETRY_STALLED = (6);
|
|
2876
|
+
exports.TELEMETRY_SUBMERGED = (1);
|
|
2877
|
+
exports.TELEMETRY_THRUST = (12);
|
|
2878
|
+
exports.TableSpawns = TableSpawns;
|
|
2879
|
+
exports.VEHICLE_DESC_WORDS = VEHICLE_DESC_WORDS;
|
|
2880
|
+
exports.Vehicle = Vehicle;
|
|
2881
|
+
exports.WATER_SAMPLE_WORDS = (7);
|
|
2882
|
+
exports.WHEEL_CENTER = (0);
|
|
2883
|
+
exports.WHEEL_DESC_AXLE = (16);
|
|
2884
|
+
exports.WHEEL_DESC_BRAKE = (13);
|
|
2885
|
+
exports.WHEEL_DESC_COMPRESSION = (8);
|
|
2886
|
+
exports.WHEEL_DESC_DRIVE = (12);
|
|
2887
|
+
exports.WHEEL_DESC_GRIP = (15);
|
|
2888
|
+
exports.WHEEL_DESC_HANDBRAKE = (14);
|
|
2889
|
+
exports.WHEEL_DESC_INERTIA = (4);
|
|
2890
|
+
exports.WHEEL_DESC_LATERAL = WHEEL_DESC_LATERAL;
|
|
2891
|
+
exports.WHEEL_DESC_LONGITUDINAL = (18);
|
|
2892
|
+
exports.WHEEL_DESC_MAX_FORCE = (10);
|
|
2893
|
+
exports.WHEEL_DESC_POSITION = (0);
|
|
2894
|
+
exports.WHEEL_DESC_RADIUS = (3);
|
|
2895
|
+
exports.WHEEL_DESC_RELAXATION = (9);
|
|
2896
|
+
exports.WHEEL_DESC_REST = (5);
|
|
2897
|
+
exports.WHEEL_DESC_SIDE = (17);
|
|
2898
|
+
exports.WHEEL_DESC_STEER = (11);
|
|
2899
|
+
exports.WHEEL_DESC_STIFFNESS = (7);
|
|
2900
|
+
exports.WHEEL_DESC_TRAVEL = (6);
|
|
2901
|
+
exports.WHEEL_DESC_WORDS = (56);
|
|
2902
|
+
exports.WHEEL_FORCE_LAT = (15);
|
|
2903
|
+
exports.WHEEL_FORCE_LONG = (14);
|
|
2904
|
+
exports.WHEEL_GROUND = (6);
|
|
2905
|
+
exports.WHEEL_LENGTH = (5);
|
|
2906
|
+
exports.WHEEL_LOAD = (12);
|
|
2907
|
+
exports.WHEEL_OMEGA = (13);
|
|
2908
|
+
exports.WHEEL_POINT = (7);
|
|
2909
|
+
exports.WHEEL_SLIP = (10);
|
|
2910
|
+
exports.WHEEL_SLIP_ANGLE = (11);
|
|
2911
|
+
exports.WHEEL_SPIN = (3);
|
|
2912
|
+
exports.WHEEL_STEER = (4);
|
|
2913
|
+
exports.WHEEL_STRIDE = (16);
|
|
2914
|
+
exports.Water = Water;
|
|
2915
|
+
exports.WaterSample = WaterSample;
|
|
2916
|
+
exports.atan2 = atan2;
|
|
2917
|
+
exports.bindKernelEngine = bindKernelEngine;
|
|
2918
|
+
exports.checkColliderClass = checkColliderClass;
|
|
2919
|
+
exports.compileWasmKernel = compileWasmKernel;
|
|
2920
|
+
exports.constant = constant;
|
|
2921
|
+
exports.encodeVehicleDesc = encodeVehicleDesc;
|
|
2922
|
+
exports.engineStoryExports = engineStoryExports;
|
|
2923
|
+
exports.kernelEngineFeatures = kernelEngineFeatures;
|
|
2924
|
+
exports.mix = mix;
|
|
2925
|
+
exports.mixWith = mixWith;
|
|
2926
|
+
exports.packContactRuleHeader = packContactRuleHeader;
|
|
2927
|
+
exports.peakCurve = peakCurve;
|
|
2928
|
+
exports.reportSpawns = reportSpawns;
|
|
2929
|
+
exports.sampleCurve = sampleCurve;
|
|
2930
|
+
exports.seaDesc = seaDesc;
|
|
2931
|
+
exports.sinCos = sinCos;
|
|
2932
|
+
exports.spawnOverflow = spawnOverflow;
|
|
2933
|
+
exports.validateCurve = validateCurve;
|
|
2934
|
+
exports.wasmKernelImports = wasmKernelImports;
|
|
2935
|
+
exports.wrapAngle = wrapAngle;
|
|
2936
|
+
exports.writeContactRulePayload = writeContactRulePayload;
|