refactor: applicationstate.h for main.c logo.h menu.h game.h
This commit is contained in:
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"menu.h": "c"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef APPLICATIONSTATE_H
|
||||
#define APPLICATIONSTATE_H
|
||||
|
||||
typedef struct {
|
||||
Screen currentScreen;
|
||||
bool running;
|
||||
bool gameStarted;
|
||||
} State;
|
||||
|
||||
#endif // APPLICATIONSTATE_H
|
||||
+7
-2
@@ -6,6 +6,7 @@
|
||||
#include "../engine/postfx.h"
|
||||
#include "../engine/musicmanager.h"
|
||||
#include "../engine/asset.h"
|
||||
#include "../engine/applicationstate.h"
|
||||
#include "floor.h"
|
||||
#include "player.h"
|
||||
#include "bee.h"
|
||||
@@ -66,7 +67,7 @@ void InitGame(GameState* g){
|
||||
g->target = LoadRenderTexture(GetScreenWidth(), GetScreenHeight());
|
||||
}
|
||||
|
||||
void UpdateGame(GameState* g, Screen *currentScreen, bool *running, bool *gameStarted){
|
||||
void UpdateGame(GameState* g, State *state){
|
||||
UpdatePostFX(&g->postFX);
|
||||
UpdateMusic(&g->ambient);
|
||||
UpdateMouse(&g->mouse, &g->camera);
|
||||
@@ -76,7 +77,11 @@ void UpdateGame(GameState* g, Screen *currentScreen, bool *running, bool *gameSt
|
||||
UpdateBee(&g->bee1, &g->flowers, &g->hive);
|
||||
|
||||
if (IsKeyPressed(KEY_ESCAPE)){
|
||||
*currentScreen = MENU;
|
||||
state->currentScreen = MENU;
|
||||
}
|
||||
|
||||
if (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE)) {
|
||||
state->running = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+9
-2
@@ -1,6 +1,8 @@
|
||||
#ifndef LOGO_H
|
||||
#define LOGO_H
|
||||
|
||||
#include "../engine/applicationstate.h"
|
||||
|
||||
typedef struct {
|
||||
int frameCounter;
|
||||
int positionX;
|
||||
@@ -29,7 +31,12 @@ void InitLogo(LogoState *l) {
|
||||
l->alpha = 1.0f;
|
||||
}
|
||||
|
||||
void UpdateLogo(LogoState *l, Screen *currentScreen) {
|
||||
void UpdateLogo(LogoState *l, State *state) {
|
||||
|
||||
if (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE)) {
|
||||
state->running = false;
|
||||
}
|
||||
|
||||
l->frameCounter++; // Increment the frame counter each frame
|
||||
|
||||
if (l->state == 0) { // State 0: Small box blinking for 120 frames (2 seconds at 60 FPS)
|
||||
@@ -71,7 +78,7 @@ void UpdateLogo(LogoState *l, Screen *currentScreen) {
|
||||
}
|
||||
else if (l->state == 4) { // State 4: Transition to GAMEPLAY
|
||||
SetTargetFPS(0);
|
||||
*currentScreen = MENU;
|
||||
state->currentScreen = MENU;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
-6
@@ -2,6 +2,7 @@
|
||||
#define MENU_H
|
||||
|
||||
#include "../engine/gui.h"
|
||||
#include "../engine/applicationstate.h"
|
||||
|
||||
typedef struct {
|
||||
Button startButton;
|
||||
@@ -10,18 +11,25 @@ typedef struct {
|
||||
|
||||
void InitMenu(MenuState *t){
|
||||
initButton(&t->startButton, "Start Game", GetScreenWidth() / 10, GetScreenHeight() / 20, GetScreenWidth() / 2, GetScreenHeight() / 2);
|
||||
initButton(&t->quitButton, "Quit Game", GetScreenWidth() / 10, GetScreenHeight() / 20, GetScreenWidth() / 2, GetScreenHeight() / 2 + GetScreenHeight() / 20);
|
||||
initButton(&t->quitButton, "Quit Game", GetScreenWidth() / 10, GetScreenHeight() / 20, GetScreenWidth() / 2, GetScreenHeight() / 2 + (GetScreenHeight() / 20 * 2));
|
||||
}
|
||||
|
||||
void UpdateMenu(MenuState *t, Screen *currentScreen, bool *running, bool *gameStarted){
|
||||
void UpdateMenu(MenuState *t, State *state){
|
||||
if (isButtonClicked(&t->startButton)) {
|
||||
*gameStarted = true;
|
||||
state->gameStarted = true;
|
||||
t->startButton.text = "Continue";
|
||||
*currentScreen = GAMEPLAY;
|
||||
state->currentScreen = GAMEPLAY;
|
||||
}
|
||||
if (isButtonClicked(&t->quitButton)) {
|
||||
*running = false;
|
||||
if (isButtonClicked(&t->quitButton) || (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE))) {
|
||||
state->running = false;
|
||||
}
|
||||
|
||||
if (state->gameStarted){
|
||||
if (IsKeyPressed(KEY_ESCAPE)){
|
||||
state->currentScreen = GAMEPLAY;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void RenderMenu(MenuState *t){
|
||||
|
||||
+17
-19
@@ -4,27 +4,25 @@
|
||||
#include <stdlib.h>
|
||||
#include "engine/screen.h"
|
||||
#include "engine/settings.h"
|
||||
#include "engine/applicationstate.h"
|
||||
#include "game/logo.h"
|
||||
#include "game/menu.h"
|
||||
#include "game/game.h"
|
||||
|
||||
typedef struct {
|
||||
State state;
|
||||
Settings settings;
|
||||
LogoState logo;
|
||||
GameState game;
|
||||
MenuState menu;
|
||||
} Application;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
|
||||
typedef struct {
|
||||
Screen currentScreen;
|
||||
bool running;
|
||||
bool gameStarted;
|
||||
Settings settings;
|
||||
LogoState logo;
|
||||
GameState game;
|
||||
MenuState menu;
|
||||
} Application;
|
||||
|
||||
Application app;
|
||||
app.currentScreen = LOGO;
|
||||
app.running = true;
|
||||
app.gameStarted = false;
|
||||
app.state.currentScreen = LOGO;
|
||||
app.state.running = true;
|
||||
app.state.gameStarted = false;
|
||||
app.settings = (Settings){
|
||||
.name = "The Last Hive",
|
||||
.screenWidth = 1280,
|
||||
@@ -37,23 +35,23 @@ int main(void)
|
||||
InitMenu(&app.menu);
|
||||
InitGame(&app.game);
|
||||
|
||||
while (app.running)
|
||||
while (app.state.running)
|
||||
{
|
||||
switch (app.currentScreen)
|
||||
switch (app.state.currentScreen)
|
||||
{
|
||||
case LOGO:
|
||||
{
|
||||
UpdateLogo(&app.logo,&app.currentScreen);
|
||||
UpdateLogo(&app.logo, &app.state);
|
||||
RenderLogo(&app.logo);
|
||||
}break;
|
||||
case MENU:
|
||||
{
|
||||
UpdateMenu(&app.menu, &app.currentScreen, &app.running, &app.gameStarted);
|
||||
UpdateMenu(&app.menu, &app.state);
|
||||
RenderMenu(&app.menu);
|
||||
}break;
|
||||
case GAMEPLAY:
|
||||
{
|
||||
UpdateGame(&app.game, &app.currentScreen, &app.running, &app.gameStarted);
|
||||
UpdateGame(&app.game, &app.state);
|
||||
RenderGame(&app.game);
|
||||
}break;
|
||||
default: break;
|
||||
|
||||
Reference in New Issue
Block a user