feature: able to teleport to new area and follow player camera

This commit is contained in:
unfaiyted 2024-07-09 13:58:27 -05:00
parent ab2255db29
commit 854d54644e
46 changed files with 55961 additions and 58839 deletions

View File

@ -3220,6 +3220,553 @@
<object id="1" x="0" y="0" width="32" height="32"/>
</objectgroup>
</tile>
<tile id="2545">
<objectgroup draworder="index" id="2">
<object id="1" x="3.0622" y="31.983">
<polygon points="0,0 -0.255183,-5.01861 8.7613,-17.3525 15.0558,-24.1574 22.0308,-29.0909 28.9208,-29.3461 28.9208,-15.9064 24.6677,-6.20946 23.5619,-3.99787 14.7156,0"/>
</object>
</objectgroup>
</tile>
<tile id="2546">
<objectgroup draworder="index" id="2">
<object id="1" x="3.0622" y="0.0850611">
<polygon points="0,0 15.1409,-0.170122 21.8607,4.67836 21.8607,6.63477 15.9915,10.8878 10.7177,14.2052 8.67624,16.757 3.91281,18.2881 -0.255183,15.9915 -3.23232,12.589 -3.0622,2.38171"/>
</object>
</objectgroup>
</tile>
<tile id="2548">
<objectgroup draworder="index" id="2">
<object id="1" x="16.3317" y="0.0850611">
<polygon points="0,0 13.6948,-0.170122 15.6512,1.78628 15.7363,12.0787 7.57044,18.118 2.6369,18.7985 -0.76555,14.5455 -7.74056,9.78203 -7.57044,8.7613 -2.72196,0.76555 -0.595428,0"/>
</object>
</objectgroup>
</tile>
<tile id="2549">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="3.14726">
<polygon points="0,0 6.03934,-0.340245 9.69697,2.55183 18.8836,7.82562 26.7943,15.6512 29.9415,25.6885 30.0266,28.6656 11.7384,28.7507 6.88995,27.9001 5.6991,26.454 -0.0850611,7.40032"/>
</object>
</objectgroup>
</tile>
<tile id="2550">
<objectgroup draworder="index" id="2">
<object id="1" x="10.8028" y="0.0850611">
<polygon points="0,0 21.0101,0.0850611 21.0952,30.7921 20.1595,31.8979 0,31.7278 -0.76555,28.6656 -2.04147,23.9022 -3.14726,20.0744 -1.78628,16.5019"/>
</object>
</objectgroup>
</tile>
<tile id="2551">
<objectgroup draworder="index" id="2">
<object id="1" x="10.9729" y="0.0850611">
<polygon points="0,0 21.0101,-0.170122 21.0952,31.7278 -0.255183,31.7278 -1.10579,28.5805 -3.31738,20.6699 -2.21159,16.757 2.04147,8.84636 -0.340245,1.70122"/>
</object>
</objectgroup>
</tile>
<tile id="2552">
<objectgroup draworder="index" id="2">
<object id="1" x="19.0537" y="0.255183">
<polygon points="0,0 -19.1388,-0.170122 -19.0537,25.6885 -18.2031,29.4312 -17.2674,31.5577 -5.27379,31.5577 4.93355,29.8565 7.99575,25.6034 8.93142,13.7799 5.78416,6.46465"/>
</object>
</objectgroup>
</tile>
<tile id="2553">
<objectgroup draworder="index" id="2">
<object id="1" x="19.0537" y="0.170122">
<polygon points="0,0 -19.2238,0.0850611 -19.1388,25.4333 -18.2031,29.4312 -17.0973,31.4726 -5.27379,31.8129 0.935673,30.7071 4.93355,29.7714 8.08081,25.5183 8.93142,13.7799 5.61404,6.63477"/>
</object>
</objectgroup>
</tile>
<tile id="2554">
<objectgroup draworder="index" id="2">
<object id="1" x="14.1201" y="31.8979">
<polygon points="0,0 -14.2903,0.170122 -14.2052,-32.1531 4.67836,-31.8979 7.91069,-27.7299 10.6326,-24.8379 13.7799,-18.2031 12.7592,-7.82562 12.7592,-6.1244 9.95215,-2.04147 5.78416,-1.10579"/>
</object>
</objectgroup>
</tile>
<tile id="2555">
<objectgroup draworder="index" id="2">
<object id="1" x="10.8878" y="0.0850611">
<polygon points="0,0 21.0952,0.0850611 21.0952,31.8129 0.170122,31.8129 -0.935673,28.6656 -2.04147,24.3275 -2.97714,20.6699 -2.04147,16.2467 1.95641,12.8442 -0.0850611,1.78628"/>
</object>
</objectgroup>
</tile>
<tile id="2556">
<objectgroup draworder="index" id="2">
<object id="1" x="17.0973" y="32.3232">
<polygon points="0,0 -17.3525,-0.255183 -17.1823,-32.3232 14.8857,-32.2382 14.7156,-16.3317 12.9293,-11.5683 6.71983,-2.72196"/>
</object>
</objectgroup>
</tile>
<tile id="2557">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="10.9729">
<polygon points="0,0 0.170122,-7.91069 2.29665,-11.0579 32.1531,-11.0579 32.068,14.9708 30.1967,20.6699 12.0787,21.0101 7.06007,19.9043 5.61404,19.0537 5.6991,16.8421 10.0372,14.2052 7.14514,7.74056 6.88995,3.99787 1.78628,1.87135"/>
</object>
</objectgroup>
</tile>
<tile id="2558">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="28.1552">
<polygon points="0,0 0.170122,-28.3254 30.1967,-27.9851 32.1531,-25.1781 32.068,-12.0787 29.5162,-9.1866 28.0702,-2.6369 27.2196,-0.340245 19.8192,1.95641 18.3732,3.82775 4.25306,3.57257"/>
</object>
</objectgroup>
</tile>
<tile id="2559">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="14.2903">
<polygon points="0,0 -0.0850611,-12.2488 1.87135,-14.0351 31.8129,-14.3753 31.8979,-0.510367 28.0702,5.35885 22.8814,7.6555 13.0144,9.69697 9.95215,9.69697 7.06007,8.59117"/>
</object>
</objectgroup>
</tile>
<tile id="2560">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="14.5455">
<polygon points="0,0 0.170122,-14.4604 29.9415,-14.5455 31.983,-12.504 32.068,-0.935673 29.0909,1.27592 27.6449,5.18873 22.9665,7.57044 12.9293,9.69697 10.2924,9.69697 6.71983,8.25093"/>
</object>
</objectgroup>
</tile>
<tile id="2600">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.340245" y="4.25306">
<polygon points="0,0 2.12653,-4.33812 19.3089,-4.33812 25.093,2.46677 28.4955,10.3775 27.3046,21.3503 24.2424,25.6034 20.0744,26.7943 14.0351,27.6449 1.02073,27.4747 0.340245,10.3775"/>
</object>
</objectgroup>
</tile>
<tile id="2604">
<objectgroup draworder="index" id="2">
<object id="1" x="10.7177" y="0">
<polygon points="0,0 20.2446,0 21.2653,2.97714 21.0952,13.95 21.2653,30.7921 20.4147,31.8129 0,31.8979 -0.935673,28.5805 -2.89208,19.9043 -1.78628,16.5019 2.38171,8.93142 -0.0850611,2.21159"/>
</object>
</objectgroup>
</tile>
<tile id="2605">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="11.8235">
<polygon points="0,0 -0.0850611,-12.1637 31.8979,-11.7384 31.983,15.3961 30.1116,19.9043 11.5683,20.0744 6.80489,19.0537 5.61404,17.7778 6.88995,5.86922"/>
</object>
</objectgroup>
</tile>
<tile id="2606">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="11.143">
<polygon points="0,0 -0.170122,-11.3131 31.7278,-11.0579 31.7278,15.5662 29.9415,20.925 17.5226,20.7549 7.6555,16.4168 4.93355,14.8006 3.48751,13.5247 3.91281,2.89208 1.95641,1.95641"/>
</object>
</objectgroup>
</tile>
<tile id="2607">
<objectgroup draworder="index" id="2">
<object id="1" x="31.983" y="15.9915">
<polygon points="0,0 -0.0850611,-16.1616 -32.1531,-15.9064 -32.068,9.69697 -28.4104,15.5662 -14.1201,15.6512 -4.84848,11.8235 -4.08293,9.61191"/>
</object>
</objectgroup>
</tile>
<tile id="2608">
<objectgroup draworder="index" id="2">
<object id="1" x="32.1531" y="16.3317">
<polygon points="0,0 -0.255183,-16.672 -32.2382,-16.2467 -32.1531,9.35673 -29.3461,15.311 -15.311,15.311 -8.25093,13.3546 -2.21159,4.42318"/>
</object>
</objectgroup>
</tile>
<tile id="2609">
<objectgroup draworder="index" id="2">
<object id="1" x="18.7135" y="0.170122">
<polygon points="0,0 -18.6284,-0.170122 -18.7135,25.7735 -16.9272,31.4726 -4.5933,31.5577 5.44391,29.5162 8.25093,25.9436 9.35673,14.0351 5.95428,6.29452"/>
</object>
</objectgroup>
</tile>
<tile id="2610">
<objectgroup draworder="index" id="2">
<object id="1" x="10.6326" y="0.170122">
<polygon points="0,0 21.2653,-0.255183 21.2653,31.8129 0,31.8129 -0.850611,28.3254 -2.89208,19.9894"/>
</object>
</objectgroup>
</tile>
<tile id="2611">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="11.3131">
<polygon points="0,0 -0.170122,-11.2281 32.068,-11.2281 32.068,20.6699 11.5683,20.6699 6.46465,19.479 5.44391,18.4583 6.71983,6.88995"/>
</object>
</objectgroup>
</tile>
<tile id="2612">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="11.2281">
<polygon points="0,0 0,-9.35673 1.78628,-11.143 31.8129,-11.3131 31.7278,14.8006 29.9415,20.7549 17.8628,20.5848 7.57044,16.5869 3.57257,13.4397 3.74269,10.2924"/>
</object>
</objectgroup>
</tile>
<tile id="2613">
<objectgroup draworder="index" id="2">
<object id="1" x="0.170122" y="28.1552">
<polygon points="0,0 -0.0850611,-28.1552 29.7714,-27.9851 31.7278,-25.5183 31.8129,-12.2488 29.6863,-7.40032 23.7321,1.27592 16.757,3.91281 2.72196,3.48751"/>
</object>
</objectgroup>
</tile>
<tile id="2614">
<objectgroup draworder="index" id="2">
<object id="1" x="20.925" y="0.170122">
<polygon points="0,0 -20.925,0.0850611 -20.7549,27.815 -19.9043,31.7278 11.143,31.8129 10.8028,7.74056"/>
</object>
</objectgroup>
</tile>
<tile id="2615">
<objectgroup draworder="index" id="2">
<object id="1" x="11.9086" y="0">
<polygon points="0,0 19.9894,0.0850611 19.9894,28.0702 17.1823,31.8979 -12.0787,32.068 -11.9936,6.80489"/>
</object>
</objectgroup>
</tile>
<tile id="2655">
<objectgroup draworder="index" id="2">
<object id="1" x="21.0952" y="0">
<polygon points="0,0 -19.2238,0 -20.1595,2.80702 -20.0744,31.8129 10.9729,31.8979 10.8028,7.57044"/>
</object>
</objectgroup>
</tile>
<tile id="2656">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="5.18873">
<polygon points="0,0 -0.0850611,26.7943 18.7985,26.7943 21.9458,25.6885 26.1138,19.6491 26.1138,18.6284 22.5412,6.20946 13.4397,-0.425306"/>
</object>
</objectgroup>
</tile>
<tile id="2658">
<objectgroup draworder="index" id="2">
<object id="1" x="11.9936" y="32.068">
<polygon points="0,0 20.0744,0 19.7342,-23.4769 17.8628,-25.3482 7.6555,-23.1366 3.65763,-18.2031 0.255183,-14.3753 -1.95641,-11.4833"/>
</object>
</objectgroup>
</tile>
<tile id="2659">
<objectgroup draworder="index" id="2">
<object id="1" x="11.9086" y="-0.0850611">
<polygon points="0,0 18.118,0.0850611 19.9043,6.03934 19.9894,16.4168 19.9043,28.2403 16.8421,32.068 -12.0787,31.8979 -12.0787,6.71983"/>
</object>
</objectgroup>
</tile>
<tile id="2660">
<objectgroup draworder="index" id="2">
<object id="1" x="18.2031" y="0.255183">
<polygon points="0,0 -18.2031,-0.0850611 -18.4583,12.7592 -15.311,15.5662 -10.7177,17.9479 -6.03934,16.5869 6.97501,6.54971 6.63477,4.50824"/>
</object>
</objectgroup>
</tile>
<tile id="2661">
<objectgroup draworder="index" id="2">
<object id="1" x="15.7363" y="0">
<polygon points="0,0 15.9915,-0.0850611 16.1616,11.9936 8.16587,17.7778 3.31738,18.9686 -7.06007,9.69697 -1.78628,0.680489"/>
</object>
</objectgroup>
</tile>
<tile id="2662">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="12.9293">
<polygon points="0,0 0.0850611,-13.2695 18.118,-12.9293 25.2632,-7.74056 25.2632,-6.1244 12.1637,3.82775 7.31526,5.18873 3.0622,2.97714"/>
</object>
</objectgroup>
</tile>
<tile id="2663">
<objectgroup draworder="index" id="2">
<object id="1" x="15.6512" y="0.0850611">
<polygon points="0,0 16.2467,-0.0850611 16.4168,11.8235 8.08081,18.033 3.31738,18.7985 -7.06007,9.52685"/>
</object>
</objectgroup>
</tile>
<tile id="2664">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.255183" y="11.3131">
<polygon points="0,0 0,-11.4833 31.983,-11.0579 32.1531,16.672 30.3668,20.4997 12.1637,20.5848 7.06007,19.5641 6.1244,18.4583 7.14514,6.63477"/>
</object>
</objectgroup>
</tile>
<tile id="2665">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="11.3131">
<polygon points="0,0 -0.0850611,-11.5683 32.1531,-11.0579 31.983,16.8421 29.9415,20.4997 17.9479,20.7549 8.08081,16.672 3.99787,13.3546"/>
</object>
</objectgroup>
</tile>
<tile id="2666">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="11.3131">
<polygon points="0,0 0.0850611,-11.4833 31.8979,-11.143 31.983,20.6699 17.7778,20.5848 7.74056,16.5019 3.82775,13.2695"/>
</object>
</objectgroup>
</tile>
<tile id="2667">
<objectgroup draworder="index" id="2">
<object id="1" x="21.0952" y="0.170122">
<polygon points="0,0 -21.0952,0 -21.0101,25.7735 -20.0744,31.4726 10.9729,31.5577 10.8878,7.82562"/>
</object>
</objectgroup>
</tile>
<tile id="2668">
<objectgroup draworder="index" id="2">
<object id="1" x="11.7384" y="0.255183">
<polygon points="0,0 20.2446,-0.255183 20.2446,27.815 17.3525,31.3876 -11.9086,31.5577 -11.8235,6.37959"/>
</object>
</objectgroup>
</tile>
<tile id="2669">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="12.9293">
<polygon points="0,0 0.255183,-12.9293 18.3732,-13.0994 25.2632,-8.08081 25.1781,-5.78416 12.1637,3.91281 7.40032,5.18873 3.0622,2.89208"/>
</object>
</objectgroup>
</tile>
<tile id="2670">
<objectgroup draworder="index" id="2">
<object id="1" x="15.7363" y="0.0850611">
<polygon points="0,0 16.0766,0 16.1616,12.1637 8.08081,17.8628 3.48751,19.0537 -7.2302,9.61191"/>
</object>
</objectgroup>
</tile>
<tile id="2695">
<objectgroup draworder="index" id="2">
<object id="1" x="19.2238" y="0.0850611">
<polygon points="0,0 -17.3525,-0.170122 -18.2881,1.02073 -18.2881,8.59117 -17.2674,13.4397 -17.1823,19.9043 -18.2881,25.8586 -18.2881,29.4312 -16.757,31.7278 -4.84848,32.068 5.10367,29.7714 7.91069,25.7735 8.7613,13.7799 5.35885,6.71983"/>
</object>
</objectgroup>
</tile>
<tile id="2699">
<objectgroup draworder="index" id="2">
<object id="1" x="10.8028" y="-0.0850611">
<polygon points="0,0 17.8628,-0.0850611 19.9894,2.21159 20.925,25.5183 21.1802,29.261 18.2881,31.8129 -0.170122,32.068 -1.10579,28.5805 -3.14726,20.3296 -2.21159,17.0122"/>
</object>
</objectgroup>
</tile>
<tile id="2710">
<objectgroup draworder="index" id="2">
<object id="1" x="1.02073" y="0.170122">
<polygon points="0,0 30.9623,-0.0850611 30.7921,31.8129 -0.0850611,31.7278"/>
</object>
</objectgroup>
</tile>
<tile id="2711">
<objectgroup draworder="index" id="2">
<object id="1" x="21.0101" y="-0.0850611">
<polygon points="0,0 -21.0101,0.170122 -20.925,31.6427 10.9729,31.8979 10.7177,5.61404 6.71983,5.01861 2.89208,2.97714"/>
</object>
</objectgroup>
</tile>
<tile id="2712">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="6.80489">
<polygon points="0,0 -0.0850611,25.008 32.068,25.008 31.8129,0.850611 29.7714,-0.935673 15.6512,-4.08293 12.9293,-3.99787 5.95428,-2.97714"/>
</object>
</objectgroup>
</tile>
<tile id="2713">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="6.20946">
<polygon points="0,0 0.0850611,25.5183 32.3232,25.7735 31.983,-6.37959 11.8235,-6.1244"/>
</object>
</objectgroup>
</tile>
<tile id="2714">
<objectgroup draworder="index" id="2">
<object id="1" x="29.0058" y="0.0850611">
<polygon points="0,0 -29.176,0 -29.0909,31.5577 0.255183,31.8979 1.27592,30.7071 1.95641,27.6449"/>
</object>
</objectgroup>
</tile>
<tile id="2715">
<objectgroup draworder="index" id="2">
<object id="1" x="0.170122" y="13.95">
<polygon points="0,0 0,-14.1201 31.6427,-13.7799 31.7278,0.340245 27.5598,5.78416 22.5412,8.08081 12.8442,9.95215 9.86709,10.0372 6.71983,9.01648"/>
</object>
</objectgroup>
</tile>
<tile id="2716">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="14.0351">
<polygon points="0,0 -0.0850611,-14.3753 31.8979,-14.2052 31.983,0.0850611 27.9851,5.78416 22.9665,7.91069 13.0994,9.78203 9.95215,9.86709 6.71983,8.7613"/>
</object>
</objectgroup>
</tile>
<tile id="2717">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="14.2052">
<polygon points="0,0 0.0850611,-12.4189 1.02073,-14.3753 31.8979,-14.1201 31.8979,-0.255183 27.9001,5.52897 22.7113,7.6555 12.8442,9.86709 9.78203,9.69697 6.63477,8.7613"/>
</object>
</objectgroup>
</tile>
<tile id="2718">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.255183" y="14.2052">
<polygon points="0,0 0.170122,-14.2903 29.0058,-14.2052 32.3232,-12.0787 32.2382,-0.255183 27.9851,5.86922 22.9665,7.74056 13.1845,9.61191 10.0372,9.95215 6.88995,8.59117"/>
</object>
</objectgroup>
</tile>
<tile id="2719">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="28.4104">
<polygon points="0,0 0.170122,-28.7507 31.983,-28.4104 32.068,-12.504 27.1345,-0.76555 17.8628,3.48751 3.74269,3.57257"/>
</object>
</objectgroup>
</tile>
<tile id="2720">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="28.0702">
<polygon points="0,0 0.0850611,-28.2403 32.1531,-27.9001 32.068,-11.8235 30.1967,-7.31526 24.1574,1.70122 17.0122,3.91281 3.0622,3.65763"/>
</object>
</objectgroup>
</tile>
<tile id="2721">
<objectgroup draworder="index" id="2">
<object id="1" x="28.9208" y="0">
<polygon points="0,0 -29.176,0.170122 -29.0058,26.1138 -27.2196,29.6013 -25.1781,31.8129 -10.9729,31.8979 -1.70122,27.9001 -0.850611,25.7735 2.97714,16.0766 3.0622,2.6369"/>
</object>
</objectgroup>
</tile>
<tile id="2722">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="13.0994">
<polygon points="0,0 0,-13.3546 17.9479,-13.2695 24.8379,-8.16587 24.9229,-6.29452 11.4833,3.99787 6.71983,4.84848 2.55183,2.72196"/>
</object>
</objectgroup>
</tile>
<tile id="2723">
<objectgroup draworder="index" id="2">
<object id="1" x="15.5662" y="0.0850611">
<polygon points="0,0 16.5869,0.0850611 16.4168,12.0787 8.16587,18.118 3.31738,18.9686 -7.06007,9.69697 -1.61616,0.680489"/>
</object>
</objectgroup>
</tile>
<tile id="2724">
<objectgroup draworder="index" id="2">
<object id="1" x="19.2238" y="0.0850611">
<polygon points="0,0 -19.2238,0 -19.3089,27.9001 -17.4375,31.7278 -5.27379,31.8129 0.680489,30.622 4.93355,29.7714 7.82562,25.6885 8.7613,13.865 5.44391,6.54971"/>
</object>
</objectgroup>
</tile>
<tile id="2725">
<objectgroup draworder="index" id="2">
<object id="1" x="10.8878" y="0">
<polygon points="0,0 21.0952,-0.0850611 21.0952,32.068 -0.170122,32.068 -2.21159,24.1574 -3.31738,19.3089 -2.04147,16.757 1.87135,12.8442 0.170122,1.95641"/>
</object>
</objectgroup>
</tile>
<tile id="2750">
<objectgroup draworder="index" id="2">
<object id="1" x="21.0952" y="-0.170122">
<polygon points="0,0 -19.3089,-0.0850611 -20.2446,3.23232 -20.3296,8.08081 -17.1823,11.9936 -17.1823,17.0973 -11.9936,23.9022 -10.6326,27.1345 -2.21159,30.1967 6.88995,31.0473 10.8028,31.1324 10.8028,7.40032 9.69697,6.80489 2.6369,5.10367"/>
</object>
</objectgroup>
</tile>
<tile id="2751">
<objectgroup draworder="index" id="2">
<object id="1" x="0.170122" y="5.10367">
<polygon points="0,0 -0.0850611,26.8793 18.7985,26.8793 21.6055,25.7735 26.0287,19.6491 22.8814,6.71983 15.5662,5.6991 13.6098,-0.425306"/>
</object>
</objectgroup>
</tile>
<tile id="2753">
<objectgroup draworder="index" id="2">
<object id="1" x="12.4189" y="31.8129">
<polygon points="0,0 17.8628,-0.0850611 19.7342,-2.04147 19.5641,-23.0516 17.6077,-24.8379 14.3753,-24.9229 10.6326,-23.7321 7.40032,-22.8814 6.1244,-21.9458 3.31738,-17.7778 -0.510367,-13.865 -2.89208,-10.7177 -2.6369,-9.1866 2.55183,-4.93355 -0.680489,-1.36098"/>
</object>
</objectgroup>
</tile>
<tile id="2754">
<objectgroup draworder="index" id="2">
<object id="1" x="11.5683" y="0">
<polygon points="0,0 18.3732,-0.0850611 20.4147,6.03934 20.4147,10.6326 16.4168,17.8628 13.3546,21.0952 7.99575,28.0702 3.31738,27.9851 0.340245,29.176 -5.6991,29.0058 -7.57044,30.9623 -11.7384,30.9623 -11.4833,6.80489 -9.35673,6.1244 -3.40245,3.0622"/>
</object>
</objectgroup>
</tile>
<tile id="2765">
<objectgroup draworder="index" id="2">
<object id="1" x="0.935673" y="0.340245">
<polygon points="0,0 30.9623,-0.255183 30.8772,26.7092 28.8357,29.7714 22.0308,30.7071 17.7778,30.5369 9.69697,25.6034 -0.935673,16.9272 -1.10579,11.3982"/>
</object>
</objectgroup>
</tile>
<tile id="2766">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="0" width="32" height="32"/>
</objectgroup>
</tile>
<tile id="2767">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="0" width="32" height="32"/>
</objectgroup>
</tile>
<tile id="2768">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="0" width="32" height="32"/>
</objectgroup>
</tile>
<tile id="2769">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="26.0287">
<polygon points="0,0 -0.255183,-26.0287 28.8357,-26.0287 29.9415,-25.093 30.9623,-11.143 28.7507,-7.99575 23.9022,-2.89208 16.8421,3.23232 13.0144,4.25306 1.95641,4.08293"/>
</object>
</objectgroup>
</tile>
<tile id="2770">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="14.1201">
<polygon points="0,0 -0.0850611,-12.4189 1.19086,-14.0351 32.2382,-14.0351 31.8979,0.0850611 27.9001,5.61404 22.7113,7.91069 12.7592,10.0372 9.86709,10.1223 6.71983,8.59117"/>
</object>
</objectgroup>
</tile>
<tile id="2771">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="14.3753">
<polygon points="0,0 -0.0850611,-14.7156 29.3461,-14.2903 32.068,-12.504 31.983,-0.170122 27.815,5.44391 22.8814,7.48538 13.0144,9.78203 10.1223,9.69697 6.88995,8.59117"/>
</object>
</objectgroup>
</tile>
<tile id="2772">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="14.2903">
<polygon points="0,0 0,-14.4604 31.8979,-14.1201 31.8979,-0.0850611 27.9001,5.44391 22.7964,7.6555 13.0144,9.95215 9.95215,9.86709 6.97501,8.59117"/>
</object>
</objectgroup>
</tile>
<tile id="2773">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="14.3753">
<polygon points="0,0 -0.255183,-14.6305 31.7278,-14.3753 31.7278,-0.510367 27.7299,5.52897 22.3711,7.74056 12.4189,9.61191 9.86709,9.44179 6.54971,8.50611"/>
</object>
</objectgroup>
</tile>
<tile id="2774">
<objectgroup draworder="index" id="2">
<object id="1" x="11.8235" y="-0.0850611">
<polygon points="0,0 20.1595,0.0850611 19.9894,28.1552 17.0973,31.983 -11.7384,31.983 -11.7384,6.88995"/>
</object>
</objectgroup>
</tile>
<tile id="2775">
<objectgroup draworder="index" id="2">
<object id="1" x="21.2653" y="0.170122">
<polygon points="0,0 -21.2653,0 -21.3503,25.8586 -20.2446,31.5577 10.8028,31.6427 10.6326,7.74056"/>
</object>
</objectgroup>
</tile>
<tile id="2776">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="26.1988">
<polygon points="0,0 0.255183,-26.6241 29.261,-26.369 31.983,-23.1366 32.1531,-10.5476 30.1116,-5.35885 23.9022,3.57257 17.0973,5.6991 2.72196,5.44391"/>
</object>
</objectgroup>
</tile>
<tile id="2777">
<objectgroup draworder="index" id="2">
<object id="1" x="19.0537" y="0">
<polygon points="0,0 -19.2238,-0.0850611 -19.0537,25.7735 -17.3525,31.7278 -4.84848,31.983 4.93355,29.9415 7.91069,26.1988 9.10154,13.6948 5.61404,6.54971"/>
</object>
</objectgroup>
</tile>
<tile id="2778">
<objectgroup draworder="index" id="2">
<object id="1" x="11.0579" y="0">
<polygon points="0,0 20.84,0.170122 21.0101,31.7278 -0.0850611,31.7278 -1.36098,28.6656 -2.38171,24.1574 -3.31738,20.4997 -2.04147,16.8421"/>
</object>
</objectgroup>
</tile>
<tile id="2781">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="5.52897">
@ -3234,6 +3781,111 @@
</object>
</objectgroup>
</tile>
<tile id="2806">
<objectgroup draworder="index" id="2">
<object id="1" x="20.925" y="0.170122">
<polygon points="0,0 -18.033,-0.170122 -18.9686,1.95641 -18.2881,15.4811 -16.0766,17.6927 -9.10154,24.7528 -2.04147,28.4955 5.86922,29.7714 11.0579,29.6863 10.9729,14.7156 10.8878,5.61404 6.97501,4.93355 2.80702,2.6369"/>
</object>
</objectgroup>
</tile>
<tile id="2807">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="6.80489">
<polygon points="0,0 -0.170122,23.9872 10.9729,25.008 15.8214,25.093 25.008,24.0723 31.7278,23.9872 31.8129,1.02073 29.6013,-0.935673 24.5827,-0.935673 20.7549,-1.95641 15.3961,-3.91281 12.589,-3.82775 5.78416,-2.89208"/>
</object>
</objectgroup>
</tile>
<tile id="2808">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="6.1244">
<polygon points="0,0 -0.170122,24.9229 4.08293,24.9229 15.5662,19.8192 24.1574,14.8857 29.3461,10.8028 30.9623,2.80702 30.9623,-4.42318 28.7507,-6.37959 12.1637,-6.20946 9.95215,-3.14726"/>
</object>
</objectgroup>
</tile>
<tile id="2821">
<objectgroup draworder="index" id="2">
<object id="1" x="2.04147" y="0.0850611">
<polygon points="0,0 29.9415,0 29.7714,25.8586 25.6885,29.176 15.8214,29.9415 7.6555,26.7092 -0.340245,17.5226 -1.36098,9.69697 -1.19086,2.97714"/>
</object>
</objectgroup>
</tile>
<tile id="2822">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="25.9436">
<polygon points="0,0 -0.0850611,-26.369 31.8979,-26.1988 31.8129,0.76555 22.5412,-1.19086 13.6098,-1.10579 4.67836,0.935673 2.72196,-2.04147 1.70122,-1.95641"/>
</object>
</objectgroup>
</tile>
<tile id="2823">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="28.0702">
<polygon points="0,0 0,-28.4104 29.6863,-28.1552 31.8979,-21.2653 31.8129,-14.1201 25.6885,-16.2467 22.7113,-16.0766 15.8214,-10.9729 12.9293,-5.18873 2.89208,-5.27379 0.935673,-3.0622"/>
</object>
</objectgroup>
</tile>
<tile id="2825">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="11.143">
<polygon points="0,0 0.0850611,-11.4833 28.9208,-11.0579 29.7714,-10.3775 30.7921,0.680489 30.8772,3.82775 27.9001,12.589 29.8565,17.6927 30.0266,20.7549 11.8235,20.84 6.80489,19.9894 5.86922,18.6284 7.06007,6.63477"/>
</object>
</objectgroup>
</tile>
<tile id="2826">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="11.143">
<polygon points="0,0 0.170122,-11.3982 29.0058,-11.143 29.9415,-9.95215 30.8772,1.44604 30.0266,20.7549 17.7778,20.7549 14.9708,19.6491 7.82562,16.672 3.82775,13.6948 3.99787,10.9729 3.91281,2.80702 2.12653,1.87135"/>
</object>
</objectgroup>
</tile>
<tile id="2827">
<objectgroup draworder="index" id="2">
<object id="1" x="0.850611" y="2.89208">
<polygon points="0,0 -0.170122,-2.97714 31.1324,-3.0622 31.0473,13.1845 26.8793,22.8814 26.0287,25.093 17.0973,29.0909 2.55183,29.176 1.87135,27.7299 -1.02073,13.6098 -1.10579,8.67624"/>
</object>
</objectgroup>
</tile>
<tile id="2828">
<objectgroup draworder="index" id="2">
<object id="1" x="1.02073" y="2.97714">
<polygon points="0,0 -0.0850611,-2.89208 31.0473,-2.89208 31.0473,13.0144 29.0058,17.6927 22.9665,26.7092 16.0766,29.0909 1.78628,29.0058 0.680489,27.7299 -1.36098,13.7799 -1.10579,8.59117"/>
</object>
</objectgroup>
</tile>
<tile id="2829">
<objectgroup draworder="index" id="2">
<object id="1" x="0.255183" y="11.0579">
<polygon points="0,0 -0.340245,-11.2281 31.6427,-11.0579 31.6427,20.7549 11.5683,21.0952 6.37959,20.1595 5.52897,18.9686 6.88995,6.63477 1.36098,1.5311"/>
</object>
</objectgroup>
</tile>
<tile id="2830">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.425306" y="11.3131">
<polygon points="0,0 0.255183,-11.4833 32.3232,-11.2281 32.3232,20.4997 18.2881,20.5848 8.08081,16.5869 5.35885,14.8006 3.99787,13.2695"/>
</object>
</objectgroup>
</tile>
<tile id="2831">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="2.89208">
<polygon points="0,0 0.935673,-3.0622 31.8129,-2.80702 31.8129,24.4125 30.0266,28.8357 11.5683,29.0058 6.80489,27.9851 5.52897,26.9644 6.71983,15.311 1.61616,9.61191 -0.255183,7.74056"/>
</object>
</objectgroup>
</tile>
<tile id="2832">
<objectgroup draworder="index" id="2">
<object id="1" x="18.118" y="31.983">
<polygon points="0,0 -18.118,-0.170122 -18.2031,-32.068 10.9729,-31.983 13.6948,-28.9208 13.865,-16.1616 9.78203,-6.29452 8.84636,-4.08293"/>
</object>
</objectgroup>
</tile>
<tile id="2833">
<objectgroup draworder="index" id="2">
<object id="1" x="29.0058" y="0.170122">
<polygon points="0,0 -29.176,0.0850611 -29.0058,31.6427 -11.8235,31.8129 -4.93355,29.7714 1.19086,20.4147 3.23232,15.9064 3.0622,2.72196"/>
</object>
</objectgroup>
</tile>
<tile id="2836">
<objectgroup draworder="index" id="2">
<object id="1" x="20.84" y="0.255183">
@ -3248,6 +3900,132 @@
</object>
</objectgroup>
</tile>
<tile id="2860">
<objectgroup draworder="index" id="2">
<object id="1" x="20.0744" y="0">
<polygon points="0,0 -17.5226,0.0850611 -19.2238,2.12653 -20.2446,10.0372 -20.1595,21.8607 -19.2238,29.4312 -17.3525,31.8979 -5.01861,31.7278 7.2302,27.9001 10.1223,22.5412 7.99575,16.672 9.10154,10.8878 8.84636,7.74056"/>
</object>
</objectgroup>
</tile>
<tile id="2861">
<objectgroup draworder="index" id="2">
<object id="1" x="13.95" y="0.255183">
<polygon points="0,0 15.0558,-0.425306 16.8421,1.70122 17.9479,9.35673 17.8628,22.0308 16.9272,29.6863 15.1409,31.7278 -2.38171,31.5577 -7.31526,26.454 -11.3982,20.4147 -11.2281,15.4811 -3.31738,4.42318"/>
</object>
</objectgroup>
</tile>
<tile id="2862">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="14.1201">
<polygon points="0,0 -0.0850611,-12.4189 7.6555,-12.3339 14.0351,-13.1845 22.5412,-13.1845 32.068,-12.3339 32.2382,-1.10579 23.4769,4.168 17.0122,-1.36098 4.93355,2.80702 3.0622,2.80702"/>
</object>
</objectgroup>
</tile>
<tile id="2863">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="15.2259">
<polygon points="0,0 0.0850611,-14.5455 31.8979,-14.3753 31.983,-1.19086 28.6656,1.02073 24.0723,2.04147 20.2446,-1.95641 14.8857,-2.21159 12.0787,1.61616 9.86709,1.44604 4.93355,1.61616"/>
</object>
</objectgroup>
</tile>
<tile id="2866">
<objectgroup draworder="index" id="2">
<object id="1" x="21.0952" y="-0.255183">
<polygon points="0,0 -19.2238,0 -20.1595,3.0622 -20.0744,4.76342 -14.3753,13.7799 -10.4625,19.0537 -7.31526,20.2446 -3.48751,21.3503 2.97714,21.3503 11.0579,17.2674 10.8028,8.33599 9.69697,6.97501"/>
</object>
</objectgroup>
</tile>
<tile id="2867">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="8.84636">
<polygon points="0,0 0,7.99575 11.9086,8.16587 27.3897,5.01861 28.2403,2.72196 28.0702,-0.76555 25.7735,-2.12653 9.10154,-2.80702 5.95428,-2.72196 2.97714,-1.95641"/>
</object>
</objectgroup>
</tile>
<tile id="2868">
<objectgroup draworder="index" id="2">
<object id="1" x="32.068" y="7.99575">
<polygon points="0,0 -0.0850611,9.78203 -5.44391,10.0372 -8.33599,9.10154 -14.2903,5.86922 -18.2031,3.91281 -21.2653,2.80702 -25.1781,2.21159 -25.2632,-1.10579 -11.5683,-3.40245 -2.29665,-2.29665"/>
</object>
</objectgroup>
</tile>
<tile id="2869">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="6.88995">
<polygon points="0,0 0,9.69697 9.78203,13.95 18.2881,14.0351 25.2632,11.9936 27.1345,9.95215 30.8772,2.12653 31.0473,-3.31738 30.0266,-6.71983 11.8235,-6.97501"/>
</object>
</objectgroup>
</tile>
<tile id="2871">
<objectgroup draworder="index" id="2">
<object id="1" x="12.7592" y="31.5577">
<polygon points="0,0 1.95641,-2.89208 6.29452,-3.91281 7.91069,-3.99787 10.2073,-1.95641 10.1223,0.340245"/>
</object>
</objectgroup>
</tile>
<tile id="2873">
<objectgroup draworder="index" id="2">
<object id="1" x="10.0372" y="31.3876">
<polygon points="0,0 1.02073,-4.84848 3.82775,-4.67836 9.10154,-1.70122 9.01648,0.340245"/>
</object>
</objectgroup>
</tile>
<tile id="2880">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="10.9729">
<polygon points="0,0 -0.0850611,-11.143 28.9208,-11.0579 31.1324,10.8878 31.0473,16.757 30.1116,20.925 11.5683,20.925 6.03934,19.1388"/>
</object>
</objectgroup>
</tile>
<tile id="2881">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="11.3131">
<polygon points="0,0 0,-11.3982 29.176,-11.143 31.2174,16.1616 30.0266,20.7549 17.8628,20.7549 7.82562,16.5869 3.82775,13.5247"/>
</object>
</objectgroup>
</tile>
<tile id="2882">
<objectgroup draworder="index" id="2">
<object id="1" x="0.850611" y="0.255183">
<polygon points="0,0 31.1324,-0.255183 31.0473,15.7363 28.0702,18.7135 27.1345,25.2632 26.0287,27.7299 17.2674,31.6427 -0.340245,31.6427"/>
</object>
</objectgroup>
</tile>
<tile id="2883">
<objectgroup draworder="index" id="2">
<object id="1" x="0.935673" y="4.84848">
<polygon points="0,0 0.170122,-5.01861 30.9623,-4.84848 30.9623,11.143 29.176,15.9915 23.0516,25.093 16.0766,27.0494 -0.170122,27.3046"/>
</object>
</objectgroup>
</tile>
<tile id="2884">
<objectgroup draworder="index" id="2">
<object id="1" x="32.068" y="15.9064">
<polygon points="0,0 -0.340245,-16.2467 -32.2382,-15.7363 -32.1531,15.9915 -14.1201,16.1616 -4.93355,11.9936 -3.82775,9.86709"/>
</object>
</objectgroup>
</tile>
<tile id="2885">
<objectgroup draworder="index" id="2">
<object id="1" x="17.0973" y="32.068">
<polygon points="0,0 -17.1823,-0.170122 -17.0122,-32.2382 14.8857,-32.1531 14.8006,-16.1616 12.7592,-11.143 6.80489,-2.38171"/>
</object>
</objectgroup>
</tile>
<tile id="2886">
<objectgroup draworder="index" id="2">
<object id="1" x="0.850611" y="0">
<polygon points="0,0 31.0473,0 31.0473,26.7092 29.0909,31.8979 16.757,31.983 6.71983,27.4747 3.0622,25.093 -1.10579,11.0579 -1.02073,1.70122"/>
</object>
</objectgroup>
</tile>
<tile id="2888">
<objectgroup draworder="index" id="2">
<object id="1" x="0.680489" y="-0.0850611">
<polygon points="0,0 31.3876,0.0850611 31.3025,31.983 17.0973,32.068 6.88995,27.9001 3.0622,25.093 3.23232,16.5019 -0.935673,10.7177 -0.850611,1.61616"/>
</object>
</objectgroup>
</tile>
<tile id="2891">
<objectgroup draworder="index" id="2">
<object id="1" x="20.925" y="0.0850611">
@ -3262,6 +4040,104 @@
</object>
</objectgroup>
</tile>
<tile id="2915">
<objectgroup draworder="index" id="2">
<object id="1" x="18.9686" y="0">
<polygon points="0,0 -13.3546,-0.0850611 -17.4375,2.97714 -17.2674,29.6863 -15.1409,31.8129 1.87135,31.8129 10.0372,23.5619 11.2281,20.4147 11.0579,12.7592 7.14514,5.78416"/>
</object>
</objectgroup>
</tile>
<tile id="2916">
<objectgroup draworder="index" id="2">
<object id="1" x="9.95215" y="0.170122">
<polygon points="0,0 19.3089,-0.0850611 22.1159,7.06007 21.0101,27.5598 19.9043,31.7278 0.76555,31.7278 -2.12653,25.008 -3.14726,13.6948"/>
</object>
</objectgroup>
</tile>
<tile id="2917">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="6.97501">
<polygon points="0,0 0.0850611,24.2424 2.97714,23.9872 8.84636,18.7985 10.8878,20.84 19.7342,21.6906 24.7528,22.201 31.983,23.9872 32.068,0.595428 24.7528,-3.40245 21.0101,-4.25306 19.9043,-4.168 8.84636,-5.10367 7.6555,-5.01861"/>
</object>
</objectgroup>
</tile>
<tile id="2918">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="7.99575">
<polygon points="0,0 0,23.1366 2.89208,22.9665 13.0144,19.9043 24.1574,19.9894 29.176,22.7964 32.068,23.0516 31.983,0.595428 29.4312,-1.61616 25.3482,-2.21159 15.5662,-6.20946 13.0994,-6.1244 7.99575,-5.10367"/>
</object>
</objectgroup>
</tile>
<tile id="2926">
<objectgroup draworder="index" id="2">
<object id="1" x="12.8442" y="0.0850611">
<polygon points="0,0 10.0372,0 10.0372,5.6991 -1.95641,22.1159 -8.84636,30.9623 -13.1845,30.8772 -13.1845,5.6991"/>
</object>
</objectgroup>
</tile>
<tile id="2928">
<objectgroup draworder="index" id="2">
<object id="1" x="21.0101" y="0.170122">
<polygon points="0,0 -11.3131,-0.0850611 -11.4833,3.48751 -6.46465,14.3753 3.74269,26.369 6.71983,29.6013 10.9729,29.6863 10.8878,5.61404 6.63477,4.93355"/>
</object>
</objectgroup>
</tile>
<tile id="2970">
<objectgroup draworder="index" id="2">
<object id="1" x="1.61616" y="0">
<polygon points="0,0 17.8628,0.0850611 21.2653,11.8235 19.3939,23.9022 13.0144,32.068 -0.255183,31.8979 -0.935673,16.757 -0.680489,0.850611"/>
</object>
</objectgroup>
</tile>
<tile id="2971">
<objectgroup draworder="index" id="2">
<object id="1" x="10.8878" y="0.255183">
<polygon points="0,0 19.3939,-0.255183 19.9894,4.67836 19.9894,30.5369 19.0537,31.7278 0,31.8129 -6.37959,26.7092 -8.33599,24.2424 -7.06007,9.69697 -0.595428,4.33812"/>
</object>
</objectgroup>
</tile>
<tile id="2972">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="10.5476">
<polygon points="0,0 -0.0850611,-8.67624 21.5205,-10.5476 25.093,-10.6326 31.8979,-8.50611 31.8979,0.0850611 22.1159,0.340245 23.0516,11.2281 19.5641,12.3339 10.8878,13.6948 10.7177,10.0372 3.91281,2.12653"/>
</object>
</objectgroup>
</tile>
<tile id="2973">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="14.7156">
<polygon points="0,0 -0.170122,-12.9293 10.2073,-12.6741 26.0287,-10.8878 30.3668,-12.9293 31.983,-12.6741 32.068,-2.12653 21.9458,4.93355 16.9272,6.03934 13.95,6.1244 4.76342,2.04147"/>
</object>
</objectgroup>
</tile>
<tile id="2976">
<objectgroup draworder="index" id="2">
<object id="1" x="2.04147" y="31.983">
<polygon points="0,0 -0.0850611,-3.99787 1.87135,-12.0787 9.44179,-19.1388 12.6741,-21.4354 18.7985,-26.1138 24.9229,-29.4312 27.9001,-29.4312 29.7714,-27.9001 29.8565,-16.2467 27.815,-10.8028 21.5205,-2.29665 14.9708,-0.0850611"/>
</object>
</objectgroup>
</tile>
<tile id="2977">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.170122" y="13.865">
<polygon points="0,0 -0.0850611,-10.8028 4.168,-10.0372 8.08081,-7.99575 16.1616,-7.06007 20.4147,-4.84848 21.2653,-2.38171 19.2238,0.935673 13.1845,10.1223 9.95215,10.2073 6.88995,9.01648"/>
</object>
</objectgroup>
</tile>
<tile id="2978">
<objectgroup draworder="index" id="2">
<object id="1" x="32.068" y="2.12653">
<polygon points="0,0 -0.170122,11.6534 -4.168,17.6077 -9.61191,19.9894 -12.3339,19.9043 -17.4375,15.6512 -20.4147,11.8235 -21.4354,9.10154 -19.0537,5.6991 -15.6512,4.33812 -8.08081,3.91281 -1.36098,-0.170122"/>
</object>
</objectgroup>
</tile>
<tile id="2979">
<objectgroup draworder="index" id="2">
<object id="1" x="0.170122" y="1.87135">
<polygon points="0,0 4.08293,0.0850611 11.8235,1.87135 14.4604,3.57257 19.8192,9.95215 25.8586,16.1616 27.815,17.9479 29.6863,25.008 29.9415,28.7507 28.8357,30.1116 17.3525,30.1116 7.48538,26.0287 3.65763,22.7964 3.57257,12.2488 1.70122,11.2281 -0.340245,8.7613"/>
</object>
</objectgroup>
</tile>
<tile id="2985">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="7.31526">
@ -3360,6 +4236,20 @@
</object>
</objectgroup>
</tile>
<tile id="3027">
<objectgroup draworder="index" id="2">
<object id="1" x="-0.0850611" y="9.01648">
<polygon points="0,0 0,21.8607 19.2238,22.9665 23.8171,22.9665 32.3232,21.8607 31.8979,-1.10579 29.8565,-2.38171 23.9872,-2.12653 5.6991,-3.0622 3.0622,-2.29665"/>
</object>
</objectgroup>
</tile>
<tile id="3028">
<objectgroup draworder="index" id="2">
<object id="1" x="0.0850611" y="6.88995">
<polygon points="0,0 -0.0850611,24.2424 15.8214,25.3482 25.6885,23.7321 31.8979,24.0723 31.8979,0.850611 29.4312,-1.27592 4.67836,-2.04147"/>
</object>
</objectgroup>
</tile>
<tile id="3040">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="0" width="32" height="32"/>
@ -3375,6 +4265,16 @@
<object id="1" x="0" y="0" width="32" height="32"/>
</objectgroup>
</tile>
<tile id="3043">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="0" width="32" height="32"/>
</objectgroup>
</tile>
<tile id="3044">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="0" width="32" height="32"/>
</objectgroup>
</tile>
<tile id="3045">
<objectgroup draworder="index" id="2">
<object id="1" x="0" y="0" width="32" height="32"/>
@ -3529,6 +4429,13 @@
</object>
</objectgroup>
</tile>
<tile id="3113">
<objectgroup draworder="index" id="2">
<object id="1" x="1.27592" y="0.255183">
<polygon points="0,0 20.7549,-0.255183 20.7549,1.70122 14.5455,8.67624 9.44179,9.95215 1.44604,6.63477 -0.425306,1.61616"/>
</object>
</objectgroup>
</tile>
<tile id="3150">
<objectgroup draworder="index" id="2">
<object id="1" x="3.99787" y="0.170122">

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2079,7 +2079,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: <SceneId>k__BackingField
value: 2127515391
value: 4293889023
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: _networkBehaviours.Array.size

