JanEhehalt 3 years ago
parent 96f96d767a
commit 23e78574f8

@ -6,27 +6,28 @@
#include "raylib.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->textures[0] = textures[0];
button->textures[1] = textures[1];
button->textures[2] = textures[2];
button->textures[3] = textures[3];
button->position = (Vector2){position->x, position->y};
button->centerPosition = (Vector2){position->x + textures[0].width/2, position->y + textures[0].height/2};
strncpy(button->text, text, textLEN);
button->state = 0;
button->state = BUTTON_STATE_DEFAULT;
button->id = id;
return button;
}
void ButtonExecuteButton(Button *button, Game *game){
button->state = 0;
button->state = BUTTON_STATE_DEFAULT;
switch(button->id){
case 0: // continue game
case BUTTON_ID_CONTINUE: // continue game
if(game->screen == SCREEN_PAUSE){
game->screen = SCREEN_GAME;
}
@ -35,49 +36,30 @@ void ButtonExecuteButton(Button *button, Game *game){
}
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);
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){
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 &&
GetMouseY() > button->position.y &&
GetMouseY() < button->position.y + button->textures[button->state].height
){
if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){
button->state = 2;
return 2;
if(IsMouseButtonDown(MOUSE_BUTTON_LEFT)){
return button->state = BUTTON_STATE_PRESSED;
}
button->state = 1;
return 1;
}
button->state = 0;
return 0;
}
int ButtonIsButtonHovered(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 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;
else if(button->state == BUTTON_STATE_PRESSED){
return button->state = BUTTON_STATE_RELEASED;
}
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_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{
Texture2D textures[3]; // [0]: Normal [1]: Hovered [2]: Pressed
Texture2D textures[4]; // [0]: Normal [1]: Hovered [2]: Pressed [3]: Released
Vector2 position;
Vector2 centerPosition;
char text[20];
int state; // 0: default 1: hovered 2: pressed
int state; // 0: default 1: hovered 2: pressed 3: released
int id;
} 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?
void ButtonExecuteButton(Button *button, Game * game);
@ -24,8 +31,4 @@ int ButtonUpdateButtonState(Button * button);
void ButtonDrawButton(Button * button);
int ButtonisButtonPressed(Button * button);
int ButtonisButtonHovered(Button * button);
#endif

@ -8,12 +8,13 @@
UiContainer * UiContainerInitPauseUiContainer(){
UiContainer *uiContainer = malloc(sizeof(UiContainer));
Texture2D textures[3] = { LoadTexture("assets/button.png"),
LoadTexture("assets/button_hovered.png"),
LoadTexture("assets/button_pressed.png")};
Texture2D textures[4] = { LoadTexture("assets/button.png"), //DEFAULT
LoadTexture("assets/button_hovered.png"), //HOVERED
LoadTexture("assets/button_pressed.png"), //PRESSED
LoadTexture("assets/button_pressed.png")}; //RELEASED
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->buttonCounter = 1;
@ -22,18 +23,22 @@ UiContainer * UiContainerInitPauseUiContainer(){
}
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){
int i = 0;
for(i=0 ; i < uiContainer->buttonCounter; i++){
ButtonUpdateButtonState(uiContainer->buttons[i]);
if(uiContainer->buttons[i]->state == 2){
if(uiContainer->buttons[i]->state == BUTTON_STATE_RELEASED){
ButtonExecuteButton(uiContainer->buttons[i], game);
}
}
}
// Drawed alle Buttons
void UiContainerDrawUiContainer(UiContainer *uiContainer){
int i = 0;
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