#include "button.h" #include "../game.h" #include "screenIDs.h" #include "stdio.h" #include "stdlib.h" #include "raylib.h" #include "string.h" 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 = BUTTON_STATE_DEFAULT; button->id = id; return button; } void ButtonExecuteButton(Button *button, Game *game){ button->state = BUTTON_STATE_DEFAULT; switch(button->id){ case BUTTON_ID_CONTINUE: // continue game if(game->screen == SCREEN_PAUSE){ game->screen = SCREEN_GAME; } break; } } void ButtonDrawButton(Button * 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(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(IsMouseButtonDown(MOUSE_BUTTON_LEFT)){ return button->state = BUTTON_STATE_PRESSED; } else if(button->state == BUTTON_STATE_PRESSED){ return button->state = BUTTON_STATE_RELEASED; } return button->state = BUTTON_STATE_HOVERED; } return button->state = BUTTON_STATE_DEFAULT; }