View File

@ -2079,7 +2079,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: <SceneId>k__BackingField
value: 4009740927
value: 1876911991
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: _networkBehaviours.Array.size

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6de5f693aca544b4bad9e1c5025ac433
guid: 22076678cede1d049affe74e8ac3ecf4
DefaultImporter:
externalObjects: {}
userData:

View File

@ -2079,7 +2079,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: <SceneId>k__BackingField
value: 2146407159
value: 4276043647
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: _networkBehaviours.Array.size

View File

@ -2079,7 +2079,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: <SceneId>k__BackingField
value: 2146407159
value: 1879028735
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: _networkBehaviours.Array.size

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6264ad8b345cf4c49a5ef6f305165f1c
guid: 3dc1045b55c68a44da25debeaba1eafe
DefaultImporter:
externalObjects: {}
userData:

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 1ed5b35ea681aa94eb527f275ec55aee
guid: 094aa63f5ddab72419bc399420c648ba
DefaultImporter:
externalObjects: {}
userData:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d4a891ce4a277a14797ac62961406fce
guid: 369b4a8336c2c874993945c72456f249
DefaultImporter:
externalObjects: {}
userData:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7a42459ad10bca344967680925d53f7c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 48875e2fc8a635f4289a022d196808e8
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,5 @@ MonoBehaviour:
m_Name: DistanceCondition
m_EditorClassIdentifier:
NetworkObject: {fileID: 0}
_maximumDistance: 10
_maximumDistance: 15.51
_hideDistancePercent: 0.1
UpdateFrequency: 0

