From d8e98471e14c4e86d44db5487a17ca20ea33d1d2 Mon Sep 17 00:00:00 2001 From: JanEhehalt Date: Mon, 21 Nov 2022 03:48:24 -0800 Subject: [PATCH] Refactor, big with movement --- .vscode/settings.json | 5 ++ inputHandling.h | 72 +++++++++++++++++++++++++++ main.c | 112 ++++++++++-------------------------------- main.o | Bin 0 -> 6816 bytes spiel | Bin 17568 -> 17720 bytes sprite.h | 20 +++++--- 6 files changed, 118 insertions(+), 91 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 inputHandling.h create mode 100644 main.o diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..23106ef --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "inputhandling.h": "c" + } +} \ No newline at end of file diff --git a/inputHandling.h b/inputHandling.h new file mode 100644 index 0000000..fdd3359 --- /dev/null +++ b/inputHandling.h @@ -0,0 +1,72 @@ +struct InputHandler{ + int pressed; + Vector2 rectStart; + int clicked; + Vector2 cursorPos; +} InputHandler; + +//TODO: Macht es Sinn ein einzelnes "Game" struct zu haben, das alle möglichen Pointer hat zu allen arrays, camera, textures etc? +// Man hat einen Übergabeparameter mit dem man dann alles verändern kann, man muss nicht alles was man verändern will einzeln übergeben + +/* + cursor.x = GetMousePosition().x - texture.width / 2; + cursor.y = GetMousePosition().y - texture.height / 2; +*/ + +void mouseInput(struct InputHandler *inputHandler, struct Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera){ + + inputHandler->cursorPos.x = GetMousePosition().x; + inputHandler->cursorPos.y = GetMousePosition().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){ + float width = GetMousePosition().x - inputHandler->rectStart.x; + float height = GetMousePosition().y - inputHandler->rectStart.y; + if(width + height > 1){ + //TODO: Fallunterscheidung für negative width / height? + // Auslagern in eigene Funktion + DrawRectangleLines(inputHandler->rectStart.x, inputHandler->rectStart.y, width, height, GREEN); + } + } + + if(IsMouseButtonReleased(MOUSE_BUTTON_LEFT)){ + inputHandler->pressed = 0; + float width = GetMousePosition().x - inputHandler->rectStart.x; + float height = GetMousePosition().y - inputHandler->rectStart.y; + if(width + height <= 1){ + printf("Klick\n"); + addSprite(sprites, spriteAmount, texture, inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2, inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2); + } + } + + if(IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)){ + inputHandler->clicked = 1; + sprites->clicked = 1; + sprites->destX = inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2; + sprites->destY = inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2; + } + +} + + +void keyboardInput(struct InputHandler *inputHandler, Camera2D *camera){ + if(IsKeyDown(KEY_W)){ + (*camera).target.y -= 100.0f * GetFrameTime(); + } + if(IsKeyDown(KEY_S)){ + (*camera).target.y += 100.0f * GetFrameTime(); + } + if(IsKeyDown(KEY_D)){ + (*camera).target.x += 100.0f * GetFrameTime(); + } + if(IsKeyDown(KEY_A)){ + (*camera).target.x -= 100.0f * GetFrameTime(); + } +} \ No newline at end of file diff --git a/main.c b/main.c index b5fbae1..121e1d3 100644 --- a/main.c +++ b/main.c @@ -1,42 +1,33 @@ #include "raylib.h" #include "stdio.h" #include "sprite.h" +#include "inputHandling.h" #include "raymath.h" int main(){ - - InitWindow(800, 450, "basic window"); Texture2D texture; struct Sprite sprites[100]; - int destX = 0; - int destY = 0; - int clicked = 0; - - int pressed = 0; - Vector2 rectStart = {0,0}; - texture = LoadTexture("assets/amulet.png"); - int j = 0; - struct Sprite cursor = {&texture, 450, 225}; + int spriteAmount = 0; + struct Sprite cursorSprite = {&texture, 450, 225}; + + struct InputHandler inputHandler; Camera2D camera = { 0 }; camera.target = (Vector2){400, 225}; camera.rotation = 0.0f; camera.zoom = 1.0f; - addSprite(sprites, &j, &texture, cursor.x + camera.target.x, cursor.y + camera.target.y); - - + addSprite(sprites, &spriteAmount, &texture, 400, 225); SetTargetFPS(60); while(!WindowShouldClose()){ - BeginDrawing(); ClearBackground(RAYWHITE); @@ -44,90 +35,41 @@ int main(){ BeginMode2D(camera); int i; int length = sizeof(sprites)/sizeof(sprites[0]); - for(i=0; i < j; i++){ - DrawTexture(*sprites[i].texture, sprites[i].x, sprites[i].y, WHITE); + for(i=0; i < spriteAmount; i++){ + DrawSprite(&sprites[i]); } EndMode2D(); - DrawTexture(*cursor.texture, cursor.x, cursor.y, WHITE); - - cursor.x = GetMousePosition().x - texture.width / 2; - cursor.y = GetMousePosition().y - texture.height / 2; - - /* - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){ - printf("Klick\n"); - addSprite(sprites, &j, &texture, cursor.x + camera.target.x, cursor.y + camera.target.y); - } - */ + // 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; + DrawSprite(&cursorSprite); - - - if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){ - if(pressed == 0){ - rectStart.x = GetMousePosition().x; - rectStart.y = GetMousePosition().y; - pressed = 1; - } - } + // User Input Handling + mouseInput(&inputHandler, sprites, &spriteAmount, &texture, &camera); + keyboardInput(&inputHandler, &camera); - if(pressed){ - float width = GetMousePosition().x - rectStart.x; - float height = GetMousePosition().y - rectStart.y; - if(width + height > 1){ - //TODO: Fallunterscheidung für negative width / height? - // Auslagern in eigene Funktion - DrawRectangleLines(rectStart.x, rectStart.y, width, height, GREEN); - } - } + // Sprites move towards their destination + for(i=0; i < spriteAmount; i++){ + if(sprites[i].clicked){ + Vector2 movement = {sprites[i].destX - sprites->x, sprites[i].destY - sprites->y}; + if(Vector2Length(movement) < 10.0f){ + inputHandler.clicked = false; + sprites->clicked = false; + } - if(IsMouseButtonReleased(MOUSE_BUTTON_LEFT)){ - pressed = 0; - float width = GetMousePosition().x - rectStart.x; - float height = GetMousePosition().y - rectStart.y; - if(width + height <= 1){ - printf("Klick\n"); - addSprite(sprites, &j, &texture, cursor.x + camera.target.x, cursor.y + camera.target.y); + movement = Vector2Normalize(movement); + movement = Vector2Scale(movement, 10); + sprites->x += movement.x; + sprites->y += movement.y; } } - if(IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)){ - clicked = 1; - destX = cursor.x + camera.target.x; - destY = cursor.y + camera.target.y; - } - - if(IsKeyDown(KEY_W)){ - camera.target.y -= 100.0f * GetFrameTime(); - } - if(IsKeyDown(KEY_S)){ - camera.target.y += 100.0f * GetFrameTime(); - } - if(IsKeyDown(KEY_D)){ - camera.target.x += 100.0f * GetFrameTime(); - } - if(IsKeyDown(KEY_A)){ - camera.target.x -= 100.0f * GetFrameTime(); - } - - if(clicked){ - Vector2 movement = {destX - sprites->x, destY - sprites->y}; - - if(Vector2Length(movement) < 10.0f){ - clicked = false; - } - - movement = Vector2Normalize(movement); - movement = Vector2Scale(movement, 10); - sprites->x += movement.x; - sprites->y += movement.y; - } EndDrawing(); - } CloseWindow(); diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..0fbeb877df53b53902dd264fb64c186344f7f126 GIT binary patch literal 6816 zcmbtYeQaA-6~B(tHVik!EXJtttHqU0m5l&8xt!Qx^_JYF1Sg zF0Cn#25+n>y8<=N@)eYOEP1xag%i_Dvme74i}-WXBXj3}d`*Ph2Qlw~n2VQ6KPUmc z^yW@NN{|!$(#$|{P4TvR*4mYZoZxEKl!kR=Xl6GU*H{kzKr?sI%%^LpSxe26HJM(o zdBSU6Z8u+I>(lA$zVkHm)cWR?DXhE<)mnmT6{y*r>oSA$%wUu%&*nyzI4m1n#_YUh zm@cmSWKrD$rpV+oIlTidGQ`NGA1|B8>eXe~?g>l0oM(G4yeKo@7tTdY1uG_Rpn6Ri zDk$}f5MOZR4zC+(P_Yd)*hy~?wrddg)Qe>%%KpWtPh2MRH?aJ9b9rB>L`ooOBIY%7 zneBuL`{hN8h61;5SQ0_teyj=xB5KIBn9F9Kg(DY6nfWU$hKhMy)vDKjOsTlFlx|^2 zMWr4>8|+4A8@h+Alovh^6ZzorFlil3=0P*y0h>i&a+yGld3EuR_q&#UwhkvAd<{Wa z@u1=Md#P7gK)S-Bx{?J{eE<$k8mqt5V!~bIrN9f#5}L^=Gcy<%mLlLm9Ch=7J$(9K zEQp5ebfPnib8DFiv%2$eG3aNW+PIEznY^NdEIe6`Sbvy>4lA%Dv!;9s^IPR59KsR; z13h4&Z>vVEirlDuOGcvf%&2CeWvfQz@M<=7p6723LN;NVsoqx)zNi^2Hs@&eZkUrF zU4_k9@VWV((X8?EyQLD%K88ZEr!-@snc0gdG>sKD%obtD7?wB5V9WelkkXa&P$*H5g~tJ5C*_^5Rq@&7+w-?=o#nRNSgM^BgxDnL_=@T#kaRn7j$#$&P_8_ zSB91UFk_y1owa7!zyvD#j=vJ!qatm!vp$w&hy3;pWR`> zT0YzrT%QXeH0Gr2R#qwp?qx>UfbpPO$#}C?j9vrd6Eegq?7s4aSO3Ki6^nj))dk(y z=>I1N=P`EpOeluwNA6=yLEmN_LH6m;*VEhCA0#Id(I`0@D$+jwUDE2ZAX0d10(6Up7tH~AM`gh zHm4ca{Oo}yf73yK^CK2cs=N7vb2;+pch?)B`b!E1RR z;P@b2#-CuV_rM$c*V0b*wh#w+kt@_)?%Ujm%P&)%T?3v(HR*YNR< zj=o_3aDPi{S8$k2r1cbOPpXq#3#a|sl%7s%q%#gus>Z`nElFaDbV_3gIjZU1$n_*r z5j~QKlgNvO%N<-9X> zOgqz_n2h5x9Z5B&^+#eFO9ujq=ucV=zAK@IMVx(_-mfOdK)t7rv}$9KIA#%nrr!oj zBwN+c>9J%Y9S>W=?nGES&`yH!FrS@(C==$Q8f~UbBT1p8t}cry4*kD^9t$f9LMX0 zFJOUxo8v-XbkgrR=KaQtgQ;IB%!?EhB|xR)0e#n_s}x;`5&-Zc9-Zr`t$ zB^=)=BA!mZ+#FG@Im%ZWHINcaaOJSX9MCH&VC ze!qm*@lPmR7i%f}`z72b;TZ{+^{+_yE=m6l3BO0eC;7#}bw4EG=Qu9v*$y(K?@0O& z059Ua?x6n@N&mx=eiQ!$#C0E(@W&*4pM(b`{2>WHDd7)GxDVz?7(YIO0(>HH@!c1; z;o>{)B^xfjvo6~3Mt&}dKXoRit0OS#NoyPzv!oVP{W`qFi9f9BD)En`QpBH3SWGAp zi)nF?#S^;bhreMO*^7$vWAU_qBAJ-blKL62K~LKF@F>2Ac_jbe-~)4fCGg|9;Vi&s z0h+P~)>E-0!XDo>NR`$` uyao>pP>ye`2j&=(-5!0~_Z}cp;4h{x+X`l5;cvRi_7{2lIy#fcZvStn&&UD* literal 0 HcmV?d00001 diff --git a/spiel b/spiel index a6cd31411f587659e48f07fde5415fbf165dd4dc..a5f0a48b906b2862432c9ee3b799f6569c564ec4 100755 GIT binary patch delta 3744 zcma)9e{d969e;b5BNv*mcW{sdu(?!zq%;tI6B=_xA3jru09pbeA~VD|;6GJ?C;Blh0-0Rm!H;IZUk1AwH+9R@%ieim)Fd1WeNJeK#61eO1C zi3Kw{ls56=jD^ZZ@%D_Wydyjs8jUi3oF_+IqR2N_afx-lBCOkdpAGX^<&*a?rq91+ z81Lo+J49GMuA}psGe(=H}TG^1zh`dHKHJurD4(S}ZSrJOZcvm9sW>B6$ zRz}@6sFoxVU}!{t*%l$IVR#&uL(#_NE}^EOk&N0HqFtUB?N!T?Pi%>^{!7$>l$M@v z7|cKqmNM;iEiId&p=BP@C>^x)ONZft_Y z`XL&~g;EkoA{uaOXOiy}DMM$+GU_52+lI>0w9yE7xX0E&!nQ`%-82wmeHfF|M!^mR zwK0xjY@=dOWA(L&q6>ZPqR6PHO2$ZyQVV~2ZnmDU8^?ox zY5Vx8#F_HoWFYLe(SZgE`D-%d)`j}_uz`!bi`k52)UA}@C~zv`HYy?zZyHWXh~_>)?<19abU z1s%KEh#7C<(X9C;)DkVEFH7*)%;71F{q79w`-LVARM#lmZW!?GU$^_N~su(!5Ltu1LRw={@N_`Mch3Ve@xEkV{vo_HU)Om8cJ z^H{HpCDuoopd33u4EA4ui(hx6R8*2fD9M0#9Z34Qn}%`a1$>?K2XBf8XUz}q0)eh= zqmQf`edOQhqk#1isxR*8ROB2?(^o1L8M4at?gGnIw3kSH*PnRuqKhlIxKsM`@Yg9t zm8dN6T8SKeQ+L4|GKhF!KN`72UAfD79j{}=C*`PXcNLT6jma*M-+9#f*lQF#kHyTg z^qOVqqp~1m22f+3|NSH#j`f=2lEbz0WTzQ7!|hbBl%tGMnSuFb<*|*UTp8qx+jGHS z^hKEVzeGA9f`sXfJqF+A73PhkkrLSqBL?}o9yfY)f=2TMjlWTuqf!x{oqY-YnH#c} zc_TOrYT4iuzEmU^@-$niNV~PWLt_{k@{@(hr2xPT6GU)%&%=so_a~F2ZinuXT6EXa zG@9vnVrGz@2nA^Kh<29=P@j3_KNzge_pwZao6ga_3NGHrW_*72Ux3qij7R|Tbay|Z!xd$B2`Ln#6>K?7x9AaBqnw#0@n;+k`SGfKDu(aFp5MzTI7`sr# z*iO8Ic>O_TjY&$gPczSc2Mqs;`{!2g(Waj24z;A?IAD^?@GK&#aaKt!uC;^B(nAR09*0y z7vAFh@G0oVi4&UU`L?4fZ;Iok+-x_(2kGZ{>9#lmIL;4sIvveYM9K_-^)zH=ViG3G zIJ2EnXfDX_DeT^oyP6fx zI%@9|!z-3REN5lQGJ%WD!Ek^kRtesm@G%|42MU1Tk>LaSM9<3n8n4A2`ix{U+^+H| zw&+)8n7Ax1wgvD))|f??4FmlF;myidR*MU(@|BR>H^{X~u7_zYoI^GpUY53enU)!g zNEsn|Tm^FX8d)j)3#7g9#r&om6_p-c+L|Z1vsoY@iM9|Mle*IprH2(_P))AA7KsC^ z^OgJMS|Lth-yrw9#M#yPg)PwXItrP4lGag@Db&EF%y(GP@3xGdkldeI+!tsr@yKBV z{H3&iM(kXZue>EC-?1cT&6I*njvTf(M9-QcZ+pO`+Uq@{xIAC@%L|kR;yu_{Ot=!D zwXhb$>SeRp4ok;sFxx7*d%&f5XQ2%A$f*R}OWb%zxl_s8yZi80TXr67s@b={tu_AC z+8-!6)dzPT+O+@R&=Ma9&wx3qm@x8#btipE^I<2&~?HSazcf3f1QA`*`5xW975 zsr*?e!Ll5?vuUw5_z33mSg_1H`JZ2tNP^n$rt}ps8xOlPX delta 3252 zcmai1du$xV8J|6$pX9oC*zVcEiPwREo1U=~YWeR7-1?88ki=A`#cGI5<0b_G zl>qe|-EHgba*D%X)k&p_NJvnLwxK6i783Xj)aTF#Nn5Hkm8w{!?S`hp#!We1+Wx+o zJ?E50u+q$YkKgy2`DV_Z`GNL~rA;*ZE_5H;^w-Lc0Fz&b2x+ZV3!35+);P!iek$IxzgdQxbVvMH) zM=NRR8PUYe)nnTI;<@Tuv>x$hbzk5Rw|6Yrj8E~o3x3g9)1di9cTFSap_&^L|5^j9 zC$3}6x$zU%ojCp4ioX8CJ>2^HZhquaT{&a>x$WQBjAXdA!`YnW>Dt{uzw#<-nKepa z*9E(rS@(hKQpP#6VU;pgshd3Nfc|cFMGu+1;3b^^69>c7=2D)PjuLq1R?eA*TW%|< zJ((w^W!^_nYjOmOZ8FT3`EATOvj#JThaZJ8cR{kE2TOm8{h^S99zW;tL*RKXVU86n zbLRLJa>66Y!_%Gxsfi!+_$R>^3L-q|Mm^oriceD%$W6ko=!0`BdL$1%?PX)$p`1#^ z0#8rM0kgt}XGFIC4NO3APf~BiU<0xPkx{$zKz&3jl6cQ2H2k-1-N%HE!Qk!L2fG z?X9q5L2GBwo}?t=*1YrHhpM2YOh~hF@Cn!5DmnehHdNu90%YF21OuR2LqZl|e#J~J(HlAyeXyu6$Yhyz^zZuWqFXu&r3!;AIm+&hih znX@?fO^7nIpf{rrR7X0=0-n$14P`U(DK?btES;Y77^qbC;l5?K)cclK~dgqV4dF-Ks@0kPDpZFglv~= z&?F0Vzv=OT2;LRFb?(t`&YN#z2ieTqvi*og`z=D^%Jyqx-eHl3{3{2M1)`PH$eF~I zz>y`QRl1RE+?L*Pd18pKcC8##Dyygdh(cBUAeh4-{Jt&t%0r5rr3nuzK{$$8z+3KVG*25V&svr&`F8QcsBhftz6p6+qFeKonl37L-P+6+)&b z+wA2QG%2rwlJa$0FJpQMQ*uc|*PFj2;a4wRV;rH)7 zJUS|B4da2Yj6U#dQCbA5n3_(H7N^Q`Au%dbV~_ONzdT7DjuA-0woy~?Ig$~zM27Y_m%5+^a=KyzseYTF=Q^i^y9 z#MkcuAM(|+pl4r*JS?=%uy#md9tVc%KGmSK_j@2)`kj*VPsB0crzL%sX0g;+5o){2 z>p!JFPjkHwf7b@F%U4IP6iv~vFrsy|XVGwd2XGX9g4zn7>=mrrNSnD3EzvT|TPHQq zQ(i8ny0(b7y7q}cc_6d1`=FMY>A6s%Z4}32t(AqnZ5C%^ccKI8x3`A=@BaaD52RBD z#bKkJI$D&HHQ~WvJSvB9KxV4%%-?RRI DLoaSw diff --git a/sprite.h b/sprite.h index bf2bf58..48db6cf 100644 --- a/sprite.h +++ b/sprite.h @@ -2,16 +2,24 @@ struct Sprite{ Texture2D *texture; float x; float y; + float destX; + float destY; + int clicked; } Sprite; -void addSprite(struct Sprite *cursors, int *j, Texture2D *texture, int x, int y){ - if(*j < 100){ - (cursors + *j) -> texture = texture; - (cursors + *j) -> x = x; - (cursors + *j) -> y = y; - (*j)++; +void addSprite(struct Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, int y){ + if(*spriteAmount < 100){ + (sprites + *spriteAmount) -> texture = texture; + (sprites + *spriteAmount) -> x = x; + (sprites + *spriteAmount) -> y = y; + (*spriteAmount)++; + printf("SPRITE\n"); } else{ printf("Voll\n"); } +} + +void DrawSprite(struct Sprite *sprite){ + DrawTexture(*sprite->texture, sprite->x, sprite->y, WHITE); } \ No newline at end of file