|
|
|
|
@ -4,9 +4,19 @@
|
|
|
|
|
#include "raylib.h"
|
|
|
|
|
#include "stdlib.h"
|
|
|
|
|
#include "stdio.h"
|
|
|
|
|
#include "screenIDs.h"
|
|
|
|
|
|
|
|
|
|
static UiContainer * UiContainerInitEmptyUiContainer(){
|
|
|
|
|
UiContainer *uiContainer = malloc(sizeof(UiContainer));
|
|
|
|
|
|
|
|
|
|
uiContainer->buttonCounter = 0;
|
|
|
|
|
uiContainer->selectableCounter = 0;
|
|
|
|
|
|
|
|
|
|
return uiContainer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UiContainer * UiContainerInitPauseUiContainer(){
|
|
|
|
|
// Only for use in UiContainer
|
|
|
|
|
static UiContainer * UiContainerInitPauseUiContainer(){
|
|
|
|
|
UiContainer *uiContainer = malloc(sizeof(UiContainer));
|
|
|
|
|
|
|
|
|
|
Texture2D textures[4] = { LoadTexture("assets/button.png"), //DEFAULT
|
|
|
|
|
@ -26,11 +36,15 @@ UiContainer * UiContainerInitPauseUiContainer(){
|
|
|
|
|
uiContainer->buttons[1] = exitButton;
|
|
|
|
|
uiContainer->buttonCounter = 2;
|
|
|
|
|
|
|
|
|
|
// WICHTIG, auch wenn der UiContainer gar keine selectables hat!
|
|
|
|
|
uiContainer->selectableCounter = 0;
|
|
|
|
|
|
|
|
|
|
// Methode funktioniert wieso auch immer auch ohne dieses return. C returned Implizit odder was O_o
|
|
|
|
|
return uiContainer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UiContainer * UiContainerInitMainMenuUiContainer(){
|
|
|
|
|
// Only for use in UiContainer
|
|
|
|
|
static UiContainer * UiContainerInitMainMenuUiContainer(){
|
|
|
|
|
UiContainer *uiContainer = malloc(sizeof(UiContainer));
|
|
|
|
|
|
|
|
|
|
Texture2D textures[4] = { LoadTexture("assets/button.png"), //DEFAULT
|
|
|
|
|
@ -44,17 +58,21 @@ UiContainer * UiContainerInitMainMenuUiContainer(){
|
|
|
|
|
uiContainer->buttons[0] = continuebutton;
|
|
|
|
|
uiContainer->buttonCounter = 1;
|
|
|
|
|
|
|
|
|
|
// WICHTIG, auch wenn der UiContainer gar keine selectables hat!
|
|
|
|
|
uiContainer->selectableCounter = 0;
|
|
|
|
|
|
|
|
|
|
position.y += 250;
|
|
|
|
|
|
|
|
|
|
Button *exitButton = ButtonInitButton(textures, &position, "EXIT", 5, buttonFontSize, BUTTON_ID_EXIT);
|
|
|
|
|
uiContainer->buttons[1] = exitButton;
|
|
|
|
|
uiContainer->buttonCounter = 2;
|
|
|
|
|
|
|
|
|
|
// Methode funktioniert wieso auch immer auch ohne dieses return. C returned Implizit odder was O_o
|
|
|
|
|
// Methode funktioniert wieso auch immer auch ohne dieses return. GCC returned Implizit odder was O_o
|
|
|
|
|
return uiContainer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UiContainer * UiContainerInitGameUiContainer(){
|
|
|
|
|
// Only for use in UiContainer
|
|
|
|
|
static UiContainer * UiContainerInitGameUiContainer(){
|
|
|
|
|
UiContainer *uiContainer = malloc(sizeof(UiContainer));
|
|
|
|
|
|
|
|
|
|
uiContainer->buttonCounter = 0;
|
|
|
|
|
@ -68,8 +86,8 @@ UiContainer * UiContainerInitGameUiContainer(){
|
|
|
|
|
LoadTexture("assets/selectable_background_hovered.png"), //HOVERED
|
|
|
|
|
LoadTexture("assets/selectable_background_selected.png") //SELECTED
|
|
|
|
|
};
|
|
|
|
|
Vector2 position = (Vector2){50, 250};
|
|
|
|
|
int showDescription = 0;
|
|
|
|
|
Vector2 position = (Vector2){20, 300};
|
|
|
|
|
int showDescription = 1;
|
|
|
|
|
Selectable *selectable1 = SelectableInit(textures, backgroundTextures, 1, &position, "Building", showDescription, 9, 16, SELECTABLE_ID_TEST);
|
|
|
|
|
position.y += 100;
|
|
|
|
|
Selectable *selectable2 = SelectableInit(textures, backgroundTextures, 1,&position, "Building2", showDescription, 10, 16, SELECTABLE_ID_TEST);
|
|
|
|
|
@ -94,35 +112,62 @@ UiContainer * UiContainerInitGameUiContainer(){
|
|
|
|
|
return uiContainer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Updated alle Buttons und führt gegebenenfalls deren Code aus
|
|
|
|
|
void UiContainerUpdateUiContainer(UiContainer *uiContainer, Game *game){
|
|
|
|
|
UiContainer * UiContainerInitUiContainerForScreenID(int id){
|
|
|
|
|
switch(id){
|
|
|
|
|
case SCREEN_MAINMENU:
|
|
|
|
|
return UiContainerInitMainMenuUiContainer();
|
|
|
|
|
case SCREEN_GAME:
|
|
|
|
|
return UiContainerInitGameUiContainer();
|
|
|
|
|
case SCREEN_PAUSE:
|
|
|
|
|
return UiContainerInitPauseUiContainer();
|
|
|
|
|
default:
|
|
|
|
|
printf("WARNING: Creating UiContainer for Screen ID %d (not implemented)\n", id);
|
|
|
|
|
return UiContainerInitEmptyUiContainer();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Only for use in UiContainer, should not be used on their own
|
|
|
|
|
static void UpdateButtons(Game *game, Button **buttons, int buttonCounter){
|
|
|
|
|
int i = 0;
|
|
|
|
|
for(i=0 ; i < uiContainer->buttonCounter; i++){
|
|
|
|
|
ButtonUpdateButtonState(uiContainer->buttons[i]);
|
|
|
|
|
if(uiContainer->buttons[i]->state == BUTTON_STATE_RELEASED){
|
|
|
|
|
ButtonExecuteButton(uiContainer->buttons[i], game);
|
|
|
|
|
for(i=0 ; i < buttonCounter; i++){
|
|
|
|
|
ButtonUpdateButtonState(buttons[i]);
|
|
|
|
|
if(buttons[i]->state == BUTTON_STATE_RELEASED){
|
|
|
|
|
ButtonExecuteButton(buttons[i], game);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(i=0 ; i < uiContainer->selectableCounter; i++){
|
|
|
|
|
int setState = SelectableUpdateSelectableState(uiContainer->selectables[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Only for use in UiContainer, should not be used on their own
|
|
|
|
|
static void UpdateSelectables(Game *game, Selectable **selectables, int selectableCounter){
|
|
|
|
|
int i = 0;
|
|
|
|
|
for(i=0 ; i < selectableCounter; i++){
|
|
|
|
|
int setState = SelectableUpdateSelectableState(selectables[i]);
|
|
|
|
|
// Unselecting every selectable if one is selected
|
|
|
|
|
if(setState == SELECTABLE_STATE_SELECTED){
|
|
|
|
|
int j;
|
|
|
|
|
for(j=0 ; j < uiContainer->selectableCounter; j++){
|
|
|
|
|
for(j=0 ; j < selectableCounter; j++){
|
|
|
|
|
if(i != j){
|
|
|
|
|
SelectableUnselectSelectable(uiContainer->selectables[j]);
|
|
|
|
|
SelectableUnselectSelectable(selectables[j]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(uiContainer->selectables[i]->state == SELECTABLE_STATE_SELECTED){
|
|
|
|
|
SelectableExecuteSelectable(uiContainer->selectables[i], game);
|
|
|
|
|
if(selectables[i]->state == SELECTABLE_STATE_SELECTED){
|
|
|
|
|
SelectableExecuteSelectable(selectables[i], game);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Drawed alle Buttons
|
|
|
|
|
// Updated alle Buttons und Selectables und führt gegebenenfalls deren Code aus
|
|
|
|
|
void UiContainerUpdateUiContainer(UiContainer *uiContainer, Game *game){
|
|
|
|
|
UpdateButtons(game, uiContainer->buttons, uiContainer->buttonCounter);
|
|
|
|
|
UpdateSelectables(game, uiContainer->selectables, uiContainer->selectableCounter);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Drawed alle Buttons und Selectables
|
|
|
|
|
void UiContainerDrawUiContainer(UiContainer *uiContainer){
|
|
|
|
|
if(uiContainer == 0) return;
|
|
|
|
|
int i = 0;
|
|
|
|
|
// Funktion kann genauso wie update auch noch aufgeteilt werden, aktuell aber noch nicht notwendig
|
|
|
|
|
for(i=0 ; i < uiContainer->buttonCounter; i++){
|
|
|
|
|
ButtonDrawButton(uiContainer->buttons[i]);
|
|
|
|
|
}
|
|
|
|
|
|