View File

@ -27,7 +27,7 @@ MonoBehaviour:
magic: 0
sanity: 0
maxSanity: 0
moveSpeed: 0
moveSpeed: 5
movingRight: 0
movingLeft: 0
movingDown: 0

View File

@ -1355,6 +1355,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 668907622253418370}
- {fileID: 8392833474421242170}
- {fileID: 479044088379335568}
- {fileID: 6963968477584199134}
@ -1576,7 +1577,7 @@ MonoBehaviour:
LocalScale: {x: 0, y: 0, z: 0}
_isNetworked: 1
_isSpawnable: 1
_isGlobal: 0
_isGlobal: 1
_initializeOrder: 0
_defaultDespawnType: 0
NetworkObserver: {fileID: 0}
@ -1616,7 +1617,7 @@ MonoBehaviour:
toolbarManager: {fileID: 6362460223039606254}
equipmentManager: {fileID: 549521313846108907}
playerGo: {fileID: 7194374020966037453}
playerCamera: {fileID: 0}
playerCamera: {fileID: 6785728660406467129}
gameManagerPrefab: {fileID: 1155193144633609695, guid: 04359b8867a2d794aad6b521a16e8d21, type: 3}
gameManager: {fileID: 0}
--- !u!114 &1772910918690186728
@ -2006,3 +2007,90 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1001 &1156562443328600608
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 2753946225696872537}
m_Modifications:
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalPosition.z
value: -10
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4917769876847807159, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_Follow
value:
objectReference: {fileID: 2753946225696872537}
- target: {fileID: 5051619997052790706, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5051619997052790706, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5230034042738412359, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_Name
value: Main Camera
objectReference: {fileID: 0}
- target: {fileID: 5230034042738412359, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5631521715186974745, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
--- !u!4 &668907622253418370 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1820721548829388194, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
m_PrefabInstance: {fileID: 1156562443328600608}
m_PrefabAsset: {fileID: 0}
--- !u!20 &6785728660406467129 stripped
Camera:
m_CorrespondingSourceObject: {fileID: 5631521715186974745, guid: 75c5ec3d38d56cc469760a3056a1a2c9, type: 3}
m_PrefabInstance: {fileID: 1156562443328600608}
m_PrefabAsset: {fileID: 0}

File diff suppressed because it is too large Load Diff

View File

@ -2019,11 +2019,19 @@ PrefabInstance:
objectReference: {fileID: 508924469}
- target: {fileID: 2467740212711513134, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: m_Size.x
value: 12.521683
value: 12.09864
objectReference: {fileID: 0}
- target: {fileID: 2467740212711513134, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: m_Size.y
value: 3.016632
objectReference: {fileID: 0}
- target: {fileID: 2467740212711513134, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: m_Offset.x
value: 2.6581507
value: 2.4466295
objectReference: {fileID: 0}
- target: {fileID: 2467740212711513134, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: m_Offset.y
value: -1.008316
objectReference: {fileID: 0}
- target: {fileID: 2467740212711513134, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: m_IsTrigger
@ -2039,7 +2047,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4423685822788232243, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: m_LocalPosition.x
value: -0.54
value: -0.26
objectReference: {fileID: 0}
- target: {fileID: 4423685822788232243, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: m_LocalPosition.y
@ -2079,7 +2087,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: <SceneId>k__BackingField
value: 4278190071
value: 2145341311
objectReference: {fileID: 0}
- target: {fileID: 5186788049215247401, guid: 71d12b53bfe275a42b91a98a3e6e2f66, type: 3}
propertyPath: _networkBehaviours.Array.size
@ -3635,7 +3643,7 @@ MonoBehaviour:
_networkObjectCache: {fileID: 508924470}
sceneName: FarmMap
SceneStack: 0
spawnPosition: {x: 30, y: 30, z: 0}
spawnPosition: {x: 30, y: -30, z: 0}
--- !u!114 &802857226
MonoBehaviour:
m_ObjectHideFlags: 0
@ -3652,6 +3660,7 @@ MonoBehaviour:
_updateHostVisibility: 1
_observerConditions:
- {fileID: 11400000, guid: 2033f54fd2794464bae08fa5a55c8996, type: 2}
- {fileID: 11400000, guid: 5f33eb0e5b83b5546822cfe42a305657, type: 2}
--- !u!1 &804445073
GameObject:
m_ObjectHideFlags: 0

View File

@ -8,31 +8,32 @@ using UnityEngine;
namespace Managers
{
public enum GameStatus
{
WaitingForPlayers,
Playing,
Paused,
GameOver
}
public class GameManager : NetworkBehaviour
{
public enum GameState
{
WaitingForPlayers,
Playing,
Paused,
GameOver
}
[SerializeField] private SaveManager saveManager;
[SerializeField] private HotkeyManager hotkeyManager;
[SerializeField] private AudioManager audioManager;
[SerializeField] private UIManager uiManager;
public GameState currentState = GameState.WaitingForPlayers;
// person who's running the game, owner.
[SerializeField] private PlayerManager gameManagerPlayer;
[SerializeField] private List<PlayerManager> gameManagerPlayerData;
// [SerializeField] private List<PlayerManager> gameManagerPlayerData;
[SerializeField] public ItemDatabase itemDatabase;
private readonly SyncList<GamePlayer> _players = new();
// int = clientID
[SerializeField] private readonly SyncDictionary<int, GamePlayer> _players = new();
public readonly SyncVar<GameStatus> gameStatus = new(GameStatus.WaitingForPlayers);
public static GameManager Instance { get; set; }
@ -43,6 +44,7 @@ namespace Managers
itemDatabase = Resources.Load<ItemDatabase>("GameItems/ItemDatabase");
_players.OnChange += OnPlayersChange;
gameStatus.OnChange += OnStatusChange;
if (Instance != null) Destroy(this);
Instance = this;
@ -56,11 +58,21 @@ namespace Managers
Debug.Log("GameManager destroyed");
}
private void OnPlayersChange(SyncListOperation op, int index, GamePlayer olditem, GamePlayer newitem,
bool asserver)
private void OnStatusChange(GameStatus prev, GameStatus next, bool asServer)
{
Debug.Log("Current Game Status changed: " + prev + " -> " + next);
}
private void OnCurrentStateChange(GameState prev, GameState next, bool asserver)
{
Debug.Log("Current Game State changed: " + prev + " -> " + next);
}
private void OnPlayersChange(SyncDictionaryOperation op, int clientId,
GamePlayer newPlayer, bool asServer)
{
// log changes
Debug.Log($"Players changed: {op} {index} {olditem} {newitem} {asserver}");
Debug.Log($"Players changed: {op} {clientId} {newPlayer} {asServer}");
}
@ -68,9 +80,11 @@ namespace Managers
public void RegisterPlayerServerRpc(NetworkConnection conn, GamePlayer player)
{
Debug.Log("Registering player...");
if (player != null && !_players.Contains(player))
if (player != null && !_players.ContainsKey(conn.ClientId))
{
_players.Add(player);
_players.Add(conn.ClientId, player);
_players.Dirty(conn.ClientId);
Debug.Log($"Player registered: {conn.ClientId}");
OnPlayerRegisteredObserversRpc(conn.ClientId);
}
@ -83,9 +97,9 @@ namespace Managers
// You can add any client-side logic here when a new player joins
}
public List<GamePlayer> GetPlayers()
public Dictionary<int, GamePlayer> GetPlayers()
{
return new List<GamePlayer>(_players);
return new Dictionary<int, GamePlayer>(_players);
} // ReSharper disable Unity.PerformanceAnalysis
public override void OnStartNetwork()
{
@ -103,7 +117,13 @@ namespace Managers
{
// Server logic for new player connections
}
// client logic for new player connections
}
// get player by client id
public GamePlayer GetPlayer(int clientId)
{
return _players[clientId];
}
public override void OnStopClient()
@ -161,17 +181,8 @@ namespace Managers
public void AddPlayer(GamePlayer gamePlayer)
{
_players.Add(gamePlayer);
}
public GamePlayer GetCurrentPlayerManager(int id)
{
return _players[id];
}
public GamePlayer GetLastPlayer()
{
return _players[^1];
_players.Add(Owner.ClientId, gamePlayer);
_players.Dirty(Owner.ClientId);
}
}
}

View File

@ -9,7 +9,7 @@ public interface IItemManager<TSlot> where TSlot : GameSlot
void RemoveItemFromSlot(int slotId);
void AddItemToOpenSlot(GameItem item);
void AddItemToSlot(GameItem item, int slotId);
void AddSlot(TSlot slot);
void AddSlotServerRpc(TSlot slot);
void RemoveSlot(int slotId);
TSlot GetSlot(int slotId);
void SwapItems(int slotId1, int slotId2);

View File

@ -77,7 +77,7 @@ namespace Managers.Item
return ActiveBoxInteractable.Slots.GetValueOrDefault(slotId, null);
}
public void AddSlot(GameSlot gameSlot)
public void AddSlotServerRpc(GameSlot gameSlot)
{
ActiveBoxInteractable.AddSlot(gameSlot);
}

View File

@ -46,7 +46,7 @@ namespace Managers.Item
(slot1.Item, slot2.Item) = (slot2.Item, slot1.Item);
}
public void AddSlot(GameSlot gameSlot)
public void AddSlotServerRpc(GameSlot gameSlot)
{
Slots[gameSlot.Position] = gameSlot;
}
@ -144,7 +144,7 @@ namespace Managers.Item
// clear existing slots
Slots.Clear();
ActiveGameSlot = null;
foreach (var slot in slots) AddSlot(slot.Value);
foreach (var slot in slots) AddSlotServerRpc(slot.Value);
}
}
}

View File

@ -56,7 +56,7 @@ namespace Managers.Item
throw new NotImplementedException();
}
public void AddSlot(GameSlot gameSlot)
public void AddSlotServerRpc(GameSlot gameSlot)
{
throw new NotImplementedException();
}

View File

@ -20,6 +20,7 @@ namespace Managers.Item
private readonly SlotType _slotType = SlotType.Toolbar;
private void Awake()
{
_slots.OnChange += slots_OnChange;
@ -60,13 +61,21 @@ namespace Managers.Item
}
public void AddSlot(string position, GameSlot gameSlot)
[ServerRpc]
public void AddSlotServerRpc(GameSlot gameSlot)
{
// get max slot position
var maxSlotPosition = 0;
foreach (var slot in _slots.Values)
if (slot.Position > maxSlotPosition)
maxSlotPosition = slot.Position;
gameSlot.Position = maxSlotPosition + 1;
gameSlot.SlotType = _slotType;
_slots[gameSlot.Position] = position;
_slots[gameSlot.GetId()] = gameSlot;
_slots.Dirty(gameSlot.Position);
}
public void RemoveSlot(int slotId)
{
_slots.Remove(slotId);
@ -85,6 +94,7 @@ namespace Managers.Item
}
[ServerRpc]
public void AddItemToSlot(GameItem item, int slotId)
{
if (_slots.TryGetValue(slotId, out var slot))
@ -184,14 +194,37 @@ namespace Managers.Item
Debug.Log("Toolbar slots: " + playerData.ToolbarSlots.Count);
// print all the toolbar slots keys
foreach (var slot in playerData.ToolbarSlots) Debug.Log("Slot key: " + slot.Key);
// foreach (var slot in playerData.ToolbarSlots) Debug.Log("Slot key: " + slot.Key);
// create player slots for inventory
for (var i = 0; i < playerData.ToolbarSize; i++) AddSlot(playerData.ToolbarSlots[i]);
/*for (var i = 0; i < playerData.ToolbarSize; i++)
{
// find slot at position i and map it
var slot = playerData.ToolbarSlots.FirstOrDefault(x => x.Value.Position == i);
if (slot.Value != null) AddSlotServerRpc(slot.Value);
}*/
// copy slots from Dictionary to SyncDictionary
Debug.Log("Completed Initialized hotkeys in ToolbarManager");
}
public override void OnStartClient()
{
base.OnStartClient();
}
// on client connected,
// on client, add slot to toolbar
[ObserversRpc]
public void AddSlotObserversRpc(GameSlot slot)
{
// AddSlot(slot);
}
public GameSlot GetActiveToolbarSlot()
{
return _activeGameSlot.Value;

View File

@ -1,5 +1,7 @@
using System.Collections;
using System.Collections.Generic;
using Data.ScriptableObjects;
using FishNet.Connection;
using FishNet.Object;
using FishNet.Object.Synchronizing;
using Managers.Item;
@ -14,6 +16,9 @@ namespace Managers
// Manages a INSTANCE of a single player.
public class PlayerManager : NetworkBehaviour
{
private static readonly Dictionary<int, PlayerManager> _playerManagers = new();
[SerializeField] private InventoryManager inventoryManager;
[SerializeField] private ToolbarManager toolbarManager;
[SerializeField] private EquipmentManager equipmentManager;
@ -28,16 +33,39 @@ namespace Managers
private readonly SyncVar<GamePlayer> _playerData = new(new SyncTypeSettings(1f));
private NetworkConnection _connection;
private void Awake()
{
_playerData.OnChange += playerData_OnChange;
_connection = null;
}
public void SetupCamera()
{
playerCamera = GetComponentInChildren<Camera>();
if (playerCamera == null)
{
Debug.LogError("No camera found for player");
return;
}
playerCamera.enabled = IsOwner;
if (IsOwner)
{
Camera.main.gameObject.SetActive(false);
playerCamera.tag = "MainCamera";
}
}
public void playerData_OnChange(GamePlayer prev, GamePlayer next, bool asServer)
{
Debug.Log("PlayerData changed:");
if (prev != null) Debug.Log($"PlayerData changed PREV: {prev.ID} {prev.PlayerName} {asServer}");
if (next != null) Debug.Log($"PlayerData changed NEXT: {next.ID} {next.PlayerName} {asServer}");
if (prev != null)
Debug.Log($"PlayerData changed PREV: {prev.ID} {prev.PlayerName} {prev.MoveSpeed} {asServer}");
if (next != null)
Debug.Log($"PlayerData changed NEXT: {next.ID} {next.PlayerName} {next.MoveSpeed} {asServer}");
}
public override void OnStartServer()
@ -46,31 +74,97 @@ namespace Managers
if (gameManager == null) gameManager = FindObjectOfType<GameManager>();
if (gameManager == null)
{
Debug.Log("GameManager not found");
Debug.Log("GameManager not found, creating new one");
GameInit.Instance.InitializeGameManager();
gameManager = FindObjectOfType<GameManager>();
}
}
[ServerRpc]
public void SpawnGameManager()
public override void OnStartClient()
{
var gameManagerGo = Instantiate(gameManagerPrefab, transform.position, Quaternion.identity);
Spawn(gameManagerGo);
gameManager = gameManagerGo.GetComponent<GameManager>();
if (gameManager == null) Debug.LogError("GameManager not found");
}
base.OnStartClient();
[ObserversRpc]
public void SpawnGameManagerClient(GameManager gameManager)
{
this.gameManager = gameManager;
Debug.Log("Total existing playerManagers: " + _playerManagers.Count);
if (IsOwner)
{
_connection = Owner;
_playerData.Value = GetPlayerData();
// StartCoroutine(WaitForClientActiveAndRegister());
RegisterPlayer();
_playerManagers.Add(Owner.ClientId, this);
}
// ... rest of your OnStartClient code ...
}
private IEnumerator WaitForClientActiveAndRegister()
{
while (!IsClientInitialized)
yield return new WaitForSeconds(0.5f); // Wait a short time to ensure everything is set up
while (!gameManager)
{
gameManager = FindObjectOfType<GameManager>();
yield return null;
}
Debug.Log("Attempting to register player");
RegisterPlayer();
}
[ServerRpc(RequireOwnership = false)]
private void RegisterPlayer()
{
if (_playerData.Value == null)
{
Debug.LogWarning("PlayerData not found, loading default");
// load a scriptable objects default player data
var playerData =
AssetDatabase.LoadAssetAtPath<GamePlayerSo>("Assets/Resources/DefaultPlayer.asset");
_playerData.Value = new GamePlayer(playerData)
{
PlayerName = "Player " + Owner.ClientId
};
}
if (gameManager != null && _playerData.Value != null)
{
Debug.Log("Calling RegisterPlayerServerRpc");
gameManager.RegisterPlayerServerRpc(Owner, _playerData.Value);
}
else
{
Debug.LogError(
$"Failed to register player. GameManager null: {gameManager == null}, PlayerData null: {_playerData.Value == null}");
}
}
public GameObject GetPlayerGo()
{
return playerGo;
}
public GamePlayer GetPlayerData()
{
return _playerData.Value;
}
public static PlayerManager GetPlayerManager(int clientId)
{
return _playerManagers[clientId];
}
public Camera GetPlayerCamera()
{
return playerCamera;
}
/*private IEnumerator WaitForClientActiveAndRegister()
{
while (!IsClientInitialized && !IsClientStarted)
{
Debug.Log("Waiting for client to be initialized");
yield return null;
@ -80,10 +174,10 @@ namespace Managers
if (Owner == null) Debug.LogError("OwnerConnection not found");
if (gameManager == null) gameManager = FindObjectOfType<GameManager>();
Debug.Log("GameManager should be found");
GameManager.Instance.RegisterPlayerServerRpc(Owner, _playerData.Value);
}
gameManager.RegisterPlayerServerRpc(Owner, _playerData.Value);
}*/
public override void OnStartClient()
/*public override void OnStartClient()
{
base.OnStartClient();
@ -124,7 +218,7 @@ namespace Managers
if (Owner == null) Debug.LogError("OwnerConnection not found");
StartCoroutine(WaitForClientActiveAndRegister());
// gameManager.RegisterPlayerServerRpc(Owner, this);
// gameManager.RegisterPlayerServerRpc(Owner, _playerData.Value);
// gameManager.AddPlayer(this);
LocalPlayerManager.Instance = this;
}
@ -134,16 +228,16 @@ namespace Managers
gameObject.GetComponent<PlayerManager>().enabled = false;
gameObject.GetComponent<PlayerController>().enabled = false;
}
}
}*/
// should only run on the server, NOT clients
[ServerRpc]
public void InitializeManager()
{
inventoryManager = playerGo.AddComponent<InventoryManager>();
/*inventoryManager = playerGo.AddComponent<InventoryManager>();
toolbarManager = playerGo.AddComponent<ToolbarManager>();
equipmentManager = playerGo.AddComponent<EquipmentManager>();
equipmentManager = playerGo.AddComponent<EquipmentManager>();*/
inventoryManager.Initialize(_playerData.Value);
toolbarManager.Initialize(_playerData.Value);
@ -240,10 +334,6 @@ namespace Managers
// inventoryManager.AddItemToOpenSlot(item);
}
public GamePlayer GetPlayerData()
{
return _playerData.Value;
}
[ServerRpc]
public void SetPlayerData(GamePlayer pd)

View File

@ -57,7 +57,7 @@ public class PlayerController : NetworkBehaviour
ReadPermission = ReadPermission.Observers
});
[SerializeField] private GamePlayer player;
[SerializeField] private GamePlayer _player;
private void Awake()
{
@ -69,12 +69,15 @@ public class PlayerController : NetworkBehaviour
if (IsServerInitialized) _serverPosition.Value = transform.position;
if (playerManager == null) playerManager = GetComponent<PlayerManager>();
_player = playerManager.GetPlayerData();
}
// Update is called once per frame
private void Update()
{
if (!IsOwner) return;
if (_player == null) _player = playerManager.GetPlayerData();
if (_player == null) return;
var moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
moveInput.Normalize();
@ -203,15 +206,15 @@ public class PlayerController : NetworkBehaviour
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Enemy") && !player.IsKnockedBack)
if (collision.gameObject.CompareTag("Enemy") && !_player.IsKnockedBack)
{
// healthCount--;
// Calculate the knockback direction
player.KnockbackDirection = (transform.position - collision.transform.position).normalized;
_player.KnockbackDirection = (transform.position - collision.transform.position).normalized;
// Set the knockback flag
player.IsKnockedBack = true;
_player.IsKnockedBack = true;
}
}
@ -219,7 +222,7 @@ public class PlayerController : NetworkBehaviour
private void MovePlayerServerRpc(Vector2 moveInput)
{
// _serverVelocity.Value = moveInput * moveSpeed;
// rb2d.velocity = moveInput * moveSpeed;
// rb2d.velocity = moveInput * _player.MoveSpeed;
// _serverPosition.Value = rb2d.position + rb2d.velocity * Time.deltaTime;
// transform.position = rb2d.position + rb2d.velocity * Time.deltaTime;
SyncMovementObserversRpc(moveInput);
@ -244,30 +247,30 @@ public class PlayerController : NetworkBehaviour
faceL.SetActive(false);
faceD.SetActive(false);
faceU.SetActive(false);
player.MovingDown = false;
player.MovingLeft = false;
player.MovingRight = false;
player.MovingUp = false;
_player.MovingDown = false;
_player.MovingLeft = false;
_player.MovingRight = false;
_player.MovingUp = false;
switch (activeDir)
{
case "right":
player.MovingRight = true;
_player.MovingRight = true;
faceR.SetActive(true);
playerAnimations.Play("walkR");
break;
case "down":
player.MovingDown = true;
_player.MovingDown = true;
faceD.SetActive(true);
playerAnimations.Play("walkD");
break;
case "up":
player.MovingUp = true;
_player.MovingUp = true;
faceU.SetActive(true);
playerAnimations.Play("walkU");
break;
case "left":
player.MovingLeft = true;
_player.MovingLeft = true;
faceL.SetActive(true);
playerAnimations.Play("walkL");
break;
@ -511,13 +514,17 @@ public PlayerData GetPlayerData()
[ObserversRpc]
private void SyncMovementObserversRpc(Vector2 moveInput)
{
Debug.Log("Syncing movement...");
// Debug.Log("Syncing movement...");
// if (IsOwner) return;
rb2d.velocity = moveInput * player.MoveSpeed;
// Updates non-owned clients
transform.position += (Vector3)(moveInput * (player.MoveSpeed * Time.deltaTime));
// rb2d.velocity = player.moveInput * player.moveSpeed;
if (_player == null)
{
Debug.LogError("Player is null");
return;
}
// rb2d.velocity = moveInput * _player.MoveSpeed;
transform.position += (Vector3)(moveInput * (_player.MoveSpeed * Time.deltaTime));
}
/*[ServerRpc]

View File

@ -1,19 +1,26 @@
using System.Collections;
using System.Collections.Generic;
using FishNet;
using FishNet.Connection;
using FishNet.Managing.Scened;
using FishNet.Object;
using Managers;
using UnityEngine;
using UnityEngine.EventSystems;
public class SceneLoader : NetworkBehaviour, IPointerClickHandler
{
[SerializeField] private string sceneName;
[SerializeField] public bool SceneStack;
[SerializeField] private Vector3 spawnPosition;
private static Dictionary<int, string> playerScenes = new Dictionary<int, string>();
private int _stackedSceneHandle;
private void Awake()
{
}
private void Start()
{
InstanceFinder.SceneManager.OnLoadEnd += SceneManager_OnLoadEnd;
@ -29,22 +36,34 @@ public class SceneLoader : NetworkBehaviour, IPointerClickHandler
private void OnTriggerEnter(Collider other)
{
var nob = other.GetComponent<NetworkObject>();
if (nob != null && nob.IsOwner) LoadScene(nob);
// Debug.Log("Player with clientID " + other.gameObject.GetInstanceID() + " entered trigger");
var otherConnection = other.GetComponent<NetworkObject>().Owner;
Debug.Log("Player with clientID " + otherConnection.ClientId + " entered trigger");
if (nob != null)
{
LoadScene(InstanceFinder.ClientManager.Connection.ClientId);
}
}
public void OnPointerClick(PointerEventData eventData)
{
/*if (!IsOwner)
{
Debug.Log("Not local player owner, not loading scene");
return;
}*/
Debug.Log("Clicked scene loader");
var nob = eventData.pointerCurrentRaycast.gameObject.GetComponent<NetworkObject>();
if (nob != null) LoadScene(nob);
var clientId = InstanceFinder.ClientManager.Connection.ClientId;
Debug.Log("Player with clientID " + clientId + " clicked scene loader");
LoadSceneServerRpc(clientId);
}
private void SceneManager_OnLoadEnd(SceneLoadEndEventArgs data)
{
if (!data.QueueData.AsServer)
return;
if (!SceneStack)
return;
if (_stackedSceneHandle != 0)
return;
@ -53,45 +72,97 @@ public class SceneLoader : NetworkBehaviour, IPointerClickHandler
}
private void LoadScene(NetworkObject nob)
[ServerRpc(RequireOwnership = false)]
private void LoadSceneServerRpc(int clientId)
{
Debug.Log("Loading scene");
var sceneLoadData = new SceneLoadData(SceneLookupData.CreateData(sceneName));
sceneLoadData.ReplaceScenes = ReplaceOption.None;
sceneLoadData.Options.AllowStacking = true;
sceneLoadData.ReplaceScenes = ReplaceOption.All;
sceneLoadData.Options.AllowStacking = false;
var connection = nob.Owner;
InstanceFinder.SceneManager.LoadConnectionScenes(nob.Owner, sceneLoadData);
MovePlayerToSpawnPositionServerRpc(connection);
// move player to spawn position
}
[ServerRpc(RequireOwnership = false)]
private void MovePlayerToSpawnPositionServerRpc(NetworkConnection connection)
{
Debug.Log("Moving player to spawn position (SERVERRPC)");
StartCoroutine(MovePlayerToSpawnPosition(connection));
}
private IEnumerator MovePlayerToSpawnPosition(NetworkConnection connection)
{
// yield return new WaitForEndOfFrame();
yield return new WaitForSeconds(0.5f);
InstanceFinder.SceneManager.LoadConnectionScenes(InstanceFinder.ClientManager.Connection, sceneLoadData);
// Debug.Log("Moving player to spawn position for clientId" + clientId);
// MovePlayerToSpawnPositionServerRpc(clientId);
// StartCoroutine(MovePlayerToSpawnPosition(clientId));
var player = PlayerManager.GetPlayerManager(clientId).GetPlayerGo();
var playerCamera = PlayerManager.GetPlayerManager(clientId).GetPlayerCamera();
// get players network object
var player = connection.FirstObject;
if (player != null)
if (player == null)
{
Debug.Log("Moving player to spawn position");
player.transform.position = spawnPosition;
UpdatePlayerPositionObserversRpc(player.ObjectId, spawnPosition);
Debug.LogError("Player is null, can not move player to spawn position");
return;
}
Debug.Log("Moving player to spawn position: " + spawnPosition);
player.transform.position = spawnPosition;
playerCamera.gameObject.SetActive(true);
// if (Camera.main != null) Camera.main.gameObject.SetActive(false);
// playerCamera.gameObject.SetActive(true);
UpdatePlayerPositionObserversRpc(player.gameObject.GetInstanceID(), spawnPosition);
// SetupPlayerCameraObserversRpc(clientId);
}
[ObserversRpc]
private void SetupPlayerCameraObserversRpc(int clientId)
{
var playerManager = PlayerManager.GetPlayerManager(clientId);
if (playerManager == null) return;
var playerGo = playerManager.GetPlayerGo();
if (playerGo == null) return;
var camera = playerGo.GetComponentInChildren<Camera>();
if (camera == null) return;
// enable camera only for the local playerf
if (playerManager.IsOwner)
{
camera.enabled = true;
Camera.main.gameObject.SetActive(false);
camera.tag = "MainCamera";
}
else
{
camera.enabled = false;
}
playerManager.SetupCamera();
}
// [ServerRpc(RequireOwnership = false)]
// private void MovePlayerToSpawnPositionServerRpc(int clientId)
// {
// Debug.Log("Preparing to move player to spawn position (SERVERRPC) for clientId " + clientId);
// StartCoroutine(MovePlayerToSpawnPosition(clientId));
// }
// private IEnumerator MovePlayerToSpawnPosition(int clientId)
// {
// // yield return new WaitForEndOfFrame();
// // wait until the scence is finished loading
// // yield return new WaitUntil(() => InstanceFinder.SceneManager
// yield return new WaitForSeconds(0.5f); // Wait a short time to ensure everything is set up
//
// var player = PlayerManager.GetPlayerManager(clientId).GetPlayerGo();
// // get players network object
//
// if (player == null)
// {
// Debug.LogError("Player is null, can not move player to spawn position");
// yield return null;
// }
//
// if (player != null)
// {
// Debug.Log("Moving player to spawn position: " + spawnPosition);
// player.transform.position = spawnPosition;
//
// UpdatePlayerPositionObserversRpc(player.gameObject.GetInstanceID(), spawnPosition);
// }
// }
// Get all scenes loaded for this connection
[ServerRpc(RequireOwnership = false)]
private void UnloadPreviousSceneServerRpc(NetworkConnection connection, string newSceneName)

View File

@ -89,6 +89,8 @@ namespace Types
Magic = gamePlayerData.magic;
Sanity = gamePlayerData.sanity;
MaxSanity = gamePlayerData.maxSanity;
MoveSpeed = gamePlayerData.moveSpeed;
EquipmentSlots = gamePlayerData.EquipmentSlots;
@ -97,10 +99,6 @@ namespace Types
ToolbarSlots = gamePlayerData.ToolbarSlots;
}
public GamePlayer(Dictionary<int, GameSlot> toolbarSlots)
{
ToolbarSlots = toolbarSlots;
}
/*public void OnEnable()
{

View File

@ -37,6 +37,10 @@ namespace Types.UI
IsLocked = false;
}
public GameSlot(GameSlot slotValue)
{
}
public SlotType GetSlotType()
{
return SlotType;

View File

@ -107,7 +107,7 @@
"url": "https://packages.unity.com"
},
"com.unity.burst": {
"version": "1.8.16",
"version": "1.8.15",
"depth": 1,
"source": "registry",
"dependencies": {

View File

@ -1,2 +1,2 @@
m_EditorVersion: 2022.3.36f1
m_EditorVersionWithRevision: 2022.3.36f1 (95a4219250e5)
m_EditorVersion: 2022.3.31f1
m_EditorVersionWithRevision: 2022.3.31f1 (4ede2d13e8b4)