added options menu and fade-in
This commit is contained in:
parent
851a13ce0d
commit
502fa8a924
11 changed files with 297 additions and 82 deletions
3
Makefile
3
Makefile
|
@ -381,7 +381,8 @@ PROJECT_SOURCE_FILES ?= \
|
||||||
$(PROJECT_SOURCE_PATH)/Gameplay.c \
|
$(PROJECT_SOURCE_PATH)/Gameplay.c \
|
||||||
$(PROJECT_SOURCE_PATH)/Title.c \
|
$(PROJECT_SOURCE_PATH)/Title.c \
|
||||||
$(PROJECT_SOURCE_PATH)/Credits.c \
|
$(PROJECT_SOURCE_PATH)/Credits.c \
|
||||||
$(PROJECT_SOURCE_PATH)/Gameover.c
|
$(PROJECT_SOURCE_PATH)/Gameover.c \
|
||||||
|
$(PROJECT_SOURCE_PATH)/Options.c
|
||||||
|
|
||||||
# Define all object files from source files
|
# Define all object files from source files
|
||||||
OBJS = $(patsubst %.c, %.o, $(PROJECT_SOURCE_FILES))
|
OBJS = $(patsubst %.c, %.o, $(PROJECT_SOURCE_FILES))
|
||||||
|
|
|
@ -4,8 +4,10 @@ A dumb raylib test which you can play [here](https://canneddonuts.itch.io/avoid-
|
||||||
## To-do
|
## To-do
|
||||||
- a build guide
|
- a build guide
|
||||||
- multiple stages
|
- multiple stages
|
||||||
- an options menu
|
|
||||||
- a tutorial
|
- a tutorial
|
||||||
|
|
||||||
|
## Note
|
||||||
|
This games code more specifically 'Main.c' is a retyped version of this [repo](https://github.com/raysan5/raylib-game-template) which is code under the zlib license.
|
||||||
|
|
||||||
## Preview
|
## Preview
|
||||||
![Alt Text](./doc-assets/preview.png)
|
![Alt Text](./doc-assets/preview.png)
|
||||||
|
|
|
@ -12,9 +12,16 @@
|
||||||
#include "Controls.h"
|
#include "Controls.h"
|
||||||
#include "Textures.h"
|
#include "Textures.h"
|
||||||
|
|
||||||
|
int finishfromCreditsScreen = 0;
|
||||||
|
|
||||||
|
void InitCreditsScreen(void)
|
||||||
|
{
|
||||||
|
finishfromCreditsScreen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void UpdateCreditsScreen(void)
|
void UpdateCreditsScreen(void)
|
||||||
{
|
{
|
||||||
if (INPUT_OPTION_PRESSED) currentScreen = TITLE;
|
if (INPUT_OPTION_PRESSED) finishfromCreditsScreen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawCreditsScreen(void)
|
void DrawCreditsScreen(void)
|
||||||
|
@ -27,3 +34,13 @@ void DrawCreditsScreen(void)
|
||||||
DrawText(TextFormat("Build compiled on %s", __DATE__), 10, 310, 30, GREEN);
|
DrawText(TextFormat("Build compiled on %s", __DATE__), 10, 310, 30, GREEN);
|
||||||
DrawText("Press 'ENTER' ", 10, 350, 20, WHITE);
|
DrawText("Press 'ENTER' ", 10, 350, 20, WHITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FinishCreditsScreen(void)
|
||||||
|
{
|
||||||
|
return finishfromCreditsScreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UnloadCreditsScreen(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -11,11 +11,12 @@
|
||||||
#include "Screens.h"
|
#include "Screens.h"
|
||||||
#include "Controls.h"
|
#include "Controls.h"
|
||||||
|
|
||||||
int gameoverSelected = 0;
|
int gameoverSelected = 0, finishfromGameoverScreen = 0;
|
||||||
|
|
||||||
void InitGameoverScreen(void)
|
void InitGameoverScreen(void)
|
||||||
{
|
{
|
||||||
gameoverSelected = 0;
|
gameoverSelected = 0;
|
||||||
|
finishfromGameoverScreen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateGameoverScreen(void)
|
void UpdateGameoverScreen(void)
|
||||||
|
@ -26,10 +27,10 @@ void UpdateGameoverScreen(void)
|
||||||
if (gameoverSelected < -1) gameoverSelected++;
|
if (gameoverSelected < -1) gameoverSelected++;
|
||||||
|
|
||||||
if ((gameoverSelected == 0) && (INPUT_OPTION_PRESSED))
|
if ((gameoverSelected == 0) && (INPUT_OPTION_PRESSED))
|
||||||
currentScreen = GAMEPLAY;
|
finishfromGameoverScreen = 2;
|
||||||
|
|
||||||
if ((gameoverSelected == -1) && (INPUT_OPTION_PRESSED))
|
if ((gameoverSelected == -1) && (INPUT_OPTION_PRESSED))
|
||||||
currentScreen = TITLE;
|
finishfromGameoverScreen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawGameoverScreen(void)
|
void DrawGameoverScreen(void)
|
||||||
|
@ -42,3 +43,13 @@ void DrawGameoverScreen(void)
|
||||||
if (gameoverSelected == -1) DrawText("TITLE", 352, 230, 20, WHITE);
|
if (gameoverSelected == -1) DrawText("TITLE", 352, 230, 20, WHITE);
|
||||||
else DrawText("TITLE", 352, 230, 20, RED);
|
else DrawText("TITLE", 352, 230, 20, RED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FinishGameoverScreen(void)
|
||||||
|
{
|
||||||
|
return finishfromGameoverScreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UnloadGameoverScreen(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -10,12 +10,13 @@
|
||||||
|
|
||||||
#include "Screens.h"
|
#include "Screens.h"
|
||||||
#include "Controls.h"
|
#include "Controls.h"
|
||||||
|
#include "Options.h"
|
||||||
#include "Gameplay.h"
|
#include "Gameplay.h"
|
||||||
#include "Score.h"
|
#include "Score.h"
|
||||||
#include "Timers.h"
|
#include "Timers.h"
|
||||||
#include "Textures.h"
|
#include "Textures.h"
|
||||||
|
|
||||||
int score = 0, bestscore = 0;
|
int score = 0, bestscore = 0, finishfromGameplayScreen = 0;
|
||||||
|
|
||||||
void LoadGamplayScreen(void)
|
void LoadGamplayScreen(void)
|
||||||
{
|
{
|
||||||
|
@ -31,6 +32,8 @@ void LoadGamplayScreen(void)
|
||||||
|
|
||||||
void InitGameplayScreen(void)
|
void InitGameplayScreen(void)
|
||||||
{
|
{
|
||||||
|
finishfromGameplayScreen = 0;
|
||||||
|
|
||||||
SetMasterVolume(0.5);
|
SetMasterVolume(0.5);
|
||||||
|
|
||||||
player.currentframe = 0;
|
player.currentframe = 0;
|
||||||
|
@ -155,8 +158,6 @@ void UpdateiFrameTimer(void)
|
||||||
|
|
||||||
void UpdateGameplayScreen(void)
|
void UpdateGameplayScreen(void)
|
||||||
{
|
{
|
||||||
if (IsKeyPressed(KEY_M)) mute = !mute;
|
|
||||||
|
|
||||||
if (INPUT_OPTION_PRESSED) pause = !pause;
|
if (INPUT_OPTION_PRESSED) pause = !pause;
|
||||||
|
|
||||||
if (!pause) {
|
if (!pause) {
|
||||||
|
@ -220,13 +221,11 @@ void UpdateGameplayScreen(void)
|
||||||
|
|
||||||
|
|
||||||
if (IsKeyPressed(KEY_R)) {
|
if (IsKeyPressed(KEY_R)) {
|
||||||
gameReset();
|
finishfromGameplayScreen = 2;
|
||||||
currentScreen = TITLE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.hp <= 0) {
|
if (player.hp <= 0) {
|
||||||
gameReset();
|
finishfromGameplayScreen = 1;
|
||||||
currentScreen = GAMEOVER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < MAX_SHOOTS; i++) {
|
for (int i = 0; i < MAX_SHOOTS; i++) {
|
||||||
|
@ -357,8 +356,7 @@ void UnloadGameplayScreen()
|
||||||
UnloadTexture(attack_sprite);
|
UnloadTexture(attack_sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gameReset(void)
|
int FinishGameplayScreen(void)
|
||||||
{
|
{
|
||||||
InitGameplayScreen();
|
return finishfromGameplayScreen;
|
||||||
InitGameoverScreen();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,6 @@ Sound fxhit = { 0 };
|
||||||
Sound fxfeather = { 0 };
|
Sound fxfeather = { 0 };
|
||||||
Sound fxboom = { 0 };
|
Sound fxboom = { 0 };
|
||||||
bool pause;
|
bool pause;
|
||||||
bool mute = false;
|
|
||||||
bool player_in;
|
bool player_in;
|
||||||
bool enemy_hurt;
|
bool enemy_hurt;
|
||||||
int ammo = 0;
|
int ammo = 0;
|
||||||
|
|
166
src/Main.c
166
src/Main.c
|
@ -9,6 +9,7 @@
|
||||||
#include "../include/raylib.h"
|
#include "../include/raylib.h"
|
||||||
|
|
||||||
#include "Screens.h"
|
#include "Screens.h"
|
||||||
|
#include "Options.h"
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
#include <emscripten/emscripten.h>
|
#include <emscripten/emscripten.h>
|
||||||
|
@ -18,6 +19,12 @@
|
||||||
static const int screenWidth = 800;
|
static const int screenWidth = 800;
|
||||||
static const int screenHeight = 450;
|
static const int screenHeight = 450;
|
||||||
|
|
||||||
|
static float transAlpha = 0.0f;
|
||||||
|
static bool onTransition = false;
|
||||||
|
static bool transFadeOut = false;
|
||||||
|
static int transFromScreen = -1;
|
||||||
|
static int transToScreen = -1;
|
||||||
|
|
||||||
GameScreen currentScreen = 0;
|
GameScreen currentScreen = 0;
|
||||||
|
|
||||||
Texture2D background;
|
Texture2D background;
|
||||||
|
@ -29,10 +36,11 @@ Texture2D attack_sprite;
|
||||||
|
|
||||||
// Game functions
|
// Game functions
|
||||||
static void gameSetup(void);
|
static void gameSetup(void);
|
||||||
static void updateGame(void);
|
static void update_draw_frame(void);
|
||||||
static void drawGame(void);
|
|
||||||
static void gameLoop(void);
|
|
||||||
static void unloadGame(void);
|
static void unloadGame(void);
|
||||||
|
static void transition_to_screen(int screen);
|
||||||
|
static void update_transition(void);
|
||||||
|
static void draw_transition(void);
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
@ -43,11 +51,11 @@ int main(void)
|
||||||
gameSetup();
|
gameSetup();
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_main_loop(gameLoop, 60, 1);
|
emscripten_set_main_loop(update_draw_frame, 60, 1);
|
||||||
#else
|
#else
|
||||||
SetTargetFPS(60);
|
SetTargetFPS(60);
|
||||||
|
|
||||||
while (!WindowShouldClose()) gameLoop();
|
while (!WindowShouldClose()) update_draw_frame();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unloadGame();
|
unloadGame();
|
||||||
|
@ -63,52 +71,134 @@ void gameSetup(void)
|
||||||
{
|
{
|
||||||
// asset loading & setting of variable values
|
// asset loading & setting of variable values
|
||||||
currentScreen = TITLE;
|
currentScreen = TITLE;
|
||||||
|
background = LoadTexture("assets/gfx/background.png");
|
||||||
LoadGamplayScreen();
|
|
||||||
InitGameplayScreen();
|
|
||||||
InitTitleScreen();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateGame(void)
|
|
||||||
{
|
|
||||||
// code that runs as long as the program is running
|
|
||||||
if ((IsKeyDown(KEY_LEFT_ALT)) && (IsKeyPressed(KEY_F))) ToggleFullscreen();
|
|
||||||
|
|
||||||
switch (currentScreen) {
|
static void transition_to_screen(int screen)
|
||||||
case TITLE: UpdateTitleScreen(); break;
|
{
|
||||||
case GAMEPLAY: UpdateGameplayScreen(); break;
|
onTransition = true;
|
||||||
case GAMEOVER: UpdateGameoverScreen(); break;
|
transFadeOut = false;
|
||||||
case CREDITS: UpdateCreditsScreen(); break;
|
transFromScreen = currentScreen;
|
||||||
default: break;
|
transToScreen = screen;
|
||||||
|
transAlpha = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void update_transition(void)
|
||||||
|
{
|
||||||
|
if (!transFadeOut) {
|
||||||
|
transAlpha += 0.05f;
|
||||||
|
|
||||||
|
if (transAlpha > 1.01f) {
|
||||||
|
transAlpha = 1.0f;
|
||||||
|
|
||||||
|
switch (transFromScreen) {
|
||||||
|
case TITLE: UnloadTitleScreen(); break;
|
||||||
|
case GAMEPLAY: UnloadGameplayScreen(); break;
|
||||||
|
case GAMEOVER: UnloadGameoverScreen(); break;
|
||||||
|
case CREDITS: UnloadCreditsScreen(); break;
|
||||||
|
case OPTIONS: UnloadOptionsScreen(); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (transToScreen) {
|
||||||
|
case TITLE: InitTitleScreen(); break;
|
||||||
|
case GAMEPLAY: LoadGamplayScreen(); InitGameplayScreen(); break;
|
||||||
|
case GAMEOVER: InitGameoverScreen(); break;
|
||||||
|
case CREDITS: InitCreditsScreen(); break;
|
||||||
|
case OPTIONS: InitOptionsScreen(); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentScreen = transToScreen;
|
||||||
|
|
||||||
|
transFadeOut = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
transAlpha -= 0.02f;
|
||||||
|
|
||||||
|
if (transAlpha < -0.01f) {
|
||||||
|
transAlpha = 0.0f;
|
||||||
|
transFadeOut = false;
|
||||||
|
onTransition = false;
|
||||||
|
transFromScreen = -1;
|
||||||
|
transToScreen = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawGame(void)
|
static void draw_transition(void)
|
||||||
{
|
{
|
||||||
// code to render the game to the game window
|
DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(BLACK, transAlpha));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void update_draw_frame(void)
|
||||||
|
{
|
||||||
|
if (IsKeyPressed(KEY_M)) mute = !mute;
|
||||||
|
if ((IsKeyDown(KEY_LEFT_ALT)) && (IsKeyPressed(KEY_F))) { ToggleFullscreen(); fullscreen = !fullscreen; }
|
||||||
|
|
||||||
|
if (!onTransition) {
|
||||||
|
switch (currentScreen) {
|
||||||
|
case TITLE: {
|
||||||
|
UpdateTitleScreen();
|
||||||
|
|
||||||
|
if (FinishTitleScreen() == 1) transition_to_screen(CREDITS);
|
||||||
|
else if (FinishTitleScreen() == 2) transition_to_screen(GAMEPLAY);
|
||||||
|
else if (FinishTitleScreen() == 3) transition_to_screen(OPTIONS);
|
||||||
|
} break;
|
||||||
|
case CREDITS: {
|
||||||
|
UpdateCreditsScreen();
|
||||||
|
|
||||||
|
if (FinishCreditsScreen() == 1) transition_to_screen(TITLE);
|
||||||
|
} break;
|
||||||
|
case GAMEPLAY: {
|
||||||
|
UpdateGameplayScreen();
|
||||||
|
|
||||||
|
if (FinishGameplayScreen() == 1) transition_to_screen(GAMEOVER);
|
||||||
|
else if (FinishGameplayScreen() == 2) transition_to_screen(TITLE);
|
||||||
|
} break;
|
||||||
|
case GAMEOVER: {
|
||||||
|
UpdateGameoverScreen();
|
||||||
|
|
||||||
|
if (FinishGameoverScreen() == 1) transition_to_screen(TITLE);
|
||||||
|
else if (FinishGameoverScreen() == 2) transition_to_screen(GAMEPLAY);
|
||||||
|
} break;
|
||||||
|
case OPTIONS: {
|
||||||
|
UpdateOptionsScreen();
|
||||||
|
|
||||||
|
if (FinishOptionsScreen() == 1) transition_to_screen(TITLE);
|
||||||
|
} break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
} else update_transition();
|
||||||
|
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
switch (currentScreen) {
|
switch (currentScreen) {
|
||||||
case TITLE: DrawTitleScreen(); break;
|
case TITLE: DrawTitleScreen(); break;
|
||||||
case GAMEPLAY: DrawGameplayScreen(); break;
|
case CREDITS: DrawCreditsScreen(); break;
|
||||||
case GAMEOVER: DrawGameoverScreen(); break;
|
case GAMEPLAY: DrawGameplayScreen(); break;
|
||||||
case CREDITS: DrawCreditsScreen(); break;
|
case GAMEOVER: DrawGameoverScreen(); break;
|
||||||
default: break;
|
case OPTIONS: DrawOptionsScreen(); break;
|
||||||
}
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onTransition) draw_transition();
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
void gameLoop(void)
|
static void unloadGame(void)
|
||||||
{
|
{
|
||||||
updateGame();
|
switch (currentScreen) {
|
||||||
drawGame();
|
case TITLE: UnloadTitleScreen(); break;
|
||||||
}
|
case GAMEPLAY: UnloadGameplayScreen(); break;
|
||||||
|
case GAMEOVER: UnloadGameoverScreen(); break;
|
||||||
void unloadGame(void)
|
case CREDITS: UnloadCreditsScreen(); break;
|
||||||
{
|
case OPTIONS: UnloadOptionsScreen(); break;
|
||||||
UnloadGameplayScreen();
|
default: break;
|
||||||
UnloadTitleScreen();
|
}
|
||||||
}
|
}
|
||||||
|
|
68
src/Options.c
Normal file
68
src/Options.c
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
- Avoid ~ a game by Canneddonuts
|
||||||
|
- Filename ~ Options.c
|
||||||
|
- Author ~ Return0ne
|
||||||
|
- 2022
|
||||||
|
- *no license*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../include/raylib.h"
|
||||||
|
|
||||||
|
#include "Screens.h"
|
||||||
|
#include "Textures.h"
|
||||||
|
#include "Controls.h"
|
||||||
|
#include "Options.h"
|
||||||
|
|
||||||
|
int optionsSelected = 0, finishfromOptionsScreen = 0;
|
||||||
|
|
||||||
|
void InitOptionsScreen(void)
|
||||||
|
{
|
||||||
|
finishfromOptionsScreen = 0;
|
||||||
|
optionsSelected = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateOptionsScreen(void)
|
||||||
|
{
|
||||||
|
if (INPUT_UP_PRESSED) optionsSelected++;
|
||||||
|
if (INPUT_DOWN_PRESSED) optionsSelected--;
|
||||||
|
if (optionsSelected > 0) optionsSelected--;
|
||||||
|
if (optionsSelected < -2) optionsSelected++;
|
||||||
|
|
||||||
|
if ((optionsSelected == 0) && (INPUT_OPTION_PRESSED)) finishfromOptionsScreen = 1;
|
||||||
|
if ((optionsSelected == -1) && (INPUT_OPTION_PRESSED)) mute = !mute;
|
||||||
|
if ((optionsSelected == -2) && (INPUT_OPTION_PRESSED)) { ToggleFullscreen(); fullscreen = !fullscreen; }
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawOptionsScreen(void)
|
||||||
|
{
|
||||||
|
DrawTexture(background, 0, 0, DARKGRAY);
|
||||||
|
DrawText("OPTIONS", 300, 20, 50, BLUE);
|
||||||
|
if (optionsSelected == 0) DrawText("Back", 20, 200, 20, WHITE);
|
||||||
|
else DrawText("Back", 20, 200, 20, BLUE);
|
||||||
|
if (optionsSelected == -1) {
|
||||||
|
DrawText("Mute", 20, 220, 20, WHITE);
|
||||||
|
DrawText(TextFormat("<%i>", mute), 200, 220, 20, WHITE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DrawText("Mute", 20, 220, 20, BLUE);
|
||||||
|
DrawText(TextFormat("<%i>", mute), 200, 220, 20, BLUE);
|
||||||
|
}
|
||||||
|
if (optionsSelected == -2) {
|
||||||
|
DrawText("Fullscreen", 20, 240, 20, WHITE);
|
||||||
|
DrawText(TextFormat("<%i>", fullscreen), 200, 240, 20, WHITE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DrawText("Fullscreen", 20, 240, 20, BLUE);
|
||||||
|
DrawText(TextFormat("<%i>", fullscreen), 200, 240, 20, BLUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UnloadOptionsScreen(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int FinishOptionsScreen(void)
|
||||||
|
{
|
||||||
|
return finishfromOptionsScreen;
|
||||||
|
}
|
15
src/Options.h
Normal file
15
src/Options.h
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
/*
|
||||||
|
- Avoid ~ a game by Canneddonuts
|
||||||
|
- Filename ~ Options.h
|
||||||
|
- Author ~ Return0ne
|
||||||
|
- 2022
|
||||||
|
- *no license*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef OPTIONS_HEADER
|
||||||
|
#define OPTIONS_HEADER
|
||||||
|
|
||||||
|
bool mute;
|
||||||
|
bool fullscreen;
|
||||||
|
|
||||||
|
#endif
|
|
@ -9,31 +9,39 @@
|
||||||
#ifndef SCREENS_HEADER
|
#ifndef SCREENS_HEADER
|
||||||
#define SCREENS_HEADER
|
#define SCREENS_HEADER
|
||||||
|
|
||||||
typedef enum GameScreen { TITLE = 0, GAMEPLAY, GAMEOVER, CREDITS } GameScreen;
|
typedef enum GameScreen { TITLE = 0, GAMEPLAY, GAMEOVER, CREDITS, OPTIONS } GameScreen;
|
||||||
|
|
||||||
extern GameScreen currentScreen;
|
extern GameScreen currentScreen;
|
||||||
|
|
||||||
void gameReset(void);
|
|
||||||
|
|
||||||
void InitTitleScreen(void);
|
void InitTitleScreen(void);
|
||||||
void UpdateTitleScreen(void);
|
void UpdateTitleScreen(void);
|
||||||
void DrawTitleScreen(void);
|
void DrawTitleScreen(void);
|
||||||
void UnloadTitleScreen(void);
|
void UnloadTitleScreen(void);
|
||||||
|
int FinishTitleScreen(void);
|
||||||
|
|
||||||
void InitGameplayScreen(void);
|
void InitGameplayScreen(void);
|
||||||
void UpdateGameplayScreen(void);
|
void UpdateGameplayScreen(void);
|
||||||
void DrawGameplayScreen(void);
|
void DrawGameplayScreen(void);
|
||||||
void UnloadGameplayScreen(void);
|
void UnloadGameplayScreen(void);
|
||||||
void LoadGamplayScreen(void);
|
void LoadGamplayScreen(void);
|
||||||
|
int FinishGameplayScreen(void);
|
||||||
|
|
||||||
|
void InitCreditsScreen(void);
|
||||||
void UpdateCreditsScreen(void);
|
void UpdateCreditsScreen(void);
|
||||||
void DrawCreditsScreen(void);
|
void DrawCreditsScreen(void);
|
||||||
|
void UnloadCreditsScreen(void);
|
||||||
|
int FinishCreditsScreen(void);
|
||||||
|
|
||||||
void InitGameoverScreen(void);
|
void InitGameoverScreen(void);
|
||||||
void UpdateGameoverScreen(void);
|
void UpdateGameoverScreen(void);
|
||||||
void DrawGameoverScreen(void);
|
void DrawGameoverScreen(void);
|
||||||
|
void UnloadGameoverScreen(void);
|
||||||
|
int FinishGameoverScreen(void);
|
||||||
|
|
||||||
|
void InitOptionsScreen(void);
|
||||||
|
void UpdateOptionsScreen(void);
|
||||||
|
void DrawOptionsScreen(void);
|
||||||
|
void UnloadOptionsScreen(void);
|
||||||
|
int FinishOptionsScreen(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
50
src/Title.c
50
src/Title.c
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
- Avoid ~ a game by Canneddonuts
|
- Avoid ~ a game by Canneddonuts
|
||||||
- Filename ~ Title.h
|
- Filename ~ Title.c
|
||||||
- Author ~ Return0ne
|
- Author ~ Return0ne
|
||||||
- 2022
|
- 2022
|
||||||
- *no license*
|
- *no license*
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
#include "Score.h"
|
#include "Score.h"
|
||||||
#include "Textures.h"
|
#include "Textures.h"
|
||||||
|
|
||||||
int titleSelected = 0;
|
int titleSelected = 0, finishfromTitleScreen = 0;
|
||||||
|
|
||||||
void DrawScore(void)
|
void DrawScore(void)
|
||||||
{
|
{
|
||||||
|
@ -27,9 +27,10 @@ void DrawScore(void)
|
||||||
DrawText(TextFormat("BEST: %i", bestscore), 600, 0, 30, BLUE);
|
DrawText(TextFormat("BEST: %i", bestscore), 600, 0, 30, BLUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InitTitleScreen(void)
|
void InitTitleScreen(void)
|
||||||
{
|
{
|
||||||
background = LoadTexture("assets/gfx/background.png");
|
finishfromTitleScreen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateTitleScreen(void)
|
void UpdateTitleScreen(void)
|
||||||
|
@ -39,36 +40,41 @@ void UpdateTitleScreen(void)
|
||||||
if (titleSelected > 0) titleSelected--;
|
if (titleSelected > 0) titleSelected--;
|
||||||
if (titleSelected < -2) titleSelected++;
|
if (titleSelected < -2) titleSelected++;
|
||||||
|
|
||||||
if ((titleSelected == 0) && (INPUT_OPTION_PRESSED)) currentScreen = GAMEPLAY;
|
if ((titleSelected == 0) && (INPUT_OPTION_PRESSED)) finishfromTitleScreen = 2;
|
||||||
if ((titleSelected == -1) && (INPUT_OPTION_PRESSED)) currentScreen = CREDITS;
|
if ((titleSelected == -1) && (INPUT_OPTION_PRESSED)) finishfromTitleScreen = 1;
|
||||||
if ((titleSelected == -2) && (INPUT_OPTION_PRESSED)) OpenURL("https://canneddonuts.itch.io/");
|
if ((titleSelected == -2) && (INPUT_OPTION_PRESSED)) finishfromTitleScreen = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawTitleScreen(void)
|
void DrawTitleScreen(void)
|
||||||
{
|
{
|
||||||
DrawTexture(background, 0, 0, GRAY);
|
DrawTexture(background, 0, 0, GRAY);
|
||||||
DrawText("Controls", 10, 10, 30, BLUE);
|
|
||||||
DrawScore();
|
|
||||||
DrawText("Press the arrow keys or 'DPAD' to move and 'X' to dash", 10, 40, 10, WHITE);
|
|
||||||
DrawText("Press 'ENTER' or 'START' to pause", 10, 60, 10, WHITE);
|
|
||||||
DrawText("Press 'M' to mute", 10, 80, 10, WHITE);
|
|
||||||
DrawText("Press 'Left-ALT' + 'F' for full screen", 10, 100, 10, WHITE);
|
|
||||||
DrawText("Press 'R' to restart", 10, 120, 10, WHITE);
|
|
||||||
DrawText("Press 'ENTER' or 'START' to select an option", 10, 140, 10, WHITE);
|
|
||||||
DrawText("Press 'X' or 'A' on a gamepad to shoot", 10, 160, 10, WHITE);
|
|
||||||
DrawText("Avoid", 330, 20, 50, BLUE);
|
DrawText("Avoid", 330, 20, 50, BLUE);
|
||||||
|
DrawText("Controls", 10, 10, 30, BLUE);
|
||||||
|
DrawScore();
|
||||||
|
DrawText("Press the arrow keys or 'DPAD' to move and 'X' to dash", 10, 40, 10, WHITE);
|
||||||
|
DrawText("Press 'ENTER' or 'START' to pause", 10, 60, 10, WHITE);
|
||||||
|
DrawText("Press 'M' to mute", 10, 80, 10, WHITE);
|
||||||
|
DrawText("Press 'Left-ALT' + 'F' for full screen", 10, 100, 10, WHITE);
|
||||||
|
DrawText("Press 'R' to restart", 10, 120, 10, WHITE);
|
||||||
|
DrawText("Press 'ENTER' or 'START' to select an option", 10, 140, 10, WHITE);
|
||||||
|
DrawText("Press 'X' or 'A' on a gamepad to shoot", 10, 160, 10, WHITE);
|
||||||
// DrawText("Ver: 0.1", 680, 420, 30, WHITE);
|
// DrawText("Ver: 0.1", 680, 420, 30, WHITE);
|
||||||
if (titleSelected == 0) DrawText("PLAY", 360, 220, 20, WHITE);
|
if (titleSelected == 0) DrawText("PLAY", 360, 220, 20, WHITE);
|
||||||
else DrawText("PLAY", 360, 220, 20, BLUE);
|
else DrawText("PLAY", 360, 220, 20, BLUE);
|
||||||
|
|
||||||
if (titleSelected == -1) DrawText("CREDITS", 340, 240, 20, WHITE);
|
if (titleSelected == -1) DrawText("CREDITS", 340, 240, 20, WHITE);
|
||||||
else DrawText("CREDITS", 340, 240, 20, BLUE);
|
else DrawText("CREDITS", 340, 240, 20, BLUE);
|
||||||
|
|
||||||
if (titleSelected == -2) DrawText("MORE GAMES", 320, 260, 20, WHITE);
|
if (titleSelected == -2) DrawText("OPTIONS", 340, 260, 20, WHITE);
|
||||||
else DrawText("MORE GAMES", 320, 260, 20, BLUE);
|
else DrawText("OPTIONS", 340, 260, 20, BLUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnloadTitleScreen(void)
|
void UnloadTitleScreen(void)
|
||||||
{
|
{
|
||||||
UnloadTexture(background);
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int FinishTitleScreen(void)
|
||||||
|
{
|
||||||
|
return finishfromTitleScreen;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue