From 732efea2d3582fbfc22fd4f09b45d5c16fbbee13 Mon Sep 17 00:00:00 2001 From: Jan Date: Tue, 3 Jan 2023 00:04:32 +0100 Subject: [PATCH] segfault fixed --- .vscode/settings.json | 3 +- Makefile | 5 ++- Ui/buttons.c | 66 ++++++++++++++++++++++++++++++++++++++ Ui/buttons.h | 26 +++++++++++++++ Ui/screenIDs.h | 4 +-- assets/button.png | Bin 0 -> 1275 bytes assets/button_hovered.png | Bin 0 -> 8496 bytes assets/button_pressed.png | Bin 0 -> 1267 bytes main.c | 36 ++++++++++++++++++++- 9 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 Ui/buttons.c create mode 100644 Ui/buttons.h create mode 100644 assets/button.png create mode 100644 assets/button_hovered.png create mode 100644 assets/button_pressed.png diff --git a/.vscode/settings.json b/.vscode/settings.json index 9e6e03e..2644e13 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,6 +9,7 @@ "textureids.h": "c", "tile.h": "c", "raylib.h": "c", - "game.h": "c" + "game.h": "c", + "buttons.h": "c" } } \ No newline at end of file diff --git a/Makefile b/Makefile index 5daf646..3d670b6 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC = gcc FLAGS = -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -OBJS = main.o sprite.o inputHandler.o isometricMap.o list.o game.o textureatlas.o animation.o animationHandler.o bucket.o mergeSort.o +OBJS = main.o sprite.o inputHandler.o isometricMap.o list.o game.o textureatlas.o animation.o animationHandler.o bucket.o mergeSort.o buttons.o spiel: $(OBJS) $(CC) -o spiel $(OBJS) $(FLAGS) @@ -38,5 +38,8 @@ bucket.o: DepthSorting/bucket.c mergeSort.o: DepthSorting/mergeSort.c $(CC) -c DepthSorting/mergeSort.c $(FLAGS) +buttons.o: Ui/buttons.c + $(CC) -c Ui/buttons.c $(FLAGS) + clean: rm *.o spiel diff --git a/Ui/buttons.c b/Ui/buttons.c new file mode 100644 index 0000000..6d92156 --- /dev/null +++ b/Ui/buttons.c @@ -0,0 +1,66 @@ +#include "buttons.h" +#include "../game.h" +#include "screenIDs.h" +#include "stdio.h" +#include "raylib.h" + +void executeButton(Button *button, Game *game){ + button->state = 0; + switch(button->id){ + case 0: // continue game + if(game->screen == SCREEN_PAUSE){ + game->screen = SCREEN_GAME; + } + break; + } +} + +void drawButton(Button * button){ + printf("%d\n", button->state); + updateButtonState(button); + printf("DRAW JETZT\n"); + DrawTexture(*button->textures[button->state], button->position.x, button->position.y, WHITE); + printf("funktioniert\n"); +} + +int updateButtonState(Button * button){ + if(GetMouseX() > button->position.x && + GetMouseX() < button->position.x + button->textures[button->state]->width && + GetMouseY() > button->position.y && + GetMouseY() < button->position.y + button->textures[button->state]->height + ){ + if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){ + button->state = 2; + return 2; + } + button->state = 1; + return 1; + } + button->state = 0; + return 0; +} + +int isButtonHovered(Button * button){ + if(GetMouseX() > button->position.x && + GetMouseX() < button->position.x + button->textures[0]->width && + GetMouseY() > button->position.y && + GetMouseY() < button->position.y + button->textures[0]->height + ){ + return button->state = 1; + } + return button->state = 0; +} + +int isButtonPressed(Button * button){ + if(GetMouseX() > button->position.x && + GetMouseX() < button->position.x + button->textures[0]->width && + GetMouseY() > button->position.y && + GetMouseY() < button->position.y + button->textures[0]->height + ){ + if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ + return button->state = 2; + } + } + return button->state = 0; +} + diff --git a/Ui/buttons.h b/Ui/buttons.h new file mode 100644 index 0000000..15d2a75 --- /dev/null +++ b/Ui/buttons.h @@ -0,0 +1,26 @@ +#ifndef BUTTONS_H_ +#define BUTTONS_H_ + +#include "raylib.h" +#include "../game.h" + +typedef struct Button{ + Texture2D *textures[3]; // [0]: Normal [1]: Hovered [2]: Pressed + Vector2 position; + //char text[20]; + int state; // 0: default 1: hovered 2: pressed + int id; +} Button; + +// executes the logic of one button of certain id - huge switch? +void executeButton(Button *button, Game * game); + +int updateButtonState(Button * button); + +void drawButton(Button * button); + +int isButtonPressed(Button * button); + +int isButtonHovered(Button * button); + +#endif \ No newline at end of file diff --git a/Ui/screenIDs.h b/Ui/screenIDs.h index bf95efd..e55f992 100644 --- a/Ui/screenIDs.h +++ b/Ui/screenIDs.h @@ -1,5 +1,5 @@ -#ifndef BUTTONIDS_H_ -#define BUTTONIDS_H_ +#ifndef SCREENIDS_H_ +#define SCREENIDS_H_ #define SCREEN_EXIT 0 #define SCREEN_MAINMENU 1 diff --git a/assets/button.png b/assets/button.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea26fa9842387c50fb44764cae5590ee8eb7ce6 GIT binary patch literal 1275 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58aUX1p(_C)#=(4iIVe4|bi{<)qzVk+Q;1%*9n^E0^mEfvnarS)aIH?7mWyM8w?>Zhi3J zeA3l}M+HcwZkJn&->H5aL&F>XG)_Edn5>YPf&1j6jhy)sO+}eud7vL?(y0`&gf5#n0w)s3ar^IS{c%OLQ_}%!|G97_^tX0?c>@+=J z_={mlX4pyT2M+`!bOXNaI=_4O?dRX}{fq1DSs9C}uWG4o1V#&6lDE4HLl!8Wv<_aG z45T;3yJV8r zT@HS}=Y7(qVAt{|qPbT0tr){IZU3b@@w1*@z-jwrnxk;d3Ed{OKNF&vd_O2|=a}`u zIgiuiVf!7Sj6?i8RWGb+tB?IEEW32|)=8=czn3#7JD$9FU!-CA|BYw1zpCCZ5JD7BDcdGH5V3Fv58Oed`$?ubBxFKO)lbQ9k_~3s8Z=GKQZ27S(DD3TuJp7qU5X zJNzgVTg%`O#aQv{u}_;=!-vN?V6q2Hu9=sAd3Ix*`IjTofh_Y+%{y~uTK0L{_P`&8 zyfM{#pPnicta)K=d|Fc6=JBzXc}p@EOh2RJe{aTx#XR%Qo+*0T%UGL!EWA;11{2hI z3|tHWXf6f{Ni1df^F7Xh5xeY*i!bxpK4lrKm^}08JL!t=&!;dt)z_y@+nw(qsqp1* zN?PSFwST+YlpH>+KYQlR?OvNo+ZA56-u5VQLUv z@Jxh3=Jc=SJ6$;s9N_<@+ubeHV7UBG=IeaDDGWSf|MIyU1P?eIydTZr#lXh-{~l8S uOMuOfbdd(5hNgx47cop>6yf}vZ@*LX*1glmnBD;M0E4HipUXO@geCy=fC-KO literal 0 HcmV?d00001 diff --git a/assets/button_hovered.png b/assets/button_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..32a0d04a9c904957ffc3be05a1cc1738d9860b34 GIT binary patch literal 8496 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 literal 0 HcmV?d00001 diff --git a/assets/button_pressed.png b/assets/button_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..7715efa6515a13e764beaf4a82dc5db487091ea4 GIT binary patch literal 1267 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58aUX1p(_C)#=(4iIVe4|bi{<)qzVk+Q;1%*9n^E0^mEfvnarS)aIH?7mWyM8w?>Zhi3J zeA3l}M+HcwZkJn&->H5aL&F>XG)_Edn5>YPf&1j6jhy)sO+}eud7vL?(y0`&gf5#n0w)s3ar^IS{c%OLQ_}%!|G97_^tX0?c>@+=J z_={mlX4pyT2M+`!bOXNaI=_4O?dRX}{fq1DSs9C}uWG4o1V#&6lDE4HLl!8Wv<_aG z45T;xbr0u@ooF`ebu>FqFizfb^ zt`}P6i@X+o<(%;Ws`s@@5o{n>X`J-v8e zq+$90>|lrW`@U;4w*0T)j9@JW|NMGJ zHHHmL3=_2vc)kA<&1~>*HUk4Ig9d{GBLf#h07C;4oVP$`J>%mwGeOcvL>fNIr=Md1 zs#917G{vG?jX_~8gU#PUHfL^!ABAFT862X37C!cA6KnYJI0sDjfXOv|<=H@?|9H5EnGEeS!1Np=J?8Fr+%Xy zX2!o~nzNmmE4iM@*?<-1JQ0QkC@yyJJX|kv!k^h`?wL35_ccb>`$;N%d4K-Qzjx9B zY#e`WX5L)Cuk-%8g&YEZij6m)EmIDU<6kxZVfy;-7uK`RSL|5E$Wp&&H>-iLYQu;A ztv?eKzxU+XC7iIGJ)2*u==_rKM#YGmOa`nEblUtGycp6ia4{?qYtUp!KMxL#bqs45 zEsE7Z!B@zdzy7qNufZ{~QQP6G>46{p zrVoC8ywAcA#-LEgx?&fb#Q%+KGSdHj84{Rpu6a9KY1z{lnP`&k2)vb4yneu(<9 zmLY-l$4##F?9AKe|JyItAk?t+aQ$|MDGY0*|Fv^Da2}ZTuzm-F2;&;jKhCTRSQ6%b xkk?{xWdP>MB1R476_URmvM%6R;P+zxZ>Gg_J|Azb{M!jiq@J#RF6*2UngEbV2etqJ literal 0 HcmV?d00001 diff --git a/main.c b/main.c index 389fe9b..3de0b84 100644 --- a/main.c +++ b/main.c @@ -10,10 +10,11 @@ #include "DepthSorting/bucket.h" #include "DepthSorting/mergeSort.h" #include "Ui/screenIDs.h" +#include "Ui/buttons.h" int main(){ - InitWindow(800, 450, "basic window"); + InitWindow(1600, 900, "basic window"); Game *game = GameInit(); @@ -64,6 +65,19 @@ int main(){ int uitest(Game * game){ + Texture2D button = LoadTexture("assets/button.png"); + Texture2D buttonHovered = LoadTexture("assets/button_hovered.png"); + Texture2D buttonPressed = LoadTexture("assets/button_pressed.png"); + + Button continuebutton; + continuebutton.id = 0; + continuebutton.position = (Vector2){GetScreenWidth()/2, GetScreenHeight()/2}; + continuebutton.state = 0; + + continuebutton.textures[0] = &button; + continuebutton.textures[1] = &buttonHovered; + continuebutton.textures[2] = &buttonPressed; + while(!WindowShouldClose()){ // Moving cursor Sprite to Mouse Pos @@ -111,9 +125,25 @@ int uitest(Game * game){ break; case SCREEN_PAUSE: ClearBackground(RAYWHITE); + BeginDrawing(); + BeginMode2D(*(game->camera)); + IsometricMapDraw(game); + EndMode2D(); + + DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), (Color){0, 0, 0, 150}); + int textWidthHalf = MeasureText("Paused", 28) / 2; + DrawText("Paused", GetScreenWidth()/2 - textWidthHalf, GetScreenHeight()/2 - 14, 28, WHITE); + + printf("Vorher \n"); + drawButton(&continuebutton); + printf("Nachher \n"); + if(continuebutton.state == 2){ + executeButton(&continuebutton, game); + } + DrawSpriteToScreen(game->cursorSprite); DrawFPS(GetScreenWidth() - 95, 10); @@ -123,6 +153,10 @@ int uitest(Game * game){ game->screen = SCREEN_GAME; } break; + default: + printf("\n\n\n\n\n\n Wir haben ein problematisches Problem! Die Screen-ID [%d] ist nicht definiert. Hmmpf... früher bescheid wisse!\n\n\n\n\n\n", game->screen); + return 1; + break; }