From 9b33e7cbb5df416493b391e17f754099ce721857 Mon Sep 17 00:00:00 2001 From: Luka Vandervelden Date: Sun, 4 Nov 2018 08:49:40 +0900 Subject: [PATCH] Various. - Map drawing is now possible with custom object-specific drawing code. A few examples have been added, including one that draws borders. Please note that those borders are still not perfect, however, as some inner angles are being rendered with plain/full-tile textures. The drawing code helpers will probably be moved to a location that makes them easy to reuse. - Some of the old map drawing code is still present (in particular in src/main.cr). That code is deprecated and will be removed soon. - WIP Naka::Map::ObjectReference. May or may not remain as it currently is. - Some mapgen updates to match the new drawing methods. - Possibly other minor tweaks or grooming. --- assets/dirt-----.png | Bin 0 -> 5430 bytes assets/dirt----l.png | Bin 0 -> 5437 bytes assets/dirt---b-.png | Bin 0 -> 5390 bytes assets/dirt---bl.png | Bin 0 -> 5474 bytes assets/dirt--r--.png | Bin 0 -> 5513 bytes assets/dirt--r-l.png | Bin 0 -> 5342 bytes assets/dirt--rb-.png | Bin 0 -> 5417 bytes assets/dirt--rbl.png | Bin 0 -> 5229 bytes assets/dirt-t---.png | Bin 0 -> 5435 bytes assets/dirt-t--l.png | Bin 0 -> 5474 bytes assets/dirt-t-b-.png | Bin 0 -> 5417 bytes assets/dirt-t-bl.png | Bin 0 -> 5411 bytes assets/dirt-tr--.png | Bin 0 -> 5478 bytes assets/dirt-tr-l.png | Bin 0 -> 5282 bytes assets/dirt-trb-.png | Bin 0 -> 5413 bytes assets/{dirt.png => dirt-trbl.png} | Bin assets/grass-----.png | Bin 0 -> 5433 bytes assets/grass----l.png | Bin 0 -> 5458 bytes assets/grass---b-.png | Bin 0 -> 5377 bytes assets/grass---bl.png | Bin 0 -> 5469 bytes assets/grass--r--.png | Bin 0 -> 5443 bytes assets/grass--r-l.png | Bin 0 -> 5353 bytes assets/grass--rb-.png | Bin 0 -> 5403 bytes assets/grass--rbl.png | Bin 0 -> 5232 bytes assets/grass-t---.png | Bin 0 -> 5416 bytes assets/grass-t--l.png | Bin 0 -> 5457 bytes assets/grass-t-b-.png | Bin 0 -> 5401 bytes assets/grass-t-bl.png | Bin 0 -> 5376 bytes assets/grass-tr--.png | Bin 0 -> 5450 bytes assets/grass-tr-l.png | Bin 0 -> 5276 bytes assets/grass-trb-.png | Bin 0 -> 5358 bytes assets/{grass.png => grass-trbl.png} | Bin src/main.cr | 192 +++++++++++++++++++++------ src/naka/map.cr | 22 ++- 34 files changed, 170 insertions(+), 44 deletions(-) create mode 100644 assets/dirt-----.png create mode 100644 assets/dirt----l.png create mode 100644 assets/dirt---b-.png create mode 100644 assets/dirt---bl.png create mode 100644 assets/dirt--r--.png create mode 100644 assets/dirt--r-l.png create mode 100644 assets/dirt--rb-.png create mode 100644 assets/dirt--rbl.png create mode 100644 assets/dirt-t---.png create mode 100644 assets/dirt-t--l.png create mode 100644 assets/dirt-t-b-.png create mode 100644 assets/dirt-t-bl.png create mode 100644 assets/dirt-tr--.png create mode 100644 assets/dirt-tr-l.png create mode 100644 assets/dirt-trb-.png rename assets/{dirt.png => dirt-trbl.png} (100%) create mode 100644 assets/grass-----.png create mode 100644 assets/grass----l.png create mode 100644 assets/grass---b-.png create mode 100644 assets/grass---bl.png create mode 100644 assets/grass--r--.png create mode 100644 assets/grass--r-l.png create mode 100644 assets/grass--rb-.png create mode 100644 assets/grass--rbl.png create mode 100644 assets/grass-t---.png create mode 100644 assets/grass-t--l.png create mode 100644 assets/grass-t-b-.png create mode 100644 assets/grass-t-bl.png create mode 100644 assets/grass-tr--.png create mode 100644 assets/grass-tr-l.png create mode 100644 assets/grass-trb-.png rename assets/{grass.png => grass-trbl.png} (100%) diff --git a/assets/dirt-----.png b/assets/dirt-----.png new file mode 100644 index 0000000000000000000000000000000000000000..b762402d282e159b04d696a6d78b534db14bc677 GIT binary patch literal 5430 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 tB2>Dv#@E^)e%)|fy literal 0 HcmV?d00001 diff --git a/assets/dirt---b-.png b/assets/dirt---b-.png new file mode 100644 index 0000000000000000000000000000000000000000..d144d4d9aa2da777511d6dec4898b873cc7eb5a5 GIT binary patch literal 5390 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 literal 0 HcmV?d00001 diff --git a/assets/dirt---bl.png b/assets/dirt---bl.png new file mode 100644 index 0000000000000000000000000000000000000000..719af0373ace21f4ce98e5cf49cc5d7ac94fba56 GIT binary patch literal 5474 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 Xmtb3ezxi_-*d;|KO_h8QpI!JL8FK5v literal 0 HcmV?d00001 diff --git a/assets/dirt--r-l.png b/assets/dirt--r-l.png new file mode 100644 index 0000000000000000000000000000000000000000..b029015a0e5701d673ba2c28901d9ca4b08535a4 GIT binary patch literal 5342 zcmeHLd010d7LP^IvRK3wbub1O)JgKPk;Nba2@oX)33Z41^4`lL*?4)72v)7~xqu5U zBidq%0-}TBha!qPt&X6z?v)C*qN7zDDGVys5k;8$k_cf2ZT-IKe9@XdY(B!$_EjnF7-FoPFpFx$?c?XKd zY+W;UmQP~t+?c=alC0BygjWS#&;7c7+F&JdYwk?W>}^=)?wn(cK;w|%`#0zNL8^VZ zk8A zUuQH;tc$;0V_n#%_iGPJ#RrG!t0hmKZJU2c;MsaI`KHUzjX!p4d-@5xM zKHJZpG~nK_)8mo4b)`(|)Z3N-&Z&qolo|JhK`#U8pFCf(J*kwEo=x@O%Ge8q4>yI> z)9}EwCzowaD`$`T^rpoE z4V(Ny($3ylSH(MSMqPd~hQH%xMa`fuL)W*aU)TD&g;uY9ox7!WM0w$@b=GAS>ql+k z46IdTfy+4Sg~t9zwp9<54#_R|)I=Zf8mTvbH}c8q<`=&lX(>LX9DTZe*5NoQ#sAmr zDf?y|9a35Kw5DlndHffvoBy()zh7ws8%tAKmzB=r#fM~`nx3KeZ_V1YH+_NJHhsHy zn(|fI{Sxo$HFf9X1eX{!p*5*RCq9k+;>yT`1MP==3R2S72r9~MoNFupyk*m))`2gT zyR3T|H(yO;SJhR*A@Y9BuggasX_@x4w#fVSRsWWs!qWTR7e~_)G@nc^x%e>hM&kGz zyrn1Im_l($ZQkJlS010yv^75u+_<+6$=bYVSw5k-c1u!N9q^}8qIJv5n7p#aA(L+p z+K_(oVfCD{oFATLr%QTNWD$ z*hV*60!Ru6hXk`AxXw)IOhzin39C%WL@|w0T;vr z08BOn3Fr`;&K5FV{lTnU-r;SuI8_9CGHtM#$zniEgQ1Iug^;FnuGg)HB@VPwW-Mkg zCF2MtO~H&rfa{_bA{Oh^0}E=n(Tq=Q8g1pW#78%qLDIrOotD7 z4jP@oZ1*71u1FN=z?qYAy&Z!hOiYg%KqMBx%<6&%{v8h824g3;D=m_kkYtiYCJCki z3j@`mB1kCUhXqNv;nD~RizVd>xKMZ)n+@@V904y>%5rg+87%~CM6fsRI^d2$2p{3` z5xPnpgwVM`LWnNFcxt+kE5x`gOo&44AQuV+t^@S|>$}?tM~!lWSZWSk#Y0teE}sq4 zVOWLIVU-Gn)QAA(tGRY6QcO{3j4YVOWYVp6^Fk?FPzwsiBZ7UgfDhkUx_6-Mvm^I z*V(0_QtcHlf)P^1V44L^!BG1V0397uh!!?#Fwk0^W%0(Y>n2;dY5`Bc62Np7jI!ul z7L3th7RXxxrV_FtRDi$;(v{s}QWI7f$3iurZooN%vbCQxHPD`96S|_US`2J*5+oEs z5Y2JCR56q6o^QevlkGt+7r6@H)I@^eIuKn1ZZgK&g`u3V-zq4k6JfL%lx|6|K z^Q^b}J2R7PYa$t$`O0LoS+B$Jt_Suef!~4?ciNrB@>}k%Fo$=z$-Ef!3@xFs8sE8m zH$VqNv<|_H7Sp@7?h0`nm&?r$?Ac)hH&t+tW_H}9o#{$e^dIwA2Wh4pjPlBep>3(o!}1uch&Sr38kHU z=Kig43$T1>j+$$sP#6K^tCy`HBn24z5;D28?>$eqL8H9rZRf54Q>IK38Yj4bw6?d0 zxQ$)jCw^hrDz}WaeK`H0ds{ROildPOpzB#u*5j)6=Z2Nhir~=d$88rB?n~Tvlb@F> zSV5=K6;Cg{QuKBkaIhC`#geUlQ@yC?m-CxKU|Z&KczJQJU@uAU7N}x-ls9)>{-3`+ xvw?s6+5?uaZ))sV-UQC>hY_1O0}F2YQKq6{yRy;-j0W4H$fPqQ#bFCq{0Dumv0wlI literal 0 HcmV?d00001 diff --git a/assets/dirt--rb-.png b/assets/dirt--rb-.png new file mode 100644 index 0000000000000000000000000000000000000000..68f0f6043174a3e9daa0191ae2edc97db2038efd GIT binary patch literal 5417 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%0AfZ~+~a7zTWCBE=?t6q?kr z>X<%i%pw(?Zs~Y2j8G~{7<$-mh6yw{9`p^kXVA8md#3wXifr`TXGu;# z!6C;$A~6IpIoAd&x@gSFrZ3VDuB1H)dWH*7pHJ02hgG#J?ch7R)+p|C( zFuBCt$zbhy&O80Bl}U{?aX3}^Q3jn(jiJQb7xt!r-+>G0vRj+w_uOq^9o`|hE(Oet z1TrF7``+-~06Q2aV+g9%?j8s22PKnhf5=zf5sz0v`a_ zD<*|XY33lI0ZTt!Sgf8#V|i1rUZyQUMqqRx!{suE24_3>QGNL3PpQu$6T_v! z(SE0q*X`{=b|cchbU*$vcgU}+)U^F0c`mUHakPtH?QCjWn|I6;`lRYs&}46c+~ksm zjoj>JpY3yg8B7a&bhmBP&W2@s$#KhD{#KUut9?aEd%vn1S1K1|xVJBLeBzcjVBhFr cxeFX=ixvo9SA-_@1z~C7vMJKt*^L)>snu>XuGSZtuH_kagVqN0-kk!tnMQ9Mel?Np+$E+r~4n_BxHW~ z`+fJ`@BY5uBq>f#iXZJc(UZsHjaDb9Qow&7?m2P69Z>A|d zX(0G)u9@HyHd4>y*}lBH*+>V4dadbUN|eLPd4`wxzuo>X1E3`s0l zeDO@v(N+0N-$NHQb+zqlPH#rZQT4&cgj<7ZySnBqN$5Uw`Td;S$1`qTp}V%++1%Xv zxb_R5wY%$lbFLTFv`y)pRxlxOxn3i^rY%<;~>btd0B%o^i#JpE<4Jv z2tIo2?-bmI|T zOyL3lP0=~-4@*^{W#Rgun74hq{mySI?Q$Qvae6rIVo*UXQ~!YP+))3JXurI6ryD=* zqqpjGp{xB1pj9)c-b$WV-;yTXLtfe&Jlks?zBZt9!u-UU6^kVYb=PK>`IYUin7OMw z^>(-YW$F5l~H+)}*rlYik&}K9PBl36=Q8qJ%XA>-6OJtHJC3L^~9}u6^DWQc@ z4Wco}5?N$I9!;d?C8gnc*|*ib-VBv_1ZGa5_`YEwdXUKG6N!Z5_QL)dI3 zv`CZ8kELjWFA++Fh#<~J=7^z4Pkscg)1xV>Sq=(trG&Cr){Mfi)oK-5!-N!_35yg8 z1&oMcu~+~Q0w&kQVm5(^3F0VvIaCCL)1;XtDHEUL#I%%!RYDLL=R3&3C?016LB|B# zwVj?}b+8&-NWgvo02U*NT!4rLVg>A+4@NbbzHAfYP!Z?}+b}aM5+bnCI3R;z<8u1v z8#IGS1N{z8AsEU+<3wBzVPb=vCuP_aqF<9AK>^?c2+Rfx40dH- zy7Q#*YE5!q4tEZjq|t28;Ly%U9o~mCTWEtFqr+jsKp4SJ7{DwVfCu?~34?CNPHtBk zRZ+NwV^OP=5QqqMqz*+C^6(g$N)j74OC=J;N#qhFHbyK)q>3=PG&)Y?l&&^0EM~%q zm+2%(SBT|=1kob`1%_({5~&suU@|Q((93Xn7=g+0aGAu3VlGVrKVXKzR-(gkZ5Scd z3Pd6d5lCcmsX(ic0X~UXF4KqOgiNlmQ*mOV(aCBhBo-q5kz@nL>M7c&gc3=U#nwNN zMjDA!7UP5xNhKn2xC9Y{he#eK>jy0$XaXo=O82yKiq4)(&($s`aQ5{)gMs^)Qb1#4SUOkz1DpCUTtsgrCV*Uu&UKnU zl~~bx)!Tgxq+KdL-|l!6!#Nd|5QF6qI{Og-9eaoHEXK(O_iE3IU+Y;Q z59nOzU@|y7FM4IZqcXX+hN`*BPqmoM29lr$9@xtQeg!U~KkhKg52ZW9db49Gb1vu^ zS?pY^>9x}j0_8<1YV*HY-^?w2}B|8_=AaBb5cO&e~yhK)}5dr>)Q!-}&9x6jaLWMtTS z+C!GPl(whW`Qt9#4TvatqNlspFDVe~!s0_z&=#dAk4r literal 0 HcmV?d00001 diff --git a/assets/dirt-t---.png b/assets/dirt-t---.png new file mode 100644 index 0000000000000000000000000000000000000000..d1b5043385aa8af0a33c53649beb61c6d9bb8e31 GIT binary patch literal 5435 zcmeHLc~}$I77t4i5yX9cNQ_T3YBH03fv_b3qlCRyS{EiWlMqQVaWasAw#DUHtl)gvT8`}^X&HbIs#Hmy~Vx^l&LaR66bSlG)({Y<# zOQYGYZkv*{=IB`O*6*2ho}MGu+)iH8ROex7Wx})9M4wB#O65#IM{e;td*OLY>G_av zCVV-1)5zvKhsu6fIazo#TYKb}^|=L2Pm`l7R&Q83cn~`bYAGR7=PsIg+TXpj_1c~d z;YqV^d6h@jWc)in<8tb>Y4ge-d^F?qs!P@@(0KdoC%f zUY6uObmFR?zXYdK`Jx)XOFroV(2;5Ku!ebQ#mPN{ zH}D%T_SzGWUvU=VhZ?@DI_1WUNsZgIF{+oFD3saATQ=xX!ewOd!a=*rT`R_2 zzJA7Qwx-waz`*T=`z!??*3KXBnNe6&x_9c@!(+<=J_ul%_z#2=S5B&_oaB<~S}G%J zCB(YMflKrEaU)E#D{TuR!-*jJ(Zo68Yd(M@Sc+fpI@9zsH+#S%|lN~NkQu=M) z@_kWUo))^1@$^QIkXebn`%ODjBlqNdzPv;+SkOE~lf$gT@`@JfpD<%TWo|6w=p%m2 z*};prbMT5Mo;zI(3(mz|hR0sZ4jGlrIl0X}YE;Ix4LMleJQue`3*AzN z)O|6gvF6zA8TY(>RkXqn16B#g`6;b;@(zgnR-3O@_Rqd=Voz6B8G{F&53SAi{Hl26 zP`|RZ(G};{CsYrvxO7}vGF3KX(F#vx?EC8;EWU7V{_f)SE6lm^!bZkNKYM>`&CK+u zS@KLRDr+0Re8qCtPZXtu>Srt#z-C~GwMmNoBp!t$1|9|Wg%IMpZDl% zYYyyDbin|ILmxdD2vgNjQj{>V5sc8_Y@5*x1_q556k;vIVkU_vWJV{VnW?A*V}t~I1=*y4z=%@_-DWhHEK-|{;oy~m-|c3I zL3co?R2gHcI+iXcNSw}R^Vu*@ z1gV2K5{U$Yxe%Aj0tl8R!$cuAmdP^8PSMVxz%3}LH&c4TM7MJy8X}F7F&JQCTdjILoHN1-l@r-paAff2+W2wOV^;&EV$j| zNZf#FA&`|L^sa|Ss?@O^KK6Ui>5XQGhaKG&iJ=`ha~f%IU@#QI4Y(0xVgbyYm+-*9 z!=c+`9OMqAr3wN~v$LoaG6t})F+C=QC1O#yP{EfgBNQBtk}u}N@^CH}7D#wvL70-$ z#a(5xP>2b|U%2amy9U;1MO+TT!bPZ<#mBf}mPUiYEG`$92sEfzA{21DP{fdW&<}{A zyGRfW5s0{`h9%^|FpIAdYgihIK)~YTLY`0~=HVz8cTm~Il!nEsWDG7F?zF@j5K2ps zMj0bYZ%VUuZY1iBcmjpkh2jYK9Ii;j;qhPzkH-^rf~Mf41(dp-lLNDbjtvZzMgT$t zRGi+3=y1qv(m6JOcv3luBNRa<5`;mxRr~ZY=p9ng>5h(C-oq^2$C>5 za(4_WDfa4~<-WFOfjnSxNxPH5+4G!N`a3JrKGvivd*vsjnau`0PQH9$FADe-xS&qE zvswPgy(_HUTTYlWz|2UYVyvdu9^VbHogqq(;wB66y3o5q+OMn2!wO;1>Ok!wz}TR^+pQ35%_I&{omyB>in3G zo4_BSR`4PI(xi8#;2!`Un#qw0TATg5=+LG-VCiX|m}H^R*rV((7u&{=bYSd3snp6I zw|cn^p!>Lvsm6h+K&1#v6j!0GZEYb(7kYovrXBW`_roKt7~RA3$xdG3{>S;n$rUaU z0UnI9f~E~SKkaYK%BK5&%d=JA!8BS-sCwJeG39CyCQYS`R%{PXp8p#xK+>%M literal 0 HcmV?d00001 diff --git a/assets/dirt-t--l.png b/assets/dirt-t--l.png new file mode 100644 index 0000000000000000000000000000000000000000..5d7ed693a76531bd20f57f8826fc65c7cf2b82a3 GIT binary patch literal 5474 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 literal 0 HcmV?d00001 diff --git a/assets/dirt-t-b-.png b/assets/dirt-t-b-.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec57be3874a63a5d8d148315853e8f1ae904bb0 GIT binary patch literal 5417 zcmeHLc~leU7LS6FO+~GOxR3@x(U)YhKo*ERAS_WL2-HILRfd@fj3JpYGmwC&2(CR~ zwOT}$iqE6e*CR)9d4hTbvAFM6ipvr8xpP1el?t!CFN=UJ+Ir6Gf5J)NyWj8rzI%V) zy>|#}qGpE;b8vHDFc`y>;fiSR)7kX0V}f`0=RGikVLLc8Hja*l4J?fbO6xH0rumiQa+6ypQ^Ddx z2V$n4iJZT-Q}53kH~s6jB9~1bdk&R02)DoZN4m?6_<(r@H|}@8Y#fq3XUwn1ztJ8` z)W1T;1lo@Bym$WK_|!sF!7sq~jGBamop{DPjL^BIr_OL2qSm!(a*oy}H^vjq0J*WSUz^okAv%{ z{e1JHLu#VqK0m*Tk}9fr@tqv!Qmt>{v$lQRct2Je+8 z-l@_RJsq<)u1cW(Vx_R&#gIQ~+|nzhqeWc#w{bL_+pwTI@+v=<(c=ejq}%Cf zPr^St!ptucEowXe!>bvcbGDJ|nsS)#L90JqF~PI?`%5RBkqG{jVq4FM4Ux;DBfRhD zg$U;-WtH+h9-h-xR;k2CS8#OrnIY}o70GR$8{?u+{WN!Hc+V3}nVaTcRjIifi!|4> z961NBlB=#&(+&H(CS^A7e3-lc$0t6Tth$?;YsNjkt`zm9WG|Dlo8sbsdd=|jHHB$T z^>qo1oCCSS(T!5S!to`W(e*s#6bn~K9<9Bwg7I)=I-LC$3 z2qpS{-q~BvUuN$wdbozYp=|vMn;4IYD~4^T%-3EL zWmS()`De5pZjjvy9>qvnV81+z`fDd-N8;pPt{iC>67@w<%d)GNbM|fhZlpdx+V{EFk`9NO$jrsmX|3jU$o=DbV6kJdJH6fhV6e2?aCeX^D>c%cnkvT}SW^XQnnt8%jP zZhPuF7?S736LtigZVZat-Q_BKz2fDhps;}Qr;FBIdRlF0xloi>Zmig+T#)?CL40|^ zgXWN3H#Vdz7JuF`!}+d##OwBF&=$w`q1}&)>+ZEjl$Cd86`t&vvXI`JmzBDDep4u6 z*SgDg2XDmJ+sa3XURA!ld}!B4h}m<-#bDh;fZtJ(v~@hJS!j4`K!cjT#bnNoMKU#r6lDj@aPT+E0D%^xVU|&wqN8L+Ior%D1HYThJT}V=p*3=L zoGOYHOpq8$#1(NNPKXgt7qDkIu>46>EsIu!S}DLv&Q7Ljy^O~*7z|v4kV}wBJib&a z>?pXV6+}! zTAS%98s#a$LIm;w0Gh^l`4bcX{uY5gC5`GIbQ*=3OyP&E%^ zWe&anp1|Tz`xgFz+}wi zW~F5c0!cHmC>3%xuy9cvl|fR8ILKEa3JwWX@cAJki3kb~5(pq4sZin*7{c%8uGCR9 ztV6Ij?l^Fl_#i%fslbN=tN9|1$On^hU=$K^5J-Zc0v{<~45R%hB1s(d1DrBYBp51? zO2xuNjtKD)b3`y7;V z62{Z(lHMdE3nnp`CdgQVNRhKm0kBM-=Kf*%TRTG*K_IZHgUnzIH8q#Dy@KE*o_Xod zdms3BOfkuXLHFl)`k=imfh27pNKGUenYa)`==bvs1ny;u27`^F$qeNmB=sAdzoinx zfiFR3^gBNWOSP;l(Gdf%M!tPvZwmMwIR8GowORhi zy+6$29Zcvmz|2UdBMrLu9zOuk!VrNYn2sXe7kYn)<+}Pk{6NeW8+fRKXEd+(A#E*J zQ%C=WU)DDG3r_&l9}oE;eLu?eQLYbC;Df*)tLvj&AEdwsfj?H)|4lB3zK{8s4*UUX z03YI)?0uB?d z`vgeY@B=XADHVaSk~2tmPftMIa;H^2YPU+K)}!4hi)q)sTUb)vR=72xeo&|vlU-Z< zYRm4gMr*TIv)q^1%)Vtj%Q{&%d*AapPE!k0v)8*mWZM)@@`^5*HOKYhHAdFsrgL49 zQ{nbs&qOkX!{S%kj~m{z^X}lWM2RMXkhvy>ThCwsd4MX?)Ru$f^m4cNau SqGTF~i=hmet*8h}$oU_^FxM{t literal 0 HcmV?d00001 diff --git a/assets/dirt-t-bl.png b/assets/dirt-t-bl.png new file mode 100644 index 0000000000000000000000000000000000000000..d12527fc5f033768cd027e9c32cc7a7ce15dd3d4 GIT binary patch literal 5411 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 literal 0 HcmV?d00001 diff --git a/assets/dirt-tr-l.png b/assets/dirt-tr-l.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d343be88e6c4c793b2112d0175f91c700f02d8 GIT binary patch literal 5282 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 TxIdXeOqxPIRkn9ha@KzV5Ma!2 literal 0 HcmV?d00001 diff --git a/assets/dirt.png b/assets/dirt-trbl.png similarity index 100% rename from assets/dirt.png rename to assets/dirt-trbl.png diff --git a/assets/grass-----.png b/assets/grass-----.png new file mode 100644 index 0000000000000000000000000000000000000000..4d46787d3d75cedab16ee35d549a22570ad79add GIT binary patch literal 5433 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 t)crds`fB>QuCaxTk(m>%Y4On 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 literal 0 HcmV?d00001 diff --git a/assets/grass---bl.png b/assets/grass---bl.png new file mode 100644 index 0000000000000000000000000000000000000000..293f08a4077f1b209e2e54658b916e3af9b47d06 GIT binary patch literal 5469 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 literal 0 HcmV?d00001 diff --git a/assets/grass--r--.png b/assets/grass--r--.png new file mode 100644 index 0000000000000000000000000000000000000000..efb8815e90fdb0aa8a38ee56e4d33dce341ceab3 GIT binary patch literal 5443 zcmeHLc~leU77wKeDuPQzMM`57!J|ng`$8fD2@)kl39{JY>tr$s14$;GnUH{-K9!1E z5!b`1r9PF~S2uaUjy1@GqBE&vw>p8Fg$vJ_1_xs)7 z{qFC(_YTR5Imt7J4GA4WqtS+`5)~=n?{L>EU=aBI+T9+QMteD|AT@(Zf$elFfg3Or zN~iLzC>?cR1{%$AVP{%q*>_QakIqhU1_Vqf>)5qlBzmtyvq+Wx!|6@)CZGJOdN?C4 zK-+WYa%|6)>dBczXocp|_%~Q}dY-f`?CgZ|wYJN_&J%TQCx87aE@BNKd$9jDuj_$; zUb~ZBQ!vE#a7Fuw&824}Nay*>d2dCJT-cc(qrK2k-7x=HcYFOs%k}%MELzDw{}Wke z8WU2~uz7a?V@=dJd(*|`MQbzPKXNhVVCk_RUUeAn1Vyi}Szy^p@2FY)MPv5&nRmK~ zWaLg}!_mUKOZE+RKB)i7QWA2o^We?uyE6`-TyP4V@`-=rOHt^syN3F%Ez-DSWycw1 z8DD1jmiz4-8M$}H!d)Fr8~yJ`Oih2M(^TVg;zAC3qvGXqQ`WZH^Nw?LRp{cOQ%CO@ zeCl4w(zBmqE$I@SvuW3!Kx4^>;8p*a5`%sGA;)l&Tkg;;t-W;=dxx{J+@7&`c=&j2 z)-P2F>G??2^3l-tq0Z%g25rz7<*!p~^gmA9rR``Ad%Y;WJ%~2Knf7wgtvr)#WwmkC zj$ua+aF%Q?X=a|-zsM);vsKul@gstXicKVvbOp^l9iFoxWcb#r5sTiRG)^!1xOwvx z1`+ki_KEX;4&~>Zxb=1PrO=)KqTzFjHU9$#B~B{P{K z1~u(Kpzz7QiP_N--r7yO*Vi2ycXPUM>HJ+y(nFYRoNrOp?$cjJ+W&TR-?dez9*@TF zjVAe(4~IFkQ))IY{Ovx^w&^Z##HIH!Gpt3F&UHD{eWm^jPbL_(7M* zvhYyeyT=MYTwC5&*wlXd_ShR!h}W9Wme#i%d=RH}UZ(v_JO1xZpDpYyKlx?Uy?&3U zx)azvDDuIu!lN~%-7iHJyxZ#k)4qvS^#vE^p8jT9{nWrPR_WuQvhNdfN-y^0M^s-T=Peoxqq&>FHit9oDa*1}ugF35iqd!%0Bm>;D1rua;UE%Jk~#~;sZ+t4+B zX4~8xe04?e>h@*ohStl$$!|S4(4tj+(KT;(*x>z*BOeD(Z@a3QKV{z`Ff)c@U`}MH zlcWf4X2E(~hq4@IE0`lRnk>d)g^^s8qU%s2W|1@QGQjm*C^o*G4Lu3vqATXm8Om~<~7EEObhXN%L0<%&WZlSw4VI6Lx<`v=-xqRs?>A( zd|dZn#LQN=hYRhE)FXX3tBo+ZF?xiJnou*ygapi-r|`hP&tbr1+~jVhr3xIexmZ*R zIRjW&dQ2~cBw|sVP{EH^CMY-@C11>k;^VknNFd>f1+hwwm%GYBQm_RedPJH42w_lhm>D*rY^%lS-T>lB;|Ua| za3U4QO>&0oNOYH{yMO31PiIJza0GUBkQNhx9ZzU!IU!2JIimyfA>Rt6t z9~0)5icWWTyc9-UD#{rooQLY&R{(VE-9oZqixCB*)zcPF?AQR+DuG2@p~xU)ibNbP zlh5Z$m=cjh#Do!us~5o%JtE*e%}(M5$_^7~tP%7LxM$F|?t7+3xr=Pd(`b7(3Jy6H zl1L$l(R;mg8QV2IpQI;qjR&<_>Mejr69r0OAiD$tH@kCp4=Snt_j{K6%$^1EfXO8t zNCr>ObAH#~Q<<)@CRMpAUu&~kO&Cf%ePK@u_;+x!e!Hhx{>a@M*6SUQTl2xp$fh)Q z%QM3d0PJN*!VuI#;?Fv|H>CHvydHkw%)K`7PzBFucHcwVQ?9O#{tJIRZSWUH0Msvn zJeR&N&>`g-{KX1yddamN@D=&lXN^OK16x9a{OwJNtxF8(#gP4GPq!r z@?U;M(qf~nke<*lFqudw~i`UG@2cny*(=M{#tM@no60hsET`Y G$$tS*dEk=( literal 0 HcmV?d00001 diff --git a/assets/grass--r-l.png b/assets/grass--r-l.png new file mode 100644 index 0000000000000000000000000000000000000000..2a3f38efef854a51bcd0628f4ded6eab8b483d8a GIT binary patch literal 5353 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 literal 0 HcmV?d00001 diff --git a/assets/grass--rbl.png b/assets/grass--rbl.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb42b61debdac403f480b8c2b0a12aaad5f9e7f GIT binary patch literal 5232 zcmeHLdsGu=7LTH!Ji7RHeUxlKj}(&0V**KUwiRaqan-y{*@F4}s|_CGi$kneuK z`}^+wefQoWDM?M99OOUBpTpq2TWkzdbsvj2KzW?2#OY5PLuN74^ zp*NfMPuxcOM4BJ}YpY}0?hQM~p8naHDGoi^S)16j;FHi}VenhMx|s zTe|;?)u#uq&WNinYAu>J7B^t?QmYb*eeaHon3^QAnHFI+k%?>SWprlhAv1g-ERp6O zN{iD~wbFu}S6YW{OPh2xVLSGYe+P>e|^uSLr1M@{^qd% z#O#}uHyYY=+A@FaaAfuGXWuMGijIUtkNESMS(f8hBDbf9RMuI7{!%-Zt6B2J+Q83W zFE5*5TzYl+#UAR_6c{6A9iUG0`lX;nFW^MKS^p@;C1KywD3(xS+ zDz4fZ5-?Dz*Tb@@%X2<}b4v!tpBuUHNPfbwApxHbKM^^jc4b)crttBJ;n(zH)4@TX z%8j)AT4iF~slGq--xv`2hPN`gQrk%2Ae_RT&w1_Y#6~zT6w| z!LgELBll?0#OCpRhQcYvm^TL~kL!#vlBiN)cf$KB;*5ADJ?b{6}h>pS0 zg_`el%#(id=+hSJWOGc_`GyDY@d8dY7fZIx_I)L4}o1g?wEJi(CE`Y@y^*Tv-m{b z_34K-2C^DkGwAVzYu_*Xia+nxO20Ky{q^bJZe+I2o}vHhTzDZ8sl3JFTs~SF}JtvNjNF&j2L&L@T2u}N;@}}-u^gtROfX2g1&Pa zGSBZ5{8113E|>tlmZ3{hprl2BV59*TI4w5NiyV$J)@eh~T%6$=a1&uw@!I#+@wf!0 z;!T(8ggRS1o=r?Cpz!p9WIbAti^?%xY>dCssQ?5PoI$uwi`hymoGPA+R{`F$W{Agi zL6}?>FGH8gjVCFb3kzU@kgstPd179SKUYa%Mn#%B!9xL7Dqc3j*c1@ta5w}GiGZX` zkVr0ty$2IvvAH~0v^Nq%yKpu;Wp-gO6vEB81!O`4X3;Zv;NRuYV=^vs zm(mI~iP~8fty;wc76C?J3ZYyUJt;~J$7>SQB9R7`!NT}SVzE#vm&l}X8j+W~)=D#o z6~&*r6Tm%6f}tWrF62iWU^yQ)$fSH(lnCWVOJNxzgN-OE!n`O_C<62YV(uvtOd^+H z5?IO?V^SF(mWoAunHU%H4MIdLgblDzWOPTvim8Z8)v9=6fzUp9GDbo^EItOB}^GNGdmlN-^Z%DDz^Tp1@s9X<)F?43)3_m8AX)r*v216yQrz z`CjLz<8$3B_w+FnE~&U&SH~+5lvPp1qmew^T~9zq_ZFIsSWP$>t)8}cYA1TAR=H7v z<6@(fZ-^Ed`7jQuOO6|&`G`S+NM+(E6h&ay1$VL2q>*tT6dq>+eFN?pw5{u&xf5JP z7XB>Sk&S~OBZP8=P{?y%FINe%)AMP1N_ITxbP8_)JesI+iU8RqP^86`yK7J>u;=%z z_=PVs_iWLlr!up{|Ftr(D^N{vCfj zZSXsu0H}Kpc`1E+%JotTycD>%y8dr+`FDTJ$F1NWPzU%Bf9Bme z!@(B-zJ|ofYR+QLUQT4fy;HHkGSD_<2F>9JLfKaz=jPZvVDw|OI*s3z0G|<@;Cn3* zlYz;uRmbUNjp(B%Phx$>E$si{Pm2TnhNcG?$7I!yJ9%M)wd`^~Nzja;ou7>^o7?bZ zRfI7sD@%qH3@IiLR+XlIwB!Dga81#H`iXx!KpeQ={`YXn!d0v2h5IHB^Vz@PN$KF> u7Y-GdR4hC^ToBnYG>uhDr0 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 G&G|2ReCvq- literal 0 HcmV?d00001 diff --git a/assets/grass-t-b-.png b/assets/grass-t-b-.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6f58e4b84dfd1a203960620b147fadad8dfdf6 GIT binary patch literal 5401 zcmeHLc~nzp77t3p;!><&>oO*WqM{}*$xF;4kpcnDlmG?lcHCZGUdSs+UU=_80``d1 z6%`j$77>eRY8~r>SQT+!80tb5ovKk}Tw281T2T>|8RkofEHh~9In)2(oFshr``zDn z@9(?!K0;v^ zR5QlLthkQBu-Xsj;(P9l>b6Hp|a# z4Xs}LkD^A@Z=uH^@n+rS2re@p7p#xjex@virdg-PrM+v8kQF;f*g+;^O}#p_s%mr~j5>%enl z(+R3ZbY=9A5)xbPTcKS(Vy>?oo*TO&GmW+Btl{=1zvk?IVl%pGusFia^O z9`W0EzfJdP9PGK9ip`f_{W|SfrtpUfIHPV#(w>6V(-j+}?>2y1p9+%N3f zw$i&B9`g>|%RW2v@YAX}tmev3WcuC5-(iI=8MbhU*nY2g<*|AFsnD=&WZ z3<7WaEB|#jC3MG6sm1r)MJcx~T-Hy}oGcpCFFiu=_Xnnc*#pmCpPS%&wa9JdrM(NY z@7!B4|DL^i^DWze&nwQ9&ACJ^ikPbZW{K})Ir;EWz9gIaJ@b2}$>8zFGaU2qw!9m)F-}rX{qxzO`fF7c(cdf68Jko68v~Ji7MKJ+IOzT<>PR_C z7ogAo*LH6v&uMzb|o0&Y@p9+n^FuyL(|Gg++WtIc7U9-o*-VsU9v z@n~8iD${a;$9o4^<$%D5(FogWG?*y4Rl#xc%E9jrGsIy#A#|dGGesT44kJj6E#irI zd~UcEPZ4s)d$WT`txg`RjBrtam4c(EX|o)HEEWsT0`mwm0TRe$GKepPghDPraH&)i zjaa!R%HKiJ%Av$4l*G+6PMFvZPDDc_(+Um;?6Y0uU>6Oy0;B5y$J$9x(OO6a79x-j z06;=MU&`eRxk4G#(I4!p)otD;%B3RE6S5*^NWkMmMq?)riVja{Kd(yEoL zWD>=~Q!o?l-|XzF`2!RH-ig3$NTxalolId4lQVIHRtJHsoS}C-bb?A9)8^y2 zhXmYcc6vC_9g$kJ4QEa!4Ni;}g)jqV1es8PSR9dbi&}0XTN~z!g z3r~w{<$Re`5;|5X3JZ@=3IyRIsfZsIDird?GFU1O2^Vy5SD7dpF`?KicO1CGLakV& zboj0z+&CzV4?c}R>(!4dNK?Uon=LhA_9sNh86retgTMm%oB;%LMn zlt3&J2&H4i5?CgNL2T`yNf=3iQg?6)_`I>s4J|5<0E7srINXRNV366A;M@S>$-_tt zp$RgcAPfqQBP6!N)7d}lAXjI|BMB67bdVE_X&uewYOhcv0dg*bpf`d4hbc}^SWJJ6 zrybhH5<=1zf=rAiqcxvlDE(%huE1?fv0$)KG?}XUouvK?7t~sb6M-*5rgk_#4ohlX zwN4)c?v#qnc6PiRK^-b8I24kCX`NR9bZp&1^@u3}1EbZ|7O(7h7uAZ0G&%`9R>su| z5e-+QL!?}p4u-iJDJ(${tw;i+XlHhc(9srz#6l84-++4tZR@;e_DE-u1$IVT^cV>$W7Jzu34rVtH6Js9KR_+uOZ@n(ztn+$05CNl zPf#)zFv=NYA{s9Q1B;h=;#7*k;Q2dVZdO}x3NU)mDs{NW?Or|K_ZpVcvPuL@%T>yd zcLRa! zeOtEO?lFM8!y-QL>7T_v*3{CH&J4XZZ#3(IWDuT{&p6f+{NvSc8m5A{7^?6n<<8LA GU;GEW!rOWP literal 0 HcmV?d00001 diff --git a/assets/grass-t-bl.png b/assets/grass-t-bl.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa139c021c45165e28fefc37b03b910821f2b6a GIT binary patch literal 5376 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 KRa+xcX8#V+7wAa< literal 0 HcmV?d00001 diff --git a/assets/grass-tr-l.png b/assets/grass-tr-l.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e51814482eed784fae3a498912ae6720fdd71b GIT binary patch literal 5276 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 OCPS&1A>S9Aobz8b6uGGY literal 0 HcmV?d00001 diff --git a/assets/grass.png b/assets/grass-trbl.png similarity index 100% rename from assets/grass.png rename to assets/grass-trbl.png diff --git a/src/main.cr b/src/main.cr index 9884eb5..7e86fab 100644 --- a/src/main.cr +++ b/src/main.cr @@ -4,9 +4,7 @@ require "json" require "./naka.cr" class ImagesLoader - getter grass : SDL::Texture getter stone : SDL::Texture - getter dirt : SDL::Texture getter tree : SDL::Texture getter pine : SDL::Texture getter flowers : SDL::Texture @@ -16,9 +14,7 @@ class ImagesLoader getter rocks : SDL::Texture def initialize(window) - @grass = window.newImage "assets/grass.png" @stone = window.newImage "assets/stone.png" - @dirt = window.newImage "assets/dirt.png" @tree = window.newImage "assets/tree.png" @flowers = window.newImage "assets/flowers.png" @sand = window.newImage "assets/sand.png" @@ -38,6 +34,114 @@ images = ImagesLoader.new window connection_font = window.newFont "assets/connection.otf", 30.5 window.set_font connection_font +def simple_tile_drawer(window : Naka::Window, tile_path : String) + texture = window.newImage tile_path + + ->(map : Naka::Map, x : Int32, y : Int32, z : Int32, tile : Naka::Map::Tile, object : Naka::Map::Object, draw_x : Int32, draw_y : Int32, zoom : Float64){ + window.draw texture, draw_x, draw_y, scale_x: zoom, scale_y: zoom + nil + } +end + +def bordered_tile_drawer(window : Naka::Window, base_tile_path : String) + # FIXME: Both excessive, insufficient, and broken. + + mod = [ + "trbl", + "-rbl", + "t-bl", + "tr-l", + "trb-", + "t-b-", + "-r-l", + "tr--", + "-rb-", + "--bl", + "t--l", + "t---", + "-r--", + "--b-", + "---l", + "----" + ] + + textures = Hash(String, SDL::Texture).new + + mod.each do |s| + begin + textures[s] = window.newImage base_tile_path.sub /{}/, "-" + s + rescue + # Not even sure we should be doing something here… + # Maybe in the future, in debug mode? + end + end + + ->(map : Naka::Map, x : Int32, y : Int32, z : Int32, tile : Naka::Map::Tile, object : Naka::Map::Object, draw_x : Int32, draw_y : Int32, zoom : Float64){ + neighbours = [ + {x, y-1, "t"}, + {x+1, y, "r"}, + {x, y+1, "b"}, + {x-1, y, "l"} + ] + + neighbours = neighbours.map do |x, y| + map.get(x, y)[z]?.try &.reference.== object.reference + end + + t, r, b, l = neighbours + t = t ? 't' : '-' + r = r ? 'r' : '-' + b = b ? 'b' : '-' + l = l ? 'l' : '-' + + neighbours = [t, r, b, l].reduce "" { |a, c| a + c } + + window.draw (textures[neighbours]? || textures["trbl"]), draw_x, draw_y, scale_x: zoom, scale_y: zoom + + nil + } +end + +stone = Naka::Map::ObjectReference.new( + name: "Stone", + walkable: true, + drawer: simple_tile_drawer window, "assets/stone.png" +) +grass = Naka::Map::ObjectReference.new( + name: "Grass", + walkable: true, + drawer: bordered_tile_drawer window, "assets/grass{}.png" +) +dirt = Naka::Map::ObjectReference.new( + name: "Dirt", + walkable: true, + drawer: bordered_tile_drawer window, "assets/dirt{}.png" +) +sand = Naka::Map::ObjectReference.new( + name: "Sand", + walkable: true +) +water = Naka::Map::ObjectReference.new( + name: "Water" +) +flowers = Naka::Map::ObjectReference.new( + name: "Flowers", + walkable: true +) +haunted = Naka::Map::ObjectReference.new( + name: "Haunted", + walkable: true +) +tree = Naka::Map::ObjectReference.new( + name: "Tree" +) +pine = Naka::Map::ObjectReference.new( + name: "Pine Tree" +) +rocks = Naka::Map::ObjectReference.new( + name: "Rocks" +) + altitude_noise = Naka::Noise2D.new.tap do |a| a.add_octave(32, 1) a.add_octave(16, 0.5) @@ -61,55 +165,61 @@ evil_noise = Naka::Noise2D.new.tap do |a| a.add_octave(16, 0.3) end -map = Naka::Map.new "map-test-01" do |tile, x, y| +map = Naka::Map.new stone, "map-test-01" do |tile, x, y| altitude = altitude_noise.get(x, y) + 0.5 humidity = humidity_noise.get(x, y) + 0.5 evil = evil_noise.get(x, y) - if altitude < 0.25 - tile << Naka::Map::Object.new "sand" + if altitude < 0.35 + tile << Naka::Map::Object.new water + else + tile << Naka::Map::Object.new stone + end - if altitude < 0.175 - tile << Naka::Map::Object.new "water" - else + if altitude < 0.25 + if altitude > 0.175 if humidity < 0.33 - tile << Naka::Map::Object.new "sand" + tile << Naka::Map::Object.new sand else - tile << Naka::Map::Object.new "dirt" + tile << Naka::Map::Object.new dirt end end elsif altitude < 0.75 - tile << Naka::Map::Object.new "dirt" + tile << Naka::Map::Object.new dirt if evil > 0.5 - tile << Naka::Map::Object.new "haunted" + tile << Naka::Map::Object.new haunted else - tile << Naka::Map::Object.new "grass" + tile << Naka::Map::Object.new grass end if altitude > 0.35 && altitude < 0.65 if humidity > 0.4 if humidity > 0.8 - tile << Naka::Map::Object.new "tree" + tile << Naka::Map::Object.new tree elsif humidity < 0.6 - tile << Naka::Map::Object.new "pine" + tile << Naka::Map::Object.new pine else if Random.rand(2) == 0 - tile << Naka::Map::Object.new "tree" + tile << Naka::Map::Object.new tree else - tile << Naka::Map::Object.new "pine" + tile << Naka::Map::Object.new pine end end else if Random.rand(10) == 0 - tile << Naka::Map::Object.new "flowers" + tile << Naka::Map::Object.new flowers end end end - elsif altitude > 0.85 - tile << Naka::Map::Object.new "rocks" + else + tile << Naka::Map::Object.new stone + + if altitude > 0.85 + tile << Naka::Map::Object.new rocks + end end end @@ -119,7 +229,7 @@ Naka::Event.loop window do |event| next Naka::Event::Quit when Naka::Event::Update when Naka::Event::Draw - zoom_level = 1.0 + zoom_level = 4.0 128.times do |x| 128.times do |y| @@ -128,17 +238,11 @@ Naka::Event.loop window do |event| # FIXME: # - Please don’t draw more than one layer of ground… # - Transitions. (eg. between dirt and grass) - tile.each do |object| - image = case object.type - when "grass" - images.grass - when "dirt" - images.dirt - when "stone" - images.stone + tile.each_with_index do |object, z| + image = case object.reference.name.downcase when "tree" images.tree - when "pine" + when "pine tree" images.pine when "flowers" images.flowers @@ -154,13 +258,23 @@ Naka::Event.loop window do |event| images.stone end - window.draw( - image, - x: (x * 16 * zoom_level).to_i, - y: (y * 16 * zoom_level - (image.height - 16) * zoom_level).to_i, - scale_x: zoom_level, - scale_y: zoom_level - ) + draw_x = (x * 16 * zoom_level).to_i + draw_y = (y * 16 * zoom_level - (image.height - 16) * zoom_level).to_i + + drawer = object.reference.drawer + + if drawer.nil? + window.draw( + image, + x: draw_x, + y: draw_y, + scale_x: zoom_level, + scale_y: zoom_level + ) + next + end + + drawer.call map, x, y, z, tile, object, draw_x, draw_y, zoom_level end end end diff --git a/src/naka/map.cr b/src/naka/map.cr index d6f1650..42209af 100644 --- a/src/naka/map.cr +++ b/src/naka/map.cr @@ -3,21 +3,33 @@ require "json" class Naka::Map @save_directory : String + getter default_reference : ObjectReference getter generator - def initialize(@save_directory, &block : Proc(Tile, Int32, Int32, Tile?)) + + def initialize(@default_reference, @save_directory, &block : Proc(Tile, Int32, Int32, Tile?)) Dir.mkdir_p @save_directory @generator = block end + class ObjectReference + getter name : String + getter walkable : Bool + getter tiles : Array(String) + getter drawer : Proc(Map, Int32, Int32, Int32, Tile, Object, Int32, Int32, Float64, Nil)? + + def initialize(@name, @walkable = false, @tiles = [] of String, @drawer = nil) + end + end + class Object - getter type : String - def initialize(@type) + getter reference : ObjectReference + def initialize(@reference) end def to_json(builder) builder.object do - builder.field "type", @type + builder.field "type", @reference.name end end end @@ -45,7 +57,7 @@ class Naka::Map Array.new(CHUNK_SIZE) do |y| y += @y * CHUNK_SIZE - Tile.new(Object.new "stone").tap do |tile| + Tile.new(Object.new map.default_reference).tap do |tile| map.generator.call tile, x, y end end