mirror of https://git.sr.ht/~kikoodx/momento
Game state machine
This commit is contained in:
parent
2481f73b62
commit
87d6abbb42
|
@ -36,10 +36,13 @@ set(SOURCES
|
|||
src/particles/update.c
|
||||
src/particles/draw.c
|
||||
src/particles/create.c
|
||||
src/transition/draw.c
|
||||
src/transition/fade.c
|
||||
src/transition/init.c
|
||||
src/transition/update.c
|
||||
src/transition/draw.c
|
||||
src/transition/fade.c
|
||||
src/titlescreen/init.c
|
||||
src/titlescreen/update.c
|
||||
src/titlescreen/draw.c
|
||||
)
|
||||
|
||||
set(ASSETS
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||
/* Copyright (C) 2021 KikooDX */
|
||||
#pragma once
|
||||
|
||||
enum GameState { TitleScreen, MainMenu, LevelSelection, Playing };
|
|
@ -0,0 +1,12 @@
|
|||
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||
/* Copyright (C) 2021 KikooDX */
|
||||
#pragma once
|
||||
|
||||
struct TitleScreen {
|
||||
int placeholder;
|
||||
};
|
||||
|
||||
struct TitleScreen titlescreen_init(void);
|
||||
/* Return 1 if game state should change. */
|
||||
int titlescreen_update(struct TitleScreen *titlescreen);
|
||||
void titlescreen_draw(struct TitleScreen titlescreen);
|
153
src/main.c
153
src/main.c
|
@ -2,9 +2,11 @@
|
|||
/* Copyright (C) 2021 KikooDX */
|
||||
|
||||
#include "conf.h"
|
||||
#include "game_state.h"
|
||||
#include "level.h"
|
||||
#include "particles.h"
|
||||
#include "player.h"
|
||||
#include "titlescreen.h"
|
||||
#include "transition.h"
|
||||
#include <gint/clock.h>
|
||||
#include <gint/display.h>
|
||||
|
@ -44,8 +46,11 @@ int main(void)
|
|||
int timer;
|
||||
int player_return_code;
|
||||
enum TransitionMode transition_previous_mode;
|
||||
enum GameState game_state = Playing;
|
||||
volatile int has_ticked = 1;
|
||||
|
||||
struct TitleScreen titlescreen = titlescreen_init();
|
||||
|
||||
/* load level */
|
||||
level_id = 0;
|
||||
gint_switch(level_load);
|
||||
|
@ -74,65 +79,109 @@ int main(void)
|
|||
while (!has_ticked)
|
||||
sleep();
|
||||
has_ticked = 0;
|
||||
|
||||
/* update */
|
||||
clearevents();
|
||||
if (transition.mode == TransitionNone) {
|
||||
particles_update();
|
||||
player_return_code =
|
||||
player_update(&player);
|
||||
switch (player_return_code) {
|
||||
case 1:
|
||||
level_id += 1;
|
||||
transition = transition_init(
|
||||
H_TRANS_SPD, C_BLUE,
|
||||
TransitionHOut);
|
||||
break;
|
||||
case -1:
|
||||
transition = transition_init(
|
||||
V_TRANS_SPD, C_RED,
|
||||
TransitionVOut);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
switch (game_state) {
|
||||
case TitleScreen:
|
||||
if (titlescreen_update(&titlescreen))
|
||||
game_state = Playing;
|
||||
break;
|
||||
case MainMenu:
|
||||
break;
|
||||
case LevelSelection:
|
||||
break;
|
||||
case Playing:
|
||||
if (transition.mode == TransitionNone) {
|
||||
particles_update();
|
||||
player_return_code =
|
||||
player_update(&player);
|
||||
switch (player_return_code) {
|
||||
case 1:
|
||||
level_id += 1;
|
||||
transition =
|
||||
transition_init(
|
||||
H_TRANS_SPD,
|
||||
C_BLUE,
|
||||
TransitionHOut);
|
||||
break;
|
||||
case -1:
|
||||
transition =
|
||||
transition_init(
|
||||
V_TRANS_SPD,
|
||||
C_RED,
|
||||
TransitionVOut);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
transition_previous_mode =
|
||||
transition_update(&transition);
|
||||
if (transition_previous_mode !=
|
||||
transition.mode &&
|
||||
transition_previous_mode !=
|
||||
TransitionNone) {
|
||||
switch (transition_previous_mode) {
|
||||
case TransitionNone:
|
||||
break;
|
||||
case TransitionHIn:
|
||||
break;
|
||||
case TransitionHOut:
|
||||
LOAD_LEVEL();
|
||||
transition = transition_init(
|
||||
transition.speed,
|
||||
transition.color,
|
||||
TransitionHIn);
|
||||
break;
|
||||
case TransitionVIn:
|
||||
break;
|
||||
case TransitionVOut:
|
||||
LOAD_LEVEL();
|
||||
transition = transition_init(
|
||||
transition.speed,
|
||||
transition.color,
|
||||
TransitionVIn);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
transition_previous_mode =
|
||||
transition_update(&transition);
|
||||
if (transition_previous_mode !=
|
||||
transition.mode &&
|
||||
transition_previous_mode !=
|
||||
TransitionNone) {
|
||||
switch (
|
||||
transition_previous_mode) {
|
||||
case TransitionNone:
|
||||
break;
|
||||
case TransitionHIn:
|
||||
break;
|
||||
case TransitionHOut:
|
||||
LOAD_LEVEL();
|
||||
transition =
|
||||
transition_init(
|
||||
transition
|
||||
.speed,
|
||||
transition
|
||||
.color,
|
||||
TransitionHIn);
|
||||
break;
|
||||
case TransitionVIn:
|
||||
break;
|
||||
case TransitionVOut:
|
||||
LOAD_LEVEL();
|
||||
transition =
|
||||
transition_init(
|
||||
transition
|
||||
.speed,
|
||||
transition
|
||||
.color,
|
||||
TransitionVIn);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
PANIC(
|
||||
"missing game_state case (update)");
|
||||
break;
|
||||
}
|
||||
|
||||
/* draw */
|
||||
dclear(C_BLACK);
|
||||
level_draw();
|
||||
particles_draw();
|
||||
player_draw(player);
|
||||
transition_draw(transition);
|
||||
switch (game_state) {
|
||||
case TitleScreen:
|
||||
titlescreen_draw(titlescreen);
|
||||
break;
|
||||
case MainMenu:
|
||||
break;
|
||||
case LevelSelection:
|
||||
break;
|
||||
case Playing:
|
||||
level_draw();
|
||||
particles_draw();
|
||||
player_draw(player);
|
||||
transition_draw(transition);
|
||||
break;
|
||||
default:
|
||||
PANIC("missing game_state case (draw)");
|
||||
break;
|
||||
}
|
||||
dupdate();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||
/* Copyright (C) 2021 KikooDX */
|
||||
|
||||
#include "titlescreen.h"
|
||||
#include <gint/display.h>
|
||||
|
||||
void titlescreen_draw(struct TitleScreen titlescreen)
|
||||
{
|
||||
dprint_opt(DWIDTH / 2, DHEIGHT * 2 / 3, C_WHITE, C_NONE,
|
||||
DTEXT_CENTER, DTEXT_MIDDLE, "PRESS SHIFT");
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||
/* Copyright (C) 2021 KikooDX */
|
||||
|
||||
#include "titlescreen.h"
|
||||
|
||||
struct TitleScreen titlescreen_init(void)
|
||||
{
|
||||
return (struct TitleScreen){0};
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||
/* Copyright (C) 2021 KikooDX */
|
||||
|
||||
#include "titlescreen.h"
|
||||
#include <gint/keyboard.h>
|
||||
|
||||
/* Return 1 if game state should change. */
|
||||
int titlescreen_update(struct TitleScreen *titlescreen)
|
||||
{
|
||||
if (keydown(KEY_SHIFT)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue