@hadoku/watchparty-ui 0.44.20 → 0.45.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/dist/chunks/{AdminPanel-CYbxabgY.js → AdminPanel-BGVD6Qlb.js} +4 -4
- package/dist/chunks/{AdminPanel-CYbxabgY.js.map → AdminPanel-BGVD6Qlb.js.map} +1 -1
- package/dist/chunks/{GameModule-Df1rYrJo.js → GameModule-Dx3GHtRk.js} +244 -247
- package/dist/chunks/GameModule-Dx3GHtRk.js.map +1 -0
- package/dist/chunks/{MapEditor-DgbOaCT2.js → MapEditor-yvJbXXgw.js} +319 -325
- package/dist/chunks/MapEditor-yvJbXXgw.js.map +1 -0
- package/dist/chunks/{MediaDrawer-Da6-fLeV.js → MediaDrawer-DLFj0-te.js} +293 -297
- package/dist/chunks/MediaDrawer-DLFj0-te.js.map +1 -0
- package/dist/chunks/{PlaylistPanel-fy0YV4nH.js → PlaylistPanel-B0SWGlFy.js} +124 -126
- package/dist/chunks/PlaylistPanel-B0SWGlFy.js.map +1 -0
- package/dist/chunks/Room-BVyJK3zM.js +6165 -0
- package/dist/chunks/Room-BVyJK3zM.js.map +1 -0
- package/dist/chunks/{index-B92W398r.js → index-DOLbMWw6.js} +1626 -1618
- package/dist/chunks/index-DOLbMWw6.js.map +1 -0
- package/dist/chunks/{submissionsApi-CHcpF-It.js → submissionsApi-CXZf_xlm.js} +2 -2
- package/dist/chunks/{submissionsApi-CHcpF-It.js.map → submissionsApi-CXZf_xlm.js.map} +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.js +1 -1
- package/dist/room-chrome.js +3 -2
- package/dist/room-chrome.js.map +1 -1
- package/dist/watchparty-ui.css +1 -1
- package/package.json +2 -2
- package/dist/chunks/GameModule-Df1rYrJo.js.map +0 -1
- package/dist/chunks/MapEditor-DgbOaCT2.js.map +0 -1
- package/dist/chunks/MediaDrawer-Da6-fLeV.js.map +0 -1
- package/dist/chunks/PlaylistPanel-fy0YV4nH.js.map +0 -1
- package/dist/chunks/Room-Ci6DN1Oi.js +0 -6137
- package/dist/chunks/Room-Ci6DN1Oi.js.map +0 -1
- package/dist/chunks/index-B92W398r.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as R, useMemo as P, useRef as z, useEffect as
|
|
3
|
-
import { C as
|
|
4
|
-
const Oe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAA4ElEQVR4nO3bvQrCMAAAYRUnwcFn7PvjILjq4JalCDYf0ru5P8eRhNCf47Isr8NEno/7V8dfrreNTD6cNr36H1AALaA5z77hOKfHNWHrOT+y+xFQAC2gKYAW0BRAC2gKoAU0BdACmgJoAU0BtICmAFpAUwAtoCmAFtAUQAtoCqAFNAXQAprp7wZHZr8LHNn9CCiAFtAUQAtoCqAFNAXQApoCaAFNAbSApgBaQMOfB/StMKYAWkBTAC2gKYAW0EzfB6z9Nzh7X7D7EVAALaDZfA349l/hX5+/xu5HQAG0gOYNTj4XivrBP34AAAAASUVORK5CYII=", Se = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAVUExURWY5MXlWQkUoPJVoVKx3USYjOv///88sd78AAAABYktHRAZhZrh9AAAAB3RJTUUH6gUWFB4FeZ3ViwAAAHVJREFUSMflk8kNwCAMBLcFWnALtEAL6b+VgMyKCHG8skHKfMBoHsYHgJABrIPvkAhxwZ+EE3qRHnhqLf5CoEJJJZzRi83ASIS5ohHMwoJcMIkAeKvGp0bwZAockRYphavS35UCl8XXZfqL1wWWiLFawACZcANvCQaAiP6VCQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNi0wNS0yMlQyMDoyMTo0MSswMDowMGeGF3AAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjYtMDUtMjJUMjA6MjE6NDErMDA6MDAW26/MAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI2LTA1LTIyVDIwOjMwOjA1KzAwOjAwH4cQBAAAAABJRU5ErkJggg==", He = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABXUlEQVR4nO2awUrDUBBFrcxKUOjChboSBIXuBBcFv7q/IeJKMSC4aiMILWgo7ux6RrA8THvsm3t2MwRyc7mZvCRvcH07/t6riK4dFB2/vyEdO4MMoAXQ2OXpiWscHA5dfX52sU09vfP4fOfqZta6On0CZAAtgMZqu+cjo6sbVzeziavTJ0AG0AJoZAAtgEYG0AJorLbnfinpEyADaAE0MoAWQCMDaAE09jp9cY1s64L0CZABtAAaW34uXKO2mRCvJ5I+ATKAFkBjsRFnQvy39t+J/znWkT4BMoAWQPNjBuw6cYbFmRD3EKVPgAygBdBUNwMiD81T6GgGOGQALYDG3j8Wvx5wfFS2ti6l7/PHfYDrSJ8AGUALoLFN3+Ol/FVP3PscuW/fXJ0+ATKAFkCz9XeB+Nyn1xnpEyADaAE01X8PmHdfoaPvAQ4ZQAugsdL3576Zd+z50ydABtACaFan50Bii49pkgAAAABJRU5ErkJggg==", De = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABV0lEQVR4nO2aPWsCQRRFY9gqJIKFhbGQfBDBLm3+f5ciVYKCKCk2FhaBKLZavzvFMmziyTL3dE+W5bzLm3HY3d7Tw8vxIoPrUdblZ2e/6WVdf/lHHp3BAdACNJWu6efpLNR348dz+vw663oZ6rfFR6iLnwAHQAvQVPpD19e8ov14DxAcAC1A4wBoARoHQAvQOABagMYB0AI0DoAWoHEAtACNA6AFaBwALUBT6bs0fY7e9WeE2o/2W/wEOABagCZ5L3DYfYf6ff6adcOrm0E7owbUry3FT4ADoAVoku8DlO1PXHOT8X2o6XOC/s9/1qtQD/txT9J+i58AB0AL0CTngMXXJtTT21Go6TWvqI+eE7QfpfgJcAC0AE2yB+ia7zraj+4JxU+AA6AFaBwALUDjAGgBGgdAC9A4AFqAxgHQAjQOgBagSZ4HNPHfvh9Qn1yKnwAHQAvQnAB0ZD6cfejf/wAAAABJRU5ErkJggg==", Me = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgUlEQVR4nO2aMUsDQRCFL5JCRIUIFmolCBHsBAvBX+3fELFSPBCszAlCAhqCnbbOLGQZvLvvwr6vm2RZ3j5m5vb2dnR5c/1T/WF6fFRF2NmbhMa3zeprERpfzxoTb7UpZhORAbQAmnFuwMX5VR86OuPx+W7t/8VngAygBdAkPWDTa97j11PPbk1cfAbIAFoAjQygBdDIAFoAjQygBdDIAFoAjQygBdDIAFoAjQygBdDIAFoATXIm+Pr2YuLTk7PexHSBX4+n+AyQAbQAmuy3QV9D0e/xfRO9r1B8BsgAWgDNeNmM7C9TGw695j1er+8Jfr3FZ4AMoAXQJPuAh/rJxNF7g0PDr6eq1AMMMoAWQJN9F/B3a9vuCX5+z8HutokP99fv9XPzeYrPABlAC6BJekDfz/1ojefI6b9v3k1cfAbIAFoATXYf0DYfn8M6Xyg+A2QALYAm6QG+Rv/7XM7R9fy5nlN8BsgAWgBN0gPmy28Xx96vo3Q9f4rOBA0ygBZA8wuEsEaUV+FlQgAAAABJRU5ErkJggg==", We = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABUklEQVR4nO2bv4vCQBBGL0cKCxEULNRKlFOwvub+/95OEAQrtRAUPJHrznpmi7D442nme90ESR4fs5vNxhRfo5//jwyavayfvzyftACNAqAFaEo/pif9nqln0+9n+jyc9WZl6vAdoABoAZrSH6jbmPcMB2NTh+8ABUAL0CgAWoBGAdACNAqAFqBRALQAjQKgBWgUAC1AowBoARoFQAvQJHuCft/c76G9O3ov4FAAtABNMgd4/Ji5/B4fJkMQvgMUAC1AU553hT0ysWXdxrwnfAcoAFqAJlkHzJcLU/v/DNWN8B2gAGgBmspngeV2Z+pOs2Hqbqt9k8D+lLfOyL1e1fnDd4ACoAVokjmAvu/fOqfkni98BygAWoAmmQP8ffPeY/LVCN8BCoAWoEnmgMP5z9Td1n0v6J8t6HVH+A5QALQATeG/Ha7bt8FVhO8ABUAL0FwBfpsww2cW0LwAAAAASUVORK5CYII=", Le = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABh0lEQVR4nO2asUvDQBTGL9JBpBYUOrROojSCm+Cg+P8vDk6KhUIn7SBU0CJudfXeYY/wkvxM3vtt1+Saj4/vLu8uV1zd3WzDL8rpJGg4ODxS9c/x9fmu6j9/XUXtPdW/9QA3gBZAM8jdcHlx3YaOxli+LKJ2OY2vm0+AG0ALoEnmgK6PecnpyXnUlnOC+QS4AbQAGjeAFkDjBtACaLJrgb4h6wLzCXADaAE0bgAtgMYNoAXQJHWAXC/L92bX8f0AgRtAC6DJrgW6PidI/fLbovkEuAG0AJrK+wGPz/dN6MAwnwA3gBZAM9isiviXMm5qz+TkkGd2tGeUqmI+AW4ALYAmqQMe5k9Ru+0x2facYD4BbgAtgKaYnd1GZ4WHk+1f94YQQjge7qseuN58q/pXJafXfALcAFoATVIHyDEzHtV7/n882n397WP32qNuPeYT4AbQAmj+/Rmhuse8xHwC3ABaAE0yB6S1evxebnpMyufn6gYt5hPgBtACaCrvB/QN8wlwA2gBND+5n0Dr51yy0gAAAABJRU5ErkJggg==", Te = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABdUlEQVR4nO2bPUvEQBCGc7KV4IHFFWolCB7YCRbC/er7GxZWigHByrtCOEGDaHW2NxNwCfl4vMz7dLNhN29eZiebTTK5Xtxuix0uT0+KNhweHbfqn+Pr871V/3K1NvFBq9FGgAygBdAkP+f9HD4/uxhST+c8PN39eTx8BsgAWgBNGtuc91zNb0xcrpYmDp8BMoAWQCMDaAE0MoAWQJPGdt9vSvgMkAG0ABoZQAugkQG0AJr08vpsGsa2LvDX5wmfATKAFkCT/Lu2fa8JuTnvCZ8BMoAWQJN8g68JuXdr/42m3yeEzwAZQAugqdWAfcfXMF8TqvXExOEzQAbQAmjS24edM7Npv9/5Dc19+ehaVAMMMoAWQFNbB/ia4GlaI3LjdT3+pvpu1D98BsgAWgBN6vu+78fvet3h+8+m9rg/X1X8mDh8BsgAWgCNDKAF0MgAWgBN73uC9H5D/dlA+wEGGUALoEn+X9q+2VTDni9H+AyQAbQAml8slkzMIBNZowAAAABJRU5ErkJggg==", Ve = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABQ0lEQVR4nO2asQ4BQRRFka2EQolKiE10Wv/fKVTEJhIVSgXR0po7iY2sONbc071NVs7cvJnZjGlOx4t744lOPyj/nhYtQOMAaAGaTOf8PJ8F9Wg4+abPx9kfdkF9u5yDOvkOcAC0AE2mD+o+5xUdj64JyXeAA6AFaBwALUDjAGgBGgdAC9A4AFqAxgHQAjQOgBagic4D/h2fCQoOgBagya6nZvBAz8zqfkao41GS7wAHQAvQRN8Buk+ut8u3frDd7VUzKkH9qpJ8BzgAWoAmuh+gFMdTUP/a/QHd51fFJqjzQf/l+8l3gAOgBWii7wCd8zqH6DmvqI9+J+h4lOQ7wAHQAjTRGlC2b9YNHY+uCcl3gAOgBWgcAC1A4wBoARoHQAvQOABagMYB0AI0DoAWoHn7jtCv3R8o+/+/jOQ7wAHQAjQPMsI9FqsxS7oAAAAASUVORK5CYII=", Pe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABQUlEQVR4nO2aoQoCQRRFVSaJBuNqEgTBpk3w/4thk+KCYFKjQbFqfneDCItHnXva27CcubwZhplpL1bLRysjbud2qDuQx9fgAGgBmjQdFuFDtz8I9Xg0+aRP4xyO+1CXrW2os+8AB0AL0KR/m/OKjqesvAYEHAAtQOMAaAEaB0AL0DgAWoDGAdACNA6AFqBxALQATbpfL7QDSvYd4ABoAZqkH/Qc/dfPCHU8vhsUHAAtQFNbA3RfsNmt3/qh3jM0TdP7luw7wAHQAjS1NUCpTudQz6ezUNP7hNr9v9z96fuHXhGfRGXfAQ6AFqBJOscVnUP0nFfUR/cJr8aXfQc4AFqAprYP0Dn/6+h4dE3IvgMcAC1A4wBoARoHQAvQOABagMYB0AI0DoAWoHEAtADNy3sB5dveD6jPu2TfAQ6AFqB5AmmUO6FIXs0fAAAAAElFTkSuQmCC", qe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABRklEQVR4nO2asWoCQRRFTZhKsEipqYSAEisDFoH8f5PCKkFBsDKWFoKttpm7xTDE7Fl993SzLMuZy3vD7O48vH28n3u/mIyGvRr6g6eq+6/N6Xioun/9s8/Gj9eUuUUcAC1Ak7TntafHzy9t+vw7/cEmG4evAAdAC9Cke+95RecXvgIcAC1Ak+6950uErwAHQAvQOABagMYB0AI0DoAWoHEAtABN2u7yb2TR3g3CV4ADoAVokv5bi7YmhK8AB0AL0CS9oGvC1+qz6oGz6eJvRgVqfUqErwAHQAvQNNYARc/UzCev2bjtfYKuMbpvWa6/s3HpzFP4CnAAtABN0h5XtIe69m6gPrqPKc0vfAU4AFqAprEPqD0r3HV0Pj4rLDgAWoDGAdACNA6AFqBxALQAjQOgBWgcAC1A4wBoARoHQAvQOABagOYCVgAynQlZGFoAAAAASUVORK5CYII=", Ge = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABOElEQVR4nO2bwQsBQRSH0RwkFLUHnJSi3JSD8v9fnBWlnHBQFJIb53lbatrsl97vu83s1n79evt2ZtutzpaLd8UxNVqARgHQAjRh3O9FE9PJHFIph/1hF43dV4ACoAVoQqPVoR1KZTgYRWP3FaAAaAGaYO8Jb7ivAAVAC9AoAFqARgHQAjQKgBagUQC0AE2w78i87Q3cV4ACoAVowvN+jSa89QT3FaAAaAGaYCdsT1hvVqXJELivAAVAC9AoAFqARgHQAjThfIuf+1nb1/cC7itAAdACNLm9gO0JlsvjlXSBbrP+9Xhqz9keT0nnW6yP+wpQALQATUi9B7N2PC57HWG/bS56ffcVoABoAZrcOuDfKNpz3FeAAqAFaJJ7gH3u2r2BXSf8Gq0DCqIAaAGaqv4ddo4CoAVoPpR0Me34gHFfAAAAAElFTkSuQmCC", Xe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABeklEQVR4nO2asUoDQRRFN7KVaMAiRbQSxQjWNn62vyFipbggpDIrCAoaxE7ruVMMg7N7XOae7oUlOXN583ay7Ozs5OqnyWBvmXX56Gz7Wdb1OwN5TAYHQAvQtLqnV4fLoL44vxzTpzj3jzdB3W36oK6+AxwALUDT6gdT3/OKrqfbXAd19R3gAGgBGgdAC9A4AFqAxgHQAjQOgBagcQC0AI0DoAVooucB6+enoD4+Oh1NZgh0PUr1HeAAaAEaB0AL0DgAWoAmOgcoeh/9+nwfTKYEu/sHWddX3wEOgBagaaN3alZh+d/3vKK+OhN0vdV3gAOgBWiic8Bd9xDU+s7Q1ND1NI1nQIADoAVokv8F9L26v86E14+8c8Vinne2V98U1XeAA6AFaKIZMPR9X/e0zoTcPa+k/G/7l6CuvgMcAC1AE82A0nuSJnXuqL4DHAAtQBPNgLftd1Av5mV/sPR/ixS6Hj8PEBwALUCT/TygNEN/f4rqO8AB0AI0v8NqTSVA9X9QAAAAAElFTkSuQmCC", Ie = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABUElEQVR4nO2asWoCQRRF3TCVYJEyWogSSMAuYCH41f5GakFBDCnUIoWQiK22zhWyyIQc2XdP91ZWz17ejAvzqrfp5NS64KX71Cqh3Xksur+O48++6P7ldpfVD0Xf1gAcAC1Ak3TN6xoe9J7/0+fPmS/ef/08fAc4AFqAJjVtzSuj13FWL7ezrA7fAQ6AFqBxALQAjQOgBWhS0/73byV8BzgAWoDGAdACNA6AFqBJH5tVdiHae0H4DnAAtABN0rO2pu0J+jxK+A5wALQATdILuifUna0p9HxA3e8fdlVWh+8AB0AL0FztAcrXd77m+r1hVtPvCbpHfW7WWa2+SvgOcAC0AE2lc4KKzhDpefu9oXuCzgUq4TvAAdACNFfvAaWzwveGPo9nhQUHQAvQOABagMYB0AI0DoAWoHEAtACNA6AFaBwALUDjAGgBGgdAC9CcAYDuOTwDN8emAAAAAElFTkSuQmCC", je = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABNElEQVR4nO2aQQsBURRG0VspysKCWYgUZacslP+/sVaUyGLGwkJRtqzfnZppFubQ/c7uvaQzX9/c3hjN5Wb9bjimRQvQKABagCbMhoNoYzFfQSr1cE6P0dp9AxQALUAT2p0e7VAr42Qard03QAHQAjTB3hPecN8ABUAL0CgAWoBGAdACNAqAFqBRALQATbC/kXl7NnDfAAVAC9CE1/MebXibCe4boABoAZpgN+xM2O23lb7w2+8Wq/qU4b4BCoAWoMnNAMvtEc+EUTKJ1nWfE+yMseeWS3qK1v1u8btP9w1QALQATThk18IP2P8Q/dqzgfWx55iy63PfAAVAC9DkzgH2nv937PXYmeC+AQqAFqBRALQAjQKgBWgUAC1AowBoARoFQAvQKABagEYB0AI0CoAWoPkA1dkt6kUtkpYAAAAASUVORK5CYII=", ze = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABUUlEQVR4nO2bMWvCQBiGVW4owQgtZFCnQqF7N6H/f3EWFAQndRAstKV0a1fvyyAf0Twk3/tsJwc+vrx3JvEcvr0v/gYXvM6mAw9F+eiaf2t+vj5c8zeHYzYe3VKmiygAWoAm2TVv1/Tz/KVNn7tTlNtsHL4BCoAWoEl9X/MW+/nCN0AB0AI0qe9r/hrhG6AAaAEaBUAL0CgAWoBGAdACNAqAFqBJu33+jCzavUH4BigAWoAm2d/Wou0J4RugAGgBmmRfsHvCar1sTYYgfAMUAC1AowBoARoFQAvQJHtuzntOsOuEb4ACoAVoavcCdk/w8jR+cM2vJr6zxl6/az7hG6AAaAGa2llhL6fP/PmBd017sb5Nr2PCN0AB0AI0teuAruG97rCEb4ACoAVo3HuA/d4/f/9m42rSTMhL0/cP3wAFQAvQDO1/h6MRvgEKgBag+Qfu+jOSBU5GcAAAAABJRU5ErkJggg==", Je = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABOklEQVR4nO2aMQvCMBQGrTgVKjg4qJMgKLgJDoL/f3EWFERxqI4OiquuvtchQ6BXm++2iJXrkRRJk622m0/nh/l41IkhLwZR14d4Px9R1x9vdzPuRv1aC1AAWoCmF/rCcrGuw6M28uJkxsnPAAWgBWgqz4C2rXnPdDIz4+RngALQAjQKQAvQKAAtQKMAtACNAtACNApAC9AoAC1AowC0AI0C0AI0lT3BS2n3zf0e2r/j7y/5GaAAtABN73XP7CdzO/RrJvR+vunnAzzJzwAFoAVogucDruXZjId9u8bpd4n+GRXy9SQ/AxSAFqDJ/DlBjz83SK/5EPvDzoz9uUBP8jNAAWgBmsr/gNizwk3D34/OCjsUgBagUQBagEYBaAEaBaAFaBSAFqBRAFqARgFoARoFoAVoFIAWoPkCQOwuh7kvX8IAAAAASUVORK5CYII=", Ye = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABLElEQVR4nO2asQrCMAAFq/gT6iQIFZ0UHAT/f3FwUiwITuroILjqal6HUFJ61b7bAlauRxJom95qu3lnX+SjYZbCYrZOuj7G4bRLur643YNxP+nf/gAHoAVoBrEf6JpZ5vNgPBlP6zWKoHvM5XoOxvviGIxje1rnZ4AD0AI0pT1A17yuoabXfAz1eT0fwVjvR+n8DHAAWoCmtAekPgu0Db0fPwsIDkAL0DgALUDjALQAjQPQAjQOQAvQOAAtQOMAtABN9LuAou/h6XeE6lOVzs8AB6AFaCrvAfreXb/Xt/18gNL5GeAAtACNzwfUo/W7OAAtQOPzAbUb/RgOQAvQ+HxAkzJtxAFoARoHoAVoHIAWoHEAWoDGAWgBGgegBWgcgBagcQBagMYBaAGaD9C3Qmb46VC5AAAAAElFTkSuQmCC", ie = {
|
|
1
|
+
import { jsxs as m, jsx as o, Fragment as Ue } from "react/jsx-runtime";
|
|
2
|
+
import { useState as R, useMemo as P, useRef as z, useEffect as J, useCallback as E } from "react";
|
|
3
|
+
import { C as Fe, u as Oe, g as Se, s as He } from "./index-DOLbMWw6.js";
|
|
4
|
+
const De = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAA4ElEQVR4nO3bvQrCMAAAYRUnwcFn7PvjILjq4JalCDYf0ru5P8eRhNCf47Isr8NEno/7V8dfrreNTD6cNr36H1AALaA5z77hOKfHNWHrOT+y+xFQAC2gKYAW0BRAC2gKoAU0BdACmgJoAU0BtICmAFpAUwAtoCmAFtAUQAtoCqAFNAXQAprp7wZHZr8LHNn9CCiAFtAUQAtoCqAFNAXQApoCaAFNAbSApgBaQMOfB/StMKYAWkBTAC2gKYAW0EzfB6z9Nzh7X7D7EVAALaDZfA349l/hX5+/xu5HQAG0gOYNTj4XivrBP34AAAAASUVORK5CYII=", Me = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAVUExURWY5MXlWQkUoPJVoVKx3USYjOv///88sd78AAAABYktHRAZhZrh9AAAAB3RJTUUH6gUWFB4FeZ3ViwAAAHVJREFUSMflk8kNwCAMBLcFWnALtEAL6b+VgMyKCHG8skHKfMBoHsYHgJABrIPvkAhxwZ+EE3qRHnhqLf5CoEJJJZzRi83ASIS5ohHMwoJcMIkAeKvGp0bwZAockRYphavS35UCl8XXZfqL1wWWiLFawACZcANvCQaAiP6VCQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNi0wNS0yMlQyMDoyMTo0MSswMDowMGeGF3AAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjYtMDUtMjJUMjA6MjE6NDErMDA6MDAW26/MAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI2LTA1LTIyVDIwOjMwOjA1KzAwOjAwH4cQBAAAAABJRU5ErkJggg==", We = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABXUlEQVR4nO2awUrDUBBFrcxKUOjChboSBIXuBBcFv7q/IeJKMSC4aiMILWgo7ux6RrA8THvsm3t2MwRyc7mZvCRvcH07/t6riK4dFB2/vyEdO4MMoAXQ2OXpiWscHA5dfX52sU09vfP4fOfqZta6On0CZAAtgMZqu+cjo6sbVzeziavTJ0AG0AJoZAAtgEYG0AJorLbnfinpEyADaAE0MoAWQCMDaAE09jp9cY1s64L0CZABtAAaW34uXKO2mRCvJ5I+ATKAFkBjsRFnQvy39t+J/znWkT4BMoAWQPNjBuw6cYbFmRD3EKVPgAygBdBUNwMiD81T6GgGOGQALYDG3j8Wvx5wfFS2ti6l7/PHfYDrSJ8AGUALoLFN3+Ol/FVP3PscuW/fXJ0+ATKAFkCz9XeB+Nyn1xnpEyADaAE01X8PmHdfoaPvAQ4ZQAugsdL3576Zd+z50ydABtACaFan50Bii49pkgAAAABJRU5ErkJggg==", Le = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABV0lEQVR4nO2aPWsCQRRFY9gqJIKFhbGQfBDBLm3+f5ciVYKCKCk2FhaBKLZavzvFMmziyTL3dE+W5bzLm3HY3d7Tw8vxIoPrUdblZ2e/6WVdf/lHHp3BAdACNJWu6efpLNR348dz+vw663oZ6rfFR6iLnwAHQAvQVPpD19e8ov14DxAcAC1A4wBoARoHQAvQOABagMYB0AI0DoAWoHEAtACNA6AFaBwALUBT6bs0fY7e9WeE2o/2W/wEOABagCZ5L3DYfYf6ff6adcOrm0E7owbUry3FT4ADoAVoku8DlO1PXHOT8X2o6XOC/s9/1qtQD/txT9J+i58AB0AL0CTngMXXJtTT21Go6TWvqI+eE7QfpfgJcAC0AE2yB+ia7zraj+4JxU+AA6AFaBwALUDjAGgBGgdAC9A4AFqAxgHQAjQOgBagSZ4HNPHfvh9Qn1yKnwAHQAvQnAB0ZD6cfejf/wAAAABJRU5ErkJggg==", Te = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgUlEQVR4nO2aMUsDQRCFL5JCRIUIFmolCBHsBAvBX+3fELFSPBCszAlCAhqCnbbOLGQZvLvvwr6vm2RZ3j5m5vb2dnR5c/1T/WF6fFRF2NmbhMa3zeprERpfzxoTb7UpZhORAbQAmnFuwMX5VR86OuPx+W7t/8VngAygBdAkPWDTa97j11PPbk1cfAbIAFoAjQygBdDIAFoAjQygBdDIAFoAjQygBdDIAFoAjQygBdDIAFoATXIm+Pr2YuLTk7PexHSBX4+n+AyQAbQAmuy3QV9D0e/xfRO9r1B8BsgAWgDNeNmM7C9TGw695j1er+8Jfr3FZ4AMoAXQJPuAh/rJxNF7g0PDr6eq1AMMMoAWQJN9F/B3a9vuCX5+z8HutokP99fv9XPzeYrPABlAC6BJekDfz/1ojefI6b9v3k1cfAbIAFoATXYf0DYfn8M6Xyg+A2QALYAm6QG+Rv/7XM7R9fy5nlN8BsgAWgBN0gPmy28Xx96vo3Q9f4rOBA0ygBZA8wuEsEaUV+FlQgAAAABJRU5ErkJggg==", Ve = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABUklEQVR4nO2bv4vCQBBGL0cKCxEULNRKlFOwvub+/95OEAQrtRAUPJHrznpmi7D442nme90ESR4fs5vNxhRfo5//jwyavayfvzyftACNAqAFaEo/pif9nqln0+9n+jyc9WZl6vAdoABoAZrSH6jbmPcMB2NTh+8ABUAL0CgAWoBGAdACNAqAFqBRALQAjQKgBWgUAC1AowBoARoFQAvQJHuCft/c76G9O3ov4FAAtABNMgd4/Ji5/B4fJkMQvgMUAC1AU553hT0ysWXdxrwnfAcoAFqAJlkHzJcLU/v/DNWN8B2gAGgBmspngeV2Z+pOs2Hqbqt9k8D+lLfOyL1e1fnDd4ACoAVokjmAvu/fOqfkni98BygAWoAmmQP8ffPeY/LVCN8BCoAWoEnmgMP5z9Td1n0v6J8t6HVH+A5QALQATeG/Ha7bt8FVhO8ABUAL0FwBfpsww2cW0LwAAAAASUVORK5CYII=", Pe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABh0lEQVR4nO2asUvDQBTGL9JBpBYUOrROojSCm+Cg+P8vDk6KhUIn7SBU0CJudfXeYY/wkvxM3vtt1+Saj4/vLu8uV1zd3WzDL8rpJGg4ODxS9c/x9fmu6j9/XUXtPdW/9QA3gBZAM8jdcHlx3YaOxli+LKJ2OY2vm0+AG0ALoEnmgK6PecnpyXnUlnOC+QS4AbQAGjeAFkDjBtACaLJrgb4h6wLzCXADaAE0bgAtgMYNoAXQJHWAXC/L92bX8f0AgRtAC6DJrgW6PidI/fLbovkEuAG0AJrK+wGPz/dN6MAwnwA3gBZAM9isiviXMm5qz+TkkGd2tGeUqmI+AW4ALYAmqQMe5k9Ru+0x2facYD4BbgAtgKaYnd1GZ4WHk+1f94YQQjge7qseuN58q/pXJafXfALcAFoATVIHyDEzHtV7/n882n397WP32qNuPeYT4AbQAmj+/Rmhuse8xHwC3ABaAE0yB6S1evxebnpMyufn6gYt5hPgBtACaCrvB/QN8wlwA2gBND+5n0Dr51yy0gAAAABJRU5ErkJggg==", qe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABdUlEQVR4nO2bPUvEQBCGc7KV4IHFFWolCB7YCRbC/er7GxZWigHByrtCOEGDaHW2NxNwCfl4vMz7dLNhN29eZiebTTK5Xtxuix0uT0+KNhweHbfqn+Pr871V/3K1NvFBq9FGgAygBdAkP+f9HD4/uxhST+c8PN39eTx8BsgAWgBNGtuc91zNb0xcrpYmDp8BMoAWQCMDaAE0MoAWQJPGdt9vSvgMkAG0ABoZQAugkQG0AJr08vpsGsa2LvDX5wmfATKAFkCT/Lu2fa8JuTnvCZ8BMoAWQJN8g68JuXdr/42m3yeEzwAZQAugqdWAfcfXMF8TqvXExOEzQAbQAmjS24edM7Npv9/5Dc19+ehaVAMMMoAWQFNbB/ia4GlaI3LjdT3+pvpu1D98BsgAWgBN6vu+78fvet3h+8+m9rg/X1X8mDh8BsgAWgCNDKAF0MgAWgBN73uC9H5D/dlA+wEGGUALoEn+X9q+2VTDni9H+AyQAbQAml8slkzMIBNZowAAAABJRU5ErkJggg==", Ge = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABQ0lEQVR4nO2asQ4BQRRFka2EQolKiE10Wv/fKVTEJhIVSgXR0po7iY2sONbc071NVs7cvJnZjGlOx4t744lOPyj/nhYtQOMAaAGaTOf8PJ8F9Wg4+abPx9kfdkF9u5yDOvkOcAC0AE2mD+o+5xUdj64JyXeAA6AFaBwALUDjAGgBGgdAC9A4AFqAxgHQAjQOgBagic4D/h2fCQoOgBagya6nZvBAz8zqfkao41GS7wAHQAvQRN8Buk+ut8u3frDd7VUzKkH9qpJ8BzgAWoAmuh+gFMdTUP/a/QHd51fFJqjzQf/l+8l3gAOgBWii7wCd8zqH6DmvqI9+J+h4lOQ7wAHQAjTRGlC2b9YNHY+uCcl3gAOgBWgcAC1A4wBoARoHQAvQOABagMYB0AI0DoAWoHn7jtCv3R8o+/+/jOQ7wAHQAjQPMsI9FqsxS7oAAAAASUVORK5CYII=", Xe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABQUlEQVR4nO2aoQoCQRRFVSaJBuNqEgTBpk3w/4thk+KCYFKjQbFqfneDCItHnXva27CcubwZhplpL1bLRysjbud2qDuQx9fgAGgBmjQdFuFDtz8I9Xg0+aRP4xyO+1CXrW2os+8AB0AL0KR/m/OKjqesvAYEHAAtQOMAaAEaB0AL0DgAWoDGAdACNA6AFqBxALQATbpfL7QDSvYd4ABoAZqkH/Qc/dfPCHU8vhsUHAAtQFNbA3RfsNmt3/qh3jM0TdP7luw7wAHQAjS1NUCpTudQz6ezUNP7hNr9v9z96fuHXhGfRGXfAQ6AFqBJOscVnUP0nFfUR/cJr8aXfQc4AFqAprYP0Dn/6+h4dE3IvgMcAC1A4wBoARoHQAvQOABagMYB0AI0DoAWoHEAtADNy3sB5dveD6jPu2TfAQ6AFqB5AmmUO6FIXs0fAAAAAElFTkSuQmCC", Ie = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABRklEQVR4nO2asWoCQRRFTZhKsEipqYSAEisDFoH8f5PCKkFBsDKWFoKttpm7xTDE7Fl993SzLMuZy3vD7O48vH28n3u/mIyGvRr6g6eq+6/N6Xioun/9s8/Gj9eUuUUcAC1Ak7TntafHzy9t+vw7/cEmG4evAAdAC9Cke+95RecXvgIcAC1Ak+6950uErwAHQAvQOABagMYB0AI0DoAWoHEAtABN2u7yb2TR3g3CV4ADoAVokv5bi7YmhK8AB0AL0CS9oGvC1+qz6oGz6eJvRgVqfUqErwAHQAvQNNYARc/UzCev2bjtfYKuMbpvWa6/s3HpzFP4CnAAtABN0h5XtIe69m6gPrqPKc0vfAU4AFqAprEPqD0r3HV0Pj4rLDgAWoDGAdACNA6AFqBxALQAjQOgBWgcAC1A4wBoARoHQAvQOABagOYCVgAynQlZGFoAAAAASUVORK5CYII=", je = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABOElEQVR4nO2bwQsBQRSH0RwkFLUHnJSi3JSD8v9fnBWlnHBQFJIb53lbatrsl97vu83s1n79evt2ZtutzpaLd8UxNVqARgHQAjRh3O9FE9PJHFIph/1hF43dV4ACoAVoQqPVoR1KZTgYRWP3FaAAaAGaYO8Jb7ivAAVAC9AoAFqARgHQAjQKgBagUQC0AE2w78i87Q3cV4ACoAVowvN+jSa89QT3FaAAaAGaYCdsT1hvVqXJELivAAVAC9AoAFqARgHQAjThfIuf+1nb1/cC7itAAdACNLm9gO0JlsvjlXSBbrP+9Xhqz9keT0nnW6yP+wpQALQATUi9B7N2PC57HWG/bS56ffcVoABoAZrcOuDfKNpz3FeAAqAFaJJ7gH3u2r2BXSf8Gq0DCqIAaAGaqv4ddo4CoAVoPpR0Me34gHFfAAAAAElFTkSuQmCC", ze = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABeklEQVR4nO2asUoDQRRFN7KVaMAiRbQSxQjWNn62vyFipbggpDIrCAoaxE7ruVMMg7N7XOae7oUlOXN583ay7Ozs5OqnyWBvmXX56Gz7Wdb1OwN5TAYHQAvQtLqnV4fLoL44vxzTpzj3jzdB3W36oK6+AxwALUDT6gdT3/OKrqfbXAd19R3gAGgBGgdAC9A4AFqAxgHQAjQOgBagcQC0AI0DoAVooucB6+enoD4+Oh1NZgh0PUr1HeAAaAEaB0AL0DgAWoAmOgcoeh/9+nwfTKYEu/sHWddX3wEOgBagaaN3alZh+d/3vKK+OhN0vdV3gAOgBWiic8Bd9xDU+s7Q1ND1NI1nQIADoAVokv8F9L26v86E14+8c8Vinne2V98U1XeAA6AFaKIZMPR9X/e0zoTcPa+k/G/7l6CuvgMcAC1AE82A0nuSJnXuqL4DHAAtQBPNgLftd1Av5mV/sPR/ixS6Hj8PEBwALUCT/TygNEN/f4rqO8AB0AI0v8NqTSVA9X9QAAAAAElFTkSuQmCC", Je = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABUElEQVR4nO2asWoCQRRF3TCVYJEyWogSSMAuYCH41f5GakFBDCnUIoWQiK22zhWyyIQc2XdP91ZWz17ejAvzqrfp5NS64KX71Cqh3Xksur+O48++6P7ldpfVD0Xf1gAcAC1Ak3TN6xoe9J7/0+fPmS/ef/08fAc4AFqAJjVtzSuj13FWL7ezrA7fAQ6AFqBxALQAjQOgBWhS0/73byV8BzgAWoDGAdACNA6AFqBJH5tVdiHae0H4DnAAtABN0rO2pu0J+jxK+A5wALQATdILuifUna0p9HxA3e8fdlVWh+8AB0AL0FztAcrXd77m+r1hVtPvCbpHfW7WWa2+SvgOcAC0AE2lc4KKzhDpefu9oXuCzgUq4TvAAdACNFfvAaWzwveGPo9nhQUHQAvQOABagMYB0AI0DoAWoHEAtACNA6AFaBwALUDjAGgBGgdAC9CcAYDuOTwDN8emAAAAAElFTkSuQmCC", Ye = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABNElEQVR4nO2aQQsBURRG0VspysKCWYgUZacslP+/sVaUyGLGwkJRtqzfnZppFubQ/c7uvaQzX9/c3hjN5Wb9bjimRQvQKABagCbMhoNoYzFfQSr1cE6P0dp9AxQALUAT2p0e7VAr42Qard03QAHQAjTB3hPecN8ABUAL0CgAWoBGAdACNAqAFqBRALQATbC/kXl7NnDfAAVAC9CE1/MebXibCe4boABoAZpgN+xM2O23lb7w2+8Wq/qU4b4BCoAWoMnNAMvtEc+EUTKJ1nWfE+yMseeWS3qK1v1u8btP9w1QALQATThk18IP2P8Q/dqzgfWx55iy63PfAAVAC9DkzgH2nv937PXYmeC+AQqAFqBRALQAjQKgBWgUAC1AowBoARoFQAvQKABagEYB0AI0CoAWoPkA1dkt6kUtkpYAAAAASUVORK5CYII=", Ke = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABUUlEQVR4nO2bMWvCQBiGVW4owQgtZFCnQqF7N6H/f3EWFAQndRAstKV0a1fvyyAf0Twk3/tsJwc+vrx3JvEcvr0v/gYXvM6mAw9F+eiaf2t+vj5c8zeHYzYe3VKmiygAWoAm2TVv1/Tz/KVNn7tTlNtsHL4BCoAWoEl9X/MW+/nCN0AB0AI0qe9r/hrhG6AAaAEaBUAL0CgAWoBGAdACNAqAFqBJu33+jCzavUH4BigAWoAm2d/Wou0J4RugAGgBmmRfsHvCar1sTYYgfAMUAC1AowBoARoFQAvQJHtuzntOsOuEb4ACoAVoavcCdk/w8jR+cM2vJr6zxl6/az7hG6AAaAGa2llhL6fP/PmBd017sb5Nr2PCN0AB0AI0teuAruG97rCEb4ACoAVo3HuA/d4/f/9m42rSTMhL0/cP3wAFQAvQDO1/h6MRvgEKgBag+Qfu+jOSBU5GcAAAAABJRU5ErkJggg==", $e = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABOklEQVR4nO2aMQvCMBQGrTgVKjg4qJMgKLgJDoL/f3EWFERxqI4OiquuvtchQ6BXm++2iJXrkRRJk622m0/nh/l41IkhLwZR14d4Px9R1x9vdzPuRv1aC1AAWoCmF/rCcrGuw6M28uJkxsnPAAWgBWgqz4C2rXnPdDIz4+RngALQAjQKQAvQKAAtQKMAtACNAtACNApAC9AoAC1AowC0AI0C0AI0lT3BS2n3zf0e2r/j7y/5GaAAtABN73XP7CdzO/RrJvR+vunnAzzJzwAFoAVogucDruXZjId9u8bpd4n+GRXy9SQ/AxSAFqDJ/DlBjz83SK/5EPvDzoz9uUBP8jNAAWgBmsr/gNizwk3D34/OCjsUgBagUQBagEYBaAEaBaAFaBSAFqBRAFqARgFoARoFoAVoFIAWoPkCQOwuh7kvX8IAAAAASUVORK5CYII=", Ze = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABLElEQVR4nO2asQrCMAAFq/gT6iQIFZ0UHAT/f3FwUiwITuroILjqal6HUFJ61b7bAlauRxJom95qu3lnX+SjYZbCYrZOuj7G4bRLur643YNxP+nf/gAHoAVoBrEf6JpZ5vNgPBlP6zWKoHvM5XoOxvviGIxje1rnZ4AD0AI0pT1A17yuoabXfAz1eT0fwVjvR+n8DHAAWoCmtAekPgu0Db0fPwsIDkAL0DgALUDjALQAjQPQAjQOQAvQOAAtQOMAtABN9LuAou/h6XeE6lOVzs8AB6AFaCrvAfreXb/Xt/18gNL5GeAAtACNzwfUo/W7OAAtQOPzAbUb/RgOQAvQ+HxAkzJtxAFoARoHoAVoHIAWoHEAWoDGAWgBGgegBWgcgBagcQBagMYBaAGaD9C3Qmb46VC5AAAAAElFTkSuQmCC", ce = {
|
|
5
5
|
2: [11, 9],
|
|
6
6
|
3: [11, 9],
|
|
7
7
|
4: [13, 11],
|
|
@@ -11,7 +11,7 @@ const Oe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAA
|
|
|
11
11
|
8: [19, 17],
|
|
12
12
|
9: [19, 17],
|
|
13
13
|
10: [21, 19]
|
|
14
|
-
},
|
|
14
|
+
}, q = "123456789A", te = Fe.slice(0, q.length), et = [[1, 0], [-1, 0], [0, 1], [0, -1]], tt = [[1, 1], [1, -1], [-1, 1], [-1, -1]], At = 2, at = [
|
|
15
15
|
"floor",
|
|
16
16
|
"soft_block",
|
|
17
17
|
"wall_iso",
|
|
@@ -31,15 +31,15 @@ const Oe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAA
|
|
|
31
31
|
"wall_t_e",
|
|
32
32
|
"wall_t_w"
|
|
33
33
|
];
|
|
34
|
-
function
|
|
34
|
+
function nt(c) {
|
|
35
35
|
return c === "A" ? 9 : parseInt(c, 10) - 1;
|
|
36
36
|
}
|
|
37
|
-
function
|
|
38
|
-
return
|
|
37
|
+
function rt(c) {
|
|
38
|
+
return te[nt(c) % te.length];
|
|
39
39
|
}
|
|
40
|
-
function
|
|
41
|
-
const
|
|
42
|
-
switch (C << 3 | B << 2 |
|
|
40
|
+
function st(c, g, b) {
|
|
41
|
+
const a = c[0]?.length ?? 0, u = c.length, l = (r, f) => r >= 0 && f >= 0 && r < a && f < u && c[f][r] === "H", C = l(g, b - 1) ? 1 : 0, B = l(g + 1, b) ? 1 : 0, H = l(g, b + 1) ? 1 : 0, _ = l(g - 1, b) ? 1 : 0;
|
|
42
|
+
switch (C << 3 | B << 2 | H << 1 | _) {
|
|
43
43
|
case 0:
|
|
44
44
|
return "wall_iso";
|
|
45
45
|
case 1:
|
|
@@ -76,422 +76,416 @@ function at(c, m, b) {
|
|
|
76
76
|
return "wall_iso";
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
function
|
|
80
|
-
const
|
|
81
|
-
let
|
|
82
|
-
const C = () => (
|
|
83
|
-
for (let r = 0; r <
|
|
84
|
-
for (let
|
|
85
|
-
/^[1-9A]$/.test(c[r][
|
|
86
|
-
B.sort((r,
|
|
79
|
+
function ot(c, g, b) {
|
|
80
|
+
const a = c[0]?.length ?? 0, u = c.length;
|
|
81
|
+
let l = (g | 1) >>> 0;
|
|
82
|
+
const C = () => (l ^= l << 13, l >>>= 0, l ^= l >>> 17, l ^= l << 5, l >>>= 0, l), B = [];
|
|
83
|
+
for (let r = 0; r < u; r++)
|
|
84
|
+
for (let f = 0; f < a; f++)
|
|
85
|
+
/^[1-9A]$/.test(c[r][f]) && B.push({ c: f, r, digit: c[r][f] });
|
|
86
|
+
B.sort((r, f) => q.indexOf(r.digit) - q.indexOf(f.digit));
|
|
87
87
|
for (let r = B.length - 1; r >= 1; r--) {
|
|
88
|
-
const
|
|
89
|
-
[B[r], B[
|
|
88
|
+
const f = C() % (r + 1);
|
|
89
|
+
[B[r], B[f]] = [B[f], B[r]];
|
|
90
90
|
}
|
|
91
|
-
const
|
|
92
|
-
for (const { c: r, r:
|
|
93
|
-
_.add(`${r},${
|
|
94
|
-
for (const [Q,
|
|
95
|
-
for (let k = 1; k <=
|
|
96
|
-
_.add(`${r + Q * k},${
|
|
97
|
-
for (const [Q,
|
|
98
|
-
_.add(`${r + Q},${
|
|
91
|
+
const H = B.slice(0, Math.max(0, Math.min(b, B.length))), _ = /* @__PURE__ */ new Set();
|
|
92
|
+
for (const { c: r, r: f } of H) {
|
|
93
|
+
_.add(`${r},${f}`);
|
|
94
|
+
for (const [Q, O] of et)
|
|
95
|
+
for (let k = 1; k <= At; k++)
|
|
96
|
+
_.add(`${r + Q * k},${f + O * k}`);
|
|
97
|
+
for (const [Q, O] of tt)
|
|
98
|
+
_.add(`${r + Q},${f + O}`);
|
|
99
99
|
}
|
|
100
|
-
const
|
|
101
|
-
for (let r = 0; r <
|
|
102
|
-
for (let
|
|
103
|
-
if (c[r][
|
|
104
|
-
const Q = `${
|
|
105
|
-
_.has(Q) || C() % 100 < 80 &&
|
|
100
|
+
const F = /* @__PURE__ */ new Set();
|
|
101
|
+
for (let r = 0; r < u; r++)
|
|
102
|
+
for (let f = 0; f < a; f++) {
|
|
103
|
+
if (c[r][f] !== ".") continue;
|
|
104
|
+
const Q = `${f},${r}`;
|
|
105
|
+
_.has(Q) || C() % 100 < 80 && F.add(Q);
|
|
106
106
|
}
|
|
107
|
-
return
|
|
107
|
+
return F;
|
|
108
108
|
}
|
|
109
|
-
function
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
109
|
+
function lt(c) {
|
|
110
|
+
const g = c.split(/\r?\n/).filter((u) => !u.startsWith("#") && u.trim().length > 0);
|
|
111
|
+
if (g.length < 5)
|
|
112
112
|
return { ok: !1, error: "Need at least 5 non-comment lines." };
|
|
113
|
-
const b =
|
|
114
|
-
if (!
|
|
113
|
+
const b = g[0].length;
|
|
114
|
+
if (!g.every((u) => u.length === b))
|
|
115
115
|
return { ok: !1, error: "All rows must have the same width." };
|
|
116
|
-
const
|
|
117
|
-
(
|
|
116
|
+
const a = g.map(
|
|
117
|
+
(u) => u.split("").map((l) => l === "H" || l === "." ? l : /^[1-9Aa]$/.test(l) ? l.toUpperCase() : ".")
|
|
118
118
|
);
|
|
119
|
-
return { ok: !0, map: { width: b, height:
|
|
119
|
+
return { ok: !0, map: { width: b, height: g.length, grid: a } };
|
|
120
120
|
}
|
|
121
|
-
function
|
|
121
|
+
function de(c, g) {
|
|
122
122
|
const b = [];
|
|
123
|
-
for (let
|
|
124
|
-
const
|
|
125
|
-
for (let
|
|
126
|
-
const C =
|
|
127
|
-
|
|
123
|
+
for (let a = 0; a < g; a++) {
|
|
124
|
+
const u = [];
|
|
125
|
+
for (let l = 0; l < c; l++) {
|
|
126
|
+
const C = a === 0 || a === g - 1 || l === 0 || l === c - 1;
|
|
127
|
+
u.push(C ? "H" : ".");
|
|
128
128
|
}
|
|
129
|
-
b.push(
|
|
129
|
+
b.push(u);
|
|
130
130
|
}
|
|
131
|
-
return { width: c, height:
|
|
131
|
+
return { width: c, height: g, grid: b };
|
|
132
132
|
}
|
|
133
|
-
function
|
|
134
|
-
const
|
|
133
|
+
function it(c) {
|
|
134
|
+
const g = /* @__PURE__ */ new Set();
|
|
135
135
|
for (const b of c)
|
|
136
|
-
for (const
|
|
137
|
-
/^[1-9A]$/.test(
|
|
138
|
-
for (const b of
|
|
139
|
-
if (!
|
|
136
|
+
for (const a of b)
|
|
137
|
+
/^[1-9A]$/.test(a) && g.add(a);
|
|
138
|
+
for (const b of q)
|
|
139
|
+
if (!g.has(b)) return b;
|
|
140
140
|
return null;
|
|
141
141
|
}
|
|
142
|
-
async function
|
|
142
|
+
async function ge(c) {
|
|
143
143
|
try {
|
|
144
|
-
const
|
|
145
|
-
if (typeof
|
|
144
|
+
const g = await c.json();
|
|
145
|
+
if (typeof g.message == "string" && g.message) return g.message;
|
|
146
146
|
} catch {
|
|
147
147
|
}
|
|
148
148
|
return `HTTP ${c.status}`;
|
|
149
149
|
}
|
|
150
|
-
const
|
|
151
|
-
"../assets/games/bomberman/tiles/floor.png":
|
|
152
|
-
"../assets/games/bomberman/tiles/soft_block.png":
|
|
153
|
-
"../assets/games/bomberman/tiles/wall_cap_e.png":
|
|
154
|
-
"../assets/games/bomberman/tiles/wall_cap_n.png":
|
|
155
|
-
"../assets/games/bomberman/tiles/wall_cap_s.png":
|
|
156
|
-
"../assets/games/bomberman/tiles/wall_cap_w.png":
|
|
157
|
-
"../assets/games/bomberman/tiles/wall_corner_ne.png":
|
|
158
|
-
"../assets/games/bomberman/tiles/wall_corner_nw.png":
|
|
159
|
-
"../assets/games/bomberman/tiles/wall_corner_se.png":
|
|
160
|
-
"../assets/games/bomberman/tiles/wall_corner_sw.png":
|
|
161
|
-
"../assets/games/bomberman/tiles/wall_cross.png":
|
|
162
|
-
"../assets/games/bomberman/tiles/wall_h.png":
|
|
163
|
-
"../assets/games/bomberman/tiles/wall_iso.png":
|
|
164
|
-
"../assets/games/bomberman/tiles/wall_t_e.png":
|
|
165
|
-
"../assets/games/bomberman/tiles/wall_t_n.png":
|
|
166
|
-
"../assets/games/bomberman/tiles/wall_t_s.png":
|
|
167
|
-
"../assets/games/bomberman/tiles/wall_t_w.png":
|
|
168
|
-
"../assets/games/bomberman/tiles/wall_v.png":
|
|
150
|
+
const ct = /* @__PURE__ */ Object.assign({
|
|
151
|
+
"../assets/games/bomberman/tiles/floor.png": De,
|
|
152
|
+
"../assets/games/bomberman/tiles/soft_block.png": Me,
|
|
153
|
+
"../assets/games/bomberman/tiles/wall_cap_e.png": We,
|
|
154
|
+
"../assets/games/bomberman/tiles/wall_cap_n.png": Le,
|
|
155
|
+
"../assets/games/bomberman/tiles/wall_cap_s.png": Te,
|
|
156
|
+
"../assets/games/bomberman/tiles/wall_cap_w.png": Ve,
|
|
157
|
+
"../assets/games/bomberman/tiles/wall_corner_ne.png": Pe,
|
|
158
|
+
"../assets/games/bomberman/tiles/wall_corner_nw.png": qe,
|
|
159
|
+
"../assets/games/bomberman/tiles/wall_corner_se.png": Ge,
|
|
160
|
+
"../assets/games/bomberman/tiles/wall_corner_sw.png": Xe,
|
|
161
|
+
"../assets/games/bomberman/tiles/wall_cross.png": Ie,
|
|
162
|
+
"../assets/games/bomberman/tiles/wall_h.png": je,
|
|
163
|
+
"../assets/games/bomberman/tiles/wall_iso.png": ze,
|
|
164
|
+
"../assets/games/bomberman/tiles/wall_t_e.png": Je,
|
|
165
|
+
"../assets/games/bomberman/tiles/wall_t_n.png": Ye,
|
|
166
|
+
"../assets/games/bomberman/tiles/wall_t_s.png": Ke,
|
|
167
|
+
"../assets/games/bomberman/tiles/wall_t_w.png": $e,
|
|
168
|
+
"../assets/games/bomberman/tiles/wall_v.png": Ze
|
|
169
169
|
});
|
|
170
|
-
function
|
|
171
|
-
return
|
|
170
|
+
function dt(c) {
|
|
171
|
+
return ct[`../assets/games/bomberman/tiles/${c}.png`] ?? null;
|
|
172
172
|
}
|
|
173
|
-
function gt() {
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
173
|
+
function gt(c, g) {
|
|
174
|
+
const b = c.find((u) => u.players === g)?.files ?? [], a = new Set(b);
|
|
175
|
+
for (let u = 1; u <= 99; u++) {
|
|
176
|
+
const l = `m${String(u).padStart(2, "0")}.map`;
|
|
177
|
+
if (!a.has(l)) return l.replace(/\.map$/, "");
|
|
178
|
+
}
|
|
179
|
+
return "custom";
|
|
180
|
+
}
|
|
181
|
+
function pt() {
|
|
182
|
+
const c = Oe(), [g, b] = R(4), [a, u] = R(() => {
|
|
183
|
+
const [e, t] = ce[4];
|
|
184
|
+
return de(e, t);
|
|
185
|
+
}), [l, C] = R(/* @__PURE__ */ new Set()), [B, H] = R([]), [_, F] = R(!0), [r, f] = R(""), [Q, O] = R(""), [k, h] = R(null), U = P(() => Se(), []), Ae = z({}), [Y, fe] = R(!1);
|
|
186
|
+
J(() => {
|
|
179
187
|
let e = !0;
|
|
180
|
-
function t(A,
|
|
181
|
-
return
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
e && (
|
|
185
|
-
},
|
|
186
|
-
console.warn("[MapEditor] sprite failed to load", { key: A, url:
|
|
187
|
-
},
|
|
188
|
+
function t(A, n) {
|
|
189
|
+
return n ? new Promise((s) => {
|
|
190
|
+
const i = new Image();
|
|
191
|
+
i.onload = () => {
|
|
192
|
+
e && (Ae.current[A] = i), s();
|
|
193
|
+
}, i.onerror = () => {
|
|
194
|
+
console.warn("[MapEditor] sprite failed to load", { key: A, url: n }), s();
|
|
195
|
+
}, i.src = n;
|
|
188
196
|
}) : Promise.resolve();
|
|
189
197
|
}
|
|
190
198
|
return Promise.all([
|
|
191
|
-
...
|
|
199
|
+
...at.map((A) => t(A, dt(A))),
|
|
192
200
|
// Characters come from the server like every other avatar in the app.
|
|
193
|
-
...
|
|
201
|
+
...te.map((A) => t(`char:${A}`, He(A)))
|
|
194
202
|
]).then(() => {
|
|
195
|
-
e &&
|
|
203
|
+
e && fe(!0);
|
|
196
204
|
}), () => {
|
|
197
205
|
e = !1;
|
|
198
206
|
};
|
|
199
207
|
}, []);
|
|
200
|
-
const
|
|
201
|
-
e.length !== 0 && (
|
|
202
|
-
const
|
|
203
|
-
for (const { c: s, r:
|
|
204
|
-
if (!(
|
|
208
|
+
const G = E((e, t) => {
|
|
209
|
+
e.length !== 0 && (u((A) => {
|
|
210
|
+
const n = A.grid.map((s) => [...s]);
|
|
211
|
+
for (const { c: s, r: i } of e)
|
|
212
|
+
if (!(i < 0 || i >= A.height || s < 0 || s >= A.width)) {
|
|
205
213
|
if (t === "wall")
|
|
206
|
-
|
|
214
|
+
n[i][s] = "H";
|
|
207
215
|
else if (t === "floor")
|
|
208
|
-
|
|
216
|
+
n[i][s] = ".";
|
|
209
217
|
else if (t === "spawn") {
|
|
210
|
-
if (/^[1-9A]$/.test(
|
|
211
|
-
|
|
212
|
-
else if (
|
|
213
|
-
const
|
|
214
|
-
for (const x of
|
|
218
|
+
if (/^[1-9A]$/.test(n[i][s]))
|
|
219
|
+
n[i][s] = ".";
|
|
220
|
+
else if (n[i][s] === ".") {
|
|
221
|
+
const w = /* @__PURE__ */ new Set();
|
|
222
|
+
for (const x of n)
|
|
215
223
|
for (const y of x)
|
|
216
|
-
/^[1-9A]$/.test(y) &&
|
|
224
|
+
/^[1-9A]$/.test(y) && w.add(y);
|
|
217
225
|
let N = null;
|
|
218
|
-
for (const x of
|
|
219
|
-
if (!
|
|
226
|
+
for (const x of q)
|
|
227
|
+
if (!w.has(x)) {
|
|
220
228
|
N = x;
|
|
221
229
|
break;
|
|
222
230
|
}
|
|
223
|
-
N && (
|
|
231
|
+
N && (n[i][s] = N);
|
|
224
232
|
}
|
|
225
233
|
}
|
|
226
234
|
}
|
|
227
|
-
return { ...A, grid:
|
|
235
|
+
return { ...A, grid: n };
|
|
228
236
|
}), C((A) => A.size === 0 ? A : /* @__PURE__ */ new Set()));
|
|
229
|
-
}, []),
|
|
230
|
-
const t =
|
|
237
|
+
}, []), K = z(null), S = z(null), D = z(null), ae = E((e) => {
|
|
238
|
+
const t = K.current;
|
|
231
239
|
if (!t) return null;
|
|
232
|
-
const A = t.getBoundingClientRect(),
|
|
233
|
-
if (
|
|
234
|
-
const
|
|
235
|
-
return { c: Math.floor(
|
|
236
|
-
}, [
|
|
237
|
-
const
|
|
238
|
-
if (
|
|
239
|
-
|
|
240
|
+
const A = t.getBoundingClientRect(), n = e.clientX - A.left, s = e.clientY - A.top;
|
|
241
|
+
if (n < 0 || s < 0 || n >= A.width || s >= A.height) return null;
|
|
242
|
+
const i = A.width / a.width, w = A.height / a.height;
|
|
243
|
+
return { c: Math.floor(n / i), r: Math.floor(s / w) };
|
|
244
|
+
}, [a.width, a.height]), me = E((e, t, A) => {
|
|
245
|
+
const n = Math.abs(t.c - e.c), s = Math.abs(t.r - e.r), i = Math.max(n, s), w = [];
|
|
246
|
+
if (i === 0)
|
|
247
|
+
w.push({ c: t.c, r: t.r });
|
|
240
248
|
else
|
|
241
|
-
for (let N = 0; N <=
|
|
242
|
-
const x = N /
|
|
243
|
-
|
|
249
|
+
for (let N = 0; N <= i; N++) {
|
|
250
|
+
const x = N / i;
|
|
251
|
+
w.push({
|
|
244
252
|
c: Math.round(e.c + (t.c - e.c) * x),
|
|
245
253
|
r: Math.round(e.r + (t.r - e.r) * x)
|
|
246
254
|
});
|
|
247
255
|
}
|
|
248
|
-
|
|
249
|
-
}, [
|
|
256
|
+
G(w, A);
|
|
257
|
+
}, [G]), ue = (e) => {
|
|
250
258
|
let t = null;
|
|
251
259
|
if (e.button === 0 ? t = e.shiftKey ? "spawn" : "wall" : e.button === 2 && (t = "floor"), !t) return;
|
|
252
|
-
e.preventDefault(),
|
|
253
|
-
const A =
|
|
254
|
-
A && (e.currentTarget.setPointerCapture?.(e.pointerId),
|
|
255
|
-
},
|
|
256
|
-
const t =
|
|
260
|
+
e.preventDefault(), D.current = t;
|
|
261
|
+
const A = ae(e);
|
|
262
|
+
A && (e.currentTarget.setPointerCapture?.(e.pointerId), G([A], t), S.current = A);
|
|
263
|
+
}, pe = (e) => {
|
|
264
|
+
const t = D.current;
|
|
257
265
|
if (!t) return;
|
|
258
266
|
if ((e.buttons & 3) === 0) {
|
|
259
|
-
|
|
267
|
+
D.current = null, S.current = null;
|
|
260
268
|
return;
|
|
261
269
|
}
|
|
262
270
|
if (t === "spawn") return;
|
|
263
|
-
const A =
|
|
271
|
+
const A = ae(e);
|
|
264
272
|
if (!A) return;
|
|
265
|
-
const
|
|
266
|
-
if (
|
|
267
|
-
if (
|
|
268
|
-
|
|
273
|
+
const n = S.current;
|
|
274
|
+
if (n) {
|
|
275
|
+
if (n.c === A.c && n.r === A.r) return;
|
|
276
|
+
me(n, A, t);
|
|
269
277
|
} else
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
},
|
|
273
|
-
e.currentTarget.releasePointerCapture?.(e.pointerId),
|
|
278
|
+
G([A], t);
|
|
279
|
+
S.current = A;
|
|
280
|
+
}, he = (e) => {
|
|
281
|
+
e.currentTarget.releasePointerCapture?.(e.pointerId), D.current = null, S.current = null;
|
|
274
282
|
};
|
|
275
|
-
|
|
283
|
+
J(() => {
|
|
276
284
|
const e = () => {
|
|
277
|
-
|
|
285
|
+
D.current = null, S.current = null;
|
|
278
286
|
};
|
|
279
287
|
return window.addEventListener("mouseup", e), window.addEventListener("blur", e), () => {
|
|
280
288
|
window.removeEventListener("mouseup", e), window.removeEventListener("blur", e);
|
|
281
289
|
};
|
|
282
290
|
}, []);
|
|
283
|
-
const
|
|
291
|
+
const be = (e) => {
|
|
284
292
|
b(e);
|
|
285
|
-
const [t, A] =
|
|
286
|
-
|
|
287
|
-
},
|
|
288
|
-
e < 5 || e > 31 || t < 5 || t > 31 || (
|
|
289
|
-
const
|
|
293
|
+
const [t, A] = ce[e];
|
|
294
|
+
u(de(t, A)), C(/* @__PURE__ */ new Set());
|
|
295
|
+
}, ne = (e, t) => {
|
|
296
|
+
e < 5 || e > 31 || t < 5 || t > 31 || (u((A) => {
|
|
297
|
+
const n = [];
|
|
290
298
|
for (let s = 0; s < t; s++) {
|
|
291
|
-
const
|
|
292
|
-
for (let
|
|
293
|
-
s === 0 || s === t - 1 ||
|
|
294
|
-
|
|
299
|
+
const i = [];
|
|
300
|
+
for (let w = 0; w < e; w++)
|
|
301
|
+
s === 0 || s === t - 1 || w === 0 || w === e - 1 ? i.push("H") : s < A.height && w < A.width ? i.push(A.grid[s][w]) : i.push(".");
|
|
302
|
+
n.push(i);
|
|
295
303
|
}
|
|
296
|
-
return { width: e, height: t, grid:
|
|
304
|
+
return { width: e, height: t, grid: n };
|
|
297
305
|
}), C(/* @__PURE__ */ new Set()));
|
|
298
306
|
}, we = () => {
|
|
299
|
-
|
|
307
|
+
u((e) => {
|
|
300
308
|
const t = e.grid.map(
|
|
301
|
-
(A,
|
|
309
|
+
(A, n) => A.map((s, i) => n === 0 || n === e.height - 1 || i === 0 || i === e.width - 1 ? "H" : ".")
|
|
302
310
|
);
|
|
303
311
|
return { ...e, grid: t };
|
|
304
312
|
}), C(/* @__PURE__ */ new Set());
|
|
305
|
-
},
|
|
313
|
+
}, d = P(() => {
|
|
306
314
|
let e = 0;
|
|
307
|
-
for (const t of
|
|
315
|
+
for (const t of a.grid)
|
|
308
316
|
for (const A of t)
|
|
309
317
|
/^[1-9A]$/.test(A) && (e += 1);
|
|
310
318
|
return e;
|
|
311
|
-
}, [
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
}, [g]);
|
|
315
|
-
const be = E(() => {
|
|
319
|
+
}, [a]), [p, $] = R(4), [Be, ve] = R(void 0);
|
|
320
|
+
d !== Be && (ve(d), d < 2 ? $(2) : p > d && $(d));
|
|
321
|
+
const Ce = E(() => {
|
|
316
322
|
const e = (Math.floor(performance.now() * 1e3) ^ 2654435769) >>> 0;
|
|
317
|
-
C(
|
|
318
|
-
}, [
|
|
319
|
-
const e = Math.min(p,
|
|
320
|
-
# dims: ${
|
|
323
|
+
C(ot(a.grid, e || 1, p));
|
|
324
|
+
}, [a.grid, p]), xe = () => C(/* @__PURE__ */ new Set()), re = P(() => {
|
|
325
|
+
const e = Math.min(p, d), t = d > e ? ` (${d} spawn variants)` : "", A = `# ${e}-player map${t} · custom · edited via map editor
|
|
326
|
+
# dims: ${a.width}x${a.height} · spawns: ${d}`, n = a.grid.map((s) => s.join("")).join(`
|
|
321
327
|
`);
|
|
322
328
|
return `${A}
|
|
323
|
-
${
|
|
329
|
+
${n}
|
|
324
330
|
`;
|
|
325
|
-
}, [
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
if (!e.ok) {
|
|
330
|
-
u({ kind: "err", text: `List failed: HTTP ${e.status}` });
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
const t = await e.json();
|
|
334
|
-
D(t.groups ?? []);
|
|
335
|
-
} catch (e) {
|
|
336
|
-
const t = e instanceof Error ? e.message : "network error";
|
|
337
|
-
u({ kind: "err", text: `List failed: ${t}` });
|
|
338
|
-
} finally {
|
|
339
|
-
O(!1);
|
|
331
|
+
}, [a, d, p]), X = E(() => fetch(`${U}/api/maps`).then((e) => {
|
|
332
|
+
if (!e.ok) {
|
|
333
|
+
h({ kind: "err", text: `List failed: HTTP ${e.status}` });
|
|
334
|
+
return;
|
|
340
335
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
336
|
+
return e.json().then((t) => H(t.groups ?? []));
|
|
337
|
+
}).catch((e) => {
|
|
338
|
+
const t = e instanceof Error ? e.message : "network error";
|
|
339
|
+
h({ kind: "err", text: `List failed: ${t}` });
|
|
340
|
+
}).finally(() => F(!1)), [U]), M = E(() => (F(!0), X()), [X]);
|
|
341
|
+
J(() => {
|
|
342
|
+
X();
|
|
343
|
+
}, [X]);
|
|
344
|
+
const Z = (e) => {
|
|
346
345
|
const t = e.match(/^p(0[2-9]|10)\/([A-Za-z0-9_-]+)\.map$/);
|
|
347
346
|
return t ? { nn: t[1], name: t[2] } : null;
|
|
348
|
-
},
|
|
349
|
-
|
|
350
|
-
const e =
|
|
347
|
+
}, Qe = E(async () => {
|
|
348
|
+
h(null);
|
|
349
|
+
const e = Z(r);
|
|
351
350
|
if (!e) {
|
|
352
|
-
|
|
351
|
+
h({ kind: "err", text: "Pick a map first." });
|
|
353
352
|
return;
|
|
354
353
|
}
|
|
355
354
|
try {
|
|
356
355
|
const t = await fetch(`${U}/api/maps/p${e.nn}/${e.name}`);
|
|
357
356
|
if (!t.ok) {
|
|
358
|
-
|
|
357
|
+
h({ kind: "err", text: `Load failed: HTTP ${t.status}` });
|
|
359
358
|
return;
|
|
360
359
|
}
|
|
361
|
-
const A = await t.text(),
|
|
362
|
-
if (!
|
|
363
|
-
|
|
360
|
+
const A = await t.text(), n = lt(A);
|
|
361
|
+
if (!n.ok) {
|
|
362
|
+
h({ kind: "err", text: `Parse failed: ${n.error}` });
|
|
364
363
|
return;
|
|
365
364
|
}
|
|
366
|
-
|
|
365
|
+
u(n.map), C(/* @__PURE__ */ new Set()), h({ kind: "ok", text: `Loaded ${r}` });
|
|
367
366
|
} catch (t) {
|
|
368
367
|
const A = t instanceof Error ? t.message : "network error";
|
|
369
|
-
|
|
368
|
+
h({ kind: "err", text: `Load failed: ${A}` });
|
|
370
369
|
}
|
|
371
370
|
}, [U, r]), I = E(async (e, t, A = {}) => {
|
|
372
371
|
if (A.confirmText && !window.confirm(A.confirmText)) return !1;
|
|
373
|
-
|
|
372
|
+
h(null);
|
|
374
373
|
try {
|
|
375
|
-
const
|
|
374
|
+
const n = await fetch(`${U}/api/maps/p${e}/${t}`, {
|
|
376
375
|
method: "PUT",
|
|
377
376
|
headers: { "Content-Type": "text/plain" },
|
|
378
|
-
body:
|
|
377
|
+
body: re
|
|
379
378
|
});
|
|
380
|
-
return
|
|
381
|
-
} catch (
|
|
382
|
-
const s =
|
|
383
|
-
return
|
|
379
|
+
return n.ok ? (h({ kind: "ok", text: `Saved p${e}/${t}.map` }), f(`p${e}/${t}.map`), await M(), !0) : (h({ kind: "err", text: `Save failed: ${await ge(n)}` }), !1);
|
|
380
|
+
} catch (n) {
|
|
381
|
+
const s = n instanceof Error ? n.message : "network error";
|
|
382
|
+
return h({ kind: "err", text: `Save failed: ${s}` }), !1;
|
|
384
383
|
}
|
|
385
|
-
}, [U,
|
|
386
|
-
const e =
|
|
384
|
+
}, [U, re, M]), Ne = E(async () => {
|
|
385
|
+
const e = Z(r);
|
|
387
386
|
if (!e) {
|
|
388
|
-
|
|
387
|
+
h({ kind: "err", text: 'Pick a map first or use "Save as new".' });
|
|
389
388
|
return;
|
|
390
389
|
}
|
|
391
390
|
const t = parseInt(e.nn, 10);
|
|
392
|
-
if (
|
|
393
|
-
|
|
391
|
+
if (d < t) {
|
|
392
|
+
h({
|
|
394
393
|
kind: "err",
|
|
395
|
-
text: `p${e.nn} maps need ≥${t} spawns — current map has ${
|
|
394
|
+
text: `p${e.nn} maps need ≥${t} spawns — current map has ${d}.`
|
|
396
395
|
});
|
|
397
396
|
return;
|
|
398
397
|
}
|
|
399
398
|
await I(e.nn, e.name, { confirmText: `Overwrite ${r}?` });
|
|
400
|
-
}, [r,
|
|
401
|
-
if (
|
|
402
|
-
|
|
399
|
+
}, [r, d, I]), Re = E(async () => {
|
|
400
|
+
if (d < 2) {
|
|
401
|
+
h({ kind: "err", text: `Place at least 2 spawns before saving (have ${d}).` });
|
|
403
402
|
return;
|
|
404
403
|
}
|
|
405
|
-
if (p < 2 || p >
|
|
406
|
-
|
|
404
|
+
if (p < 2 || p > d || p > 10) {
|
|
405
|
+
h({
|
|
407
406
|
kind: "err",
|
|
408
|
-
text: `Target ${p} invalid — must be 2..${Math.min(10,
|
|
407
|
+
text: `Target ${p} invalid — must be 2..${Math.min(10, d)} for this map.`
|
|
409
408
|
});
|
|
410
409
|
return;
|
|
411
410
|
}
|
|
412
411
|
const e = String(p).padStart(2, "0"), t = Q.trim();
|
|
413
412
|
if (!/^[A-Za-z0-9_-]+$/.test(t)) {
|
|
414
|
-
|
|
413
|
+
h({ kind: "err", text: "New name: alphanumeric / underscore / hyphen, no .map suffix." });
|
|
415
414
|
return;
|
|
416
415
|
}
|
|
417
|
-
const A = `p${e}/${t}.map`, s = (B.find((
|
|
418
|
-
await I(e, t, { confirmText: s }) &&
|
|
419
|
-
}, [
|
|
420
|
-
const e =
|
|
416
|
+
const A = `p${e}/${t}.map`, s = (B.find((w) => w.players === p)?.files ?? []).includes(`${t}.map`) ? `Overwrite ${A}?` : void 0;
|
|
417
|
+
await I(e, t, { confirmText: s }) && O("");
|
|
418
|
+
}, [d, p, Q, B, I]), Ee = E(async () => {
|
|
419
|
+
const e = Z(r);
|
|
421
420
|
if (!e) {
|
|
422
|
-
|
|
421
|
+
h({ kind: "err", text: "Pick a map first." });
|
|
423
422
|
return;
|
|
424
423
|
}
|
|
425
424
|
if (window.confirm(`Delete ${r}?`)) {
|
|
426
|
-
|
|
425
|
+
h(null);
|
|
427
426
|
try {
|
|
428
427
|
const t = await fetch(`${U}/api/maps/p${e.nn}/${e.name}`, { method: "DELETE" });
|
|
429
428
|
if (!t.ok) {
|
|
430
|
-
|
|
429
|
+
h({ kind: "err", text: `Delete failed: ${await ge(t)}` });
|
|
431
430
|
return;
|
|
432
431
|
}
|
|
433
|
-
|
|
432
|
+
h({ kind: "ok", text: `Deleted ${r}` }), f(""), await M();
|
|
434
433
|
} catch (t) {
|
|
435
434
|
const A = t instanceof Error ? t.message : "network error";
|
|
436
|
-
|
|
435
|
+
h({ kind: "err", text: `Delete failed: ${A}` });
|
|
437
436
|
}
|
|
438
437
|
}
|
|
439
|
-
}, [U, r,
|
|
440
|
-
const e = B.find((A) => A.players === p)?.files ?? [], t = new Set(e);
|
|
441
|
-
for (let A = 1; A <= 99; A++) {
|
|
442
|
-
const a = `m${String(A).padStart(2, "0")}.map`;
|
|
443
|
-
if (!t.has(a)) return a.replace(/\.map$/, "");
|
|
444
|
-
}
|
|
445
|
-
return "custom";
|
|
446
|
-
}, [B, p]), v = P(() => {
|
|
438
|
+
}, [U, r, M]), _e = P(() => gt(B, p), [B, p]), v = P(() => {
|
|
447
439
|
if (typeof window > "u") return 32;
|
|
448
|
-
const e = (window.innerWidth - 360) /
|
|
440
|
+
const e = (window.innerWidth - 360) / a.width, t = (window.innerHeight - 160) / a.height;
|
|
449
441
|
return Math.max(16, Math.floor(Math.min(e, t)));
|
|
450
|
-
}, [
|
|
451
|
-
|
|
452
|
-
if (!
|
|
453
|
-
const e =
|
|
442
|
+
}, [a.width, a.height]);
|
|
443
|
+
J(() => {
|
|
444
|
+
if (!Y) return;
|
|
445
|
+
const e = K.current;
|
|
454
446
|
if (!e) return;
|
|
455
447
|
const t = e.getContext("2d");
|
|
456
448
|
if (!t) return;
|
|
457
|
-
const A = typeof window < "u" && window.devicePixelRatio || 1,
|
|
458
|
-
(e.width !==
|
|
459
|
-
const
|
|
460
|
-
for (let x = 0; x <
|
|
461
|
-
for (let y = 0; y <
|
|
462
|
-
const W = y * v, L = x * v, T =
|
|
463
|
-
if (
|
|
464
|
-
const V =
|
|
449
|
+
const A = typeof window < "u" && window.devicePixelRatio || 1, n = a.width * v, s = a.height * v;
|
|
450
|
+
(e.width !== n * A || e.height !== s * A) && (e.width = n * A, e.height = s * A), e.style.width = `${n}px`, e.style.height = `${s}px`, t.setTransform(A, 0, 0, A, 0, 0), t.imageSmoothingEnabled = !1, t.clearRect(0, 0, n, s);
|
|
451
|
+
const i = Ae.current, w = i.floor, N = i.soft_block;
|
|
452
|
+
for (let x = 0; x < a.height; x++)
|
|
453
|
+
for (let y = 0; y < a.width; y++) {
|
|
454
|
+
const W = y * v, L = x * v, T = a.grid[x][y], se = T === "H", oe = /^[1-9A]$/.test(T), ye = !se && !oe && l.has(`${y},${x}`);
|
|
455
|
+
if (w && t.drawImage(w, W, L, v, v), se) {
|
|
456
|
+
const V = i[st(a.grid, y, x)];
|
|
465
457
|
V && t.drawImage(V, W, L, v, v);
|
|
466
|
-
} else if (
|
|
458
|
+
} else if (ye)
|
|
467
459
|
N && t.drawImage(N, W, L, v, v);
|
|
468
|
-
else if (
|
|
469
|
-
const V =
|
|
460
|
+
else if (oe) {
|
|
461
|
+
const V = i[`char:${rt(T)}`];
|
|
470
462
|
V && t.drawImage(V, W, L, v, v);
|
|
471
|
-
const
|
|
472
|
-
t.font = `800 ${
|
|
473
|
-
const
|
|
474
|
-
t.strokeText(T,
|
|
463
|
+
const ke = Math.max(10, Math.floor(v / 4));
|
|
464
|
+
t.font = `800 ${ke}px ui-sans-serif, system-ui, sans-serif`, t.textAlign = "right", t.textBaseline = "top", t.lineWidth = 3, t.strokeStyle = "#000", t.fillStyle = "#fff";
|
|
465
|
+
const le = W + v - 2, ie = L + 2;
|
|
466
|
+
t.strokeText(T, le, ie), t.fillText(T, le, ie);
|
|
475
467
|
}
|
|
476
468
|
}
|
|
477
|
-
}, [
|
|
478
|
-
const
|
|
479
|
-
return /* @__PURE__ */
|
|
480
|
-
/* @__PURE__ */
|
|
481
|
-
/* @__PURE__ */
|
|
482
|
-
/* @__PURE__ */
|
|
483
|
-
/* @__PURE__ */ o("button", { onClick: () =>
|
|
469
|
+
}, [a, l, v, Y]);
|
|
470
|
+
const ee = "px-3 py-1.5 text-sm bg-bg-card border border-border rounded hover:bg-bg-hover whitespace-nowrap", j = "inline-block min-w-[20px] px-1.5 py-0.5 mx-0.5 bg-bg border border-border rounded text-[11px] font-mono font-semibold text-text";
|
|
471
|
+
return /* @__PURE__ */ m("div", { className: "flex w-full h-full overflow-hidden bg-bg text-text", children: [
|
|
472
|
+
/* @__PURE__ */ m("div", { className: "flex-1 flex flex-col items-center min-w-0 overflow-auto p-4", children: [
|
|
473
|
+
/* @__PURE__ */ m("div", { className: "w-full max-w-6xl flex items-center gap-3 mb-3 flex-nowrap overflow-x-auto", children: [
|
|
474
|
+
/* @__PURE__ */ m("div", { className: "flex items-center gap-2 shrink-0", children: [
|
|
475
|
+
/* @__PURE__ */ o("button", { onClick: () => {
|
|
476
|
+
c("/");
|
|
477
|
+
}, className: ee, children: "← Home" }),
|
|
484
478
|
/* @__PURE__ */ o("h1", { className: "text-xl font-bold ml-1", children: "Map Editor" })
|
|
485
479
|
] }),
|
|
486
|
-
/* @__PURE__ */
|
|
480
|
+
/* @__PURE__ */ m("div", { className: "flex items-center gap-2 shrink-0", children: [
|
|
487
481
|
/* @__PURE__ */ o("label", { className: "text-sm text-text-secondary", children: "Default for:" }),
|
|
488
482
|
/* @__PURE__ */ o(
|
|
489
483
|
"select",
|
|
490
484
|
{
|
|
491
|
-
value:
|
|
492
|
-
onChange: (e) =>
|
|
485
|
+
value: g,
|
|
486
|
+
onChange: (e) => be(parseInt(e.target.value, 10)),
|
|
493
487
|
className: "px-2 py-1 bg-bg-card border border-border rounded text-sm",
|
|
494
|
-
children: [2, 3, 4, 5, 6, 7, 8, 9, 10].map((e) => /* @__PURE__ */
|
|
488
|
+
children: [2, 3, 4, 5, 6, 7, 8, 9, 10].map((e) => /* @__PURE__ */ m("option", { value: e, children: [
|
|
495
489
|
e,
|
|
496
490
|
" players"
|
|
497
491
|
] }, e))
|
|
@@ -504,8 +498,8 @@ ${a}
|
|
|
504
498
|
type: "number",
|
|
505
499
|
min: 5,
|
|
506
500
|
max: 31,
|
|
507
|
-
value:
|
|
508
|
-
onChange: (e) =>
|
|
501
|
+
value: a.width,
|
|
502
|
+
onChange: (e) => ne(parseInt(e.target.value, 10) || a.width, a.height),
|
|
509
503
|
className: "w-16 px-2 py-1 bg-bg-card border border-border rounded text-sm"
|
|
510
504
|
}
|
|
511
505
|
),
|
|
@@ -516,52 +510,52 @@ ${a}
|
|
|
516
510
|
type: "number",
|
|
517
511
|
min: 5,
|
|
518
512
|
max: 31,
|
|
519
|
-
value:
|
|
520
|
-
onChange: (e) =>
|
|
513
|
+
value: a.height,
|
|
514
|
+
onChange: (e) => ne(a.width, parseInt(e.target.value, 10) || a.height),
|
|
521
515
|
className: "w-16 px-2 py-1 bg-bg-card border border-border rounded text-sm"
|
|
522
516
|
}
|
|
523
517
|
)
|
|
524
518
|
] }),
|
|
525
|
-
/* @__PURE__ */
|
|
526
|
-
/* @__PURE__ */
|
|
519
|
+
/* @__PURE__ */ m("div", { className: "flex items-center gap-2 shrink-0 ml-auto", children: [
|
|
520
|
+
/* @__PURE__ */ m("span", { className: "text-sm text-text-secondary whitespace-nowrap", children: [
|
|
527
521
|
"Spawns: ",
|
|
528
|
-
/* @__PURE__ */ o("span", { className: "font-bold text-text", children:
|
|
522
|
+
/* @__PURE__ */ o("span", { className: "font-bold text-text", children: d }),
|
|
529
523
|
"/10"
|
|
530
524
|
] }),
|
|
531
|
-
/* @__PURE__ */ o("button", { onClick: we, className:
|
|
525
|
+
/* @__PURE__ */ o("button", { onClick: we, className: ee, children: "Clear interior" }),
|
|
532
526
|
/* @__PURE__ */ o(
|
|
533
527
|
"button",
|
|
534
528
|
{
|
|
535
|
-
onClick:
|
|
536
|
-
className:
|
|
529
|
+
onClick: l.size > 0 ? xe : Ce,
|
|
530
|
+
className: ee,
|
|
537
531
|
title: "Preview a random soft-block layout. Re-click to re-roll.",
|
|
538
|
-
children:
|
|
532
|
+
children: l.size > 0 ? `Hide softs (${l.size})` : "Roll softs"
|
|
539
533
|
}
|
|
540
534
|
)
|
|
541
535
|
] })
|
|
542
536
|
] }),
|
|
543
|
-
/* @__PURE__ */
|
|
544
|
-
/* @__PURE__ */
|
|
537
|
+
/* @__PURE__ */ m("div", { className: "text-xs text-text-secondary mb-2 max-w-6xl w-full flex flex-wrap items-center gap-x-4 gap-y-1", children: [
|
|
538
|
+
/* @__PURE__ */ m("span", { children: [
|
|
545
539
|
/* @__PURE__ */ o("span", { className: j, children: "LMB" }),
|
|
546
540
|
" wall · drag to paint"
|
|
547
541
|
] }),
|
|
548
|
-
/* @__PURE__ */
|
|
542
|
+
/* @__PURE__ */ m("span", { children: [
|
|
549
543
|
/* @__PURE__ */ o("span", { className: j, children: "RMB" }),
|
|
550
544
|
" floor (erase) · drag to wipe"
|
|
551
545
|
] }),
|
|
552
|
-
/* @__PURE__ */
|
|
546
|
+
/* @__PURE__ */ m("span", { children: [
|
|
553
547
|
/* @__PURE__ */ o("span", { className: j, children: "Shift" }),
|
|
554
548
|
"+",
|
|
555
549
|
/* @__PURE__ */ o("span", { className: j, children: "LMB" }),
|
|
556
550
|
" place spawn ",
|
|
557
|
-
|
|
551
|
+
it(a.grid) ?? "—",
|
|
558
552
|
" · click an existing spawn to remove"
|
|
559
553
|
] })
|
|
560
554
|
] }),
|
|
561
555
|
/* @__PURE__ */ o(
|
|
562
556
|
"canvas",
|
|
563
557
|
{
|
|
564
|
-
ref:
|
|
558
|
+
ref: K,
|
|
565
559
|
className: "border border-border rounded select-none",
|
|
566
560
|
style: {
|
|
567
561
|
background: "#1a1a1a",
|
|
@@ -569,22 +563,22 @@ ${a}
|
|
|
569
563
|
imageRendering: "pixelated"
|
|
570
564
|
},
|
|
571
565
|
onContextMenu: (e) => e.preventDefault(),
|
|
572
|
-
onMouseDown:
|
|
573
|
-
onMouseMove:
|
|
574
|
-
onMouseUp:
|
|
566
|
+
onMouseDown: ue,
|
|
567
|
+
onMouseMove: pe,
|
|
568
|
+
onMouseUp: he
|
|
575
569
|
}
|
|
576
570
|
),
|
|
577
|
-
!
|
|
571
|
+
!Y && /* @__PURE__ */ o("div", { className: "text-xs text-text-secondary mt-2", children: "Loading tiles…" })
|
|
578
572
|
] }),
|
|
579
|
-
/* @__PURE__ */
|
|
580
|
-
/* @__PURE__ */
|
|
581
|
-
/* @__PURE__ */
|
|
573
|
+
/* @__PURE__ */ m("div", { className: "w-80 flex flex-col gap-4 p-4 border-l border-border bg-bg-card overflow-auto shrink-0", children: [
|
|
574
|
+
/* @__PURE__ */ m("div", { children: [
|
|
575
|
+
/* @__PURE__ */ m("div", { className: "flex items-center justify-between mb-2", children: [
|
|
582
576
|
/* @__PURE__ */ o("h2", { className: "text-base font-bold", children: "Saved maps" }),
|
|
583
577
|
/* @__PURE__ */ o(
|
|
584
578
|
"button",
|
|
585
579
|
{
|
|
586
580
|
onClick: () => {
|
|
587
|
-
|
|
581
|
+
M();
|
|
588
582
|
},
|
|
589
583
|
disabled: _,
|
|
590
584
|
className: "text-xs px-2 py-0.5 bg-bg border border-border rounded hover:bg-bg-hover disabled:opacity-50",
|
|
@@ -593,11 +587,11 @@ ${a}
|
|
|
593
587
|
}
|
|
594
588
|
)
|
|
595
589
|
] }),
|
|
596
|
-
/* @__PURE__ */
|
|
590
|
+
/* @__PURE__ */ m(
|
|
597
591
|
"select",
|
|
598
592
|
{
|
|
599
593
|
value: r,
|
|
600
|
-
onChange: (e) =>
|
|
594
|
+
onChange: (e) => f(e.target.value),
|
|
601
595
|
size: 10,
|
|
602
596
|
className: "w-full p-2 bg-bg border border-border rounded font-mono text-xs",
|
|
603
597
|
children: [
|
|
@@ -609,12 +603,12 @@ ${a}
|
|
|
609
603
|
]
|
|
610
604
|
}
|
|
611
605
|
),
|
|
612
|
-
/* @__PURE__ */
|
|
606
|
+
/* @__PURE__ */ m("div", { className: "mt-2 grid grid-cols-3 gap-2", children: [
|
|
613
607
|
/* @__PURE__ */ o(
|
|
614
608
|
"button",
|
|
615
609
|
{
|
|
616
610
|
onClick: () => {
|
|
617
|
-
|
|
611
|
+
Qe();
|
|
618
612
|
},
|
|
619
613
|
disabled: !r,
|
|
620
614
|
className: "px-2 py-1.5 bg-accent text-bg rounded text-sm font-semibold hover:opacity-90 disabled:opacity-40",
|
|
@@ -625,7 +619,7 @@ ${a}
|
|
|
625
619
|
"button",
|
|
626
620
|
{
|
|
627
621
|
onClick: () => {
|
|
628
|
-
|
|
622
|
+
Ne();
|
|
629
623
|
},
|
|
630
624
|
disabled: !r,
|
|
631
625
|
className: "px-2 py-1.5 bg-bg border border-border rounded text-sm font-semibold hover:bg-bg-hover disabled:opacity-40",
|
|
@@ -636,7 +630,7 @@ ${a}
|
|
|
636
630
|
"button",
|
|
637
631
|
{
|
|
638
632
|
onClick: () => {
|
|
639
|
-
|
|
633
|
+
Ee();
|
|
640
634
|
},
|
|
641
635
|
disabled: !r,
|
|
642
636
|
className: "px-2 py-1.5 bg-bg border border-error text-error rounded text-sm font-semibold hover:bg-bg-hover disabled:opacity-40",
|
|
@@ -645,34 +639,34 @@ ${a}
|
|
|
645
639
|
)
|
|
646
640
|
] })
|
|
647
641
|
] }),
|
|
648
|
-
/* @__PURE__ */
|
|
642
|
+
/* @__PURE__ */ m("div", { children: [
|
|
649
643
|
/* @__PURE__ */ o("h3", { className: "text-sm font-bold mb-2", children: "Save as new" }),
|
|
650
|
-
/* @__PURE__ */
|
|
644
|
+
/* @__PURE__ */ m("label", { className: "flex items-center gap-2 mb-2 text-xs text-text-secondary", children: [
|
|
651
645
|
/* @__PURE__ */ o("span", { className: "shrink-0", children: "Save under group:" }),
|
|
652
646
|
/* @__PURE__ */ o(
|
|
653
647
|
"select",
|
|
654
648
|
{
|
|
655
649
|
value: p,
|
|
656
|
-
onChange: (e) =>
|
|
650
|
+
onChange: (e) => $(parseInt(e.target.value, 10)),
|
|
657
651
|
className: "flex-1 min-w-0 px-2 py-1 bg-bg border border-border rounded font-mono text-xs",
|
|
658
|
-
disabled:
|
|
652
|
+
disabled: d < 2,
|
|
659
653
|
children: [2, 3, 4, 5, 6, 7, 8, 9, 10].map((e) => {
|
|
660
|
-
const t = e >
|
|
661
|
-
return /* @__PURE__ */
|
|
654
|
+
const t = e > d;
|
|
655
|
+
return /* @__PURE__ */ m("option", { value: e, disabled: t, children: [
|
|
662
656
|
"p",
|
|
663
657
|
String(e).padStart(2, "0"),
|
|
664
658
|
" (",
|
|
665
659
|
e,
|
|
666
660
|
"-player",
|
|
667
|
-
t ? ` — need ${e} spawns` : e <
|
|
661
|
+
t ? ` — need ${e} spawns` : e < d ? `, ${d - e} extra` : "",
|
|
668
662
|
")"
|
|
669
663
|
] }, e);
|
|
670
664
|
})
|
|
671
665
|
}
|
|
672
666
|
)
|
|
673
667
|
] }),
|
|
674
|
-
/* @__PURE__ */
|
|
675
|
-
/* @__PURE__ */
|
|
668
|
+
/* @__PURE__ */ m("div", { className: "flex items-center gap-2", children: [
|
|
669
|
+
/* @__PURE__ */ m("code", { className: "text-xs bg-bg border border-border rounded px-2 py-1 font-mono", children: [
|
|
676
670
|
"p",
|
|
677
671
|
String(p).padStart(2, "0"),
|
|
678
672
|
"/"
|
|
@@ -682,8 +676,8 @@ ${a}
|
|
|
682
676
|
{
|
|
683
677
|
type: "text",
|
|
684
678
|
value: Q,
|
|
685
|
-
onChange: (e) =>
|
|
686
|
-
placeholder:
|
|
679
|
+
onChange: (e) => O(e.target.value),
|
|
680
|
+
placeholder: _e,
|
|
687
681
|
className: "flex-1 min-w-0 px-2 py-1 bg-bg border border-border rounded font-mono text-xs"
|
|
688
682
|
}
|
|
689
683
|
),
|
|
@@ -693,38 +687,38 @@ ${a}
|
|
|
693
687
|
"button",
|
|
694
688
|
{
|
|
695
689
|
onClick: () => {
|
|
696
|
-
|
|
690
|
+
Re();
|
|
697
691
|
},
|
|
698
|
-
disabled: Q.trim().length === 0 ||
|
|
692
|
+
disabled: Q.trim().length === 0 || d < p || p < 2,
|
|
699
693
|
className: "mt-2 w-full px-3 py-1.5 bg-bg border border-border rounded text-sm font-semibold hover:bg-bg-hover disabled:opacity-50",
|
|
700
694
|
children: "Save as new"
|
|
701
695
|
}
|
|
702
696
|
),
|
|
703
|
-
/* @__PURE__ */
|
|
697
|
+
/* @__PURE__ */ m("p", { className: "mt-1 text-xs text-text-secondary leading-tight", children: [
|
|
704
698
|
"Writes to ",
|
|
705
|
-
/* @__PURE__ */
|
|
699
|
+
/* @__PURE__ */ m("code", { className: "bg-bg px-1 rounded", children: [
|
|
706
700
|
"game/assets/maps/p",
|
|
707
701
|
String(p).padStart(2, "0"),
|
|
708
702
|
"/<name>.map"
|
|
709
703
|
] }),
|
|
710
704
|
".",
|
|
711
|
-
|
|
705
|
+
d > p && /* @__PURE__ */ m(Ue, { children: [
|
|
712
706
|
" ",
|
|
713
|
-
|
|
707
|
+
d - p,
|
|
714
708
|
" extra spawn",
|
|
715
|
-
|
|
709
|
+
d - p === 1 ? "" : "s",
|
|
716
710
|
" — the game shuffles + picks ",
|
|
717
711
|
p,
|
|
718
712
|
" of ",
|
|
719
|
-
|
|
713
|
+
d,
|
|
720
714
|
" each round."
|
|
721
715
|
] })
|
|
722
716
|
] })
|
|
723
717
|
] }),
|
|
724
718
|
k && /* @__PURE__ */ o("div", { className: `text-xs px-2 py-1 rounded border ${k.kind === "ok" ? "text-success border-success/30 bg-success/10" : "text-error border-error/30 bg-error/10"}`, children: k.text }),
|
|
725
|
-
/* @__PURE__ */
|
|
719
|
+
/* @__PURE__ */ m("div", { className: "text-xs text-text-secondary leading-snug", children: [
|
|
726
720
|
/* @__PURE__ */ o("h3", { className: "font-bold text-text mb-1", children: "Notes" }),
|
|
727
|
-
/* @__PURE__ */
|
|
721
|
+
/* @__PURE__ */ m("ul", { className: "list-disc pl-4 space-y-1", children: [
|
|
728
722
|
/* @__PURE__ */ o("li", { children: "Load / Save / Delete hit the server directly. The operator git-commits the resulting diff." }),
|
|
729
723
|
/* @__PURE__ */ o("li", { children: "Roll softs previews the world-build layout (80% softs on floor, with a 13-cell hashtag-shaped safety pattern at every spawn)." }),
|
|
730
724
|
/* @__PURE__ */ o("li", { children: "Any grid edit invalidates the soft preview — re-roll to see the new layout." })
|
|
@@ -734,6 +728,6 @@ ${a}
|
|
|
734
728
|
] });
|
|
735
729
|
}
|
|
736
730
|
export {
|
|
737
|
-
|
|
731
|
+
pt as default
|
|
738
732
|
};
|
|
739
|
-
//# sourceMappingURL=MapEditor-
|
|
733
|
+
//# sourceMappingURL=MapEditor-yvJbXXgw.js.map
|