JanEhehalt 3 years ago
parent 96f96d767a
commit 23e78574f8

@ -6,27 +6,28 @@
#include "raylib.h" #include "raylib.h"
#include "string.h" #include "string.h"
Button * InitButton(Texture2D textures[3], Vector2 *position, char *text, int textLEN, int id){ Button * ButtonInitButton(Texture2D textures[4], Vector2 *position, char *text, int textLEN, int id){
Button *button = malloc(sizeof(Button)); Button *button = malloc(sizeof(Button));
button->textures[0] = textures[0]; button->textures[0] = textures[0];
button->textures[1] = textures[1]; button->textures[1] = textures[1];
button->textures[2] = textures[2]; button->textures[2] = textures[2];
button->textures[3] = textures[3];
button->position = (Vector2){position->x, position->y}; button->position = (Vector2){position->x, position->y};
button->centerPosition = (Vector2){position->x + textures[0].width/2, position->y + textures[0].height/2}; button->centerPosition = (Vector2){position->x + textures[0].width/2, position->y + textures[0].height/2};
strncpy(button->text, text, textLEN); strncpy(button->text, text, textLEN);
button->state = 0; button->state = BUTTON_STATE_DEFAULT;
button->id = id; button->id = id;
return button; return button;
} }
void ButtonExecuteButton(Button *button, Game *game){ void ButtonExecuteButton(Button *button, Game *game){
button->state = 0; button->state = BUTTON_STATE_DEFAULT;
switch(button->id){ switch(button->id){
case 0: // continue game case BUTTON_ID_CONTINUE: // continue game
if(game->screen == SCREEN_PAUSE){ if(game->screen == SCREEN_PAUSE){
game->screen = SCREEN_GAME; game->screen = SCREEN_GAME;
} }
@ -35,49 +36,30 @@ void ButtonExecuteButton(Button *button, Game *game){
} }
void ButtonDrawButton(Button * button){ void ButtonDrawButton(Button * button){
ButtonUpdateButtonState(button); // erst Button Texture, dann Text zentriert drauf
DrawTexture(button->textures[button->state], button->position.x, button->position.y, WHITE); DrawTexture(button->textures[button->state], button->position.x, button->position.y, WHITE);
DrawText(button->text, button->centerPosition.x - MeasureText(button->text, BUTTON_FONT_SIZE)/2, button->centerPosition.y - BUTTON_FONT_SIZE/2, BUTTON_FONT_SIZE, BLACK); DrawText(button->text, button->centerPosition.x - MeasureText(button->text, BUTTON_FONT_SIZE)/2, button->centerPosition.y - BUTTON_FONT_SIZE/2, BUTTON_FONT_SIZE, BLACK);
} }
int ButtonUpdateButtonState(Button * button){ int ButtonUpdateButtonState(Button * button){
if(GetMouseX() > button->position.x && if(button->state == BUTTON_STATE_RELEASED){
// Wir verlassen den RELEASED State automatisch wenn wir den Code des Buttons ausführen, siehe ButtonExecuteButton
// So lange der Code nicht ausgeführt wurde bleiben wir im state damit er definitiv im nächsten Frame ausgeführt wird
return button->state;
}
else if(GetMouseX() > button->position.x &&
GetMouseX() < button->position.x + button->textures[button->state].width && GetMouseX() < button->position.x + button->textures[button->state].width &&
GetMouseY() > button->position.y && GetMouseY() > button->position.y &&
GetMouseY() < button->position.y + button->textures[button->state].height GetMouseY() < button->position.y + button->textures[button->state].height
){ ){
if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){ if(IsMouseButtonDown(MOUSE_BUTTON_LEFT)){
button->state = 2; return button->state = BUTTON_STATE_PRESSED;
return 2;
}
button->state = 1;
return 1;
}
button->state = 0;
return 0;
} }
else if(button->state == BUTTON_STATE_PRESSED){
int ButtonIsButtonHovered(Button * button){ return button->state = BUTTON_STATE_RELEASED;
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 ButtonIsButtonPressed(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 = BUTTON_STATE_HOVERED;
} }
return button->state = 0; return button->state = BUTTON_STATE_DEFAULT;
} }

@ -6,16 +6,23 @@
#define BUTTON_FONT_SIZE 36 #define BUTTON_FONT_SIZE 36
#define BUTTON_STATE_DEFAULT 0
#define BUTTON_STATE_HOVERED 1
#define BUTTON_STATE_PRESSED 2
#define BUTTON_STATE_RELEASED 3
#define BUTTON_ID_CONTINUE 0
typedef struct Button{ typedef struct Button{
Texture2D textures[3]; // [0]: Normal [1]: Hovered [2]: Pressed Texture2D textures[4]; // [0]: Normal [1]: Hovered [2]: Pressed [3]: Released
Vector2 position; Vector2 position;
Vector2 centerPosition; Vector2 centerPosition;
char text[20]; char text[20];
int state; // 0: default 1: hovered 2: pressed int state; // 0: default 1: hovered 2: pressed 3: released
int id; int id;
} Button; } Button;
Button * InitButton(Texture2D textures[3], Vector2 *position, char *text, int textLEN, int id); Button * ButtonInitButton(Texture2D textures[4], Vector2 *position, char *text, int textLEN, int id);
// executes the logic of one button of certain id - huge switch? // executes the logic of one button of certain id - huge switch?
void ButtonExecuteButton(Button *button, Game * game); void ButtonExecuteButton(Button *button, Game * game);
@ -24,8 +31,4 @@ int ButtonUpdateButtonState(Button * button);
void ButtonDrawButton(Button * button); void ButtonDrawButton(Button * button);
int ButtonisButtonPressed(Button * button);
int ButtonisButtonHovered(Button * button);
#endif #endif

@ -8,12 +8,13 @@
UiContainer * UiContainerInitPauseUiContainer(){ UiContainer * UiContainerInitPauseUiContainer(){
UiContainer *uiContainer = malloc(sizeof(UiContainer)); UiContainer *uiContainer = malloc(sizeof(UiContainer));
Texture2D textures[3] = { LoadTexture("assets/button.png"), Texture2D textures[4] = { LoadTexture("assets/button.png"), //DEFAULT
LoadTexture("assets/button_hovered.png"), LoadTexture("assets/button_hovered.png"), //HOVERED
LoadTexture("assets/button_pressed.png")}; LoadTexture("assets/button_pressed.png"), //PRESSED
LoadTexture("assets/button_pressed.png")}; //RELEASED
Vector2 position = (Vector2){GetScreenWidth()/2 - textures[0].width/2, GetScreenHeight()/2 + 150}; Vector2 position = (Vector2){GetScreenWidth()/2 - textures[0].width/2, GetScreenHeight()/2 + 150};
Button *continuebutton = InitButton(textures, &position, "Continue", 9, 0); Button *continuebutton = ButtonInitButton(textures, &position, "Continue", 9, BUTTON_ID_CONTINUE);
uiContainer->buttons[0] = continuebutton; uiContainer->buttons[0] = continuebutton;
uiContainer->buttonCounter = 1; uiContainer->buttonCounter = 1;
@ -22,18 +23,22 @@ UiContainer * UiContainerInitPauseUiContainer(){
} }
UiContainer * UiContainerInitGameUiContainer(){ UiContainer * UiContainerInitGameUiContainer(){
printf("\n\n\n\n UiContainerInitGameUiContainer not implemented yet!! \n\n\n\n");
return 0;
} }
// Updated alle Buttons und führt gegebenenfalls deren Code aus
void UiContainerUpdateUiContainer(UiContainer *uiContainer, Game *game){ void UiContainerUpdateUiContainer(UiContainer *uiContainer, Game *game){
int i = 0; int i = 0;
for(i=0 ; i < uiContainer->buttonCounter; i++){ for(i=0 ; i < uiContainer->buttonCounter; i++){
ButtonUpdateButtonState(uiContainer->buttons[i]); ButtonUpdateButtonState(uiContainer->buttons[i]);
if(uiContainer->buttons[i]->state == 2){ if(uiContainer->buttons[i]->state == BUTTON_STATE_RELEASED){
ButtonExecuteButton(uiContainer->buttons[i], game); ButtonExecuteButton(uiContainer->buttons[i], game);
} }
} }
} }
// Drawed alle Buttons
void UiContainerDrawUiContainer(UiContainer *uiContainer){ void UiContainerDrawUiContainer(UiContainer *uiContainer){
int i = 0; int i = 0;
for(i=0 ; i < uiContainer->buttonCounter; i++){ for(i=0 ; i < uiContainer->buttonCounter; i++){

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
game.o

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
list.o

Binary file not shown.

BIN
main.o

Binary file not shown.

Binary file not shown.

BIN
spiel

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save