From 660ed034296158ac3ad96e0cb0d14b5716ce8398 Mon Sep 17 00:00:00 2001 From: JanEhehalt Date: Tue, 22 Nov 2022 23:47:54 +0100 Subject: [PATCH] hmmmpf --- Input/inputHandler.c | 6 +++++- Input/inputHandler.h | 4 +++- IsometricMap/isometricMap.c | 34 +++++++++++++++++++++++++++++++ IsometricMap/isometricMap.h | 18 ++++++++++++---- IsometricMap/isometricRenderer.c | 12 +++++------ IsometricMap/isometricRenderer.h | 3 ++- inputHandler.o | Bin 0 -> 5408 bytes isometricMap.o | Bin 0 -> 3576 bytes isometricRenderer.o | Bin 0 -> 2616 bytes list.o | Bin 0 -> 2536 bytes main.c | 7 +++++-- main.o | Bin 0 -> 4544 bytes spiel | Bin 0 -> 21856 bytes sprite.o | Bin 0 -> 2192 bytes tile.o | Bin 0 -> 928 bytes 15 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 inputHandler.o create mode 100644 isometricMap.o create mode 100644 isometricRenderer.o create mode 100644 list.o create mode 100644 main.o create mode 100755 spiel create mode 100644 sprite.o create mode 100644 tile.o diff --git a/Input/inputHandler.c b/Input/inputHandler.c index 6bf4066..95ea24a 100644 --- a/Input/inputHandler.c +++ b/Input/inputHandler.c @@ -1,6 +1,7 @@ #include "inputHandler.h" #include "raylib.h" #include "../sprite.h" +#include "../IsometricMap/isometricMap.h" #include #include #include @@ -51,17 +52,20 @@ Vector2 GetRectangle(Vector2 rectStart){ return rectStart; } -void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera){ +void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera, IsometricMap *map){ inputHandler->cursorPos.x = GetMousePosition().x; inputHandler->cursorPos.y = GetMousePosition().y; + inputHandler->selectedTile = IsometricMapProject(map, camera, inputHandler->cursorPos.x, inputHandler->cursorPos.y); + if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){ if(inputHandler->pressed == 0){ inputHandler->rectStart.x = GetMousePosition().x; inputHandler->rectStart.y = GetMousePosition().y; inputHandler->pressed = 1; } + } if(inputHandler->pressed){ diff --git a/Input/inputHandler.h b/Input/inputHandler.h index cf0ddc0..5b66888 100644 --- a/Input/inputHandler.h +++ b/Input/inputHandler.h @@ -2,14 +2,16 @@ #define INPUTHANDLER_H_ #include "raylib.h" #include "../sprite.h" +#include "../IsometricMap/isometricMap.h" typedef struct InputHandler{ int pressed; Vector2 rectStart; Vector2 cursorPos; + Vector2 selectedTile; } InputHandler; -void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera); +void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera, IsometricMap *map); void keyboardInput(InputHandler *inputHandler, Camera2D *camera); diff --git a/IsometricMap/isometricMap.c b/IsometricMap/isometricMap.c index 7865edf..758de60 100644 --- a/IsometricMap/isometricMap.c +++ b/IsometricMap/isometricMap.c @@ -1,12 +1,20 @@ #include "isometricMap.h" #include #include +#include "tile.h" +#include "raymath.h" +#include "raylib.h" IsometricMap * IsometricMapInit(int x, int y){ IsometricMap* map = (IsometricMap *) malloc(sizeof(IsometricMap)); map->tileTextures[0] = LoadTexture("assets/grass.png"); map->tileTextures[1] = LoadTexture("assets/tower.png"); + map->originX = 0; + map->originY = 0; + map->width = x * map->tileTextures[0].width; + map->height = y * map->tileTextures[0].height; + Tile* tiles[x]; int n = 0; for(n=0; ntiles[x][y]); +} + +Vector2 IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y){ + + float tileWidthHalf = isometricMap->tileTextures[0].width / 2; + float tileHeightHalf = isometricMap->tileTextures[0].height / 2; + + x += camera->target.x; + y += camera->target.y; + + float xPos = (float) x; + float yPos = (float) y; + + int isoX = 0.5 * ( xPos / tileWidthHalf + yPos / tileHeightHalf); + int isoY = 0.5 * ( -xPos / tileWidthHalf + yPos / tileHeightHalf); + + + //Vector2 tmp = {isoX * tileWidthHalf * 2, isoY * tileHeightHalf * 2}; + Vector2 tmp = {isoX, isoY}; + + return tmp; +} + + diff --git a/IsometricMap/isometricMap.h b/IsometricMap/isometricMap.h index 03b833d..4e0a35f 100644 --- a/IsometricMap/isometricMap.h +++ b/IsometricMap/isometricMap.h @@ -8,15 +8,25 @@ typedef struct IsometricMap{ Tile **tiles; int sizeX; int sizeY; + int originX; + int originY; + int width; + int height; } IsometricMap; // TODO: -void IsometricMapAddTile(IsometricMap isometricMap); -Tile IsometricMapGetTileFromArrayPosition(int x, int y); -Tile IsometricMapGetTileFromWorldCoordinates(float x, float y); -Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); +void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId); +Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float x, float y); +// Screen Coordinates -> World Coordinates +Vector2 IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y); +// World Coordinates -> Screen Coordinates +Vector2 IsometricMapUnproject(IsometricMap *isometricMap, Camera2D *camera, int x, int y); // Working IsometricMap * IsometricMapInit(int x, int y); +Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); +Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *isometricMap, int x, int y); + + #endif \ No newline at end of file diff --git a/IsometricMap/isometricRenderer.c b/IsometricMap/isometricRenderer.c index ed2c6ac..7a88c64 100644 --- a/IsometricMap/isometricRenderer.c +++ b/IsometricMap/isometricRenderer.c @@ -1,6 +1,7 @@ #include "isometricRenderer.h" #include "raylib.h" #include "isometricMap.h" +#include "../Input/inputHandler.h" #include //TODO: Isometric Tilemap Struct, which can be scanned for clicked Tile @@ -34,10 +35,7 @@ void IsometricRendererDrawMap(IsometricRenderer *renderer, int height){ } } -void IsometricRendererRenderIsometricMap(IsometricMap *map){ - - float originX = 0.0f; - float originY = 0.0f; +void IsometricRendererRenderIsometricMap(IsometricMap *map, InputHandler *input){ int i = 0; int j = 0; @@ -45,13 +43,13 @@ void IsometricRendererRenderIsometricMap(IsometricMap *map){ for(j=0; j < map->sizeY; j++){ Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, map->tileTextures[0].width); - float x = originX + offset->x; - float y = originY + offset->y; + float x = map->originX + offset->x; + float y = map->originY + offset->y; // TODO -> results in Segmentation fault //int textureId = map->tiles[i][j].textureId; int textureId = 0; - if(i + j == 9){ + if(i == input->selectedTile.x && j == input->selectedTile.y){ textureId = 1; } DrawTexture(map->tileTextures[textureId], x, y, WHITE); diff --git a/IsometricMap/isometricRenderer.h b/IsometricMap/isometricRenderer.h index 148d444..b282892 100644 --- a/IsometricMap/isometricRenderer.h +++ b/IsometricMap/isometricRenderer.h @@ -2,6 +2,7 @@ #define ISOMETRICRENDERER_H_ #include "raylib.h" #include "isometricMap.h" +#include "../Input/inputHandler.h" typedef struct IsometricRenderer{ Texture *texture; @@ -9,6 +10,6 @@ typedef struct IsometricRenderer{ void IsometricRendererDrawMap(IsometricRenderer *renderer, int height); -void IsometricRendererRenderIsometricMap(IsometricMap *map); +void IsometricRendererRenderIsometricMap(IsometricMap *map, InputHandler *input); #endif \ No newline at end of file diff --git a/inputHandler.o b/inputHandler.o new file mode 100644 index 0000000000000000000000000000000000000000..78e05a29cb80d8db5d91e741ba68f8e6137f4a5b GIT binary patch literal 5408 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 cwMygn&jEi} zot;;r7Y9azv>!xcF{{;TZi)qb8GF>yVl}rlNEn@ml+%dNz?JCk9bjdQtpPhk19DO* z7JAUnLNk$2T~%dxkuL5z!Z9Gt_#|o~&&oQhD<+9ROW3XfC-Lx6_OfYCfPDx!$s2rj z?XPz24}p`c;Bli^Ey@gV^JOGt_E)en!Gh(?GpUsV4w@ z#p7ot>=KPq{L2U6SLHs-q#?XEq;Jx|{=@PJye1$dr*pnF#(GF~damQUy_s>BrJQ6k zBhWr?I_-C5y!(zf&azlcux#MxxXX=n&h`8*FO&AQb%!%{4||iG5{lmwRO#1_kY0(? zec^XS;e#5#QsXBLzT9SK_5l71gRk!6OO1~nskm=79QRk@GqPU5bUZ5g$R9&VTuv0O z`Z;3Y%X0n1z*T>km77iZ&M0Z$6M9O`JU8iBzB}VHYuxc2W{u`@%GVPWWb((>mMUu#5cpK z_(#a5i+TQbG6GZgMsZ!aA@b8j`77N)Mm5)Y&&`CS(d70Mj(2C$mn0CCeoCqOtMy%) zU{BM3MFLBTD7ER2TUe_9i}ELSMEarssHO5({Vx?8E`740VR_&x!Vt&w$DU^I31YY8 Z{kx5YCT9Ikkgb&eH<`b$`C@AN{|0v&qJ01W literal 0 HcmV?d00001 diff --git a/main.c b/main.c index 2e9d7c7..6f1a072 100644 --- a/main.c +++ b/main.c @@ -28,7 +28,7 @@ int main(){ camera.rotation = 0.0f; camera.zoom = 1.0f; - IsometricMap *map = IsometricMapInit(20, 10); + IsometricMap *map = IsometricMapInit(20, 20); SetTargetFPS(60); while(!WindowShouldClose()){ @@ -40,6 +40,9 @@ int main(){ BeginMode2D(camera); IsometricRendererRenderIsometricMap(map); + Vector2 tmp = IsometricMapProject(map, &camera, inputHandler.cursorPos.x, inputHandler.cursorPos.y); + + printf("%f %f \n", tmp.x, tmp.y); int i; for(i=0; i < spriteAmount; i++){ @@ -56,7 +59,7 @@ int main(){ DrawSprite(&cursorSprite); // User Input Handling - mouseInput(&inputHandler, sprites, &spriteAmount, &texture, &camera); + mouseInput(&inputHandler, sprites, &spriteAmount, &texture, &camera, map); keyboardInput(&inputHandler, &camera); // Sprites move towards their destination diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..470e77631d455c7efd541dc609b023a0552d8e61 GIT binary patch literal 4544 zcmbtXU2GIp6uwI-R4tta>JMUcL&Q`mOSh6J#^};gn3|T5mI@M0o$gNCh25EEc2<5u zu%-@Svu?tJP2fSJPrhhEqD?SS`UA-p6O)C2;lV^CniL_ix{_4UtmoXhr+d5ZAkmZV z+;hKs{_eTwo|(Sc*0FVw&&P;->;+bu5z1J&PU1NmW_4^CD=3ft(W9n+>{j2pIk=3m zsG3>4wgCjxblXg5Ld{mAu$rDaGX-YH167R8Ad+*w__bK%Ygy+wuxj>xK1+Y2rgL0G z&A1Dh(G$3ycCPYabOwfu^8q~5&MZPXCtMJ=a*kSJca+%O#AbyRu2N9^JiLOkoa@Q+ z4$x4uqugh941-m(&g%efK8lbXl^78~b!6o8rB_8Eu=k+i@ zQx7i2@!@78?My=up`t;W6Tg77WST22KE##pH$8d|K&!(>c!-~Ls=UN!K zSyLQCSH&?5q&S8_i=}e`NH;p5>_a$C6Ra1M#%bgmT|Td7xmuZYzp5OWfFsI-1(d$T z$33uVe-<&=^u>a*=K{**`;~@iV2o0A7Bq;%?hrx^z;%Tv@X z2wpejzC)xe`z2;l&1T(d8Fi~=466lV4#3cvo@`Igksj2QtH9UPQprQq^96Yhf+;2A zdM9LPK|ZqKS=BeAu0K!<3v6W0r#Nf8WQIWoY%eq*ClnUd8cNC)@LbW=;kz+YOJ=?W zGf*aIjh{B1OBQ#gY?xM#z6Yngz>yqMF8mNyf!F%f!iCBC;=pQc@x$SUYZi)>>gUe7 z^{88W{W3WJNBC6dxGC`C;8uhX6*b?cEaw$PUL@VmQ*;NZ-B_yLyWw^q>wX6_{;zgw zD_k1ooe%#Kt$>F=GV6PLLUG=|EkNG#)J)GzR9#ok+q+%O1=Y-JbLY=OruwvGEE3os zGot2xrX`cQo!p=$QgPi54jBV%ZGQm%?!^QBzLhZze#0*^7TC@KtPS`9Z`B|r7Ci=hCoX2c@WxawQdRMdi81lZ zyg(e?tdQh+EP!FF#(k9&-hoOu?xzwS^uQt673DiT@K-$Wm<`p5Hq$|8r;qS)*9C}t3`|K z8?elj5p@?k&8XhIrDUc{H=??wTka@ZFUf$b9hSLQkJt?2FzkMYF5H+{n-LW@6J{!@ zw;Mw#o9)vN_L-U$b!RVwrfD^I=*ECO$i!^BX(hCH?2t}CcSMWpXpZ7{^UytLrsC1o zxS7;pNAMKs>FrJ0u(#gG;J)5|Ef!~M;9QZQPw*b`Cw%uHZRDuiPw z2_KelY`27eB;of-IDVBQp?!F}&&ywyaO_QFrwRiELV5g`fbg)uDgM?3121QwA_4@TQ^ z$3fyOJ+1|9Xc{aS)ohIg`;ti(v`lvrF%t>hfHlLk^&q@c*YhhR<^x75IAobax@8{( z9kiqm_V!y^LU;ZC&u0MivDENR$rKh7dOy;dC`+0$tTQ}=@I2x&SNXRFV|kGzta;R> z*F68Wg!vN!7i9r6m)gn$5_q|Pyr*dMzv_oT7i}&$OPH&||Fgi$B+79f+5{ZxQytU7 zu+XPILO8`wV~fzIbs9gu%l&tO0`{@;_)iJ_02ve`<)7faz*O3QUg(EOP>kjJScR3& z{}eVYAUbC}f9#W_Pk1HYsOQH`0UZ+?!`_H~%JtD^`Pl=+PKXzWN{L1gsBFrx$5qmw N7V+C$tMn+>{~K42xNiUe literal 0 HcmV?d00001 diff --git a/spiel b/spiel new file mode 100755 index 0000000000000000000000000000000000000000..d3d18d90c67d879920850486363046688d4acce9 GIT binary patch literal 21856 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 literal 0 HcmV?d00001 diff --git a/sprite.o b/sprite.o new file mode 100644 index 0000000000000000000000000000000000000000..cc41f758af3e15dc7b51cd0627d0e3225b8c9ff0 GIT binary patch literal 2192 zcmbtU%}Z2K6hCkLnoNC9abYMii@pqfIo6^g;-!w>AS0}i2r5S%HB(34yde#$g%n;M zl1u-Lh!)byG!%C(TC_B<7%vCpr~_eMBiJ<=w~B48NJpD9?sb&PSxQYk;gckBl6T2 z=WJLFwEe$1n+nc_TN<&rv8%HM(LTmE(&S&z1?iP&@5pn#kCkX zsBb+tqYwaCA*=)kNqt^{_OuVQ8AEHVst7LP#ijm>GeCWjE^?&CcopcZE-yK!Aq7q# zbOi^=9(|NQGFKA#LX5+OQkKGxTrpNj(U(JO_B5)&9Ut&Q3b9LDY_&*JEmC$0uT@g9`_9 zIOfE_984y`v=ez_C^0!1pF-bM0{4%1r#0!sh8|0MbSh;|+llG8?aX2fWr~kI9I<1Q zak-NJQy~ne)|C6wSkgZ2-8^EljR)*ToKf$r10+8Q5{NP&z5qv2Q>?nL;-`f6DT%9h zf~JsBUtNX!>$jkTa{g<47-K1?znrS?e+mBjmt=e!YOhSlgtR`dsCcD2(5dEL-jaVo z(&^{+Ax`(!Pgn6F8K;!$zp}@1LOK2M%Mut+M5+DpbPJ1}|Cl^~)fYPdBREvNI{#v| usZ@hJ&=oRJs&G(Be>~;%pFKkGS%RuQVI=+TvgHOpKkDP~!B z`O&PTc#**F6PW-@n+8}`=D8@4D@rLCUSrtEBzxBQp=eoEmzAjH(mU?2#1S^o-M5@Z z?qCD0F)M0-kvMlgTvh$x_8+5U2mQbOXV^=7M(DP24XAFLIp5?`D8f L8}4*A$$kGfOw%{6 literal 0 HcmV?d00001