From 251ce390153d34c42f7d482bb18b0345fe171018 Mon Sep 17 00:00:00 2001 From: JanEhehalt Date: Mon, 21 Nov 2022 21:52:01 +0100 Subject: [PATCH] Isometric Rendering kinda working --- .vscode/c_cpp_properties.json | 16 ++++++++++++++++ Makefile | 7 +++++-- inputHandler.o | Bin 0 -> 3888 bytes isometricRenderer.c | 35 ++++++++++++++++++++++++++++++++++ isometricRenderer.h | 11 +++++++++++ isometricRenderer.o | Bin 0 -> 1792 bytes main.c | 14 ++++++++++++-- main.o | Bin 0 -> 4488 bytes spiel | Bin 0 -> 21216 bytes sprite.o | Bin 0 -> 2024 bytes 10 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 inputHandler.o create mode 100644 isometricRenderer.c create mode 100644 isometricRenderer.h create mode 100644 isometricRenderer.o create mode 100644 main.o create mode 100755 spiel create mode 100644 sprite.o diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..ba9207f --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,16 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "gnu17", + "cppStandard": "gnu++17", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Makefile b/Makefile index 044400c..d2ca802 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -spiel: main.o sprite.o inputHandler.o - gcc -o spiel main.o sprite.o inputHandler.o -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 +spiel: main.o sprite.o inputHandler.o isometricRenderer.o + gcc -o spiel main.o sprite.o inputHandler.o isometricRenderer.o -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 main.o: main.c gcc -c main.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 @@ -10,5 +10,8 @@ sprite.o: sprite.c inputHandler.o: inputHandler.c gcc -c inputHandler.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 +isometricRenderer.o: isometricRenderer.c + gcc -c isometricRenderer.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 + clean: rm *.o spiel diff --git a/inputHandler.o b/inputHandler.o new file mode 100644 index 0000000000000000000000000000000000000000..91d79f0d8cb5dfb09192229eb5c79b8e1b6414cf GIT binary patch literal 3888 zcmbtW&u<$=6dot0H6`gfsE10WU?eCla^0jUulSvRX`&;B)PIKLZn>v6-mQZ<~y zn&FIA3}>i3=;$j|_)Z$y)zYM9m5icZt!X{+t`=-8)g!7Yya)!j&zJ0zU=-QsrNWUG zMRgChU~i-lxXZj68O7d>nK4)DGK!;BqnHR9&N5|Z-Qr=?rM3A7l!qIlnUSZEuo0|j zV@p(#UiZr*Y=orGqnZ}h>)PIxns#Og$`c5z9az$4=fqkB8ev+LT*C1#@>?RMT#SdD zTTAzz3zYBFC$$HwHSJ|`z{1fwG6ah%a#^7kE9l2sq4LW{u}~q>TEA1LU2r!5N6%;T zC2jsQH>tJd_)g&eekDZ5aib!hh*Da20mc;j6kWOrhB)6TDLW}*ICAHEEDW#6kecC&z{i4%Fx>9cS z7FwU`8mh>isH0MK=;4NH%H_x@Ouoe;C?MZ=f*Px*MF-(cVU)@U@oT6QWg zHX5u!rSvlAwo^e(4Tt)MXBb_b zjFo_O(gWGy4lM9Vf(0&z1G~Dmh8F1dJwrGiNQy{I-yZ&=<9PR$&JQ}sh1-sBD`WRD zN_)qzFtZm38WZ+e+-7Ol=Q=y>0QV8*wgV_Z_OQ{;*xB}rftvUW?lB5#e_HY9wGg(8 z9@xARC7>OS`-M2~ijCtn5%!jk|5+dWW5N+f=E3)lu**LFvp)EBADpGF>4I$}t<;p6 zi%qahwvabZ0b>KEJp^qyn@`*6ti?{{xqhr*+gWQkXXf)}ik-+MFD1+g`*CZ+oHCOz zk4)#%w%MObu?yzRcs7|!xxr86-!^AXWG`7*=439JG2csP%x1Ktb#BTWOj~B2@`gO` z4s^zDZ$6@n1v%`4pHc8FG?)Gt6db27aqJt!8-LY>Ilh(V(*Gv~r}k~)_Y_=>zYPsa z;*Eb);J7kq6&e3W#s5hK|5?G+x~?Js3F70gkc{)Cf_EwSb%D!u$;9P`;;+WJso-jy z?|tG_6@N9(Lj_mk{OJ>Cx41vvy7nlz8Yd=jgcDO<*QDaFp3AHce#;XFYd|`Y2#Jg@ z@i%<%gb)6Mz%k%+AkQm8a|q&#E#Z2c|F&@XJ~->a<@<)k@-rDbIZmUUbI0>?mNTc4 zG26Usvsfx=Cs}MfpJ%aL)>S65nT% + + +void IsometricRendererRenderMap(IsometricRenderer *renderer, int height){ + float originX = 0.0f; + float originY = 0.0f; + + int i = 0; + int j = 0; + + int amount = 1; + for(i=0; itexture.width + j * renderer->texture.width; + if(amount%2 == 1){ + x -= renderer->texture.width/2; + } + float y = i * renderer->texture.height/2; + DrawTexture(renderer->texture, x, y, WHITE); + + + + } + if(i < height/2){ + amount++; + } + else{ + amount--; + } + } + + +} diff --git a/isometricRenderer.h b/isometricRenderer.h new file mode 100644 index 0000000..c774421 --- /dev/null +++ b/isometricRenderer.h @@ -0,0 +1,11 @@ +#ifndef ISOMETRICRENDERER_H_ +#define ISOMETRICRENDERER_H_ +#include "raylib.h" + +typedef struct IsometricRenderer{ + Texture texture; +} IsometricRenderer; + +void renderMap(int width, int height); + +#endif \ No newline at end of file diff --git a/isometricRenderer.o b/isometricRenderer.o new file mode 100644 index 0000000000000000000000000000000000000000..72ca390b5b26e9d70950dfbe929df1c2a3791159 GIT binary patch literal 1792 zcmbVK&rcIk5PnNbsS0i}nvh_$2Sb3shN1@qVrt;QYQQLp@gOnVvIvp3WV?-Ef*v+8 zzAOiB#=nAt7moaBq%%EFbS_8Jvd9igXFZ%Gd*qq9X zk3W{OIAafMg~^Xr>GT}%yt8PGoY1mm6of<*D=*PQ&n8d;l@I5D&u+A8&q1HZ3WnjS2l-JU>jueO*RGDyyumP zMi3!AWsp8A=xyWpk{sxsC?=`nvtiqoG7pPxu1?>8jMx9!OYW;ALm0)N!qa!E`D@ zZcra+HR#}-QB(ydrx-u`dGM(SFGi3s>k}GlYrKnatSf+Bv@!_2rB}sgeXpzf>O9zR zxrhK&Ecp*ZTiobpu~OPq;U!*x!gFP~H50H7Q2PDHWGWtusJb>49#Ny?s-|jE7~OJW zc5YaiLH(NY{DC^FCp6Wf8loQvLU%#+H$6OvAABmXCrhn>{z&n;h^~ad>Y8mQxu>bq zilhTMlExKXK~g9lM^ZQziKtP)qA^{SVE65DT?s#9@zZERn$co2s;18&$zo6^pG;^< z#Qwh0+!H!}=%atpDs@w121!0^*xX)k{c9B*Pce`l;5 zeQ^$A2`AjfI8WLiVDstwDHlGU@|O#r&uup(xnExAq7S2jIBRc1O%15C+{*yJgM;sn z!y#}er?bDA0YP5Kth0X%@JjdVs&GHr%lrBLD$S;&CfWR18i1SurIgP8Qw#@lL~^XZ W_Xv7?*Y%Kh-k!GHW#IIG`u_qHza;bk literal 0 HcmV?d00001 diff --git a/main.c b/main.c index f076b8b..1d206d4 100644 --- a/main.c +++ b/main.c @@ -3,6 +3,7 @@ #include "sprite.h" #include "inputHandler.h" #include "raymath.h" +#include "isometricRenderer.h" int main(){ @@ -13,17 +14,20 @@ int main(){ texture = LoadTexture("assets/amulet.png"); + Texture2D isometricTexture = LoadTexture("assets/grass.png"); + IsometricRenderer isometricRenderer = {isometricTexture}; + int spriteAmount = 0; Sprite cursorSprite = {&texture, 450, 225}; InputHandler inputHandler; Camera2D camera = { 0 }; - camera.target = (Vector2){400, 225}; + camera.target = (Vector2){0, 0}; camera.rotation = 0.0f; camera.zoom = 1.0f; - SpriteAdd(sprites, &spriteAmount, &texture, 400, 400); + SpriteAdd(sprites, &spriteAmount, &texture, 0, 0); SetTargetFPS(60); while(!WindowShouldClose()){ @@ -33,13 +37,19 @@ int main(){ ClearBackground(RAYWHITE); BeginMode2D(camera); + + IsometricRendererRenderMap(&isometricRenderer, 15); + int i; //int length = sizeof(sprites)/sizeof(sprites[0]); for(i=0; i < spriteAmount; i++){ DrawTexture(*sprites[i].texture, sprites[i].x, sprites[i].y, WHITE); } + EndMode2D(); + + // Moving cursor Sprite to Mouse Pos and drawing it cursorSprite.x = inputHandler.cursorPos.x - texture.width / 2; cursorSprite.y = inputHandler.cursorPos.y - texture.height / 2; diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..35ec08ad5956b913ae2938fc42203d884c0073e3 GIT binary patch literal 4488 zcmbtXTWl0n7(Uw;s8~7+qLN@_L&Q{Vm$vdCYIJ*p)1)OpDfR(Vrn}Sa%HA?N8wwgO zDMOeHYnsSL9yBS54T?ZCp2pMCO%+_!B}lb8ZTM@|I9hNXV)DxdXm}m zpYOl_|GBg$d-`_OcsxW54|$1{RstoYzOh6H7#SdqWF1*n9{+8STDJ%2>ARQL5fY+y z-L@tWpjOXfTaIQ{p)j@PuFiqkYra}S78#N;5C2*y(9FXQ|66M19fs{N?CcowEpv)Z z*~>85W)gla^L>OeW{yo&3^0bBokzZ9-eOaB5hmNb3BQ)P1iyLnJp3~6c{8wFBx#A< zTOx-9nc)F3m1V`t@>^Eco2VzR`(RD;rcWs5&88CB%E?jX=Nu{{OVG^{jdHTl9k8aE zEUQUo8WVsz90sss1~d7{DW+4&YcIlz)$~rfj#D4ro4Hpg6wc+Xg>8^=0XlY%Sl6uu zAV>j-@0=z~+^sK6qw~TvhE|xyG&t*1ANa(gUR6K|`o>%{X5O6SHNEpO@a)VXSbk8L z0Skq5pPjw|K8Q8%_%e}aGX;8)&fZ!@Gsz{Isq@p8GYtebmX|DdE6urbk#Q8+PFv0i z5v6&hTtXO`1PN-_Q%D8AP1O2<+8%1}tEbj#Y8|Y%JG|B|ubss(x~bMwm;=-rKF<>~ol<=&aM|X>2sqp1{;=t(2s*jx=LXt9X>;jdKA)kh;@f1KlaBePD@t z7HP{kRLv$6D;~w%>LzoF*S^evHOF@%_1pxLD-C%Tcr%#`i(%Gq~u$H_U#A>{*`fbGhkD_5K?<^mn{c6yt|D&CT zs>kKhpZvJ6E=??X&g2yH_1`(j?h9%UE{5nc8`)!Fta6T@{p!k%>tsYtMS{Mgk$5O^ zl&GncW~8>Ov2;{3{KIF>U!SSG&quu8);u#oBvsV zYfD?2E!$4CxBFXnJjG!G7bEe)hu8S-J%a@Hd=4>qr`XuYXV3Bd#53;oY;IUnKM60{ z6M#R)c>}9~=xOwxt?62~noiW#cCH2~&UBgZjjbcUu=l4@q_*k{j4`ptrc4~&Y>?zx zEP&x1i+NQJJO$No%%>Xecfnt9!Kn*A@RKgM?Sf}r@F^GkiVKb}Xtg@zUGN1L z{I(0ej;I&fMy&} z^{{5_+B-lxwQwZft*dar!lWyzsd}dxJQCIu>3GOt_9sGGdpGG#C1RSPM}qsccu3PV z-I@E_xYTF^-7?R{E2Y>W}U+LO>@ zYBX|O6Tm=FjcNoei#VP12F4QUXs9ciNNEr`{PL`ahf@aRFdQ5^GCZnAqJ(UPI^%%z z%+B&3_$LUA9Sp^@=bU+gcXC|FKfu@hk~|)BAwN+eznQP!bdksY;t=+moh8{&fwyuz zT!D+Y-{v^RzXm=L&m{@RJ3-)ABph=R_*W9XR>FUh@CPM)Ed~w){ldFlwDX08_{EBL@XtqqpOkPs2Lit+;p-)QisPc5&jAm|aWo7Arw#B4J3IN+iTFbj zu1YxG^+J9#HX8=Y<9`?e_euC865cA|k4kv2gyY>?v;#B_jGvc^t%*N%EM}-9FdMov zj|ocGqN?A3!%h4l)li9lB$Xn5J>e{ZiC9dF123L1G(Ws$E$mG2bvT~(C-p>9(~V=G zgO;?h;Za?UX^!9j`RfCH+&VnnqO}00#JeOIe4B|S!SjQ)4ipiGSisE*V~Q6E_ay3y z=M`&;<4O1s=i34yHr}cXh~t(1@jRl<|Ek{xx@fbkm$1IT{Re=S2j(h|ov=WCasCDG zYpyTu3xSLH#oWpD1;04sB~fJvJ;B-!1d3M1&p^O^@X15eUtq5Rfi^4kecXRQ2=cj7 zA9rE3{*U9O0z>o}`;YgS&=+_$->7$(`yb+g;oXIPD)rH3W$ytZGyEagQc&i literal 0 HcmV?d00001 diff --git a/spiel b/spiel new file mode 100755 index 0000000000000000000000000000000000000000..ae13ad4713f50216fa074c3f1a45122a3a3aa0c6 GIT binary patch literal 21216 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

EvH^ z!QK4xQ^7S>;1SJQ%e+FEBm_j`D~rg>zh74g7NW=XN!~ z<+B7R{Q|h3W1j%lBslCTcA};9sm$bbp>1L2mty(Jsc0Vcg9;n zoxw1^zE1{2>FuI5-qnpK)RAzYVtNVs@I4v~CGahKFcM28c8E6mxIY+9cXjQ6ij50G zGBrh%K95IvlHG}DDuPHfhHvHdP%PXTNf4WicSTZ(Xlqj>Mr9@}7_4imZqS0-x>`EV zAczw@f|{;Cy|zgN*Q{M%Q@u90zOJrW+ZfzfU9(n$VC`4dRX5bH77s;sw8TS+a6M&Z zKdiuUQUZOnU&SBd(>M21&JvjRv;q6k1kx>hpny8Mz;^7w#m`|_kFx^8(O3}2DugdM za6zh0drSjbFq8_JCl64~)M*D79%3-{#DXccv>&Mu4B~tU%hBOvJlG+dMoc+0p;1K~njUWQa9bKtV3ur1~ z(hiPAV>pVVTLfZp41)GpI?$bncSjPb9X6;X9mOFz(XfK5YwDNKpqAntp=5^$gm=V{ zg-KHhGv$#;B1va*NHN6(k(P*bhDbrhx;s-MK!Z~R5Dm1)RU{c{6@e6v?GOPP<&cg` zuLU9yg${@-H{d_Te%-8b9y`M#a0p9K|l z>eE}{_#Pn6<>!4ZQ_i3Fwa)T~pig^R*5`dM)BP%e%1C}@ecpdYfnh1K^m!l6l=saL zk%4U3!^2=`Ps;i8K9uPSCCue#Ii`;zo%XoQ^FEhpmC|>XU%{de5%MYP^S+zufD+{V zo%R2Q(yvi+ypLzf`+m|VpE>oP1x7w$`_?+I)_ZkZ1PL=Z+y9$@?fQPD$5j5Wm6bvH zHiGGM4*h<$zh%mDY=U{F2ORqQl|Iw0js|Bvru3nvz5Kj?VY<@GIh&OA7(MLJ=jTLB z`S}scJN@^H(&zT)eFM{OR#eoP|KB_GdEdu0?9g}S|As?zDPJ&V;gE-`W>fnJSzQ8(=-=>6|jcto$35UX@9m@|2f7nEQ8Y zyJ;o)s?6xE7Gg$N-%hQ*XOpd}GMNfBF?=2@J!|Ch@cc{9d${bThWXoFXVRw}iJULX V(r|T%$Ry9brUX5Qum=Y#{tH*QtA+po literal 0 HcmV?d00001 diff --git a/sprite.o b/sprite.o new file mode 100644 index 0000000000000000000000000000000000000000..a7d1287f6c3f0bca25d4cad842c65220b3c5ea30 GIT binary patch literal 2024 zcmbtT&1(};5T8x@5o_ArmL4h<$w8z_yEN5{A`;ugzJrRirU$`~G~HS?Uu-tm7Suza zbXkhM2>uzKJ;hcmy?M}!UV5k!P_U9q5FyUIyhr0>$w3F+&dhJ-H}Ac9v(FM&uLLv= zq-byn4n2tiEOi{(F>c174|<`dpZJwz?iW`69%1g2I&(`0%uQC^Yx{9GvB$i`fd}P! zT7Ui-SxuL{WN-F5nY)EBf~Ym>1?BuK*fsX$wu0d3jPhQr;VO&pZth|?k&rol<{8Eb*5-mc()hAD6op^FqmS*4GR zC(6M5d$Yb|(p z3m!q6gzC_e5)+2RLqE}RwiXSct9{0QceoY`C<`FJKuED`E1t8 zVJw%&d*Y0Y6`fT2k?`;5N@l^%7cARZK@L^2mhLXvsjMZB^j|uHY-&N5QY9w*7otBh zthg|Y0qSW?CJ4PO2Am21C~D%$x#T}P`lkdg{|9urd{j3QxC)OVPBs6PA4M+JY<**N zLGG_kyt@B+!5=45i+mD^biP)Re5offDDBp~F7-ensOHWfPIIfKhXfE2JgH>=rT-8O zs;Tlv1aMC#3a#>K3jN-{A|6Ech2H-NF3Feg@3%K?wJ!Frkb@G&Mf<3Hs;Ry`Lco;$ V2_sSa*N>PV|3H8aXB~c2{vW&RE0h2L literal 0 HcmV?d00001