kleine Anleitung zum erstellen von Buttons und Selectables

main
Jan 3 years ago
parent 89311a8915
commit 2a8bbeefd2

@ -36,3 +36,30 @@ Allgemein:
+ MapEditor
## Anleitungen
### Button einfügen:
Schritt für Schritt Anleitung:
+ in definitions.h eine ID für den Button anlegen: BUTTON_ID_{ButtonName}
+ Onclick Funktion für den Button anlegen:
+ Die Funktion muss in <b>onClickFunctions.h</b> und <b>onClickFunctions.h</b> angelegt werden
+ Stil: void OnClick{ButtonName}Button(Game *game, Button *button)
+ in <b>button.c</b> in der Funktion <b>ButtonInitButton</b> im Switch Case einen Case für die neue ID anlegen und einen Pointer auf die neue Funktion in button->onClick speichern
+ UiContianer hat für jeden Screen eine Init Funktion (Menu, Game, etc.). In der richtigen Init Funktion dann den Button erstellen und in den uiContainer mit UiContainerAddButton einfügen damit er dann auch im Spielt ist
+ Die default Texturen sind in der UiContainerInit Funktion im textures Array gespeichert
+ Fertig :)
### Selectable einfügen:
Schritt für Schritt Anleitung:
+ in definitions.h eine ID für das Selectable anlegen: SELECTABLE_ID_{ SelectableName}
+ OnSelected Funktion für das Selectable anlegen:
+ Die Funktion muss in <b>onClickFunctions.h</b> und <b>onClickFunctions.c</b> angelegt werden
+ Stil: void OnSelected{SelectableName}(Game *game, Selectable *selectable)
+ Wichtig: Die OnSelected Funktion wird in jedem Frame ausgeführt, in dem das Selectable selected ist, es sollte also nur etwas OnButtonPressed machen, und im gleichen Zug dann den state des selectables auf default zurücksetzen
+ Außerdem am besten nur etwas machen wenn game->mouseOnUI == 0 ist
+ in <b>selectable.c</b> in der Funktion <b>SelectableInit(...)</b> im Switch Case einen Case für die neue ID anlegen und einen Pointer auf die neue Funktion in selectable->onSelected speichern
+ UiContianer hat für jeden Screen eine Init Funktion (Menu, Game, etc.). In der richtigen Init Funktion dann das Selectable erstellen und in den uiContainer mit UiContainerAddSelectable einfügen, damit es dann auch im Spiel ist
+ Die default Texturen sind in der UiContainerInit Funktion im textures(2) und im backgroundTextures Array gespeichert

