From 410ffd50277c7a20afd1f9440ff600562a011f39 Mon Sep 17 00:00:00 2001 From: Nicole Collings <100Toby1@gmail.com> Date: Wed, 11 Mar 2020 22:56:09 -0700 Subject: [PATCH] New layering --- .../{ground_dirt.png => ground_cave.png} | Bin .../{ground_dirt.xcf => ground_cave.xcf} | Bin res/tileset/wall_dungeon.png | Bin 0 -> 4821 bytes res/tileset/wall_dungeon.xcf | Bin 0 -> 23690 bytes res/tileset/wall_stone.png | Bin 3193 -> 0 bytes res/tileset/wall_stone.xcf | Bin 36163 -> 0 bytes res/tileset/wall_wood.png | Bin 3156 -> 4878 bytes res/tileset/wall_wood.xcf | Bin 56446 -> 76817 bytes res/token/cloaked_person.png | Bin 1125 -> 1106 bytes res/token/dragonfolk_1.png | Bin 1474 -> 1471 bytes res/token/dragonfolk_3.png | Bin 1329 -> 1328 bytes res/token/dragonfolk_knight_1.png | Bin 1926 -> 1932 bytes res/token/dragonfolk_knight_2.png | Bin 1847 -> 1897 bytes res/token/rockfriend_4.png | Bin 952 -> 965 bytes src/HistoryElement.ts | 8 +- src/Tilemap.ts | 299 ++++++----- src/TilesetCanvas.ts | 20 +- src/UIView.ts | 3 - src/data/TILESETS.ts | 16 + src/manip/ArchitectMode.ts | 17 +- src/scene/LoadScene.ts | 9 +- src/scene/MainScene.ts | 17 - src/ui/UITileSidebar.ts | 18 +- tool.js | 483 ++++++++++-------- 24 files changed, 492 insertions(+), 398 deletions(-) rename res/tileset/{ground_dirt.png => ground_cave.png} (100%) rename res/tileset/{ground_dirt.xcf => ground_cave.xcf} (100%) create mode 100644 res/tileset/wall_dungeon.png create mode 100644 res/tileset/wall_dungeon.xcf delete mode 100644 res/tileset/wall_stone.png delete mode 100644 res/tileset/wall_stone.xcf create mode 100644 src/data/TILESETS.ts diff --git a/res/tileset/ground_dirt.png b/res/tileset/ground_cave.png similarity index 100% rename from res/tileset/ground_dirt.png rename to res/tileset/ground_cave.png diff --git a/res/tileset/ground_dirt.xcf b/res/tileset/ground_cave.xcf similarity index 100% rename from res/tileset/ground_dirt.xcf rename to res/tileset/ground_cave.xcf diff --git a/res/tileset/wall_dungeon.png b/res/tileset/wall_dungeon.png new file mode 100644 index 0000000000000000000000000000000000000000..ff157c1f8e7c95a513445a4df3e7ba0aa56f25fb GIT binary patch literal 4821 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 literal 0 HcmV?d00001 diff --git a/res/tileset/wall_dungeon.xcf b/res/tileset/wall_dungeon.xcf new file mode 100644 index 0000000000000000000000000000000000000000..b5430bd09fc8156d0bff336d1aab280b4fda450a GIT binary patch literal 23690 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 diff --git a/res/tileset/wall_stone.xcf b/res/tileset/wall_stone.xcf deleted file mode 100644 index 3005724995f5669045a30b04283e40c5969a28e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36163 zcmeI5TW@67mEX@fMY72z+bxYOHJf5ut&CblvFX03X;LV=JE^AaO5jX!C_;%`pi0n4 z6kYU17c-&>7@>_22?mn{eh87L0rC(aFB8Xk@h8Yj9+C$m4iI3H7aIry7!KlAU+T*I z{%h}j&Z#1s>Wd9WfC$vt_r2F%YwcBgT~2YM@tyb2fB)@w&%fLF_IkwMkNLc>41Z7Z ziDMp5@fp2IlRo@?p3e|%ACNxd@{#&IOw$M=q-neT1we0%-;_ul(<a%HCLbkw@HfH-8bt?uMt$Bo`#ecBoy(uh<;QdR ziCq3vE`OT5<_&)*$Y?$N1^)OGSJX3k&*uZ+^iBSPjr~hL|GK{|`S-9=CyHLEN704< z7DWq;{hIO7<)}GTER`yyVq6@mbW6qPQq(P$DoLeNA}NHbQe`9F=&V$VmAH~@bSvr? zSK^K43PXLP4Q^L9sESLSsZwbrS?QLhY{r#RQtB3`c(zwcR@a-NS6qyzdc{(K%;l(E znJN~eQq-x?;Y&>4D=OLOm9nI>v7!=PO3~S<=^0UcKhe*8 z@l*@O^oPx3MTqm+Lh%-jB_?sblHy%g&L2qMw?7erbZAMfZ?4>ba@(BXK9pw_ZCX~K z1{<<59Bp57tHOcU(79%E^?(d{vV`(owKK;Cki;9eU4JXb6}T)X7Mg=(%PO2)sN7rG zU`-q2Yg&|w19BuKtw|MMDwJB4m15epP-;_@v`Hidpfe~BBvBLym}myk$#%(&MqP3yuVx}xIg#WVjhaF=+)7<(BhgVDO>+Zv@kST9 z#*CaxNjL_RgAjHU5wxW-jwH0AW=vv_19{S?YC#0L9z~$kXm+6U*_Q(cu2q5E2 ztDV_ubu-!QR%dO-&1zEZmS%ajH>+0Ho23^Z&-O~yLN#7Q@UP9XF9iP@9gz5Ipo(O# zSIv^n-lj@)sY>wAPS4IR#*6Xn$J4WmiBom~_=F1BYY zi?fnjEJhE&T$}&gye&y(b!}Fa)iqTDKvg~W)-+eAy0rIkaC4#?-(5bGKv~-E-nWoy)(n{t>=i}E3^TMDS77_fV z*)^+Wj+i+B9Z{bHol+^lY;6LT9SAlAze@A3y*7U`)ZDFZTFvDA*u0?>QD5zOOlSxt z2b{ss1*!U`nynhHSRS+pj|lf!NCBTDuurSHC{Cjp0#;aqFJb9OF}Hv+1vwY z_)3&EzG|&4?t!!vsqrSfxL4R~dmd|URu_fUw8Op4s`zZPkKri50UrCabQtoiM{jjE z2!(aF1b@JN>`Y8pSVZs(>tZlAX?*rctk`C+ixT`LIBanij`WNuzMt-AzIe8k9k!0J z&p29>HB(|`jQZ&LrZFXbLIY%+g@AjM|oD!h8UYrgALgj zj<&D4wZ?(i)46s>og=)MCrc>bRXcO+0ZF`f+x53{yat!$#6okBY*~eq3v2f__gK@$ z_?i}_(tsRENo!KYmkQO^+GZ*3TBx=uO4@MuG&(1XLxJSVehl@IJcfAd_1m;;5(&Xy zYR;}%9>HH~k%x&8)0{x%5d7p!UP+*{dlT|aaW~vbU3D+fQAF_j+(2Et*F~-|Bj-{Q z4uMThLQY2!L0d()|4 zc9NZLZNX;TsU@}U(gM%+PR;6i3-pSY;)UK)tx${02>!;x(vk#!gAPdiMsG>Uey^4# zo&6n^=u(s5Uzk}~D97b^;p3TwGI#Ov!pzKq1V4L{Xjv$$I$n*--G%aMLfT$fEiXtm zu^2r7vvKotH*HBOYmEg})*7k=fSP*lH#AqLw!eRK=w|cHtv7GJId?O;X@DVu1Yg>m zyg3pYI*onb&|qBhW^azfDiQoOgifuoq@|abo@r`5Ev@9{=*{@e!cAdN4P^xX(n7;( znImQnKu6T)K&P}6V74{^%MJt^f?uVZZ@zi+WT?4Y+p(Itn`1W(rSMm+=P{unlpJsd zLl>k1F!VEAu{>xI9ue*fkODqQV4qg4ECdR

{CTzO{K)qFJb9OF}Hv+1UqZ_)3&E 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 D+&V`L diff --git a/res/tileset/wall_wood.png b/res/tileset/wall_wood.png index 0ad0e4239dc839036ed24c1e27e987ba4b627735..35a7c01f28cc36ce9741efa53895bf931a2d6d9f 100644 GIT binary patch delta 4804 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 XmaB!2f^F{~00000NkvXXu0mjfX0+iK delta 1020 zcmVNFYuIu+KUG2$$vo!BGiINZ^ersQYi}xiXj0*A}mHo4sk*7 zGCjC6&aN}F6X>xY1eV!+Z{K|L{dhwlv7t;}wv5)zAxuo>Z|WP7fepuV06>Gkp?^%C znvn7Q5%e|jkIKLrj!gy7pwZUNA<>a(I5q%qjCQy4`ln1@=`W2CBh&777_jeoIG%%U zry`k#W252Ni1iO3);|CMu&kukKO$RfcRO(1I?5Z9XgId-S!ZING#ne{jY%Uv<&g#L zZfytU%_aT}lJSRMVzcQc01yClVt@2Aet!Cj^5zl>>*rvR?ipJF=x1rWTQf+;!^!fQPH^{2hB{?^L!pm&0*20RUuWbqfzy-!VSF&!gkIb?B0s zsH!Y@4Bkf=aiSu#T`FQ_bqfIKaW(PA*RqmYQbbqsY)1?T0Al?EXgIbMaDQ>`wf}6F ziWr~Y=YCW1697QX&1)kSm6d$TV%3uO9TNjZJTL7>dq*}Wby2zH8%SA)*e(?T04u9o zXm@AAbBN^+bKWi$1!6B`Wb2BgCcEVW-}*)6mXp*SSu~K;1nC@QjzJUGb&1K68USr~ zJ1-IO2p(4x=1DE&0tJBI&VLNwk!2;Z5oh;<0Dxxe$@ibr%c=<}--Z%H?>LsupC|y|M5p#V zMocvgYa^+?>o>&0HWZZsJ-^Qp*+3l1uEJdwdpE)?bOnpF@GN&sQ`uwM~Oic z(o-tXgwCx549Hg>4x98k4B50-k`YRn8l=%1GOk>SX*3Wy> zLm~n8%p_=-$&P`Mxm(-e>Os|uB4J>n9yTp^)dj&s)?W(q$|?)$A>9ShsPx4=6t&e<{KP01Bf7B5$~{cvvm<2~qA+84yX6C= zgdvi|q`~8g^$+;Sg=reG<9qkCP%W)&jH$kBQgh)W)e9L9gJ}sgo;N_pD7r+W_^9Gz zlmvmSvWzyCF0000J*VLwT(1=2$gQ3|E4uBva=4^Em(5hRiPb0v(?4D)2@E;-f1_G3@hf4AxUQA;26!; za4Z1axb-x2$z={vZowkn0k+*k%N}U3mOX%N_lzJJ71tPb>g%QEag1l%J%6mOZ9|Aa z#vH0s9~l*QfGm2id#uWdB;CcSe(`QHigF?uC^bhuH9)g9(0`ZSo`h}pF!AZ>f>^PJOKRPEk%IvECb!;@>7xV!25s{KhA@H3^TR zYGt~k$Lt8v1I)}MT%cAu>stSv!-|UxE5KuUoGCcrecRqj zXNi?yrDQN@kV@X=^VT=1l%o)BEfO~O&NP;*Fjg8hg>;tI?NcC;#D5=)Lx6`*Ca^r; z0rr!jWB}mT$v@>}X?eb*$Cvk~hKaruL$Nv}GgK!MTo_p?x^jZl)gj;Z%kzr?uO>rx zT5iFTq$qVYiuTKM7uKERxPIST*HlpX-#9pSNq#3e4!IjH(^NT^WPw$$CgEF^u-3sH z|3c2;EMyV9Bq=>1FMn2;!YT|*)|5)4rbhW8>3L-JHep?+b$E%YjEd_kw_vd?F)a;D zuE8Opu_}$48dd4N+g{ErG%ll(L9LOF)1(l2Ysf!&F6=1ydk$A>ZjPJ} z-sUQH6@B;BTR6Di^x-*%&V^&jAyrNcTLhakzPw~YI=w5{B{I&&!Lju0t~?v_?hx5f zr9(8hMV$*9IGlUL^4BSXN~7jYOfMM#xNwb$Bv#)a zlKb|X`$Exx!pLOU9m;`h0?~p=uK+!I!1XF+7TZa?^&I5 z!&{vhmt80TtW0-&ClBAr)wX+pv&%fWqupYm?KfyUhkq4V>8z@^BUD-<6swAO1vFM7 zsgpmWfZZei{|JnA2mt8H36|$O_<4Uy6Jc^e4N@K!=4QwB@tOb0@WHz;w0nH`WCD+V z`EB%3S~^CPsmiFh3Tuv%l-xn>*Z%hmelm~ b|26&wBsX|jadXfL00000NkvXXu0mjf+yR+> delta 1372 zcmV-i1*7`E3&IPKQwRzd7BxCvt$~qSD1RzRL_t(o!^K!lYa3S-Jx^a_kJ3PCtcemR0hWy6>Xq#?k5a@u=6A7e4CsL&){T8JX^CW`s_6B)```PQ!5qn7;Qt4*xpC zAHV;IX1gV-Uwp;|Lcwkoibha1Gs5Pni(ORHGIHUuIQ_QjlHHM<2}7x$7?v$4&;K@ zw!M`r5@&)lr3M3sWl5vfy;dg#A)a zc1%=p@1&2glRgqV=_9=N={|PSN4RnQ5Dmjb!!TK;X|+US+0hCkXNs`VIta|*$Zm@rgne&*CC zuHtoitm7tTh-*MiX@AX)`$X^(q)07b6(=gYVfI4;s=C7Z5#@(e&%^4i!@2C}2oeI^EKFk`bc}MaUN}P?PAI9^B*&;80HkBo0ji#AW$O)Q*KVR-PJha^3Jz&}Sh!>4@xg9U zoja`5JRrFq0>hO%i=O=S5q2MU#;`nRDS~ySt06f)*qreZBoi{}eZek~F_w3a)d4$J zXR%<1r~_4Xh#I#@p3B5)iGpN^r~AUX+(oRCQ)dcAx;Hr=Ixc>No>HF=^^kv0JRU<9`NiW3MS}DpI{n{C*~U&0v_a z@CyRiJkb9?pmmG@q)X(CEDd@S-6Cg+Te@CON~d_^`XN*o8D?Q39iz@z6+}uz4M%JH=hd1uZVMWx*{7c21Oq e{jb;m@9__FpnNPmf@8P<00000QwR(NHZhWZW%!X>D1VqqL_t(o!^K!JXd6iseWMsc2n1b|;))?B9ZE=vd0s9@tJ%QjR$KlgMoz;i*Z|l34LCHS zWFY~dSd{2>utRJ9My?XAW`j==0NUJYE38(tVLqeA0{;<<5*!-g&-VkhD?Z-5sH=Nf zWVjL%V{@ym@c!!mjQxW{j4dh)3x6niu8-Tdu2^4sa(aPIH_)V(Axa~|*M9fMFW5gg zObvNK0_(-*VTi2+v}-h92zMVcv$$llhX?T!2ZEuX2^LCQL$VjSpogy zb3C6wfjys0=WHVuC57S8NQFkOlX(5(b6~lRSd^p)l$k?Q$w5w~F5)Ppoqx(JRFiu< zKfXd7g)>!Qj_T8wN(}(`@MKrpNF0UmTwh^yx*(1zSPqcq`sj3nX_;5*h@%irrLKVF zoJop>Tidbc`sg2@BaXtE-1S^vt>I~~VB4irsiS)LDuB8I)8?S>YCP{<} zF0FE{WnV1UNGj3k25M(U{8boi`IHtuQ>ofYdNDYMdw z_Lli4&}bG(ewp3Nd%uz@9^A={Pb7|mv# zbp9EfG*Z@HHjiU0mTNQ8^Ern`;?0XXJ$i5-HrKeh)uv*(Cd?389iwa?rfWPoz2Mzj z1528#c0?pOM~@!d$KT)oG=rBIIt|BGWg?D3^pDS#Ig^)3hJPz#lHo(TM2RDvs1eRt zLd9}TYpC2%^Gt*6n{taeYuk982Q!d2Hb`!FkZH%zv2EmjzZ-^<(%m}t&WkKdoH)^+G!n| zI|WwKWH`mlMr%EXr1M){oFM#dd2ai_zg}+Nx}pw38N&Jxzbg0m?$b5&-w*OXrMY9Y z8LFgf=l$D-R~e4pKGPhdbdldeNOOA}Y;d-eNrIZ5raU78U+eAf;gy9&><(Ef}yxXhl(89 zu##$m@S%s4QV}r1CFb{_`J>s<-<1M|eprxpcHX{u|Ihrl3RbM&$^ihL|K5cZ^MA(U zB9$qa-=jf0@;N2EkN_Z1>Cjk~hS>6V@VI_Jnv`1PimG?lT(Z$6n|C%D0xL6pM3P5_|miUD>Pg6kldUiiHtq({Xc%h z@yTgyx)Tg&0wk+QiGf^Gvq$$({Z zB?JhAj0SC!?q;iQu)Ly=PXAJ4grnK2!z=pAEBfS;N=hru=1Rz~ECDDPz|cLJl=6x` zlOiUU%}p0H83%El+F4<|gnxZ(T7*`HJK@}TLYs(+mP{!zELT^vSjAi zrQv2p-1ezVfmn%Vt8P|j*MOZ0sh)KDNK&0K^m~bqiO7_V25l7p#C7w diff --git a/res/token/dragonfolk_knight_1.png b/res/token/dragonfolk_knight_1.png index 8dad913cc045ba115c746612f60bc1e5480d6c77..df54eec59a0e052ad255a00df32f25a4cfe1cdb7 100644 GIT binary patch delta 1834 zcmV+_2i5q74~!3xQwR(NHz$9w;pmZDD1Y=xL_t(o!_Am&NE}BP$NzJh$X-4qkZ6&D z6!TUvFKE=9l_SxHK&zaIAx)8L5i|+0_)>+dsD!i$Dm8c>^=OU7Ru7>~y&8M5q=-og za#5oalM5j>YVQo&51$F6#$^>KGte~`Vd8DI;kv5(QmUkap6L$LO5$~ zx{QYSO*q^4nmwX|IE5V@GnSSbi0NX%ztifIPcT6)K~yzn40(=08kJ|6@%;g38p3n;ik)e zhHg0Ta{;m)I%v7VZPfJ>`F<1LDM`WckJ>d?L8qnian+cg7$)#>)tKLNd8z%Li8c!2 zD8|MYA$=Uq#c0KnLeSq6GXQ`}Ul7K|7m@pTmiOg8p2gVsA}W1Bikao?Nq>NwE^|?X zmMge;>?9Y%-WwZV1OQ}y?pZgmb%CPY>s`XQcZC}p_pZR}UD7lbMK&`r)J>PU81^2s z=k+e(L-e?2sbXRv8H{xF@L>vom_ip6o+1EHlAhz|y62PEamM-^ zsxyiJ0O83=C@;>2XKotJjUA$==w$b8!j^5@z9`!Ba7bY*JUIzjIe#WJH+Eol{tap> za^abqhSlmoWN$AD;wb9+2^yceNU$J`8#1@nV%U?2h^^aEf3q0?aQSKzE?;c|0Mu6( zBhP%5syDyH{n6-oIE2!$)g}93-!T9{d2u#>x27W3Z<$vEURsMGCWINP%qW7nwHD5Y zeE@(15j(k%N#6`Q4Sz`}?`Y%Ra*YfiVfP_!hXp_Ot-jM~NJ3Ui1M{q(ch2?&A&RVe zTqkA?ix<`oMC{~Z0ASKLgCWx?M0d2I<@jmEEQQP?_7FWw0CXCX5Z%#+KTn?r0F-=n zO(BMD2P_tKs?6estX2nxJ6B)MiK4`86o1F(=cj{ZnAX0gQyC+o zvDE$X3J(E5bVnN=E$VRO`nQ^*!jqHuwcdD^iRv9&r=Fo?FhVjIX?}h>Jaf~$Z+89- zE?;eeXKtDsS7jRj!0}y;;=|&24bt!{A4H3HVGS;w--O2->T?SdqZrK-M0hUT5q=}YN}%!+(s>?u#5v)ATnevv*?n7 z2-YJ`Ee}!EvIOk6*_`WT8VzJiO_TuzF=K&<5r9aHbR#b^GHj{6NM(xTS0GWrYIt|k zWlT*Bu1kzDg=I)fjl~V;eX3?7VL8azzSs1RpHCpu6@LvzqsE@g%oferlR(rWo&-FR$dy}+Ln70mCVet5i{8?)!YIHNVc5aoj9m;vM7k8kbo?Xn zXNmixp+%!2i3+0lQs~mpl>`iCv95{tYR?qJQH2-)n0@397-Nh?nJ711=1im$H!-GI zG8hT-gnw9Y?IC(d2BTuD*tRbUb^U(Z3N?i;Kr$GSS#*i0C)u!f3-{L8_#&qa1;V=N zvW%V*0MPoI&B#m1QhdeSS_`Yyu~BwWQ|JOLkw*yt`irXzF|S@?v`g-dO~k8r-^Y%( zgK^DLC4`Dn5EX^h%Mew6vsqEkShcoV9T@F;$$tg7=`tfmx=Mc%5D6-h;ljPUyrlHV zC~I!5<@Im|pm^$9%d+s~Bvkr>P#U&^yp$~DrDVY~H;ss`+qoEqAq)5Jau};|G%5-t ziw#y-+4$116_kdpV6yu*B!dy*$w_E#>_B;Ow!$G?P{{B#NCqP+eL?tSX&$9vE2z#W zLVsRL7U!b;{B%@j6mjDsJIi|*sq_V*AdVukx7UxOSS&IoDlg8)km(e%a!hM!FBZs} zid;wrBR_30VZVRzje?8RWU0l-q9`^|c5)HHO{7W9bJ<&eH32&S`-@$x4}8D}Ri9zl z^9*;|A3!n~iT&PPs`bx>%+{pR7eq_32!B&3U;%LS#6jT1LELG7fML%w4f@n+@6=y^ z`kr_;W9KkGa&(Oh5VaUJc?v|RcwgjnEt=HHlt-2htQ}9Lc4aGqm<6Z2_8S&e*T?`| zBLjr(Sz@MItqz43MfhdAUU(pPe35rQ@7;ILd^+uw^)c=A^g7gzZYx& Y0uf-({|K|oQ~&?~07*qoM6N<$f^wK@`v3p{ delta 1828 zcmV+<2iy3J4~7qrQwRzd7AY=Y@y?N3D1YurL_t(o!_Aj}NS)Ui$3N$4BG(KWXm!XS z4BMm|wrPzuy)L^fx{|RZ+@^-KBP5o9CZi62Ou)W*c-o4qAk( zHYrzV-@S>Gx4*GGcM_JYjJEz7X{9XXOgJ)s7Zx+!*JF9;_IO2CN-FiK>nT>B znoL(pDsGS0j85UHYRmSoO@CjtM5O)2Ekq(w+%>=D>tny-<10+sJ^`RBC6$^>%>)A7Y)wtJEZJQD4YI^$sV93$ z#ru5q zLc+|U!HF?p{AF-rj33q(@%?H)+n#xr)@z-#Uh4$l%m)|f>>179nP?%s*nx zcbM$pRW9y3!jGUuK$LaFHXWkQzIhY@gbZ5Z2I-rZDk;HXh<|)-p{)qE=nyLA|8Yp z%O`b*RO`R!7aIbaGN{g_joPk?(lHxY3989NqFQ$MFjKlqe$@(h{MJf_#f=1!y|$DJIeZ4Pfg_S(YmgAk}im zj*Ud3w7&)zP5+2zxQLF`%W_F{pYkau?v#AuvUXxT7R!~T8fSm68kIvE}OKg^Fu;qqK zqz+dXGS2>@=57b`A4M)TXaedZ38X14V=v7ufd9v*-i>uyktx zMTSk?9YWPF9k!GsOScA0Xq)T5f!pIHqadHojv#eaCv5f16qGW49=FF!!+a9QqEDzz zUw@_XXeFfwiWm>yXFPo0d5($AzZ)65JjyYTGMee|`TC77Wo7-3du`QOZemNzj=pJ9w49ANhIQt26-L{^tdF z4!XX2VeP>@{Pf%}7!Tj)X3w3qE7Gk2X@5dp3|2IdBWqd4mj-@VgS?WAE-oe^lO|xO7}}!PZE&{{C9ASUpma_ej6h96ihzfy1Utbq zDZ<3f)Jl;i78cEYaoirb5WAx0ho)o}fC#4xNPv|YCqrCrzXDKbu;&eH1x*U4Z8d6)JXG9Bjx9B(LUX#ym z&b>ykd)km4t0pobci9)ShJQeU-P82-)=G^a)4Hmug?za}tN78&`ZLc|@ad;ZOkA5K z5bzN>+CpD%trQCMj1Y;$NR6G<0DK)GV&}r@HaA2(H9o{*I!ds6+UVNu1)wkZl?Lc) zpc+8P*H)0af8M^pp~xSJ9Bl!htfGNqU9Du+R~a3St7n+LwiMN>c7N=brmo++V$dq9 zXrQ^Rj?v*bYxf@!KJF*8zDgt#gFBPV#FNz2xkx3KwGx2q_pWGFJN8SVK+gyZneVgf z@h1omBmg*h`aCC3p9f&zR2QAUI&BC-H8C|l1i;UKoy*Lzu2wlWeB8g~GMA`=Ldf0N zLZD}a#LYhgP`PWjG=FmY^DLM5RdXyJmDx%qmkp=$X3cz)fm2;v-d9cY*!v>0MYAIf z2|@EN5=KP3{dt!8x(4>dqm0!Y11}uUd}h$3G?XyIj!1jCm83 zD1us$X}JuMNQ@U>ej0$Qmu^t@jm-@?U)NxHVx*GG_&P#{`hPNy4+MNfA~B}Mhb+%E zn@Lc^?$rW4BN~9`yU!M6X-_=LUmw^E+1aWU8}DxP7nmt}Fh(LVJrMAbSzndU*6u&z zozY=y06axv)Vnb}nqtQpcNvw>r}d4`gB5y#>cWYV54$bU7%iXwa3HYsHx7 z+s^8OvuW-ABY%V5mONzU7^`;B_e(Cs-jVgP6@)4HVW_d~n(cp~K4C^Mkhxir;Ks^M z4%GL{fVT_U%8+ip0*du-V@fZkwUsIJE|W`R5|qDuAKRFg*xG!gjj?y%*7Fo8f5l9d zsE&mpL4{^wtf_Nxcm5U!>ih9}_A;56)73h3x*VjE%YT%XXW3ZUsg0f))_+p{1Df7E zL7pOMZ~czY(w#1cX09!pRVwS-zn0gC`Sz}F|JpJ#r^`WKZ>`kG7qeCj$nwGJ<|VYM zAuZTF&0;z#;Y|Egln`{Ono%*MYR7&`%d>KqiSa6lDyHP}+ww=fWihLFTQOP`2y14Z z>-Vk{t$#5=qQcZnJSpkXCN4pPW4l)qFA(S{APu|MaCTMg*smh246d)Y7VKUQ)c0%V zAUD34mDy5xy8vO84m~`OAlT_Kqb-q0Y`fj1_x08i?0ZZD^oeV;RQ>x)mU13gnuV65 zQJ&o0fVo^-K(3)P^?CQH1R;iF!j`seGW~ z%S8pfJ@F`iI{0ew@3L<#p5NS208I1ZtG{6(ljiEB8{~H2q%MKZboDr04$a-@*F_fH zfkd7>pXTbN8!TkfhWDB2({M2UzU6ttw{ugVX9Vot0&*+{SLUS?yGWg1xofxlZ$*|c>vD1Vq7QRl zP!d{cFG~wU72Q^~33J9~H!e;Il`4`&jgz(!_DbAsL9mGp1+f{{T$HGgNKu@JiGU69 z92()&Wuj80DI>+~0jY74xtm}`aT9d{T9D2joO5#S^|jN-eUhc?d(QVi|L;5BcYn_R z8ff<1Q{M;R<4^yNldU&i&ZO^p{)T)Q985Cyr{4kyfXeE;p-;TGxQW&S9YjwKi&ap| z_~2lYx8Cvs(BQ7I_yN*a;X7dfR7fzNcRTyuJ|d*^y~Ryp)mZ?dvN|uKCx=DrfsUf6 zr2pVxlEJ~GxSUAIAyHYKSH6H~J%7-F6Na=6@?j!5BYfWNz!C1u763J10G_Yg%bnSq zjzAO1835t)Zs*L%jL`j`uiL9g+?l<}`yYPfm>rcNyS;P#C9Y=97QMfkIm(41N(&xebMF8Ia@S}B$zoOK@TsB5cS6TtqbfuZg#vJE1 zHn{=BTx7On+-f6Vc%W%Xc3V zIUFFjvV>{I;r0ZV6Db;-+=|o&fNNiVU~JpCQ-KBhM#0v2}1f#jt>Fw+OG?lIn>jx{33?~>u&P~9Z-UKTG|Nqjgq|aHvsB3Z&5^U zeV*sij(QFyVk%qd)PI6Ho!4sSQ3j6paA`+9tz&0oR?B8b5t4xRE|Nr~-TFMwY*RB^ z6EVgb_wd5G_te-bh7szW5^}39?Wk9C`N_`+|Gp5gBxBExB}3`df)Qd$ZG&mXdGY0^ z0l0GUI#u6VYslHAX2%mFom#-(6;`!npBoJNG0ixW<3o;TT7S_wluj)exO_&iZ`1(r ze(%|$ENxB1_{aSUOLj_Gskxq(fFqfb2cv1mMKI_mx3Z+(E#G~}(Gw%&R+iKP(cuK~ z(-8}3{B%S;>vQdampacZFO_U?`HGH#^w_&bgS&>R+Ge3GZj{nIPc+n9&ZgzN4=q^h z>LI(1ak4%BUw?8g{s&brsrNjLvq6I&ac%q zV!y$6cYaN&ZRkI?OJP)2=Z#W=Y&B5fw1rMJWQ2OBn9IhLIFmnJPDpjBlhLKdwv9Vg zhsn9R3e`wiw!XsO6)suK`rTGaElLS%(>>zaqu+L%FIA`{WzSZHya+9W8C{b+5+pz@gc(9UVp;fUUDl-Y<}!<{nAx>Mk>TeeAtj} ztEXQDa(jZw@gXM1hghDEfy+l#Z8Oo~1c!Rsi;|%TJ(3v$mk&=%fc|5eI%JlICK z+e;>wC6mi4;V&1^^>aG4V0c;rg*v=Fu}0q36v3chN!!_`g5I_e(&a+rZ~$CBWZO$( zSAX97okbVvh3=%0Eu>b1lwU2n$lIET@z*_Xl>aXK&fLgaM*%R!i*NjfOfJini`OZ1 z;Dk_u&ZcubEde1j=m{oQRp--Oxp-@h zyGZw~+q^|Rmr|1zQfPfux7LRLd9vM7#6hw^SNC76CsTC7dY77J+=A((CM{9=yTV0k quwmaX9M$7D(NE=ko!0ulwEqFdtIU zP*ETuYO2%-$psY$FqJLk9Q2VW5Y4ZCst84&f=R*7W<2cLYf|K|guq^Ac6R2?zPAQy z4Ci|Qz;!qCKF17c!@pyF813k^O)*|p#Pj;O&8hIguSl##A~@r-PxOoNvZB*A1%Ci! zi-~(KHd6qg;e1a`0bO^qS}^R3e_KDnk@#L7?*kN@DT=(LY%#&{J^+ALXPhDNKQmrd zC^l1QKcS5!P0q8$1nH>no~z3(3PaiI;Ibk&A?-s!B|6=56nW`eqz2U30Mk)FYIBKB z_jNZja&e#WX`2R9t~cddxVqd>P5I$Is+v`w)-8;46?V|~8Gbs0PT_Jtf6(@`JQ<$nf^uNeFs z?*pWxK8n0_n+@S8@j0`lap#6~kS!*SpcH|?~0A-?7zS6XINS&I9 zeMnq}>`kEK+UUW=kgMXdC?83nQ;aK}%@%)m45ntw6w;Z?xV7cU%BhYaSDhWUjiH_{ zB{Q*_#*-!br;-6Mwrs{~Ab;~JkBQBA{YA6ACR54UO+m3h>x#1|`C(H{B0vgtjSO4} zG-*THXP1D8kAAybl04Mp(07s-o2gTr(E?4UkxO*E54cq=sScv4LrK`j!T8{}W>9n8 ztsZ*%Q#$Iq^P{PCm3?gkF>0}vA+Gz2T~ynYk9L@#o5qTcH22#JD<4=`0C@g4LhQLJdT+N%&kOTk>R9^b^oj>8sr#aW7oiDo>Wc{B4y z!CAxE765SBOdIzxOUm$jtPbTWI<8WT7Zve$ci*N|=l}o`=a4W=`Q#J#kMW|S<9{jz z0Oa$D-RmL)02gNO?Y=ARYDXzB=8aE|xEM06@|sQdSokd`2a%yXDgB(mkXG+F0Y#Q9t@(iR2*o2ckMX?~w3PtGv%3;%aM@ z6Bk6@`;5^=#stlRSzM;}-pNB;RS)+8XNT!wgBUL4GRDt3^w~}j3R@C`jdawvDI3Zb znPJj+mz=eFh~sYf5T0F9UK+u@Fw_ShJjBGDJryEXO)i(0;$G&{(SKTpj1m&#i-ObB zM3Li>rZy5a)SjRYUnF`i7cx!IOVISXBr&Tgi67@;BtZPobceHTc*c|C4?iybj2UIz z(Mi%+-iPG91g$#V9tfKJ7GeStKf1`E*JbyqLrxnUE|;L?%Ux8*mY|l0TOPyhe` diff --git a/src/HistoryElement.ts b/src/HistoryElement.ts index 55c6eab..3293e42 100644 --- a/src/HistoryElement.ts +++ b/src/HistoryElement.ts @@ -12,8 +12,8 @@ class HistoryElement { undo() { console.log("Undo", this.type); if (this.type == "tile") { - for (let tile of this.data as {pos: Vec2, solid: boolean, oldSolid: boolean, palette: number, oldPalette: number}[]) - this.scene.map.setSolid(tile.pos.x, tile.pos.y, tile.oldPalette, tile.oldSolid); + for (let tile of this.data as {pos: Vec2, lastWall: number, wall: number}[]) + this.scene.map.setWall(tile.pos.x, tile.pos.y, tile.lastWall); } else if (this.type == "token_modify") { let data = this.data as { old: string, new: string }; @@ -44,8 +44,8 @@ class HistoryElement { redo() { console.log("Redo", this.type); if (this.type == "tile") { - for (let tile of this.data as {pos: Vec2, solid: boolean, wasSolid: boolean, palette: number, oldPalette: number}[]) - this.scene.map.setSolid(tile.pos.x, tile.pos.y, tile.palette, tile.solid); + for (let tile of this.data as {pos: Vec2, lastWall: number, wall: number}[]) + this.scene.map.setWall(tile.pos.x, tile.pos.y, tile.wall); } else if (this.type == "token_modify") { let data = this.data as { old: string, new: string }; diff --git a/src/Tilemap.ts b/src/Tilemap.ts index 68ddf26..04e7704 100644 --- a/src/Tilemap.ts +++ b/src/Tilemap.ts @@ -1,46 +1,48 @@ class Tilemap { scene: MainScene; + map: Phaser.Tilemaps.Tilemap; + dimensions: Vec2 = new Vec2(); - key: string; - dimensions: {x: number, y: number}; + manager: TilesetManager; + layers: {[key: number]: {wall: Phaser.Tilemaps.DynamicTilemapLayer, ground: Phaser.Tilemaps.DynamicTilemapLayer}} = {}; SOLID: number = 10; - map: Phaser.Tilemaps.Tilemap; - layers: (Phaser.Tilemaps.DynamicTilemapLayer | null)[] = []; - - solid_at: boolean[][]; - palette_at: number[][]; + groundAt: number[][]; + wallAt: number[][]; constructor(key: string, scene: MainScene, xwid: number, ywid: number) { - this.key = key; this.scene = scene; - this.dimensions = {x: xwid, y: ywid}; + this.dimensions = new Vec2(xwid, ywid); - this.solid_at = []; - this.palette_at = []; + this.groundAt = []; + this.wallAt = []; for (let i = 0; i < xwid; i++) { - this.solid_at[i] = []; - this.palette_at[i] = []; + this.groundAt[i] = []; + this.wallAt[i] = []; for (let j = 0; j < ywid; j++) { - this.solid_at[i][j] = false; - this.palette_at[i][j] = 1; + this.groundAt[i][j] = -1; + this.wallAt[i][j] = -1; } } + this.manager = new TilesetManager(scene); + for (let tileset of WALLS ) this.manager.addTileset(tileset.key, true); + for (let tileset of GROUNDS) this.manager.addTileset(tileset.key, false); + this.map = this.scene.add.tilemap(null, 16, 16, 0, 0); - for (let i = 0; i < this.scene.TILESET_COUNT; i++) { - let tileset = this.map.addTilesetImage("tileset_" + i, "tileset_" + i, 16, 16, 0, 0); + for (let res of Object.keys(this.manager.tilesets)) this.createLayers(parseInt(res)); - this.layers[i] = null; + for (let x = 0; x < this.dimensions.x; x ++) { + for (let y = 0; y < this.dimensions.y; y ++) { + this.layers[16].ground.putTileAt(3, x, y); + } } - this.createLayer(0); - this.layers[0].setInteractive(); this.map.addTilesetImage("grid_tile", "grid_tile", 16, 16, 0, 0); this.map.setLayer("grid"); - let gridlayer = this.map.createBlankDynamicLayer("grid", "grid_tile", 0, 0, 50*16, 50*16, 16, 16); + let gridlayer = this.map.createBlankDynamicLayer("grid", "grid_tile", 0, 0, this.dimensions.x, this.dimensions.y, 16, 16); gridlayer.setScale(4, 4); gridlayer.setDepth(500); for (let i = 0; i < xwid; i++) { @@ -48,167 +50,192 @@ class Tilemap { if ((j % 2 == 0 && i % 2 == 0) || (j % 2 != 0 && i % 2 != 0)) gridlayer.putTileAt(0, i, j); } } - - for (let x = 0; x < this.dimensions.x; x ++) { - for (let y = 0; y < this.dimensions.y; y ++) { - this.setTile(x, y, 1, 13); - } - } } - private createLayer(palette: number) { - this.map.setLayer("layer_" + palette); - this.layers[palette] = this.map.createBlankDynamicLayer("layer_" + palette, "tileset_" + palette, 0, 0, 50*16, 50*16, 16, 16); - this.layers[palette].setScale(4, 4); - this.layers[palette].setDepth(-500 + palette); + private createLayers(res: number) { + this.map.addTilesetImage("tileset_" + res + "_ground", "tileset_" + res + "_ground", res, res, 0, 0); + this.map.addTilesetImage("tileset_" + res + "_wall", "tileset_" + res + "_wall", res, res, 0, 0); + + this.map.setLayer("layer_" + res + "_ground"); + let ground = this.map.createBlankDynamicLayer("layer_" + res + "_ground", + "tileset_" + res + "_ground", 0, 0, this.dimensions.x, this.dimensions.y, res, res); + ground.setScale(4 / (res / 16), 4 / (res / 16)); + ground.setDepth(-1000 + res); + + this.map.setLayer("layer_" + res + "_wall"); + let wall = this.map.createBlankDynamicLayer("layer_" + res + "_wall", + "tileset_" + res + "_wall", 0, 0, this.dimensions.x, this.dimensions.y, res, res); + wall.setScale(4 / (res / 16), 4 / (res / 16)); + wall.setDepth(-500 + res); + + this.layers[res] = { ground: ground, wall: wall }; } - setSolid(x: number, y: number, palette: number, solid: boolean): boolean { + setWall(x: number, y: number, tileset: number): boolean { if (x < 0 || y < 0 || x > this.dimensions.x - 1 || y > this.dimensions.y - 1) return false; - let oldPalette = this.palette_at[x][y]; - let wasSolid = this.solid_at[x][y]; + if (this.wallAt[x][y] == tileset) return false; - if (wasSolid == solid && palette == oldPalette) return false; + if (this.wallAt[x][y] != -1) { + this.layers[this.manager.locations[this.wallAt[x][y]].res].wall.removeTileAt(x, y, true); + this.wallAt[x][y] = -1; + } + + if (tileset != -1) { + this.layers[this.manager.locations[tileset].res].wall.putTileAt( + this.manager.tilesets[this.manager.locations[tileset].res].wall.getGlobalIndex(54, tileset), x, y); + this.wallAt[x][y] = tileset; + } - this.setTile(x, y, palette, (solid ? this.SOLID : 13)); - this.calculateEdgesAround(x, y); - + this.calculateSmartTilesAround(x, y); return true; } - getSolid(x: number, y: number): number { - if (x < 0 || y < 0 || x > this.dimensions.x - 1 || y > this.dimensions.y - 1) return -1; - return (this.solid_at[x][y]) ? this.palette_at[x][y] : -1; + private setWallRaw(x: number, y: number, tileset: number, tile: number) { + if (this.wallAt[x][y] != -1) { + this.layers[this.manager.locations[tileset].res].wall.removeTileAt(x, y, true); + this.wallAt[x][y] = -1; + } + + this.layers[this.manager.locations[tileset].res].wall.putTileAt( + this.manager.tilesets[this.manager.locations[tileset].res].wall.getGlobalIndex(tile, tileset), x, y); + this.wallAt[x][y] = tileset; } - getPalette(x: number, y: number): number { - if (x < 0 || y < 0 || x > this.dimensions.x - 1 || y > this.dimensions.y - 1) return -1; - return this.palette_at[x][y]; + getWall(x: number, y: number): number { + return this.wallAt[clamp(x, 0, this.dimensions.x - 1)][clamp(y, 0, this.dimensions.y - 1)]; } - private setTile(x: number, y: number, palette: number, tid: number): void { - if (this.layers[palette] == null) this.createLayer(palette); - - this.layers[this.palette_at[x][y]].removeTileAt(x, y, true); - this.layers[palette].putTileAt(tid, x, y); - this.palette_at[x][y] = palette; - this.solid_at[x][y] = tid == this.SOLID; + getGround(x: number, y: number): number { + return this.groundAt[clamp(x, 0, this.dimensions.x - 1)][clamp(y, 0, this.dimensions.y - 1)]; } - private calculateEdgesAround(x: number, y: number) { + private calculateSmartTilesAround(x: number, y: number) { for (let i = clamp(x - 1, this.dimensions.x - 1, 0); i <= clamp(x + 1, this.dimensions.x - 1, 0); i++) { for (let j = clamp(y - 1, this.dimensions.y - 1, 0); j <= clamp(y + 1, this.dimensions.y - 1, 0); j++) { let tile = this.calculateSmartTile(i, j); - if (tile != -1) this.setTile(i, j, this.palette_at[i][j], tile); + if (tile != -1) this.setWallRaw(i, j, this.wallAt[i][j], tile); } } } - private getSurroundingSolid(x: number, y: number): boolean[] { + private getWallsAround(x: number, y: number): boolean[] { let solid: boolean[] = []; for (let i = -1; i <= 1; i++) { for (let j = -1; j <= 1; j++) { - solid.push(this.getSolid(x + j, y + i) != -1); + solid.push(this.getWall(x + j, y + i) != -1); } } return solid; } private calculateSmartTile(x: number, y: number): number { - if (this.getSolid(x, y) != -1) return -1; + let wall = this.getWall(x, y); + if (wall == -1) return -1; - let adjacents = this.getSurroundingSolid(x, y); - let tile = 13; + const TL = 0, T = 1, TR = 2, L = 3, C = 4, R = 5, BL = 6, B = 7, BR = 8; - if (adjacents[7] /*Bottom*/) { - if (adjacents[1] /*Top*/) { - if (adjacents[5] /*Right*/) { - if (adjacents[3] /*Left*/) tile = 49; - else tile = 59; - } - else if (adjacents[3] /*Left*/) tile = 57; - else tile = 58; - } - else if (adjacents[3] /*Left*/) { - if (adjacents[5] /*Right*/) tile = 48; - else if (adjacents[2] /*Top right*/) tile = 45; - else tile = 21; + let empty = this.getWallsAround(x, y).map(b => !b); + let tile = 54; + + if (empty[T]) { + if (empty[B]) { + if (empty[L]) { + if (empty[R]) tile = 33; + else tile = 15; + } + else if (empty[R]) tile = 5; + else tile = 2; } - else if (adjacents[5] /*Right*/) { - if (adjacents[0] /*Top left*/) tile = 47; - else tile = 23; + else if (empty[L]) { + if (empty[R]) tile = 14; + else if (empty[BR]) tile = 0; + else tile = 7; } - else if (adjacents[0] /*Top left*/) { - if (adjacents[2] /*Top Right*/) tile = 46; - else tile = 41; + else if (empty[R]) { + if (empty[BL]) tile = 1; + else tile = 8; + } + else { + if (empty[BL]) { + if (empty[BR]) tile = 3; + else tile = 40; + } + else if (empty[BR]) tile = 41; + else tile = 31; } - else if (adjacents[2] /*Top Right*/) tile = 40; - else tile = 1; } - else if (adjacents[1] /*Top*/) { - if (adjacents[3] /*Left*/) { - if (adjacents[5] /*Right*/) tile = 30; - else if (adjacents[8] /*Bottom right*/) tile = 27; - else tile = 3; + else if (empty[B]) { + if (empty[L]) { + if (empty[R]) tile = 6; + else if (empty[TR]) tile = 9; + else tile = 16; } - else if (adjacents[5] /*Right*/) { - if (adjacents[6] /*Bottom left*/) tile = 29; - else tile = 5; + else if (empty[R]) { + if (empty[TL]) tile = 10; + else tile = 17; } - else if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom right*/) tile = 28; + else { + if (empty[TL]) { + if (empty[TR]) tile = 4; + else tile = 49; + } + else if (empty[TR]) tile = 50; else tile = 32; } - else if (adjacents[8] /*Bottom right*/) tile = 31; + } + else if (empty[L]) { + if (empty[R]) tile = 11; + else { + if (empty[TR]) { + if (empty[BR]) tile = 12; + else tile = 38; + } + else if (empty[BR]) tile = 47; + else tile = 22; + } + } + else if (empty[R]) { + if (empty[TL]) { + if (empty[BL]) tile = 13; + else tile = 39; + } + else if (empty[BL]) tile = 48; + else tile = 23; + } + else if (empty[TL]) { + if (empty[TR]) { + if (empty[BL]) { + if (empty[BR]) tile = 25; + else tile = 36; + } + else if (empty[BR]) tile = 37; + else tile = 21; + } + else if (empty[BL]) { + if (empty[BR]) tile = 45; + else tile = 30; + } + else if (empty[BR]) tile = 51; + else tile = 21; + } + else if (empty[TR]) { + if (empty[BL]) { + if (empty[BR]) tile = 46; + else tile = 42; + } + else if (empty[BR]) tile = 29; + else tile = 27; + } + else if (empty[BL]) { + if (empty[BR]) tile = 20; else tile = 19; } - else if (adjacents[3] /*Left*/) { - if (adjacents[5] /*Right*/) tile = 39; - else if (adjacents[2] /*Top right*/) { - if (adjacents[8] /*Bottom right*/) tile = 36; - else tile = 51; - } - else if (adjacents[8] /*Bottom right*/) tile = 42; - else tile = 11; + else if (empty[BR]) tile = 18; + else { + if (wall >= 54 && wall <= 60) return -1; + tile = 54 + Math.floor(Math.random() * 6); } - else if (adjacents[5] /*Right*/) { - if (adjacents[0] /*Top left*/) { - if (adjacents[6] /*Bottom left*/) tile = 38; - else tile = 52; - } - else if (adjacents[6] /*Bottom left*/) tile = 43; - else tile = 9; - } - else if (adjacents[0] /*Top Left*/) { - if (adjacents[2] /*Top right*/) { - if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom right*/) tile = 37; - else tile = 6; - } - else if (adjacents[8] /*Bottom right*/) tile = 7; - else tile = 4; - } - else if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom right*/) tile = 15; - else tile = 12; - } - else if (adjacents[8] /*Bottom right*/) tile = 33; - else tile = 20; - } - else if (adjacents[2] /*Top right*/) { - if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom right*/) tile = 16; - else tile = 34; - } - else if (adjacents[8] /*Bottom right*/) tile = 14; - else tile = 18; - } - else if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom Right*/) tile = 22; - else tile = 2; - } - else if (adjacents[8] /*Bottom right*/) tile = 0; return tile; } diff --git a/src/TilesetCanvas.ts b/src/TilesetCanvas.ts index 92df1c8..9f6d131 100644 --- a/src/TilesetCanvas.ts +++ b/src/TilesetCanvas.ts @@ -14,10 +14,11 @@ class TilesetCanvas { this.manager = manager; this.res = res; - this.width = Math.floor(1024 / (9*this.res)); - this.height = Math.floor(1024 / (7*this.res)); + this.width = Math.floor(1024 / this.res / 9); + this.height = Math.floor(1024 / this.res / 7); - this.canvas = manager.scene.textures.createCanvas("tileset_" + res + (wall ? "_wall" : "_ground"), 1024, 1024); + this.canvas = manager.scene.textures.createCanvas("tileset_" + res + (wall ? "_wall" : "_ground"), + this.width * 9 * this.res, this.height * 7 * this.res); } addTileset(key: string) { @@ -28,4 +29,17 @@ class TilesetCanvas { this.indMap[this.manager.currentInd] = this.indexes.length; this.indexes.push(this.manager.currentInd++); } + + getGlobalIndex(local: number, tileset: number) { + const lX = local % 9; + const lY = Math.floor(local / 9); + const gX = tileset % this.width; + const gY = Math.floor(tileset / this.width); + + const xx = lX + gX * 9; + const yy = lY + gY * 9; + + // console.log(lX, lY, this.width); + return yy * this.width * 9 + xx; + } } diff --git a/src/UIView.ts b/src/UIView.ts index d601ae0..7c537f7 100644 --- a/src/UIView.ts +++ b/src/UIView.ts @@ -30,9 +30,6 @@ class UIView { this.tileSidebar = new UITileSidebar(this.scene, 0, 0); this.o.add(this.tileSidebar); - this.tileSidebar.addPalette(0); - this.tileSidebar.addPalette(1); - this.tileSidebar.addPalette(2); } diff --git a/src/data/TILESETS.ts b/src/data/TILESETS.ts new file mode 100644 index 0000000..8ea6332 --- /dev/null +++ b/src/data/TILESETS.ts @@ -0,0 +1,16 @@ +interface TilesetFileProps { + name: string, + key: string, + file: string, + res: number +} + +const WALLS: TilesetFileProps[] = [ + { name: "Dungeon Wall", key: "wall_dungeon", file: "res/tileset/wall_dungeon", res: 16 }, + { name: "Wood Wall", key: "wall_wood", file: "res/tileset/wall_wood", res: 16 }, +]; + +const GROUNDS: TilesetFileProps[] = [ + { name: "Cave Floor", key: "ground_cave", file: "res/tileset/ground_cave", res: 16 }, + { name: "Lawn", key: "ground_wood", file: "res/tileset/ground_grass", res: 16 }, +]; diff --git a/src/manip/ArchitectMode.ts b/src/manip/ArchitectMode.ts index a3641c9..9080ea7 100644 --- a/src/manip/ArchitectMode.ts +++ b/src/manip/ArchitectMode.ts @@ -10,7 +10,7 @@ class ArchitectMode { pointerDown: boolean = false; pointerPrimaryDown: boolean = false; - manipulated: {pos: Vec2, solid: boolean, oldSolid: boolean, palette: number, oldPalette: number}[] = []; + manipulated: {pos: Vec2, lastWall: number, wall: number}[] = []; constructor(scene: MainScene) { this.scene = scene; @@ -183,20 +183,19 @@ class ArchitectMode { } placeTileAndPushManip(manipPos: Vec2, solid: boolean) { - let wasSolid = this.scene.map.getSolid (manipPos.x, manipPos.y) != -1; - let lastPalette = this.scene.map.getPalette(manipPos.x, manipPos.y); + let tile = solid ? 1 : -1; + let lastWall = this.scene.map.getWall(manipPos.x, manipPos.y); + if (tile == lastWall) return; - let changed = this.scene.map.setSolid(manipPos.x, manipPos.y, this.scene.activePalette, solid); - if (!changed) return; + this.scene.map.setWall(manipPos.x, manipPos.y, tile); this.manipulated.push({ pos: manipPos, - solid: solid, - oldSolid: wasSolid, - palette: this.scene.activePalette, - oldPalette: lastPalette + lastWall: lastWall, + wall: tile }); + } cleanup() { diff --git a/src/scene/LoadScene.ts b/src/scene/LoadScene.ts index f5327d7..ff4e09d 100644 --- a/src/scene/LoadScene.ts +++ b/src/scene/LoadScene.ts @@ -10,7 +10,6 @@ class LoadScene extends Phaser.Scene { this.load.bitmapFont('font1x', '/res/font/font1.png', '/res/font/font1.fnt'); this.load.bitmapFont('font2x', '/res/font/font2.png', '/res/font/font2.fnt'); - this.load.bitmapFont('font3x', '/res/font/font3.png', '/res/font/font3.fnt'); for (let s of this.cache.text.get("assets").split("\n")) { let tokens = s.split(" "); @@ -22,6 +21,14 @@ class LoadScene extends Phaser.Scene { if (t.split_by != undefined) this.load.spritesheet(t.key, t.file + ".png", {frameWidth: t.split_by, frameHeight: t.split_by}); else this.load.image(t.key, t.file + ".png"); } + + for (let t of WALLS) { + this.load.image(t.key, t.file + ".png"); + } + + for (let t of GROUNDS) { + this.load.image(t.key, t.file + ".png"); + } } create(): void { diff --git a/src/scene/MainScene.ts b/src/scene/MainScene.ts index ead5a09..f19cf52 100644 --- a/src/scene/MainScene.ts +++ b/src/scene/MainScene.ts @@ -72,23 +72,6 @@ class MainScene extends Phaser.Scene { this.architect = new ArchitectMode(this); this.token = new TokenMode(this); - - // let tileset = new TilesetCanvas(this, 16, 16); - // tileset.addPalette("tileset_ground_dirt"); - // tileset.addPalette("tileset_ground_grass"); - // tileset.addPalette("tileset_wall_wood"); - // tileset.addPalette("tileset_wall_stone"); - // // this.add.sprite(-300, 0, "cursor"); - // setTimeout(() => this.add.sprite(-300, 0, "tileset_16"), 100); - - let map = new TilesetManager(this); - map.addTileset("tileset_ground_dirt", false); - map.addTileset("tileset_ground_grass", false); - map.addTileset("tileset_wall_stone", true); - map.addTileset("tileset_wall_wood", true); - - this.add.sprite(-300, 0, "tileset_16_ground"); - this.add.sprite(-800, 0, "tileset_16_wall"); } update(time: number, delta: number): void { diff --git a/src/ui/UITileSidebar.ts b/src/ui/UITileSidebar.ts index 72056fb..f52d50b 100644 --- a/src/ui/UITileSidebar.ts +++ b/src/ui/UITileSidebar.ts @@ -2,22 +2,30 @@ class UITileSidebar extends UISidebar { constructor(scene: MainScene, x: number, y: number) { super(scene, x, y); + + for (let tileset of WALLS) { + this.addTileset(tileset.key); + } + + for (let tileset of GROUNDS) { + this.addTileset(tileset.key); + } } elemClick(x: number, y: number): void { this.scene.activePalette = this.elems[x + y * 3]; } - addPalette(tile: number) { + addTileset(tileset: string) { let p = this.elems.length; let x = p % 3; let y = Math.floor(p / 3); - this.elems.push(tile); + this.elems.push(tileset); - let spr = new Phaser.GameObjects.Sprite(this.scene, 12 + x * 21 * 3 - 22 * 2, 12 + y * 21 * 3 - 22 * 2, "tileset_" + tile); + let spr = new Phaser.GameObjects.Sprite(this.scene, 12 + x * 21 * 3 - 187, 12 + y * 21 * 3 - 2, tileset); spr.setOrigin(0, 0); - spr.setCrop(21, 21, 26, 26); - spr.setScale(2); + spr.setCrop(112, 0, 32, 32); + spr.setScale(1.65); this.sprites.push(spr); this.list.push(spr); let spr2 = new Phaser.GameObjects.Sprite(this.scene, 9 + x * 21 * 3, 9 + y * 21 * 3, "ui_sidebar_overlay"); diff --git a/tool.js b/tool.js index b883e0d..b80310e 100644 --- a/tool.js +++ b/tool.js @@ -140,7 +140,7 @@ var HistoryElement = /** @class */ (function () { if (this.type == "tile") { for (var _i = 0, _a = this.data; _i < _a.length; _i++) { var tile = _a[_i]; - this.scene.map.setSolid(tile.pos.x, tile.pos.y, tile.oldPalette, tile.oldSolid); + this.scene.map.setWall(tile.pos.x, tile.pos.y, tile.lastWall); } } else if (this.type == "token_modify") { @@ -173,7 +173,7 @@ var HistoryElement = /** @class */ (function () { if (this.type == "tile") { for (var _i = 0, _a = this.data; _i < _a.length; _i++) { var tile = _a[_i]; - this.scene.map.setSolid(tile.pos.x, tile.pos.y, tile.palette, tile.solid); + this.scene.map.setWall(tile.pos.x, tile.pos.y, tile.wall); } } else if (this.type == "token_modify") { @@ -296,33 +296,45 @@ var TextInput = /** @class */ (function (_super) { } return TextInput; }(ChatBox)); -var TileMap = /** @class */ (function () { - function TileMap(key, scene, xwid, ywid) { +var Tilemap = /** @class */ (function () { + function Tilemap(key, scene, xwid, ywid) { + this.dimensions = new Vec2(); + this.layers = {}; this.SOLID = 10; - this.layers = []; - this.key = key; this.scene = scene; - this.dimensions = { x: xwid, y: ywid }; - this.solid_at = []; - this.palette_at = []; + this.dimensions = new Vec2(xwid, ywid); + this.groundAt = []; + this.wallAt = []; for (var i = 0; i < xwid; i++) { - this.solid_at[i] = []; - this.palette_at[i] = []; + this.groundAt[i] = []; + this.wallAt[i] = []; for (var j = 0; j < ywid; j++) { - this.solid_at[i][j] = false; - this.palette_at[i][j] = 1; + this.groundAt[i][j] = -1; + this.wallAt[i][j] = -1; } } - this.map = this.scene.add.tilemap(null, 16, 16, 0, 0); - for (var i = 0; i < this.scene.TILESET_COUNT; i++) { - var tileset = this.map.addTilesetImage("tileset_" + i, "tileset_" + i, 16, 16, 0, 0); - this.layers[i] = null; + this.manager = new TilesetManager(scene); + for (var _i = 0, WALLS_1 = WALLS; _i < WALLS_1.length; _i++) { + var tileset = WALLS_1[_i]; + this.manager.addTileset(tileset.key, true); + } + for (var _a = 0, GROUNDS_1 = GROUNDS; _a < GROUNDS_1.length; _a++) { + var tileset = GROUNDS_1[_a]; + this.manager.addTileset(tileset.key, false); + } + this.map = this.scene.add.tilemap(null, 16, 16, 0, 0); + for (var _b = 0, _c = Object.keys(this.manager.tilesets); _b < _c.length; _b++) { + var res = _c[_b]; + this.createLayers(parseInt(res)); + } + for (var x = 0; x < this.dimensions.x; x++) { + for (var y = 0; y < this.dimensions.y; y++) { + this.layers[16].ground.putTileAt(3, x, y); + } } - this.createLayer(0); - this.layers[0].setInteractive(); this.map.addTilesetImage("grid_tile", "grid_tile", 16, 16, 0, 0); this.map.setLayer("grid"); - var gridlayer = this.map.createBlankDynamicLayer("grid", "grid_tile", 0, 0, 50 * 16, 50 * 16, 16, 16); + var gridlayer = this.map.createBlankDynamicLayer("grid", "grid_tile", 0, 0, this.dimensions.x, this.dimensions.y, 16, 16); gridlayer.setScale(4, 4); gridlayer.setDepth(500); for (var i = 0; i < xwid; i++) { @@ -331,207 +343,223 @@ var TileMap = /** @class */ (function () { gridlayer.putTileAt(0, i, j); } } - for (var x = 0; x < this.dimensions.x; x++) { - for (var y = 0; y < this.dimensions.y; y++) { - this.setTile(x, y, 1, 13); - } - } } - TileMap.prototype.createLayer = function (palette) { - this.map.setLayer("layer_" + palette); - this.layers[palette] = this.map.createBlankDynamicLayer("layer_" + palette, "tileset_" + palette, 0, 0, 50 * 16, 50 * 16, 16, 16); - this.layers[palette].setScale(4, 4); - this.layers[palette].setDepth(-500 + palette); + Tilemap.prototype.createLayers = function (res) { + this.map.addTilesetImage("tileset_" + res + "_ground", "tileset_" + res + "_ground", res, res, 0, 0); + this.map.addTilesetImage("tileset_" + res + "_wall", "tileset_" + res + "_wall", res, res, 0, 0); + this.map.setLayer("layer_" + res + "_ground"); + var ground = this.map.createBlankDynamicLayer("layer_" + res + "_ground", "tileset_" + res + "_ground", 0, 0, this.dimensions.x, this.dimensions.y, res, res); + ground.setScale(4 / (res / 16), 4 / (res / 16)); + ground.setDepth(-1000 + res); + this.map.setLayer("layer_" + res + "_wall"); + var wall = this.map.createBlankDynamicLayer("layer_" + res + "_wall", "tileset_" + res + "_wall", 0, 0, this.dimensions.x, this.dimensions.y, res, res); + wall.setScale(4 / (res / 16), 4 / (res / 16)); + wall.setDepth(-500 + res); + this.layers[res] = { ground: ground, wall: wall }; }; - TileMap.prototype.setSolid = function (x, y, palette, solid) { + Tilemap.prototype.setWall = function (x, y, tileset) { if (x < 0 || y < 0 || x > this.dimensions.x - 1 || y > this.dimensions.y - 1) return false; - var oldPalette = this.palette_at[x][y]; - var wasSolid = this.solid_at[x][y]; - if (wasSolid == solid && palette == oldPalette) + if (this.wallAt[x][y] == tileset) return false; - this.setTile(x, y, palette, (solid ? this.SOLID : 13)); - this.calculateEdgesAround(x, y); + if (this.wallAt[x][y] != -1) { + this.layers[this.manager.locations[this.wallAt[x][y]].res].wall.removeTileAt(x, y, true); + this.wallAt[x][y] = -1; + } + if (tileset != -1) { + this.layers[this.manager.locations[tileset].res].wall.putTileAt(this.manager.tilesets[this.manager.locations[tileset].res].wall.getGlobalIndex(54, tileset), x, y); + this.wallAt[x][y] = tileset; + } + this.calculateSmartTilesAround(x, y); return true; }; - TileMap.prototype.getSolid = function (x, y) { - if (x < 0 || y < 0 || x > this.dimensions.x - 1 || y > this.dimensions.y - 1) - return -1; - return (this.solid_at[x][y]) ? this.palette_at[x][y] : -1; + Tilemap.prototype.setWallRaw = function (x, y, tileset, tile) { + if (this.wallAt[x][y] != -1) { + this.layers[this.manager.locations[tileset].res].wall.removeTileAt(x, y, true); + this.wallAt[x][y] = -1; + } + this.layers[this.manager.locations[tileset].res].wall.putTileAt(this.manager.tilesets[this.manager.locations[tileset].res].wall.getGlobalIndex(tile, tileset), x, y); + this.wallAt[x][y] = tileset; }; - TileMap.prototype.getPalette = function (x, y) { - if (x < 0 || y < 0 || x > this.dimensions.x - 1 || y > this.dimensions.y - 1) - return -1; - return this.palette_at[x][y]; + Tilemap.prototype.getWall = function (x, y) { + return this.wallAt[clamp(x, 0, this.dimensions.x - 1)][clamp(y, 0, this.dimensions.y - 1)]; }; - TileMap.prototype.setTile = function (x, y, palette, tid) { - if (this.layers[palette] == null) - this.createLayer(palette); - this.layers[this.palette_at[x][y]].removeTileAt(x, y, true); - this.layers[palette].putTileAt(tid, x, y); - this.palette_at[x][y] = palette; - this.solid_at[x][y] = tid == this.SOLID; + Tilemap.prototype.getGround = function (x, y) { + return this.groundAt[clamp(x, 0, this.dimensions.x - 1)][clamp(y, 0, this.dimensions.y - 1)]; }; - TileMap.prototype.calculateEdgesAround = function (x, y) { + Tilemap.prototype.calculateSmartTilesAround = function (x, y) { for (var i = clamp(x - 1, this.dimensions.x - 1, 0); i <= clamp(x + 1, this.dimensions.x - 1, 0); i++) { for (var j = clamp(y - 1, this.dimensions.y - 1, 0); j <= clamp(y + 1, this.dimensions.y - 1, 0); j++) { - var tile = this.calculateEdges(i, j); + var tile = this.calculateSmartTile(i, j); if (tile != -1) - this.setTile(i, j, this.palette_at[i][j], tile); + this.setWallRaw(i, j, this.wallAt[i][j], tile); } } }; - TileMap.prototype.getSurroundingSolid = function (x, y) { + Tilemap.prototype.getWallsAround = function (x, y) { var solid = []; for (var i = -1; i <= 1; i++) { for (var j = -1; j <= 1; j++) { - solid.push(this.getSolid(x + j, y + i) != -1); + solid.push(this.getWall(x + j, y + i) != -1); } } return solid; }; - TileMap.prototype.calculateEdges = function (x, y) { - if (this.getSolid(x, y) != -1) + Tilemap.prototype.calculateSmartTile = function (x, y) { + var wall = this.getWall(x, y); + if (wall == -1) return -1; - var adjacents = this.getSurroundingSolid(x, y); - var tile = 13; - if (adjacents[7] /*Bottom*/) { - if (adjacents[1] /*Top*/) { - if (adjacents[5] /*Right*/) { - if (adjacents[3] /*Left*/) - tile = 49; + var TL = 0, T = 1, TR = 2, L = 3, C = 4, R = 5, BL = 6, B = 7, BR = 8; + var empty = this.getWallsAround(x, y).map(function (b) { return !b; }); + var tile = 54; + if (empty[T]) { + if (empty[B]) { + if (empty[L]) { + if (empty[R]) + tile = 33; else - tile = 59; + tile = 15; } - else if (adjacents[3] /*Left*/) - tile = 57; - else - tile = 58; - } - else if (adjacents[3] /*Left*/) { - if (adjacents[5] /*Right*/) - tile = 48; - else if (adjacents[2] /*Top right*/) - tile = 45; - else - tile = 21; - } - else if (adjacents[5] /*Right*/) { - if (adjacents[0] /*Top left*/) - tile = 47; - else - tile = 23; - } - else if (adjacents[0] /*Top left*/) { - if (adjacents[2] /*Top Right*/) - tile = 46; - else - tile = 41; - } - else if (adjacents[2] /*Top Right*/) - tile = 40; - else - tile = 1; - } - else if (adjacents[1] /*Top*/) { - if (adjacents[3] /*Left*/) { - if (adjacents[5] /*Right*/) - tile = 30; - else if (adjacents[8] /*Bottom right*/) - tile = 27; - else - tile = 3; - } - else if (adjacents[5] /*Right*/) { - if (adjacents[6] /*Bottom left*/) - tile = 29; - else + else if (empty[R]) tile = 5; + else + tile = 2; } - else if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom right*/) - tile = 28; + else if (empty[L]) { + if (empty[R]) + tile = 14; + else if (empty[BR]) + tile = 0; + else + tile = 7; + } + else if (empty[R]) { + if (empty[BL]) + tile = 1; + else + tile = 8; + } + else { + if (empty[BL]) { + if (empty[BR]) + tile = 3; + else + tile = 40; + } + else if (empty[BR]) + tile = 41; + else + tile = 31; + } + } + else if (empty[B]) { + if (empty[L]) { + if (empty[R]) + tile = 6; + else if (empty[TR]) + tile = 9; + else + tile = 16; + } + else if (empty[R]) { + if (empty[TL]) + tile = 10; + else + tile = 17; + } + else { + if (empty[TL]) { + if (empty[TR]) + tile = 4; + else + tile = 49; + } + else if (empty[TR]) + tile = 50; else tile = 32; } - else if (adjacents[8] /*Bottom right*/) - tile = 31; + } + else if (empty[L]) { + if (empty[R]) + tile = 11; + else { + if (empty[TR]) { + if (empty[BR]) + tile = 12; + else + tile = 38; + } + else if (empty[BR]) + tile = 47; + else + tile = 22; + } + } + else if (empty[R]) { + if (empty[TL]) { + if (empty[BL]) + tile = 13; + else + tile = 39; + } + else if (empty[BL]) + tile = 48; + else + tile = 23; + } + else if (empty[TL]) { + if (empty[TR]) { + if (empty[BL]) { + if (empty[BR]) + tile = 25; + else + tile = 36; + } + else if (empty[BR]) + tile = 37; + else + tile = 21; + } + else if (empty[BL]) { + if (empty[BR]) + tile = 45; + else + tile = 30; + } + else if (empty[BR]) + tile = 51; + else + tile = 21; + } + else if (empty[TR]) { + if (empty[BL]) { + if (empty[BR]) + tile = 46; + else + tile = 42; + } + else if (empty[BR]) + tile = 29; + else + tile = 27; + } + else if (empty[BL]) { + if (empty[BR]) + tile = 20; else tile = 19; } - else if (adjacents[3] /*Left*/) { - if (adjacents[5] /*Right*/) - tile = 39; - else if (adjacents[2] /*Top right*/) { - if (adjacents[8] /*Bottom right*/) - tile = 36; - else - tile = 51; - } - else if (adjacents[8] /*Bottom right*/) - tile = 42; - else - tile = 11; + else if (empty[BR]) + tile = 18; + else { + if (wall >= 54 && wall <= 60) + return -1; + tile = 54 + Math.floor(Math.random() * 6); } - else if (adjacents[5] /*Right*/) { - if (adjacents[0] /*Top left*/) { - if (adjacents[6] /*Bottom left*/) - tile = 38; - else - tile = 52; - } - else if (adjacents[6] /*Bottom left*/) - tile = 43; - else - tile = 9; - } - else if (adjacents[0] /*Top Left*/) { - if (adjacents[2] /*Top right*/) { - if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom right*/) - tile = 37; - else - tile = 6; - } - else if (adjacents[8] /*Bottom right*/) - tile = 7; - else - tile = 4; - } - else if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom right*/) - tile = 15; - else - tile = 12; - } - else if (adjacents[8] /*Bottom right*/) - tile = 33; - else - tile = 20; - } - else if (adjacents[2] /*Top right*/) { - if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom right*/) - tile = 16; - else - tile = 34; - } - else if (adjacents[8] /*Bottom right*/) - tile = 14; - else - tile = 18; - } - else if (adjacents[6] /*Bottom left*/) { - if (adjacents[8] /*Bottom Right*/) - tile = 22; - else - tile = 2; - } - else if (adjacents[8] /*Bottom right*/) - tile = 0; return tile; }; - return TileMap; + return Tilemap; }()); var TilesetCanvas = /** @class */ (function () { function TilesetCanvas(manager, res, wall) { @@ -539,9 +567,9 @@ var TilesetCanvas = /** @class */ (function () { this.indMap = []; this.manager = manager; this.res = res; - this.width = Math.floor(1024 / (9 * this.res)); - this.height = Math.floor(1024 / (7 * this.res)); - this.canvas = manager.scene.textures.createCanvas("tileset_" + res + (wall ? "_wall" : "_ground"), 1024, 1024); + this.width = Math.floor(1024 / this.res / 9); + this.height = Math.floor(1024 / this.res / 7); + this.canvas = manager.scene.textures.createCanvas("tileset_" + res + (wall ? "_wall" : "_ground"), this.width * 9 * this.res, this.height * 7 * this.res); } TilesetCanvas.prototype.addTileset = function (key) { var x = this.indexes.length % this.width; @@ -550,6 +578,16 @@ var TilesetCanvas = /** @class */ (function () { this.indMap[this.manager.currentInd] = this.indexes.length; this.indexes.push(this.manager.currentInd++); }; + TilesetCanvas.prototype.getGlobalIndex = function (local, tileset) { + var lX = local % 9; + var lY = Math.floor(local / 9); + var gX = tileset % this.width; + var gY = Math.floor(tileset / this.width); + var xx = lX + gX * 9; + var yy = lY + gY * 9; + // console.log(lX, lY, this.width); + return yy * this.width * 9 + xx; + }; return TilesetCanvas; }()); var TilesetManager = /** @class */ (function () { @@ -678,9 +716,6 @@ var UIView = /** @class */ (function () { } this.tileSidebar = new UITileSidebar(this.scene, 0, 0); this.o.add(this.tileSidebar); - this.tileSidebar.addPalette(0); - this.tileSidebar.addPalette(1); - this.tileSidebar.addPalette(2); }; UIView.prototype.update = function () { this.uiActive = false; @@ -879,6 +914,14 @@ var WorldView = /** @class */ (function () { }; return WorldView; }()); +var WALLS = [ + { name: "Dungeon Wall", key: "wall_dungeon", file: "res/tileset/wall_dungeon", res: 16 }, + { name: "Wood Wall", key: "wall_wood", file: "res/tileset/wall_wood", res: 16 }, +]; +var GROUNDS = [ + { name: "Cave Floor", key: "ground_cave", file: "res/tileset/ground_cave", res: 16 }, + { name: "Lawn", key: "ground_wood", file: "res/tileset/ground_grass", res: 16 }, +]; var TOKENS = [ { name: "Armor 1", key: "tkn_armor_1", file: "res/token/armor_1", split_by: 18 }, { name: "Cadin 1", key: "tkn_cadin_1", file: "res/token/cadin_1", split_by: 18 }, @@ -1071,17 +1114,15 @@ var ArchitectMode = /** @class */ (function () { } }; ArchitectMode.prototype.placeTileAndPushManip = function (manipPos, solid) { - var wasSolid = this.scene.map.getSolid(manipPos.x, manipPos.y) != -1; - var lastPalette = this.scene.map.getPalette(manipPos.x, manipPos.y); - var changed = this.scene.map.setSolid(manipPos.x, manipPos.y, this.scene.activePalette, solid); - if (!changed) + var tile = solid ? 1 : -1; + var lastWall = this.scene.map.getWall(manipPos.x, manipPos.y); + if (tile == lastWall) return; + this.scene.map.setWall(manipPos.x, manipPos.y, tile); this.manipulated.push({ pos: manipPos, - solid: solid, - oldSolid: wasSolid, - palette: this.scene.activePalette, - oldPalette: lastPalette + lastWall: lastWall, + wall: tile }); }; ArchitectMode.prototype.cleanup = function () { @@ -1223,7 +1264,6 @@ var LoadScene = /** @class */ (function (_super) { this.add.sprite(this.cameras.main.width / 2, this.cameras.main.height / 2, "splash"); this.load.bitmapFont('font1x', '/res/font/font1.png', '/res/font/font1.fnt'); this.load.bitmapFont('font2x', '/res/font/font2.png', '/res/font/font2.fnt'); - this.load.bitmapFont('font3x', '/res/font/font3.png', '/res/font/font3.fnt'); for (var _i = 0, _a = this.cache.text.get("assets").split("\n"); _i < _a.length; _i++) { var s = _a[_i]; var tokens = s.split(" "); @@ -1239,6 +1279,14 @@ var LoadScene = /** @class */ (function (_super) { else this.load.image(t.key, t.file + ".png"); } + for (var _c = 0, WALLS_2 = WALLS; _c < WALLS_2.length; _c++) { + var t = WALLS_2[_c]; + this.load.image(t.key, t.file + ".png"); + } + for (var _d = 0, GROUNDS_2 = GROUNDS; _d < GROUNDS_2.length; _d++) { + var t = GROUNDS_2[_d]; + this.load.image(t.key, t.file + ".png"); + } }; LoadScene.prototype.create = function () { var _this = this; @@ -1298,23 +1346,9 @@ var MainScene = /** @class */ (function (_super) { this.ui.createElements(); this.chat = new Chat(this, -10000 + this.cameras.main.width - 309, this.cameras.main.height - 9); this.add.existing(this.chat); - this.map = new TileMap("gameMap", this, 300, 300); + this.map = new Tilemap("gameMap", this, 300, 300); this.architect = new ArchitectMode(this); this.token = new TokenMode(this); - // let tileset = new TilesetCanvas(this, 16, 16); - // tileset.addPalette("tileset_ground_dirt"); - // tileset.addPalette("tileset_ground_grass"); - // tileset.addPalette("tileset_wall_wood"); - // tileset.addPalette("tileset_wall_stone"); - // // this.add.sprite(-300, 0, "cursor"); - // setTimeout(() => this.add.sprite(-300, 0, "tileset_16"), 100); - var map = new TilesetManager(this); - map.addTileset("tileset_ground_dirt", false); - map.addTileset("tileset_ground_grass", false); - map.addTileset("tileset_wall_stone", true); - setTimeout(function () { return map.addTileset("tileset_wall_wood", true); }, 1000); - this.add.sprite(-300, 0, "tileset_16_ground"); - this.add.sprite(-800, 0, "tileset_16_wall"); }; MainScene.prototype.update = function (time, delta) { this.world.update(); @@ -1659,20 +1693,29 @@ var UITileSelector = /** @class */ (function (_super) { var UITileSidebar = /** @class */ (function (_super) { __extends(UITileSidebar, _super); function UITileSidebar(scene, x, y) { - return _super.call(this, scene, x, y) || this; + var _this = _super.call(this, scene, x, y) || this; + for (var _i = 0, WALLS_3 = WALLS; _i < WALLS_3.length; _i++) { + var tileset = WALLS_3[_i]; + _this.addTileset(tileset.key); + } + for (var _a = 0, GROUNDS_3 = GROUNDS; _a < GROUNDS_3.length; _a++) { + var tileset = GROUNDS_3[_a]; + _this.addTileset(tileset.key); + } + return _this; } UITileSidebar.prototype.elemClick = function (x, y) { this.scene.activePalette = this.elems[x + y * 3]; }; - UITileSidebar.prototype.addPalette = function (tile) { + UITileSidebar.prototype.addTileset = function (tileset) { var p = this.elems.length; var x = p % 3; var y = Math.floor(p / 3); - this.elems.push(tile); - var spr = new Phaser.GameObjects.Sprite(this.scene, 12 + x * 21 * 3 - 22 * 2, 12 + y * 21 * 3 - 22 * 2, "tileset_" + tile); + this.elems.push(tileset); + var spr = new Phaser.GameObjects.Sprite(this.scene, 12 + x * 21 * 3 - 187, 12 + y * 21 * 3 - 2, tileset); spr.setOrigin(0, 0); - spr.setCrop(21, 21, 26, 26); - spr.setScale(2); + spr.setCrop(112, 0, 32, 32); + spr.setScale(1.65); this.sprites.push(spr); this.list.push(spr); var spr2 = new Phaser.GameObjects.Sprite(this.scene, 9 + x * 21 * 3, 9 + y * 21 * 3, "ui_sidebar_overlay");