From be9d14233e9fc7b7c5e4fc3711125132e3cee151 Mon Sep 17 00:00:00 2001 From: Andy Belle-Isle Date: Tue, 24 Sep 2019 02:29:41 -0400 Subject: [PATCH] Increased texture size for world, made world a little more detailed, and added bouncing ball --- Assets/ball.png | Bin 0 -> 5146 bytes Assets/ball_normal.png | Bin 0 -> 5885 bytes Assets/world.png | Bin 236 -> 11118 bytes Assets/world_normal.png | Bin 1877 -> 10591 bytes Scripts/init.lua | 29 ++++++++++++---- Scripts/world.lua | 42 ++++++++++++++++-------- Shaders/world.frag | 2 ++ Shaders/world.vert | 3 ++ src/render.cpp | 71 ++++++++++++++++++++++++---------------- src/world.cpp | 27 +++++++++++---- 10 files changed, 118 insertions(+), 56 deletions(-) create mode 100644 Assets/ball.png create mode 100644 Assets/ball_normal.png diff --git a/Assets/ball.png b/Assets/ball.png new file mode 100644 index 0000000000000000000000000000000000000000..b8dca47df515c4b29e9869be5c1edb9cfc4c57f9 GIT binary patch literal 5146 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 IM6N<$f&@R=LI3~& literal 0 HcmV?d00001 diff --git a/Assets/ball_normal.png b/Assets/ball_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..d238e30f14784cfc500034109ae0bae62a03005c GIT binary patch literal 5885 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 A-2eap delta 180 zcmaDC_J&chGr-TCmrII^fq{Y7)59eQNGkv_2L~IFoYDGs{bUn11r9zoE$y<2^F=1d zu&LKDq=X4Z{cQ_7Nc;PR+NhoF+KmMtGNMi_Q|WgdnHQKjfyY zbxA#5(Jk@UeOY2dYh&L&_w6!rtY4VIdGd{UW-xEtXL-EChu?$400>U({`61YfZgWK eUrA+eCWg|FVg=4Ehb{sg!r zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b>lJqDJ{Ld-&2nZpBjw3)s><#Alo7k@E$Je{l z8!_ds!WNi^GL=%N`0L+0{R9Sj&05R&RI64TH$8uR;%RRi<$C?TKJ@%j`rN_% zbQf68{qwB#vGZepP1N2kCi3vX-Jml}iUej-3~-WdH#ZDGQq{mAL_%4jy4` zyrXoDEmCefLIwB;H&$R{>;S7)0e`f1aL9$FibxZcE+(EDx7wt&rtQR>D{EEJrm9^{ zy>qW!dh6OdV$-b{BP7L|sdY1R$C_S~i{ov_2=`G2k2++up`#BQK0%*Zr_45W_G!~s zS-k3!)t0WlYTuH&-aQgwZb(C=CI~q?E9-n4L^sOLYP2kitZP%IIcn`5b zVY^GKhh@7`_Z)y^=Go)StuYL57#C?^J& z+8{|mvlm^MX^?9heTT2Q6;G2Tm8?U<>STvTVz(M12CV}H3T-BM6C#JKB-nS&h|8d{ z`cNe{i@IX<$SoBouV9}Zm+NS=bt~8xu=4X4oUhh8)S==pKdnc;S~*!Ka?-%M*ocv- z$hq@9ap(kY!nw;y``64CNf$ zeO$BVIX7Yz)@Fd7O=pTSbDOy~rVe0yX^)Y&&|++$Y*15*tqPJU*e{r`dw@}V?F1|V z$>5z-LBz=r%UVwaA*+Q~xR-k@nWI7V`f?4&gssM;$1Vf0{l@(=(#3$oihNV!wCQzI5Cj(| zUflS^k>5}x{e~lNiuguRvC(0D>==>GQ2u_XT1T+M`w<*W5$W5kTG_+z> z95~<2mQfgKf}q)-?R{bsZb(9ZSR0UqmV*??3p@u1gB;L0-7M<~0MIeOE9uc|0d}M~g;mshn z;Lk{lMqsyaB0OilQT=*qaxi6ou0X`F$Q>MlwwFoL$bi0 zTb~Z4IKG9#jFV%hLZWRU10aVXx1BVGgot$H9sxW>QQ8_jr z5E;}Kr*53_iCyVudi}vJRCk|+i{=pl#Oc_~sK*;hKXEw6(Lk>eTvYp!CwZGE@pVNW1q-a1Q!V zoL!z6#CSd2h7c1{NkuL-yXVthP|KuIkXho6caDW9+efcz0W;;lyZ?j=ikFiVPBpM4 zt=xOW{DQy-0B1b?6?d-#c%JPyp;X}rD4>9KkZQX00009a7bBm z000XU000XU0RWnu7ytkO2XskIMF-;v7zPs+%mxQW0000PbVXQnLvL+uWo~o;Lvm$d zbY)~9cWHEJAV*0}P*;Ht7XSbt07*naRCwC$UCoXpxpDp?GOK5Hc2@!{K(KwWVPAal z$xq-1&^wKuNmsvs&py~sU;~C_z*_HacULmP2L{PtkgRTLv68IJ0(yG7GAoObNe1KR zi!bQ&KdItN08aoIPywKTBEQP-H(&2Pk=zf5V+Vj&055>P=4(>CHchU__FLV#wEnFC zNC3J6{Lke>G8t?cpa4kr|J|L>?ic~s?0CE>G0v5YSs+udj2 z#u#tr?bPyr{``S(;@3a^QgthLSb>f5Zzh1<-y7MJ(0ne#ol~9?h2t2n=Z|$iWWW9O z@b>360A%Ns8CZVL&X33TZVuT^P;FD?-Lr$7!g`MaVkN2WJBZJVq~ny*oE?`vGk z)Q=Bp=a)58-c%DFTUfaEK~;d*Em(5z$$WsS{orOdZ1`LHV`>kFc%n$C$v_B?cMDHY zgQD2_n{rzD&;25MOlpdx-ZFRliQLvgO;7koKocXSoI{vAirKQ(?#XuV(ZrUi=jvlM zp%4Dv@ttjsdp~fcA8C4cHB6&4l*|B-UiddHz_L!neU={F0ReEISSmY!!<(kbEpWBt z6f7BPH;fgK2Y0R>FQ4hpy+LuW)|G9aZvVPLaIXR+cRwiXi+)FdQ(o$JyzP?zKDY@6mqx z&U0uY*+Ky>y)ldrq*JKmyfN*q+F{;{DcQpfitHlE-^$c3SdVLS2M2A-z%IZmyKBZl z)6|mL0VF8yEH-X-mI~W(#vPk;M;MDS;+yeAQPcitZR~EBK zRHwrzc#h6$jJI0dxuChlr%@Sui&Jg96LnCIm+xU66{PoXcD$}s=Om`a!CKS)3*V(A zX`$lZ`?OXrby=5(TOX^CQ#tQm7I|~~R0#?N*AtVADG5}?j-!t)l_!1Q!s81A5%;*L z4eqEK+{L}vJ|{(2Yag3qQv#A>8419>i5a8d7%fR!7*Z6LHcj>{nnk$W^-0%GWA6fQlR+H872Pdf&f~!8t-Vz7_DJ6I{^~Bl zxwLn;W>;eoCtFx_1h$Vx>qhJ=r7He0ke^IJY<3l=eJx(bP`hHbtomn~z#>rGKoCF( z3aX#zmC9zyBtNL5X0W)O!ghX@lfpj8m;9Fn*vIfSYMx2hm0ZYGn>$)vOuxr@7nGXv zESA|yd1~B7wSQt&;nAq*R{BUWCU^&&Jj{rTn&z0C6c_%C4pn60~-9euSQn>V`Ue<)?72DXO{nZ(L{-HR4mS78+4xr@7X0r)FUsPB}Z=m zB?m&F2L=%>;+MLx>HXg;(A9qYH=rMZ{R?2bSxDs$hYJ^L#6WTg z29`wzndVY-THGNO`1X<~?CXd6z7im&_)_s~EKDWl{_-O3sGP@o?D_vBz@EwtavHtM zhGOC}wd_rH_lgol%ljwE+EpYZ7qqjiNYrIHrR@;JxG5~#>9<~jKq2;CK5ExzOB4uM z7B$EAYI0%NjkYd%aBlg}Z34z*L5BmTUK!CO8#}YmI;9yC9UgrZj&)gEow(?;OmxgD z(>&Hl6L)z}&)I?#0J~;OFMZ6Goiads{!zo*DFNGIdMbx$kO=rf54_5rl^0LoSu2;= zS&Yg6@iP*3C@fy|bccL@gKXLAlUr7TvN@|$vUSS)3*`AjPV1-MycBX#EzRpwU*K@N zwg^jRGm%pdWzl(vh1ks}Fac5_7y{J;N(Z_PcD?3f>8;cR{nEae?{>S^~p_|xX7KtaR$0ial10Y_+ z4^s4T-vLI}2#J{)KnoSL%M+lVfb;=KPo@C(=DiRBf0mwcq_S%^*FtoI)QdBowuaA2 z_ooWIqM5zQy}c^to~nK{cvq^6Coyn50lH`9r*af znc$Qx2n&Fp0saQS&&q)A@HiY*HtQy*1*A)Z_fIV^&4$MzFi3V32ni!W>VgGE{9U^# z$AIf$fE8*~Q_(n$u_dwyPd z4q^X@=X3j5%`#8iU`4Q2-}?w3;01U31jr{qKID1PrJEJ_DW2U%spD0L9D1If$F~4) zR?0#SISvCrIYgm9UUtjQYe86_M828sLW0@4Vm4u*L z*_*}qSpmIg1xPOde&*p3%?->;h%N8AkiX?c2l+kTjFlkNS1GVX!^m#5){wuQqf+Hp z+3F%65(!-eMO*yMRh5v?2-zh%x%`(0+$A+Sj2;3|TE`4;RZMDeLvpdVi0N|}K7^Pc z6PA@A5eqmdUk}sKW+27GO5>RJpZxg?{^z?7+2bkTdYdaO0KT@sb+=e-l3N9d4(eDS z-{knAny0aQA=uv7?51qM@rA|BO<`^B4n6IHmm^>33x2KfpM8G@Z3Kdt1)>%>x20%s z7d`Bn+7dbV>#`sY^a$z^9gIn}VoW(>|N3)9tJW5mSM6NL$Lu#ZQ%* z{E7`^Du!L%VXLC>Y4Eele;I&Ngs@L=IMA``BIX8HSsIcJG)v)Xuo`2$FT^9&Dc>O( zLN3{YIV>i++b+#_;HRHF8rqj=aM;l$2MUjTJUyG0b!(DmcSoW3OlTn52FPSrca_Pq z1L+Ik_y8oc(C`A_skg_sXW+w65^h2@o0lI%8E2~213Tq+{48O|VfKNyQpgs_fgU3k z<=3VB6C8S#-!E|SRTM0Muqh3%3POG=LON_bKAX9cpX|96)w1J20^#2IIdaK=xxl@v zIf1a$?Ql}mQ?tc7W|PU)7t=)fMBHJw_3A=7>zMqgl_aau^5`Xp!i~L6oTvajf`bAyZb9k4lOTJNeQq$G}ihBC`qzniZ3K$cGI>ZMF16zz@4(GulnY{OGS>D~*3=yu*y@h4-vQ_Z) zU;PHZ`SnkLkHELjU*gOCJ4hX|n6;M|*Vli4K)RYtaqbdTmJn8g5(kh&aD}v>uoXMR zYCv-~l3udmp&R;`B*dI!_jEd@k>6f^u4Pw81{nfN`Nb<3gPKT(hv)|*X~T)ZZ|Ln-q+P9$B! zdREF4Lr?{K#+M9-)ECUzG;%;#HAq4-3M&Qf-+Y3nE-Fq6p2|+|Dh?{P%%C;0Iji9g z;DBm28E@>flm@P)QUfZs%PYS7*DtCAm;Uw{YTtFMs<(Vz+@1Mh@|WAF%8-)U{sYM` zW&sHw5I!#X-zERaU0}Z#tO$E1%8phFa*~-PhxdJ?H;1p&wXS|dgQd~Ef1tDX=8bbM zjX1*OhtvRFb8jrYtH4)3e{Q<;L&0hl5TOUvrpecrbZ|bN1KfGiD=9Y0B~N!S7)Op4 zX`a*>K`s@h!5}c_xFS6PB*}u`j5|uaXB)-$z{KA{e(;8hed9l@{Ppom0)a01-zER$ z0(a1rpx`J#OxTm4daKTps(P1p;!e-1JG=|MC^K#-)DSP!2MTdTM&-BvMi!a4m&mq- zoCa4{HpZ>y&8&j#VtD&k+Ko%`^KB@M1O{8VQn^!Nj^{FQaZutb;q?~(t4!F0^d6cnTO33**)eY;p51*PRn;sTCu zWpu_k9$~~R&f<&jW#*%%0Hw}~T&`4NB~9lRe1C6%w#i>7wm4P~V^+uuV*^#!DFdAI zXO1pw$Ts1%FojsKx`Ay4D$*Cpqt&MHCxAWy>C69h+m4TKv0FGrmOmZ&$@~n}th6rq z-y{EJ0s8VcS|~`bcqq{2$EpsWL>c0Mi`wCGE&~JG6ejOgfVPf`GA2icxT1FZVIjxM z(~8x(#0AHN6ga7SB0k>IWI~Be>Xv0>FbF&LlCXdy|F!s$mN-+PZ7JVX;|pYq$VKANtZqL$gHqxW)?Vei5z^nz!q6|5x1(#K-tHMH%T0cxJ zBFdJfE5{W!`7Jcgj2nQvxJgP0v7^$if&|73wTc3*C0rputE?Kd<~Jw*Wo+ zSZk>PNN8kOLJHfttUq|V|NH*xinVuXAC<78a( z>S~c}@gzzR%9%TmF%;~QtqJv(1VJ@Hl0rmmw>K69yXehO5_dnuuJ;4i0^@@=D}icO z2JsCb#Z3zWEH=iAclnb4-11*0;IutVs0|*?uSIq?H0wibhBN~Z1}ib9d%M`AF9+8- zyrxk3<3Xm_#Q=Q;KxqoRS#f#-i?wPaKcdY*tU1${r*>FCceWBJFO^ix%vR$%)NnM= z*88Cr01B9Mfje2ZF%^sP_+~yP$1axnBXLMFZX})qg!7XB-17gpug{O0d-edt9#MQQ&2D&1Aa!{~@E z15X?sV6$17s3GaGLBN@=$f%)tcjfJz**Mq-!#Cewwk)K4TuWi-z#gX9S)iQ3u3|Y# z#Ret<5n1WG;;C!m6R5f*xeR6Mi8L?yPcHxE0#6$s1=Guei*55=a%@PhKuJKksJ(EzrP9P^2Y9z04z2W!B>|g4 z(gx7h@v}r&L-&%LVZ8f1AKQ;Gc2OLqnKq{kyAYS;?%*CJi&$JPaSQR1|D5t)FU(k& zF^8cHwYb58jBG9%nWZ1Z5Tn(oI+D=LG^)oOc6G!UdxAurzfW`406-f+Qa8>5hNXB( z6$@?`(8C5%!md=|ta*W`?Hq19*^KK=2rL|8qq&g%m_}<84k558UTc>Ku>$wfPnO*R zbWDmJ*j91Lf60G#}z-j^O zp?k7oM+Uxnc4qedV9nCdI$`g&yYF^mqX!ek+ruVTa|$4@Eo{0s{{#qt8Zf7y-y=!%W`W9%+WJ)1=4vea1lBz5$gaYFngHm?!KWl zt+o!ZRLC+*9cOc$#BVDOTES2xLay;l&0%Tna6AOVbx5z`Z1wLfNOIxr4NQ5Q%!W^s zIiCb|6!3ye{Ut@Y;jRt>Z$3sk1KS`eS$dhQWP&zx)QO)hJ2i+ zV6?2MHqhD^sx2ZC7a~W6Z;+>TlF1!#3?Vf1=Dg%TxBSG*VLS zX|bl+=8&D$kWC(JckJS_7TpZsnG70(Bp3jjsWKc6;w=&XClYRNFUX5LqTq zX&Z0LCI7kQKYKPLJbUkMM$&<)yBpvz#jW;?GSy;x(Clc2S9vRKHD!KT=xlE(?!$Zpv9|Ti>~PZOa61qe{#JS6koK`y87NpQh^X?^=HJdV}Z<%3IEtYo3@qv^zAH zNn6o<&MR(RFd{cq*Ur)idz!_Jd~@PU{`1OzdBCycO(SP4x%eRUF+-)kt~X|6=@I|z z0(3|VGj2w6h2iPCb7)@u5t_{gebTSs~t;4m7neUTCRJw1YF6!o%L_j~u-U*FqDRfRuOglFch$&sLGCP^glvp+XjR*mV+!WZ2cIbZua}rjX0-DIl9! z2^nRU*I^zTQ;z(w=76|RUS`nUZko8#9tXQ9GIikIGOkPhbIX737+?o?ahY3>2P|FK zR>TP&K2z#(Ib@P)0&khNxm>m1TveDLbd{Sa^o85McWy`dRsx`RW9ta$8k0)8OCD{4 z(Y*zxS;x6Xw+cmQ*+<2WJB|vxE%5KU&0w^`SZYbU_t`)h@XoOZ=@}FG( zD*&jjlx?7-r_lu^9TON`=9PLHtRVmwEIGx<80{^<0XFlX3DR3}&PgpWhisT*@X#_< zd~=$pvW>)u4(y?)13P3swwQGD4XY1}A!QdSv;5|&0ky?MwM5?Bn_3rRu_B8{74~Ad zezW-k3_qe$cY4WxcKI)tcPML{1>vG~7X3-MHZGyLI!!FMf#Z+*Y_k7u(lJp3Z?%R5 z$)lu4bcOekpN8l9k^tNod{>D2$=_Ux)KL)un>OB%$a|f4n|s}xbJEZ%2t*yvoad<{ z$Njds@AsilZTxe7?_k$&wl22RKgCP_lgfX&!Ltr*5gIci+VR%fVD)+B8j>cSZfnNf zLy>LT6sBjGp1Ia^yW~Hi{MXA{ zg3!70^BLS}+-{}}C+SxW(3m%CjaRr9pJbUdLhoE%XDLQ(;NCN6-Q1+|WlOmPiVucb zIeQO1$Qe6NL6mvlHb4^+H7kLwi2iW-zcQpvd{)r26x)~%9`CrbnW-ys_l5ks3t~{P zTrT;~E&pZwk!x}u6HPm;ut`mLsdDRW>5%bwzcmB;Ll9Jnrwbo~riCV(f zTWLN`)C%V7&fmU`CEr1*aUOQ=ib6ZCHwUg&ZVS*TlGN^Y)8^DZqnW=>x*~XSy>T>H z765#P^OFCh@?Wnph&Mt};Gi(eV;C`eLz2R0lQB=6be7tLaoSUJbyb=eiBElh;)M&0 z=04QAOQ{o`l%2D|A!ejFYQF}lfo(XxURA2Baed}cox5Zx1>`zXc+iD3*M+)D0v``* z&2u!e!AX;8G?X19@g@I>H(O?Jyv03YJRlS2R#Mo=lJhjhjVI1bRRHV~J&VqiCOd($P5x2Jn*BFSUaB5{sp+OGS?AzEjaYw>|42Q_E?7h*MSJ*_pQwhFa z(@(o{z1=N3RJ6bN`c%VgIg<0*u}oaYuU_9LM7pQae2082OVcI)ndQG;J;<3_gQ953 zm2$Wl<$PzE!8KB+zHdjh!964fW8$MLPMRc2I7F;hmS3z|iB@5N!4z17l`yGdMi`cA z_AtkdSnt*GsFRd31(FV}<_SB&7SL_jhP37ow^qzf>I&Hb(AFFsE=BNLw=L9miAc4# z1r06`;gbLC@}J!B^RYT#4z3fjfe_o{7z3PSf;*$m!)jLNPF!cg+!~xQMaKk)y3fs? z_}+GZw<`)YHwEGVujpV7RYfB(a%{f9y>~YnfObRc9#+~ZmUxgsD5PQ0HtQnRkEI3a zxyGNwWi|ba(Xk+RIsQxj)5?FjzL@M$^OB0-`_4$kXi-E2tQBX+NUbBqR#DFMj%G(R ziCL=7;V~`?oJLh%FSk#0Y`JPd{j2S`Y_J4l^0mpy>g7=*);c#>XK&D=o1G~@2Mr*<5Zr{R z-M**=mR-C>Wv{(p6}iWQRzR$UwQ1J4E@m1Xnx7gQ@fyifhU#6OesTCJ(fM7vFJX%MGwPPrSs(I{{%TOB2 z5j+4$rmjkh*))2j+k`AEA=9+C7!m{l9m)OHBa{7t;PR3i`ra0pEV@hnbIO12mrelC zk%Mnm4e}_XJjCmCkqrR`QUsbPw3!9x!_^#U{2w(um?S~O#e)1PlFNs>ey)U8)K)ww4?SI4QP4P)67#DK4542%xv)!EP*7M-tejduGb|GDMAEI^+$ zD0KEpeJwA|GR7fhIN0jZdW+{#pRDjT$%+T0s|Zyj7?tO&AreNz)5id1oDj8=IUZw- zB}FsKA})f2c_=c{GVT5FNQ2wu$15Q|<(Wvx?fmJDUH_8*-148*1njj#?7TL_>wJdR z#{+{qOp`LThuJH>r)o?@YWVD+U&y3|`0iV^xi!R5N-Kd=1PYihBrz{=EHbDi<+>w^*c_`1gC ttP^XpP;sru7FNpeK{7-i{J)I-{{Tkv{W4$Lo238%002ovPDHLkV1h!ib?5*9 delta 1834 zcmV+_2i5rBQq>NBiBL{Q4GJ0x0000DNk~Le0000W000082nGNE0GNgSuK)l9dU{k? zbW&k=AaHVTW@&6?Aar?fWgumEX=VTbc-pO&X_6!-3`YNR3LgPUNP^?AM)(FkzCTF1 zrn{yc9xq8ZkV+OwPl5{bkKb4L4G$$vA*p98W)V*+sc=PqC&%Zhr>2-reICA_@cu;} zUXvIiK`YN|wkw~IV>aCta=+_T$o11gW!?|%>xX(5;(Rx_@{f&#o(GWh5Nys zcA>=%%ma{FIzmDq<(DpWwk>D7PC1Sc2Vp1^7DM#>`x1V2;5s=$bTZ-b74+gAbi_}<^9=Q1*_?CbB2L6w(u;`lzs%49MFP+iuQp_KJEfg2wN+ZApwDC zBuWN6{@o&ZXiIaJfI{e5d$3LF!shAr!$n5A2AL?NkLRh9Bhz?fR%7+ z8j>a>hN_AtRW)_ZTC|$j&M-5#eX3R$Pp)q6o`V;!S#rvnEql(n8Wdfx9&an((B+M19?1b_{gJ-I%y)5W|}%} z`pmP;x)5qhR$97jd02UsRbSLD)}P8hphlM(A5wduzoq@<3u+z5aUDu?w|%@ z2<*))W=e@Sxy>vVMph_8N!@S;ZDJspCb2GhvAg5~y!gLx3!V=*{;%Z1M)!;4e&+Un z9ksEq=YEJiX}Fyl1=(jqy*5(kHhWdwE{HCROL1h8)uB{JFyU69kvn(AjFD=GhO?wq z>P(oXb0+*u&;@H6Ji=qd=4xmPOypdb^chmzU0lrXEvK4iu6qU-Z;7mnoq0VO7RKMc z9-r2GnCm1&vg9uUz;Y{7vu({?ObxilMW^x)* z3GuifnpQSt*&9tH?IK?qazpYp8cX2Mhc~dMcj9kx^K%>iasco(MY84Vi1L_KxTWd{ z`?+c^jpgyIgwJ3lTBpZE*or8B)rn&VOdSZk6`We5uZpCaF7?%!y$=r)>AsMfiS6p+ z1;1q+XEX>4Tx0C=2zkv&MmKpe$iQ^gM| zA{G&G$j~}j6cusQDionYs1;guFuC*#nlvOSE{=k0!NHHks)LKOt`4q$f*|+-;^OM0 z=prTlFDbN$_29T4@9sVB-T^|j$TX{M9ME*zOvIvMD!nRpyrK(z7{D09GP8_1Ns6Q8 z__~LWuXhoi)%x6@qesnH4DgA>v&=AU;tk^IP21qSPaI@RRAN$0!q*zyMFLL_}#6Qot*HJ0#Ts- z#c@8uK*ugnt2oa0vE$TE0RJ;^r8oSgDlqd&dZnR-j)2~6;NrSgp(%U7izuyv2b$0 zazB-y00006VoOIv00000008+zyML3}1|SF#7YHy;*q&CC0S7040H#SqK~y-)wUaRp z!ypVrA5mB4NX$_>_aHq;Z^4~%8xD{hfUyG|FimLzp|*L8k-_?3Hdgkw20RfD7>Ox& zNrxIU;HtOQo>i-Q0ATVk0vZ@a&;S!1I4S&&;VG!a#9fOaA9G#!mu{q(o4VQ%02Yaf zQ}(J`u%|1fapdAX`v`t!ZVK;g9AqGCV==o}rQ#@*I>3M{{D<0Btl`fFbYmp%;^t!| YACC(u-XF#zu>b%707*qoM6N<$f>yy?1^@s6 diff --git a/Scripts/init.lua b/Scripts/init.lua index 8559f7c..cdd6ccb 100644 --- a/Scripts/init.lua +++ b/Scripts/init.lua @@ -55,20 +55,37 @@ player = { --end --self.visibleTick = self.visibleTick + 1 end, - PhysicsIdle = function(self) - if self.Velocity.x < 0 then - self.Render.flipx = true - elseif self.Velocity.x > 0 then - self.Render.flipx = false + visibleTick = 0 +} + +ball = { + Position = { + x = 20, + y = 100 + }, + Velocity = { + x = 0.0, + y = 0.0, + }, + Physics = 0, + Render = { + texture = "Assets/ball.png", + normal = "Assets/ball_normal.png", + visible = true, + }, + Idle = function(self) + if self.Physics.standing == true then + self.Velocity.y = self.Velocity.y + 15 + self.Velocity.x = math.random(-1, 1); end end, - visibleTick = 0 } -- Create the world dofile("Scripts/world.lua") playerSpawn = game.spawn(player); +game.spawn(ball); ------------------- -- SERIALIZING -- diff --git a/Scripts/world.lua b/Scripts/world.lua index 044559a..3b56d9a 100644 --- a/Scripts/world.lua +++ b/Scripts/world.lua @@ -13,51 +13,63 @@ world = { texture = { file = "Assets/world.png", offset = { x = 0, y = 0 }, - size = { x = 8, y = 8 } + size = { x = 64, y = 64 } }, normal = { file = "Assets/world_normal.png", offset = { x = 0, y = 0 }, - size = { x = 8, y = 8 } + size = { x = 64, y = 64 } } }); self:registerMaterial("dirt", { texture = { file = "Assets/world.png", - offset = { x = 8, y = 0 }, - size = { x = 8, y = 8 } + offset = { x = 64, y = 0 }, + size = { x = 64, y = 64 } }, normal = { file = "Assets/world_normal.png", - offset = { x = 8, y = 0 }, - size = { x = 8, y = 8 } + offset = { x = 64, y = 0 }, + size = { x = 64, y = 64 } } }); self:registerMaterial("stone", { texture = { file = "Assets/world.png", - offset = { x = 16, y = 0 }, - size = { x = 8, y = 8 } + offset = { x = 128, y = 0 }, + size = { x = 64, y = 64 } }, normal = { file = "Assets/world_normal.png", - offset = { x = 16, y = 0 }, - size = { x = 8, y = 8 } + offset = { x = 128, y = 0 }, + size = { x = 64, y = 64 } } }); self:registerMaterial("flower", { texture = { file = "Assets/world.png", - offset = { x = 24, y = 0 }, - size = { x = 8, y = 8 } + offset = { x = 192, y = 0 }, + size = { x = 64, y = 64 } }, normal = { file = "Assets/world_normal.png", - offset = { x = 24, y = 0 }, - size = { x = 8, y = 8 } + offset = { x = 192, y = 0 }, + size = { x = 64, y = 64 } }, passable = true }); + self:registerMaterial("trunk", { + texture = { + file = "Assets/world.png", + offset = { x = 256, y = 0 }, + size = { x = 64, y = 64 } + }, + normal = { + file = "Assets/world_normal.png", + offset = { x = 256, y = 0 }, + size = { x = 64, y = 64 } + } + }); end, Generate = function(self) @@ -83,6 +95,8 @@ world = { elseif Y == YGen + 1 then if math.random(0, 100) == 53 then self:setData(X, Y, Z, "flower"); + elseif math.random(0, 100) == 45 then + self:setData(X, Y, Z, "trunk"); end end --print(X..","..Y..","..Z); diff --git a/Shaders/world.frag b/Shaders/world.frag index 18945a8..79d87aa 100644 --- a/Shaders/world.frag +++ b/Shaders/world.frag @@ -9,6 +9,7 @@ precision mediump float; uniform sampler2D textu; uniform sampler2D normu; +in float fragTrans; in vec2 texCoord; in vec4 fragCoord; out vec4 FragColor; @@ -25,6 +26,7 @@ void main() vec3 Falloff = vec3(0.4, 0.1, 0.002); vec4 DiffuseColor = texture2D(textu, texCoord); + DiffuseColor *= fragTrans; if (DiffuseColor.a < 0.1f) discard; diff --git a/Shaders/world.vert b/Shaders/world.vert index aa183a2..28fd307 100644 --- a/Shaders/world.vert +++ b/Shaders/world.vert @@ -3,16 +3,19 @@ //layout(location = 0)in vec3 vertex; in vec3 vertex; in vec2 texc; +in float trans; uniform mat4 projection; uniform mat4 view; uniform mat4 model; +out float fragTrans; out vec2 texCoord; out vec4 fragCoord; void main() { + fragTrans = trans; texCoord = texc; fragCoord = vec4(vertex, 1.0f); gl_Position = projection * view * model * fragCoord; diff --git a/src/render.cpp b/src/render.cpp index c06b7b3..9e63a71 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -45,6 +45,7 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, static GLuint m = worldShader.getUniform("model"); static GLuint a = worldShader.getAttribute("vertex"); static GLuint t = worldShader.getAttribute("texc"); + static GLuint r = worldShader.getAttribute("trans"); static GLuint q = worldShader.getUniform("textu"); static GLuint n = worldShader.getUniform("normu"); @@ -52,6 +53,7 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, static GLuint f = worldShader.getUniform("Flipped"); static glm::vec3 rot = glm::vec3(0.0f, 0.0f, -1.0f); + camPos.z = 15.0f; /*********** * SETUP * @@ -76,15 +78,21 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, float scaleWidth = static_cast(width) / scale; float scaleHeight = static_cast(height) / scale; - glm::mat4 projection = glm::ortho(-(scaleWidth/2), // Left - (scaleWidth/2), // Right - -(scaleHeight/2), // Bottom - (scaleHeight/2), // Top - 100.0f, // zFar - -100.0f // zNear - ); + //glm::mat4 projection = glm::ortho(-(scaleWidth/2), // Left + // (scaleWidth/2), // Right + // -(scaleHeight/2), // Bottom + // (scaleHeight/2), // Top + // 100.0f, // zFar + // -100.0f // zNear + // ); + + glm::mat4 projection = glm::perspective(45.0f, + ((float)width/(float)height), + 0.01f, + 2048.0f); glm::mat4 model = glm::mat4(1.0f); + model = glm::scale(model, glm::vec3(1.0f, 1.0f, -1.0f)); glUseProgram(s); @@ -95,6 +103,7 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, glEnableVertexAttribArray(a); glEnableVertexAttribArray(t); + glEnableVertexAttribArray(r); // Ambient light, for now this is static GLfloat amb[4] = {1.0f, 1.0f, 1.0f, 0.0f}; @@ -143,9 +152,9 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, *************/ entities.each( - [this](entityx::Entity, Render &r, Position &p) { + [this](entityx::Entity, Render &rend, Position &p) { - if (!r.visible) + if (!rend.visible) return; // If our component was created via script, call the entity's @@ -155,28 +164,28 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, //} float w = 0.5f; - float h = (float)r.texture.height/r.texture.width; + float h = (float)rend.texture.height/rend.texture.width; GLuint tri_vbo; GLfloat tri_data[] = { - (float)p.x-w, (float)p.y , 00.0f, 0.0f, 1.0f, - (float)p.x+w, (float)p.y , 00.0f, 1.0f, 1.0f, - (float)p.x-w, (float)p.y+h, 00.0f, 0.0f, 0.0f, - - (float)p.x+w, (float)p.y , 00.0f, 1.0f, 1.0f, - (float)p.x+w, (float)p.y+h, 00.0f, 1.0f, 0.0f, - (float)p.x-w, (float)p.y+h, 00.0f, 0.0f, 0.0f, + (float)p.x-w, (float)p.y , 0.0f, 0.0f, 1.0f, 1.0f, + (float)p.x+w, (float)p.y , 0.0f, 1.0f, 1.0f, 1.0f, + (float)p.x-w, (float)p.y+h, 0.0f, 0.0f, 0.0f, 1.0f, + + (float)p.x+w, (float)p.y , 0.0f, 1.0f, 1.0f, 1.0f, + (float)p.x+w, (float)p.y+h, 0.0f, 1.0f, 0.0f, 1.0f, + (float)p.x-w, (float)p.y+h, 0.0f, 0.0f, 0.0f, 1.0f, }; bool flipped = false; // TODO flip nicely (aka model transformations) - if (r.flipX) { - std::swap(tri_data[3], tri_data[8]); - tri_data[13] = tri_data[3]; + if (rend.flipX) { + std::swap(tri_data[3], tri_data[9]); + tri_data[15] = tri_data[3]; - std::swap(tri_data[23], tri_data[28]); - tri_data[18] = tri_data[23]; + std::swap(tri_data[27], tri_data[33]); + tri_data[21] = tri_data[27]; flipped = true; } @@ -184,11 +193,11 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, glUniform1i(f, flipped ? 1 : 0); glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, r.texture.tex); + glBindTexture(GL_TEXTURE_2D, rend.texture.tex); glUniform1i(q, 0); glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, r.normal.tex); + glBindTexture(GL_TEXTURE_2D, rend.normal.tex); glUniform1i(n, 1); glGenBuffers(1, &tri_vbo); @@ -196,9 +205,11 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, glBufferData(GL_ARRAY_BUFFER, sizeof(tri_data), tri_data, GL_STREAM_DRAW); glVertexAttribPointer(a, 3, GL_FLOAT, GL_FALSE, - 5*sizeof(float), 0); - glVertexAttribPointer(t, 2, GL_FLOAT, GL_FALSE, - 5*sizeof(float), (void*)(3*sizeof(float))); + 6*sizeof(float), 0); + glVertexAttribPointer(t, 2, GL_FLOAT, GL_FALSE, + 6*sizeof(float), (void*)(3*sizeof(float))); + glVertexAttribPointer(r, 1, GL_FLOAT, GL_FALSE, + 6*sizeof(float), (void*)(5*sizeof(float))); glDrawArrays(GL_TRIANGLES, 0, 6); }); glUniform1i(f, 0); @@ -218,6 +229,8 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, 6*sizeof(float), 0); glVertexAttribPointer(t, 2, GL_FLOAT, GL_FALSE, 6*sizeof(float), (void*)(3*sizeof(float))); + glVertexAttribPointer(r, 1, GL_FLOAT, GL_FALSE, + 6*sizeof(float), (void*)(5*sizeof(float))); glDrawArrays(GL_TRIANGLES, 0, worldVertex); } @@ -348,6 +361,7 @@ int RenderSystem::init(void) worldShader.addAttribute("vertex"); worldShader.addAttribute("texc"); + worldShader.addAttribute("trans"); worldShader.addUniform("textu"); worldShader.addUniform("normu"); @@ -372,10 +386,9 @@ int RenderSystem::init(void) glEnableVertexAttribArray(worldShader.getAttribute("vertex")); glEnableVertexAttribArray(uiShader.getAttribute("coord2d")); - // TODO //glPolygonOffset(1.0, 1.0); - glClearColor(0.6, 0.8, 1.0, 0.0); + //glClearColor(0.6, 0.8, 1.0, 0.0); camPos = glm::vec3(0.0f, 0.0f, 5.0f); diff --git a/src/world.cpp b/src/world.cpp index feff728..cd89a22 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -137,7 +137,7 @@ void World::generateMesh() // Preallocate size of vertexes mesh = std::basic_string(); - for (float Z = 0; Z < data.size(); Z++) { + for (float Z = data.size() - 1; Z >= 0; Z--) { for (float X = 0; X < data.at(Z).size(); X++) { for (float Y = 0; Y < data.at(Z).at(X).size(); Y++) { int d = data.at(Z).at(X).at(Y); @@ -149,13 +149,26 @@ void World::generateMesh() glm::vec2& to = t.offset; glm::vec2& ts = t.size; - mesh += {X , Y , Z, to.x , to.y+ts.y, 1.0}; - mesh += {X+1, Y , Z, to.x+ts.x, to.y+ts.y, 1.0}; - mesh += {X , Y+1, Z, to.x , to.y , 1.0}; + float tr = 1.0f; + + // TODO play with this a bit so it only goes trans + // if player is behind the front layer + try { + if (Z < data.size() - 1 && Z >= 0) { + if (data.at(Z+1).at(X).at(Y) == -1) + tr = 1.0f; + } + } catch (...) { + tr = 1.0f; + } + + mesh += {X , Y , Z, to.x , to.y+ts.y, tr}; + mesh += {X+1, Y , Z, to.x+ts.x, to.y+ts.y, tr}; + mesh += {X , Y+1, Z, to.x , to.y , tr}; - mesh += {X+1, Y , Z, to.x+ts.x, to.y+ts.y, 1.0}; - mesh += {X+1, Y+1, Z, to.x+ts.x, to.y , 1.0}; - mesh += {X , Y+1, Z, to.x , to.y , 1.0}; + mesh += {X+1, Y , Z, to.x+ts.x, to.y+ts.y, tr}; + mesh += {X+1, Y+1, Z, to.x+ts.x, to.y , tr}; + mesh += {X , Y+1, Z, to.x , to.y , tr}; } } } -- 2.39.5