From ea35ad60506407040f7b9fae65c5bdc18f9576bb Mon Sep 17 00:00:00 2001 From: Andy Belle-Isle Date: Mon, 2 Sep 2019 01:05:57 -0400 Subject: [PATCH] Added Lua update function that allows certain entities to update every loop --- Assets/cat_normal.png | Bin 8324 -> 8481 bytes Scripts/init.lua | 16 +++++++++++- Shaders/world.frag | 51 ++++---------------------------------- src/components/Render.hpp | 8 +++--- src/components/Script.hpp | 6 +++++ src/engine.cpp | 1 + src/render.cpp | 34 +++++++++++++++++++++---- src/script.cpp | 9 +++++-- 8 files changed, 67 insertions(+), 58 deletions(-) diff --git a/Assets/cat_normal.png b/Assets/cat_normal.png index ae10a495f2bcd9b12b4cd12c33c3665043e6eb26..5b5a74bd9030e06b5963339be542a90393b41aff 100644 GIT binary patch delta 8427 zcmVX|*J z#3XOtdjQ1X;T{3H^Z)+ub^nK7Er#xLX}ykGJ-_nEBToL%{hz*m2Y=O7Nz{3K6ANjXm?mxZZzxld%du$YfjEU>R=inIShafX1{m$EPNVq?K zE6>2czW(^-esgTXgXNjIbHM4>_lQ-(pRtu*03_a5`2NLLXeO`47bTgs3!4cE7x)@d z2{rf@V+$dt*m2Ng=P~8D@IWXf8k>wcrHXGlam3nuriJ(3SmO78I;nzxN~)>hn~^5Y z%DE6fEq7vQmQ->nrIuED8D+YfYObZ$+NyGHw$ySft+v*B8*TQ~b1%L2)_Wg)jyMu2 zSwwn<2@Z+`kJf-)wKfK1Pt?5DU z5kWXpv8YPl)A)KYaJ6=l*NI zIc)u({1*Qk&pEm7f5CIno%A=q{R^*|kZ?bbeOV}*`b74BEz2bU`?lTKV3q!Y{r?Bw zO9{7xUV`D@bxL*vPkPoipYxeHhPemZ4J%z%>;P=KXU(X;rFl4c@5@`pr2J?yha5`t?estTwHc>)=)Wu0H zm6prOWYPw>C;!#x^$pkB#adgTQ(ELR-T^-$%@KNB&p2Mj`Q0@C&M?2(#r+4vY->C* z?eU)L@5y!Xm>I2{Ncb8Um#JCJ^|UYLf}>iW`5r2N&8c-wf~J6p6APwfag&1>?DU&t zmi!NkxF3_m&m?tHtkz1;6mj(a*@iIW`zrUYsBK-jg2LYeXI9@yO{_jnyJ1c%i#?Nyr`t@x zIa~gJq8o?(vDM}4!GJEETC|6@zt}Z}&g$~qAgGMYW5YznFb=a*h}9Aw#Cf&dTg>n> z3E|2arJQm-t|Lz=&!_uPv0=g)JRxi)`Q5RG+4+9Mv(+isfRJLL(0ZDV2pO^Y(_11+ z{J==FLMr^3t$6KnRKdW_6PV+DYxWIpwDD|zIZDnrx)MhhB$d747eovDn|5pHi!6DM z=`2b-SkKGGzJQ($qLGkgi(qS8b16l50-;OH9hr)xECiM9%b|cTOkxTw3L!vHuwOz@-l zVWANVIB(TWDiEXxG>mPTjbZKOf@s1eMB`)+)va&)mvoSI3#90rqP*M%U%%EF9I3v^yBkc!a^v_7p-erp&oP0=9Rd^OL&!FxzZ>~Fyl6n_9ABBu~u;d^^}MR9>m z16(N7lM5Lj=s-j~ygL}Yh3ZCsT}p05f)T6Cs*iy);W>pEd69z~se*OKe2G}2(v{T5 zt>8pltt5QqL5IEEk%IWPN+{1cPg?K=B09VvT!OEaM03hb!141kJL1EaidGFEyCXWR zz~WshAWnX!m`mhgXh*JTX_D4)isz)QnC(E(8f7&Il|muq4p0xr`^?UN&JEmy(D58` zy3d2yU5BNN5tS>KK8X9I^=xjuQi*IVaFU(k9$vpg@P;&R2AtkQd@F#6wb))&BzhrD z5qfGTMe}ziaCAqY8a8#Ni$u9_jd$Nmf+&6!j1=PD9>|CIo(J-9$SgPX12BM91T3El zL_Lvx_Q4RG`JbuMQYnIekCE5QDT?!fqRkK9CU97wlh0(7>`K5Hz-Eom4|6n}NEL~x$tW0(%~foh4v0pvCHw5a%O;?IQYbT!;sq@rZqhac z2u}{6G)1Iufq#b__i8MME4A06J?;hY!appDQinW-asl5%?TDpv{O;P{nZEWx76Y}- z6Ftx-q8TEMVGpF3WGqJ|8E%H5IW?4_Kyg+~3s}yg@uLudCBobGbS#_N*tJ0v0a;EA z+l+uc*v1>h{fkO}FKRNgNLAS;(!gFM_(ly3-%p1g!?+XxIebYAWCh;Y6#*@txS$VR zMgUP^J)_%N8K$;pgCBDI0&inm|bM=VzH12usmYlg6A8@BqDiK z&y&a11Z|-T5o2+HwG{-wec)D%1T5JK-o>#4POlV53O^{6fzv!%BIHurNdZT|iygM= zHy#I##$IrL+C7EmFojXz695}WZRS2--LK?{n-k_Zm)t@#K%&sAh1iGdQruXK;K1PV z^f4RdWEOb(AblO>7slz+>fwMDqTHwr>KaK33!&1OHkzXL4@>0FnKWL4Zd(*(v?X;b zIf|ku3{TGECnw?BF9fKx0^x@rtgF?_!R;TTY7}vQpo-FCK+E<{)m@K(4|U$V{34j~ zN~s8TQ8x*^G6+v9?c=&ct{^o95EMq*2^nOxGbI3c4^31#NBG@T5T;^BAQVMu?Gc`z0_*GtDRTb2@$5~D zF9Z%1;9__10ZxICGq3_}Pl^~g|M869a0t17i9HU0dqg&%xeBj9u*CB>hKt@2&nBZW zCi+Zm4J42cVnRN3F~J3AAkby;_?D7TLgb(z2ckH@%7yOgaJUNNC$Zb=L=O>KGwM}M zh2trIjd)%{a6TeBmOuLl{6r-m{hJ*rU5TTfQ6m)DCMgPpga71?_(L8mi#RX9^pXvK zB#h_HP+cM_RHEiAR*DqL<&aZ(cRw@BdPLEOi?#g_lendd#TDDD0SWv_Ko9&Enh%!s zbxicu5gpWzC@IaOLj&V6OzH8UQIALCOq2ygLSk?c_Fly)`mQFl7&(|{LNd)l;(VYGQTF+ z2*39rxRO8@ZtyosNkLcLirF52yB*?m#7d#=e3WOwjx*SG!0i>UJ6c+qjr{%Ig~Y)X zAWqXO37Z|ED4b-VZkN1+m?e4at98IVDDM)ybeW{E!emDfQ)O`9{J|~NWi_J!@$Pnj z4S+(F)B^0LD*KXnpi)FCj}zyA1ffMm6ABBuzt`{U3G0XnfC3>$ZG6N~Etl7@!@STM zBfdz@DBufN5V`^sLh>*YM|mXrls5MiGn z$x?$Q6Xci>QeUBvF~f`j5)LElH^)waLk|xpKB!c1En+S~WP!5)tV5?Ls_M zmLoJ6z%Rl4phYbWs<I3-X-$L zxPo|T0q7RB9ugyb0$BqVWTINV?0hOg5w*t7hsbk8T;wzO)rx{kqT!1Vz$1L+B|@05 zT6{zhl32YR$sbt}j4D+i=zx@~?W)jBe8NJA3TUd@YKY%Tl?c#(m5cq*%B98d=ONd_H3MxwHX92acU|HD=;fH!nAO|`KVn-Q=5PT^|2tT6ra)8Lr z@X?{Lc#O6^L|L)@Je&9Z_Vh{UYd1UV0|GWG`^QtU6JUlM4>}OzZv#e#j<&X!dZ2^p-uQNvYlXLD!^)!`^i;hd7_m5@;b)t=med%$rp0mNFw9m<4}JRw*?88?8m zm|2a|Mcz_>8HhTMJjoPjRmKMWM|oaNErpYV=$!_0=6I-%;v#QZc62aJD2d0kE5mh18sF9%^KvUx2HGYa3 z2#23xWe^caL&PC0*V5Qm>GA;^^`5f%wU{2`C*GQWY>v2zq8w;4aCuDxycEsrVj%#) z_6yDw#Y+g46j==eb8>d2{txAr%vOu;@g5HGx+A29R*0~uR&Y8|w@VmsGBgyj+=1h; zBXAmud{k|OM3g#?1Lk~Bc)LtPi37D26eAR6%^~7Cvbxs}lwH(3*w@svA#wVfTGtd< zGPcZrSESz2p9OS&wKTnqvPD)BDFOAn*F=$1CMRp6{_=+cb>WdyA|?wKsSWB}Qiw=c zs#+p~hPdtm8FJs}IQYF19o2}@sh%%l6E!zbzsPVzDW$%0IQ0Y0>n-`HBZ18Z!v;tN z^-l99TWU}2gm5LJ)vta=CU$TCJ}SNDMfPETX-G7w1TSKS^E5CdtuyHZSdNdY=W9`*2!x`ZdroQQ`*cpx^<^kC{=V9Gz^DCH3LCYj1Ss8)s-WUw47@*Qj9)(jP=w>Lc?BB$L|fmypDk2=bh#dVi(eRi1-egEa9~@fXW7c!j6h_ z%43Q%+LSs8kAw2jFg30!6SxCt95n-yA!Vb~{K3k&K{N4I4E*!dnE48k$glDNUA;La|c~G+={QlBpE(lz*sSF6vqtsDQ|(hAL8y z{R~d59Sn%eD6*LkvQ3T#)dP7%u-{#jHZ+WLybP1?8i#T$k-#*0#bbfZ=D-43;Uy|5*gGIks77yYXH?pM5v=A zCJzW+mn_5v;U)wVNZ^KlXw|Fv_*!&e%R`hX_Fk5a@vi99s&nWl~cIZb#%4xG0x_P~e%4|s4o8|ky8uyL2$a9yr&qId_UJf*uJvrq zcc538`RF!;l`Y_Zoh*E)ASkQgrzT7kU>Fd>SjF+{YJr0Z-Or&&0L`VK6`1|16<>PN zFcv|9-p#-5O`{gL6-9Dvl}b3x_eQ6866?X|oDt4yf2;lcW{`XCR;#b=O&Qg*{Xqj{ zF+@U{q6x|ZzOt*NkEUNMh51_|Olrl86K!g>JqSE+(M)I5XWOs2<0o2RKkyxLUka@{6U9NHsMp0aeTXmTOzm6Q;)n`uOWQaCvKLe{9V1(tGgib zSzUc<8VT!Zz_5%u3=kNwT4}YetkESC)gpBr-q`_7^|lEuQW-LZGY8PA>4ArTxRl=TFNx4~QaMtAby^YBN-4r= zuspg2+j-q7L5LaFsG7)Bp>=)6?&9>Mj@k-c5;3Av6G;ZtO5rO1cmeOgZZvZwTGUWM zW(PHajyloj9~Upw+(YM75pWkGlu@%VB3boS7iv!WXgv4?`$WO2*2@z~YDhQ>8CRhS z0vKI?9XJ~K03GphjgaAk@m-IKqUTWIk>6wpwpoQ_*8DyhN;{3hg$$~&08JNicdTwP z#-s6moZp24LSI~z@F=La=Rs-jr2|p*tPSg$zTy&?_|U*DI`W+QaG?ZUD)kV6npEia zAUmGn31W5Jpf3b!sst`e4NwH6j6XL?QgbSQnjpERyApE0=mXSt^cVI1yCM@H+32S+ z;wCI8%_y-b9t@7bNP&?oWwIqds$W&zqo0%vx?{05tb-xpTG;CG&}NJ#a!<8BW%2W> zC_9d_vV`&?X}aS(a*l8As}lxzC44qR0(Om*5ac>LhM1`rsc?I-rLn$yLl4-jdNHSe zeD@*R8EUeSzZ4P8$fTJsxqfF`)U|{iND`zmG>xp&tl7Pe&iIDS3yMir!J!BUO|*c# zv4^_LZ|-(&MSCr}`W6I1Bl+7wk?9tEY8O1QkFHctb&H7QqA?Z@{k{FGdNvJ77COf{ z5&cZzZ(A+L>ZWe)kg|_%QIh?;P-v=u(%nKx!W>YFLH$Lq&JW-(;{5SK&GXLBJP7mM z?@muL0lj_WC!X^fbZQ0I%|u!H?rx$W`-{zHUUS-_CJLdbn-LTQ632*{_t7tZ^WQaw z>2;lFn56m;D$RE?16@*>twoZ%^H4$SOm7f+h(6;mVQSh={ zVL5|x>0Xw7y^`-lAoIRnMgyDiAEitH-j22U_5HEE`2)aSe=0}ES<_x1DOh*gx zLgOiZaO-}2TZ&7B;~N18CTFpKW3zKKQWu|))Ri<6HzNhU(g)#EI}W$Zqj7(ME5R8N zPh<6;^L0EaB1k~yi+$7bx)4MG03ncQ4WQng(%w8!(Zswj;%Dn(GniU^uRgc;2_y(C z(v76>SR~O^0oCoqjC*y}^p1EAh=5VCIBV%P+p#ZE-~CL~Jm3O>MI4uZrB3VCW#6m| zsX$7;DG;W(9WsjKtglOsUInO7-U#3_x<9(-KpLX(ocC(YZQBXr`Jy${XjC=qhvXQbANpIIP+`E0eM} zPy*pBa+PkMyW8KahtNBJdQkC%8<<~InCi!hKgn2cpdY?azIGSMxjndGi%5yDY+c zU;`4J_vN#i1!$4{<_67I0CIHQoz7yQtC37W6V5_>Y0OP+rGS%VA_vq}H0M=>HaPQX z4(6uYDvEnG(CtJ-LVdMyeYH^+BT&3>y1aq$MTOOHc&v>WrONj`30&87S-N5o5H`ST z$|z3_Q}qcegV*MN-YJMv_gW&VW;BGS{{~7u6My(;-t5knT1aTvH&msH>PjGy_~)*R z`lkD;wNGxT>mm6>fiulYitra;(R$d1$g(2a;36Fjc;2G66{I001+Q!I@poY^o`R+_xJvW zKba+UKWF+_hHh4|XC!KfNrUr=+7=yE8>R5!c3qLaK@y?CH3~!&shI^r>e7#f(j>tr zR9{LWm_i?a6uhZu0=8n4wk9B_uFN*^%Qp&X;Y67~72%uyDF6vVvE5X(l;cNu&d;@m z`rYT#)o^U&6ZRhSf-s+0Dbk5-4*Z6rYKnDVZOc(}QUmU%?sMz9sygvVp#?2*<^26F zG@+ExSx5`0h@_q9Thje3(u?rYZQ!bLNL7ciewWdItLruY{a;_`VzqVpCuSR`7S!i!@Ob3FN>06}g`5 zum8>=b{{mHn^K7yi8s-|7Ph87L792 zs7JQ)b6>Zs&CHU+{eS$A)@M99jhd6R9U%t<5g?SK!g7<`9VmZoNklK!J|@&$6l8`_vU}#t-bVQp&q>0t|_D- z;;&0cOS9P6sFj%5n9aI9WMf?~bzqqH-hAKZ4a0kI%Vm^yy#K|O+knQ5PD05D0&m9U zRRzQIm^tb=YYBf$Q-}a@UgzRv5o5i21$=w_1Lo5(RR%zGL00ZN0Iz+aWsPB)LUixk zr4Z9gHPFsGf@TBT7SqKjpXpEE7$z9Z$YxU73R355^t%*6^HCz zj6VzVO0RUqJ*{2}PJ^t|AZ;~h=IR*hRZq*+DOwExv^#%oHowL=-c2)EijXKMsD%h= z|6T$Vtp?-7m?DZwjlC=sCT*Zft{JAM6=S>bi;?6Y&nv?Kgo%=j|K#Z75XDvmE$741 zRs^-D!A2G!%7JuI>|q`P%1MN*8X`%C(z|bLMyoukTw<#i3_lY*&f4r)_gEu=oFRcl zoxSV{<3xV|aPtFP+F>LhQXxR11LFQDsqIse;*xErm;QrM9*i8I<@zyAA*5*v@zkh# z>clDR19}_1EWrbtK=+VJ^@10tqD#LOYJu)i0BjBc&IUpR!|j{hKg= z=$kqK<+7i{KXKW&Q>hEev?-S%<+;SD<4ia~*c^Wu0P?G!5Vi|nz|Eh*Mh!MR N07(Z$PDHLkV1l}sA5Z`Q delta 8269 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 LMNS1ou0mjf`7y}- diff --git a/Scripts/init.lua b/Scripts/init.lua index 9b8912f..26b2aa7 100644 --- a/Scripts/init.lua +++ b/Scripts/init.lua @@ -26,6 +26,13 @@ bird = { --end --self.visibleTick = self.visibleTick + 1 end, + Update = function(self) + if self.Velocity.x < 0 then + self.Render.flipx = true + elseif self.Velocity.x > 0 then + self.Render.flipx = false + end + end, visibleTick = 0 } @@ -48,6 +55,13 @@ cat = { self.Velocity.x = -100 * math.sin(math.rad(self.counter)); self.Velocity.y = 100 * math.cos(math.rad(self.counter)); self.counter = self.counter + 5; + end, + Update = function(self) + if self.Velocity.x < 0 then + self.Render.flipx = true + elseif self.Velocity.x > 0 then + self.Render.flipx = false + end end } @@ -65,7 +79,7 @@ animal = { r = 0.0, b = 1.0, g = 0.2, - strength = 2.0 + strength = 1.0 }, Idle = function(self) self.Velocity.x = -200 * math.sin(math.rad(self.counter)); diff --git a/Shaders/world.frag b/Shaders/world.frag index 4a17a93..85941f2 100644 --- a/Shaders/world.frag +++ b/Shaders/world.frag @@ -16,9 +16,11 @@ out vec4 FragColor; uniform vec3 LightPos[32]; uniform vec4 LightColor[32]; uniform int LightNum; +uniform vec4 AmbientLight; void main() { + // Quadratic light falloff vec3 Falloff = vec3(0.1, 0.2, 0.0); vec4 DiffuseColor = texture2D(textu, texCoord); @@ -37,9 +39,10 @@ void main() vec3 N = normalize(NormalMap * 2.0 - 1.0); vec3 L = normalize(LightDir); - vec3 Diffuse = (LightColor[i].rgb * LightColor[i].a) * max(dot(N, L), 0.0); + vec3 Diffuse = + (LightColor[i].rgb * LightColor[i].a) * max(dot(N, L), 0.0); - vec3 Ambient = vec3(0.0); + vec3 Ambient = AmbientLight.rgb * AmbientLight.a; float Attenuation = 1.0 / (Falloff.x + (Falloff.y * D) + (Falloff.z * D * D)); @@ -52,47 +55,3 @@ void main() FragColor = vec4(SumLight, DiffuseColor.a); }; - -/* - vec4 normalMap = texture2D(normu, texCoord); - vec3 normal = normalMap.xyz * 2.0 - 1.0; - - if (pixTex.a < 0.1f) - discard; - - vec4 shadeColor = vec4(0.0f, 0.0f, 0.0f, 0.0f); - - float dist = length(light.xy - fragCoord.xy); - if (dist < light.w) { - float attenuation = clamp(1.0f - dist*dist/(light.w*light.w), 0.0f, 1.0f); - attenuation *= attenuation; - shadeColor += vec4(attenuation, attenuation, attenuation, 1.0f) * vec4(normal.xyz, 1); - //shadeColor = vec4(1.0) + 0.1*normal; - //shadeColor = vec4(1.0); - } - - //FragColor = pixTex * shadeColor; - FragColor = vec4(normal.xyz, 1); -} -*/ - -/* - vec2 texLoc = vec2(texCoord.x, 1-texCoord.y); - vec4 pixTex = texture2D(texture, texLoc); - if (pixTex.a < 0.1f) - discard; - - vec4 shadeColor = vec4(0.0f, 0.0f, 0.0f, 0.0f); - if (lightImpact > 0.0f) { - for (int i = 0; i < lightSize; i++) { - vec2 loc = light[i].xy; - float dist = length(loc - fragCoord.xy); - if (dist < light[i].w) { - float attenuation = clamp(1.0f - dist*dist/(light[i].w*light[i].w), 0.0f, 1.0f); - attenuation *= attenuation; - shadeColor += (vec4(attenuation, attenuation, attenuation, 0.0f) * vec4(lightColor[i])) * lightImpact; - } - } - } - shadeColor += ambientLight; -*/ diff --git a/src/components/Render.hpp b/src/components/Render.hpp index f5936ea..3f1750f 100644 --- a/src/components/Render.hpp +++ b/src/components/Render.hpp @@ -27,7 +27,7 @@ public: Texture texture; Texture normal; bool visible; - bool hasNormal = false; + bool flipX = false; Render(std::string _file) : texture(_file), visible(true) {} @@ -42,10 +42,10 @@ public: this->visible = tab["visible"]; if (tab["texture"].get_type() == sol::type::string) this->texture = Texture(static_cast(tab["texture"])); - if (tab["normal"].get_type() == sol::type::string) { + if (tab["normal"].get_type() == sol::type::string) this->normal = Texture(static_cast(tab["normal"])); - hasNormal = true; - } + if (tab["flipx"].get_type() == sol::type::boolean) + this->flipX = tab["flipx"]; } else { throw std::string( "Render component table formatted incorrectly" diff --git a/src/components/Script.hpp b/src/components/Script.hpp index 66addc8..069fea9 100644 --- a/src/components/Script.hpp +++ b/src/components/Script.hpp @@ -47,6 +47,12 @@ public: caller["Idle"](caller); // Call idle function and pass itself // in or to fulfill the 'self' param } + + void update(void) + { + if (caller["Update"] == sol::type::function) + caller["Update"](caller); + } }; #endif // COMPONENT_SCRIPT_HPP_ diff --git a/src/engine.cpp b/src/engine.cpp index f235651..aa3ccc5 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -67,6 +67,7 @@ void Engine::logicLoop(void) }); systems.update(dt); + systems.update(dt); /******************* * LOGIC UPDATES * diff --git a/src/render.cpp b/src/render.cpp index d9cc054..4990955 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -33,6 +33,7 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, [[maybe_unused]] entityx::EventManager& events, [[maybe_unused]] entityx::TimeDelta dt) { + // TODO move these to only happen once to speed up rendering GLuint s = worldShader.getProgram(); GLuint v = worldShader.getUniform("view"); GLuint p = worldShader.getUniform("projection"); @@ -42,6 +43,7 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, GLuint q = worldShader.getUniform("textu"); GLuint n = worldShader.getUniform("normu"); + GLuint b = worldShader.getUniform("AmbientLight"); /*********** * SETUP * @@ -82,9 +84,14 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, glEnableVertexAttribArray(a); glEnableVertexAttribArray(t); - /************* - * DRAWING * - *************/ + GLfloat amb[4] = {1.0f, 1.0f, 1.0f, 0.0f}; + + glUniform4fv(b, 1, amb); + + /************** + * LIGHTING * + **************/ + std::vector lightPos; std::vector lightColor; @@ -107,6 +114,11 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, lightColor.size(), reinterpret_cast(lightColor.data())); + /************* + * DRAWING * + *************/ + + entities.each( [this, a, q, t, n](entityx::Entity, Render &r, Position &p) { @@ -127,6 +139,15 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, (float)p.x-w, (float)p.y+h, 00.0f, 0.0f, 0.0f, }; + // TODO flip nicely (aka model transformations) + if (r.flipX) { + std::swap(tri_data[3], tri_data[8]); + tri_data[13] = tri_data[3]; + + std::swap(tri_data[23], tri_data[28]); + tri_data[18] = tri_data[23]; + } + glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, r.texture.tex); glUniform1i(q, 0); @@ -139,8 +160,10 @@ void RenderSystem::update([[maybe_unused]] entityx::EntityManager& entities, glBindBuffer(GL_ARRAY_BUFFER, tri_vbo); 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))); + 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))); glDrawArrays(GL_TRIANGLES, 0, 6); }); @@ -215,6 +238,7 @@ int RenderSystem::init(void) worldShader.addUniform("LightPos"); worldShader.addUniform("LightColor"); worldShader.addUniform("LightNum"); + worldShader.addUniform("AmbientLight"); glEnableVertexAttribArray(worldShader.getAttribute("vertex")); glUseProgram(worldShader.getProgram()); diff --git a/src/script.cpp b/src/script.cpp index 30328ab..a886ca3 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -36,10 +36,14 @@ void ScriptSystem::configure(entityx::EntityManager& entities, //init(); } -void ScriptSystem::update([[maybe_unused]] entityx::EntityManager& entites, +#include +void ScriptSystem::update([[maybe_unused]] entityx::EntityManager& entities, [[maybe_unused]] entityx::EventManager& events, [[maybe_unused]] entityx::TimeDelta dt) { + entities.each([](entityx::Entity, Scripted &s){ + s.update(); + }); } @@ -99,7 +103,8 @@ void ScriptSystem::scriptExport(void) lua.new_usertype("Render", sol::constructors(), "visible", &Render::visible, - "texture", &Render::texture); + "texture", &Render::texture, + "flipx", &Render::flipX); lua.new_usertype("Velocity", sol::constructors(), -- 2.39.5