@ -17,56 +17,48 @@ static UiContainer * UiContainerInitEmptyUiContainer(){
// Only for use in UiContainer
static UiContainer * UiContainerInitPauseUiContainer(){
UiContainer *uiContainer = malloc(sizeof(UiContainer));
uiContainer->buttonCounter = 0;
uiContainer->selectableCounter = 0;
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 - 50};
int buttonFontSize = 36;
Button *continuebutton = ButtonInitButton(textures, &position, "Continue", 9, buttonFontSize, BUTTON_ID_CONTINUE);
uiContainer->buttons[0] = continuebutton;
uiContainer->buttonCounter = 1;
Button *continuebutton = ButtonInitButton(textures, &position, "Continue", 9/*String len*/, buttonFontSize, BUTTON_ID_CONTINUE);
position.y += 250;
Button *exitButton = ButtonInitButton(textures, &position, "EXIT", 5/*String len*/, buttonFontSize, BUTTON_ID_EXIT);
Button *exitButton = ButtonInitButton(textures, &position, "EXIT", 5, buttonFontSize, BUTTON_ID_EXIT);
uiContainer->buttons[1] = exitButton;
uiContainer->buttonCounter = 2;
UiContainerAddButton(uiContainer, continuebutton);
UiContainerAddButton(uiContainer, exitButton);
// 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;
}
// Only for use in UiContainer
static UiContainer * UiContainerInitMainMenuUiContainer(){
UiContainer *uiContainer = malloc(sizeof(UiContainer));
uiContainer->buttonCounter = 0;
uiContainer->selectableCounter = 0;
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 - 50};
int buttonFontSize = 36;
Button *continuebutton = ButtonInitButton(textures, &position, "Start Game", 11, buttonFontSize, BUTTON_ID_START_GAME);
uiContainer->buttons[0] = continuebutton;
uiContainer->buttonCounter = 1;
// WICHTIG, auch wenn der UiContainer gar keine selectables hat!
uiContainer->selectableCounter = 0;
Button *continuebutton = ButtonInitButton(textures, &position, "Start Game", 11/*String len*/, buttonFontSize, BUTTON_ID_START_GAME);
position.y += 250;
Button *exitbutton = ButtonInitButton(textures, &position, "EXIT", 5/*String len*/, buttonFontSize, BUTTON_ID_EXIT);
Button *exitButton = ButtonInitButton(textures, &position, "EXIT", 5, buttonFontSize, BUTTON_ID_EXIT);
uiContainer->buttons[1] = exitButton;
uiContainer->buttonCounter = 2;
UiContainerAddButton(uiContainer, continuebutton);
UiContainerAddButton(uiContainer, exitbutton);
// Methode funktioniert wieso auch immer auch ohne dieses return. GCC returned Implizit odder was O_o
return uiContainer;
}
@ -75,6 +67,7 @@ static UiContainer * UiContainerInitGameUiContainer(){
UiContainer *uiContainer = malloc(sizeof(UiContainer));
uiContainer->buttonCounter = 0;
uiContainer->selectableCounter = 0;
Texture2D textures[3] = { LoadTexture("assets/selectable.png"), //DEFAULT
LoadTexture("assets/selectable.png"), //HOVERED
@ -84,11 +77,11 @@ static UiContainer * UiContainerInitGameUiContainer(){
LoadTexture("assets/entities/worker/arbeiten-4.png"), //HOVERED
LoadTexture("assets/entities/worker/arbeiten-4.png") //SELECTED
};
Texture2D backgroundTextures[3] = { LoadTexture("assets/selectable_background.png"), //DEFAULT
LoadTexture("assets/selectable_background_hovered.png"), //HOVERED
LoadTexture("assets/selectable_background_selected.png") //SELECTED
};
Vector2 position = (Vector2){20, 300};
int showDescription = 1;
int hasBackground = 1;
@ -96,24 +89,18 @@ static UiContainer * UiContainerInitGameUiContainer(){
int groupTwo = 1;
int fontSize = 16;
Selectable *selectable1 = SelectableInit(textures, backgroundTextures, hasBackground , &position, "Building",
showDescription, 9, fontSize, SELECTABLE_ID_SPAWN_BUILDING, groupOne, 1);
showDescription, 9/*String len*/, fontSize, SELECTABLE_ID_SPAWN_BUILDING, groupOne, 1);
position.y += 100;
Selectable *selectable2 = SelectableInit(textures2, backgroundTextures, hasBackground,&position, "Worker",
showDescription, 7, fontSize, SELECTABLE_ID_SPAWN_WORKER, groupOne, 1);
showDescription, 7/*String len*/, fontSize, SELECTABLE_ID_SPAWN_WORKER, groupOne, 1);
position.y += 100;
Selectable *selectable3 = SelectableInit(textures2, backgroundTextures, hasBackground,&position, "Lumberjack",
showDescription, 11, fontSize, SELECTABLE_ID_SPAWN_LUMBERJACK, groupOne, 1);
position.y += 100;
showDescription, 11/*String len*/, fontSize, SELECTABLE_ID_SPAWN_LUMBERJACK, groupOne, 1);
int selectableCounter = 0;
uiContainer->selectables[selectableCounter++] = selectable1;
uiContainer->selectables[selectableCounter++] = selectable2;
uiContainer->selectables[selectableCounter++] = selectable3;
uiContainer->selectableCounter = selectableCounter;
UiContainerAddSelectable(uiContainer, selectable1);
UiContainerAddSelectable(uiContainer, selectable2);
UiContainerAddSelectable(uiContainer, selectable3);
UiContainerAddSelectable(uiContainer, selectable4);
return uiContainer;
}
@ -195,4 +182,19 @@ void UiContainerDrawUiContainer(UiContainer *uiContainer){
for(i=0 ; i < uiContainer->selectableCounter; i++){
SelectableDrawSelectable(uiContainer->selectables[i]);
}
}
void UiContainerAddButton(UiContainer *uiContainer, Button *button){
if(uiContainer->buttonCounter == UI_CONTAINER_MAX_BUTTONS){
printf("UI CONTAINER VOLL [BUTTONS] \n");
return;
}
uiContainer->buttons[uiContainer->buttonCounter++] = button;
}
void UiContainerAddSelectable(UiContainer *uiContainer, Selectable *selectable){
if(uiContainer->selectableCounter == UI_CONTAINER_MAX_SELECTABLES){
printf("UI CONTAINER VOLL [SElECTABLES] \n");
return;
}
uiContainer->selectables[uiContainer->selectableCounter++] = selectable;
}

@ -7,9 +7,9 @@
#include "../game.h"
typedef struct UiContainer{
Button *buttons[15]; // Platz für max. 15 Buttons
Button *buttons[UI_CONTAINER_MAX_BUTTONS]; // Platz für max. 20 Buttons
int buttonCounter; // Zeigt wie viele Buttons der UiContainer aktuell schon speichert
Selectable *selectables[20]; // Platz für max 20 Selectables
Selectable *selectables[UI_CONTAINER_MAX_SELECTABLES]; // Platz für max 20 Selectables
int selectableCounter; // Zeigt wie viele Selectables der UiContainer aktuell schon speichert
} UiContainer;
@ -18,4 +18,7 @@ void UiContainerDrawUiContainer(UiContainer *uiContainer);
UiContainer * UiContainerInitUiContainerForScreenID(int id);
void UiContainerAddButton(UiContainer *uiContainer, Button *button);
void UiContainerAddSelectable(UiContainer *uiContainer, Selectable *selectable);
#endif

@ -56,6 +56,9 @@
#define SCREEN_AMOUNT 5
#define UI_CONTAINER_MAX_BUTTONS 20
#define UI_CONTAINER_MAX_SELECTABLES 20
#define SCREEN_EXIT 0 // Will exit the game using code 0
#define SCREEN_MAINMENU 1
#define SCREEN_OPTIONS 2
@ -67,14 +70,15 @@
#define BUTTON_STATE_PRESSED 2
#define BUTTON_STATE_RELEASED 3
#define BUTTON_ID_CONTINUE 0
#define BUTTON_ID_EXIT 1
#define BUTTON_ID_START_GAME 2
#define SELECTABLE_STATE_DEFAULT 0
#define SELECTABLE_STATE_HOVERED 1
#define SELECTABLE_STATE_SELECTED 2
#define BUTTON_ID_CONTINUE 0
#define BUTTON_ID_EXIT 1
#define BUTTON_ID_START_GAME 2
#define SELECTABLE_ID_SPAWN_BUILDING 0
#define SELECTABLE_ID_SPAWN_WORKER 1
#define SELECTABLE_ID_SPAWN_LUMBERJACK 2

Loading…
Cancel
Save