From 299cb740d423c4ea955429ddb42bd0a4cf37cddf Mon Sep 17 00:00:00 2001 From: var Date: Wed, 1 Apr 2026 20:19:41 -0500 Subject: [PATCH] Colorful shapes --- res/tex/texture.png | Bin 8578 -> 1107 bytes src/camera.c | 4 ++-- src/game.c | 11 +++++++---- src/game.h | 2 ++ src/input.c | 4 ++++ src/render.c | 4 ++-- src/shape.c | 6 +++--- 7 files changed, 20 insertions(+), 11 deletions(-) diff --git a/res/tex/texture.png b/res/tex/texture.png index 58c3ab21ade96dfe3de117844a49f80b06c59611..9d6e08ad17fced7a25d75051a88b959ac461d320 100644 GIT binary patch literal 1107 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(m}l9Aa^ImnE)e-c@Ne1&9>AYTTCDm4a%h86~fUqGRT7Yq!g1`G_Z5*Qe)W-u^_7tGleXakhs zEbxddW?;}$24TjErS@e&LG}_)Usv{5EKH2t>=74k1u!r$uk>_r45_&F_QpnDhXjGP zhx0FqwFw&b$*Oqmbz8Kt;h0NXz#L7Jca>&8)>Rc>y|^t}y=%$6 zdcN3Ke?J?Go>*1J#2^545YQSHpi_YqBLf2m1A_yQ1@tF=DH4@80L_G0;s9h3G##NF z;U;Wi7$!C3hX@LuV_>i&%U`4i1Hw@b47BtYA{daoOhR-a+zB#?tndfv8Vw)Hq)$ literal 8578 zcmcI~S6EX`*Y*Z{L=>e8NNDD!(e{PT; zrWo@PR08Ud$4`T1cTvvoEZ4)(hj_fqsLcA_;Jm4fL~i`xdkM}b2Go48UmoUhyWM8V zLF#UO&zTyXFH03)A^PWvJk5%EDcRM27CrlU{gnmJTkRhSXOpz*FgUNUL~dHce3-)E z@qV0aF|T=op{qUn?mo#4%C&_y?x0ueAtS!|$INt87Y0f5juM3iEjkm5|(gF7uGXz0W6F9+Y*G(PHwANEwh0~}&vg!=R~ z_y*gt%~0(IWYB6y27a&tuig;Qcsx1p3E|SGDsR~$!YUOZg`@_tM;9g!-x6>Sl_#P+ zoZB^%_k7JhhT845&HIMB_SoH7U9RRhKcG<0!i0BtxP+8c;`?_GIh;Vj?MRS?RcH9o z0PIT(b5nAfN>3~Y=P1TVV>&)ki}{(i<53v&z>)|E)gcn)YzoC4>4qD01h`+-^+liU zO;&3{K;#`7QSXosIX+E`;C_?3D&V}2&gL%furh;vxW`Z|7YG9lxUj$}#nqdr;)PFa zvX>JRgZr3v!jO5VktMV~RfS7{i6STJlZGTy;J?UJP|lhq)&}o~A;szIukZJ5HrL_Lf)!FST#K zv`q-~_t(~bHkw;LI+RLBPlG~fY&+J?WafNiii?_^uFf)xe1G~XH$g{gr08 zYMmF$#b0f5*F4HFL$_(R>M18!stzuYqD)v9(x>DvkqHp$KYxt)9cJA-$0(D2Vy0^> z4jr9jJ=v42{U^8fN;RS~pGnU0(+%!-isaL;9ZQVLyE5K3tjWj^c0mUsK86IJPpIHS z`66EI8O$9ofbk<{VW$V(VNquJam?AZlODsuBM61SEV3cb zekv*u?VhJFn(pxVS&hjK^HIyx)CN6sNeBY7fW+V~2k}h`;93*2nPleN8FBq{UJ;0| zz;t-<1uD*$UL<{l3Pvf_|E7YBIHl?0@EdnK_C8gTD3@`*2fUD)uXN-DXVR5 z+ag~S5%@!*&?*%hH3;psZ%ekK3c9_qVoVCOHht=DC>Pa_1&{E{*o7$9b=}HNiSf)E zJy&apOL5rH=|DYwbGYB4r_M;8^_tNPB{kP$sUZOaxgfj6?Lr^^k9~s;DZQMBvw~KKw&C{(|KgMR=EAhvix9W7$ zSBqF!c2c((q=Iq1qEs0FtW3$4_oUc{``6CwEZKKG zh!+b3U@bwyZes#9Kc=JCt~2Jngl;>%oJK6k#+KveeRgWl2=Wi- z+D?gt;asUiIXNT2c+Nxz*~3kk1qrMil{a@+Qojn>qtw|}mUmeC=Er;`O_4SoPtD}R zf^kjL8lD|@D=RaTl0G2an#>voB?N|h6t5P7(B)Z%o)#f5dUBBG6}5J}lGFjgirsnm zM}e=zOl4XyJnK+7*@!cW{PT6v(zChdH~SQTH4QO4=W0pG0F1_-+__3T%gg_C`PD*w zKZ7l(%GA|aT4D7&q$?PF@@IT$X(z{1_-Ys3Jd%IE>NH)5L|1MM+}1Gr8ES?2CFvjM zUt)>Sd&s2WWfy9!HSm5vi!O;$j0T;1!`8N^eakp~Zu;%+m5a@N$===;QlOTP=zuZ4 zLZpLMP|z>h$B;iPv?HU zMzhDSBkvx(+R~xm1IzSI()Z? zIgw|-l`CTF*L=h1g|9Dd^iF%R|Jv7Ahor1(7z|TVQ`eRo)`d4e$;-(_SKxV*Ry-^U z!b?ldshM;)8S`VCV#iC;wnwf;7}D&MQdit%#!hgaWG`bSkFcTz`^>+#3pqM{G5fu6 zNxqWtO>2iIv+nhR&F%?3S|vW)%=)YG52W{~twD}t%1&^Ic*Brn;5C;rn=qu@7{c^BPtDgor&}>Z@A4Y z;p+Z*@=BmauoI7%{zO06vuupM)njLHPu3XYN-|ccILl@no%e<$CWMnjT6L3#0>6}* zknu)}bDX)&X}tq%3C<)Y24;$ZAgjftCx#VN5`DId7mrjq`SY5uU(X#Ii?3V2{9vF? z8u>$%H-`3p3i{aI{-}w)Xe6Y+zS1Hgm3q{*y5@mP(=7>lc@r?m-YucK^4xyZgR6Hj zwui~smz0YJ9#d-en2SA8O%kp()J>IU;w;2;GxoWr{m$s?~X5)jBFx60W=V!Z9?6nVvvAT$B4^duASPips#yUvima-YtZO<1DP@xE{AmOiK@!fjSS*J9I<+ zc0Z=(3B^=^&#Z+6(LM^bbut%oDd<1DBH>^v&EKvhz)T}hYf!$hke4XO$yxa{*sB&% zUvzm%V`vx_bEhg#&NO5>e&hwvx4ap$&l39k)pO(Nr8!U1G!6T8ovHTlrE5`ztcrOf;N`C7WLFLw0(sM1rlmze`eYRh-5ow-1^-d5%Dr))JgWmK z%Qlbk;!m;=s&3X6C`x`?6>PF`HTj7C-knpq^9~VwN+FJ82uA|AIRcMvZ^)4(Lzdd+ zySWnm+|dhC(o>(GR$pNY0;|a?+?w&_Wgym&N>}^tYxxOgRvoO(-?KWytz4uMdM*%0 zX?0wxSB}2enYyXf!LU&|_h9k9kuM07teT6G-7HJph0~K)sK75iSF2I8QdH`5NEN-D z4H-FkNe|b)Nu7BO-X#}3T22ti*7*L}`W}uRiZfpRz8oYh2YhwJHvaH)obzt)>jmw> zMZltZxmkx9>9J}K;@{EO5qI>t3Vy|&o9fmxu2{?Ey~$rD#-V;QTl@RC*=bPcS<`d= zXI2)KmWbT2gKzoDr09;&BN1JB^Mfh7N8b3AHyD=I0+{enfoEh>X}NzJN@#+)|IUiI z48bigd@El7E7ePc&hImm zotXHDKJRT-WrdZ}D7{*5Ie%tqs=cKWS4YNBY5-nTQir%jM;^IoNWZIB>oFvc7WYxAo^5U1x23qx1!6Ce{#LV3+W4Px^uQRAqsOR0i>c->&3wZzQ!q z35%*)J3Kgiy|4x?-M;>{nq=9WM{w}-gKah;%gQX-SERbkyHC%P+veiMdBReWjOJ_;SUwH^3ae5x1`Mn!C^O8rszp* ze?2p&M~gt!8nOP*dkcB}A4+63k0KU*?J|*5XTwxqcAG|_;E1MB_5R{KH>5zkzqW-X z!YANxsQMKu5&dVi+}#isq*TYq%D}pD@28m^@-I)k3s8|=1vk`H?`AHSGB%|xU2JN3 z@Fy|4O-)Z3>xz3t5O8p~x!clXcR1pfSRy$1?I#6rfW6LM`HbF}4qBI|1qz(I zIBhwqz&DuT#(!_5xK5)7YOd}l-Tb~EfI*pBD6pR2f^=7A*$oX~274u&^2T*`GIS#2~k3S{S>#%~@r3TGn%VXoe+8VoY+Gs;R2V)Y!Z)rfq9(3g)(|Xj^HbOG`_D zkT%}MuHf7gLbEsI)dfM zr(qCpgYEpUP?rbvv%3{Z{r2J=@uvRy%jcLY^`YE%WzC6u7FOoq4!;50Jl_xsU6w2c zRy=mB^Qntfdn4mDPzp>Qf2E3!@L0`4^M`Mnhg@73m{45Q5vd$UbT5GUKIR6VuOX`yx1=< zwz2FVXn5YLCeZq}MY=C@0|d%Wtk~U5v%d+iuxc~m>rkVmuG8DN6iDBj4AA{8!f5z0 zK3)b{FRsxOCc#C`d)KptZZL}8HI3`zSxaoO#TN!$^1hTe=>ci=o?tVItAqKrRs2=o zIvT2e?GMH7TsCe1rF-g+39%w1LBbTYxGnm|hIU?j>xsiolrdJNpNHFok0kb`iH&=Z za=zXt2do>26^91mi<|Q9AI3(`INFK{mH2WOs=ZNj7sPQ4j^ESl>5+uRb2v-s+%xoe z;KX#gjhzhS?*lTLe_AvOVe3fLzD&*Qj{xl4F#qnD@lGt=PUY`?q(6Oa~jRURx-I% zwzLGPshd)pq{u6{IajF28Z?WA1iraZC8=q4mA)6;-ML-T)T{KD0N(~+v1FcdFQZ^eNzx5xZ=#q|6uO!3I-5Sa zcm9M!nLDq7IDL{$Q;T*QDs7XmmQ`!t<*&WX2xuTfD+thQH)emL}Ya``MvT^CO^*rg5tUqN~g zdLwAg9g5zoi`A)pT@mL)1_>HFty!jOm>9_&Ol|a1WIYuR^JI|zaz+m00NJ^82ME?Z zNSf6sW{N)x*&ha9DpXfjN4Jci;|f!Fn4(@&6^XKQexC03NBURU^%+f1D^rhW$3)K? z$TZT{R8K*J7MJENILL1!qzTiPC7~3vnc)_P2tptn6+sN?@sb{2QefTVe;`YjacrdB zTMi{*HQoIDr7E_Wmb>JEr}NvbNTb0{Kj&Rlg)af8pYg{`Dvf5GN*ekV_ibY{uQ$&i zJmrHr2O!1Iw_{mgpL~AgRx}$K)vQi`kGL4kCh(0{5aOIS#DJR_(DhX$DY82|>q(^A zYj*sP2bz-2DAyWT`Ftg@K#M`>GgEaj?ZTHxP=H}pNb=^cKt;TSQ#G3c!sjYz5+h$1 z>SRZ)Dvj%l?0%ccn>M~annp)Y!j-D^2`7&^*=#rXY}7DkNE zIs7zbKs+>W-fW7}qA9#p8Gx@&#ZQVSEozKMW6w28V32-M)814M^$5yCN|TKQ`=T^PI<_T zTaQ0)U=M08A%X}xE!#H=(7iA29Cj?Rl0F9YkfHf0eLwlL#9kbSQDa!l_Dty3o3&9b zX0fr;?J8ra<)e^Nf2@y0f#>gNLPCF(_GPet-DE3)EF?psi?w$iC6TSEIsJABSpK2j zr`~M-PmPr7l2~6Xxqd&tvn+{Cs}3YVmgCFnMH|f| z@CS8ce~!(UWfFO`xVG47z#Ls9Bpn^uU;n9WIvj7$MGni%36NkaFuFkoRRk~T5$1TzH-%W^KkX3wiIMA@;hb~ zA1n$mw-p;%t<>mwuh*_Al~ZaamFEp+v@7Agq3&8Qcm#HCiHbejiQh-czJwDIB70YW zxg|zMXGL~TG|6_!4P)t1EWpTAZp>BJZE5>@a&^7S8d)D4LK8vO8h*mKXy zs`|^Jij6z?AXL3f2%Q1H13KFut+McxWa=rjS)WIi?$eO*X;a8$BK8qu&uQU=dRpij z&`m> zSTe3GTePE=!>1hg~i406F+D~giBZl0OsE(tQ*zEvcTy`perKjRg6$sv) z5^yZ>Us;D*H#75Ws;HU|(=<1@dz}PMSkhEhGS$?V&+df=oUMPD6OTFRPGp0M5v&RNh`@BPzynT~3lIK1Y&zGa=3uwuagKrrsXSEL zUUqF|;scxJ#<`Z&+TCIaOL%hm;)pV5mUDnKekx}hAwoF27Qb)4iMhDLIzKy|kzF7% zA|e_8GoKIhEk>mQX|m316$#=A$qz40*N}<14R91lLuRXa=%??IAGRP;)o%ALg|#47UM#jXRAh*>a8ZSy)a`kO z`vwoD`#E78rzht?)D055s%$86dE6m$f@otT-qh7B_*a2_E5f!&|BF-4>+Dwq7>EA;3-DjF(Eq~P|1quqCuYCd8t^2xcon^}eA@cI>qGsC4y0Pi H`t|<-qJ^Q_ diff --git a/src/camera.c b/src/camera.c index 9a80666..3fcd885 100644 --- a/src/camera.c +++ b/src/camera.c @@ -3,8 +3,8 @@ void Camera_Init(Camera* c) { - c->position[0] = -50.0f; - c->position[1] = 130.0f; + c->position[0] = 5.0f; + c->position[1] = 0.0f; c->position[2] = 0.0f; c->width[0] = 0.6f; c->width[1] = 5.8f; diff --git a/src/game.c b/src/game.c index 554ebb2..58cb6f4 100644 --- a/src/game.c +++ b/src/game.c @@ -19,10 +19,13 @@ void Game_Update(GameState *gs) { vec3 move; glm_vec3_zero(move); - if (gs->input.w) move[0] = 0.3f; - else if (gs->input.s) move[0] = -0.3f; - if (gs->input.a) move[1] = 0.3f; - else if (gs->input.d) move[1] = -0.3f; + const float speed = 0.3f; + if (gs->input.w) move[0] = speed; + else if (gs->input.s) move[0] = -speed; + if (gs->input.a) move[1] = speed; + else if (gs->input.d) move[1] = -speed; + if (gs->input.q) move[2] = speed; + else if (gs->input.e) move[2] = -speed; glm_vec3_add(gs->camera.position, move, gs->camera.position); Camera_UpdateVectors(&gs->camera); diff --git a/src/game.h b/src/game.h index fb09d17..052c80d 100644 --- a/src/game.h +++ b/src/game.h @@ -12,6 +12,8 @@ typedef struct bool a; bool s; bool d; + bool q; + bool e; } InputState; typedef struct diff --git a/src/input.c b/src/input.c index 2dc003a..dad151b 100644 --- a/src/input.c +++ b/src/input.c @@ -27,6 +27,8 @@ static void HandleKeyDown(GameState *gs, SDL_KeyCode sym) case SDLK_a: gs->input.a = true; break; case SDLK_s: gs->input.s = true; break; case SDLK_d: gs->input.d = true; break; + case SDLK_q: gs->input.q = true; break; + case SDLK_e: gs->input.e = true; break; } } @@ -38,6 +40,8 @@ static void HandleKeyUp(GameState *gs, SDL_KeyCode sym) case SDLK_a: gs->input.a = false; break; case SDLK_s: gs->input.s = false; break; case SDLK_d: gs->input.d = false; break; + case SDLK_q: gs->input.q = false; break; + case SDLK_e: gs->input.e = false; break; } } diff --git a/src/render.c b/src/render.c index 387c7c5..d20a92c 100644 --- a/src/render.c +++ b/src/render.c @@ -217,7 +217,7 @@ bool Render_Init(GameState *gs) SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 5); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); - gs->window = SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1920, 1080, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);; + gs->window = SDL_CreateWindow("Sandbox", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1920, 1080, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);; gs->glContext = SDL_GL_CreateContext(gs->window); printf("Created OpenGL window.\n"); @@ -236,7 +236,7 @@ bool Render_Init(GameState *gs) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); printf("Initialized OpenGL.\n"); - Shape *shape = Shape_MakePyramid(3); + Shape *shape = Shape_MakePyramid(5); gs->testShape = shape; glGenVertexArrays(1, &shape->VAO); glGenBuffers(1, &shape->VBO); diff --git a/src/shape.c b/src/shape.c index 5c93668..170b9ef 100644 --- a/src/shape.c +++ b/src/shape.c @@ -62,15 +62,15 @@ Shape *Shape_MakePyramid(int numInstances) for (int i = 0; i < numInstances; i++) { ShapeInstance *instance = shape->instances + i; - instance->position[0] = -4.0f; instance->position[0] = 0.0f; - instance->position[0] = (5.0f * i) - 2.0f; + instance->position[0] = 0.0f; + instance->position[0] = (5.0f * i) - 10.0; instance->scale = 1.0f; instance->collisionRadius = 1.0f; glm_vec3_zero(instance->velocity); glm_vec3_zero(instance->rotation); float *textureId = shape->instanceData + (i * 17); - *textureId = 0; + *textureId = i; mat4 *matrix = (void*)(textureId + 1); }