summaryrefslogtreecommitdiff
path: root/Gameplay.cpp
blob: aceca8ffc04a8c3b8c205485322132419aa460ab (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/* **************************************
 * 	Includes							*
 * **************************************/

#include "Gameplay.h"
#include "MouseSpr.i"
#include "Pad.h"
#include "Camera.h"

/* **************************************
 * 	Defines								*
 * **************************************/

/* **************************************
 * 	Global variables					*
 * **************************************/

Player GamePlayers[GAME_MAX_PLAYERS];

/* **************************************
 * 	Local variables						*
 * **************************************/

static const char PauseMenuOption_0[] PROGMEM = "Resume";
static const char PauseMenuOption_1[] PROGMEM = "Quit";
static TYPE_SPRITE MouseSpr;

static const char* const PauseMenuOptions[] PROGMEM = { PauseMenuOption_0,
														PauseMenuOption_1	};

/* **************************************
 * 	Local prototypes					*
 * **************************************/

static void GameCalculations(void);
static void GameGraphics(void);
static bool GamePause(void);
static void GameLoop(void);

void GameInit(void)
{
	for (uint8_t i = 0; i < GAME_MAX_PLAYERS; i++)
	{
		GamePlayers[i].Init();
	}

    GamePlayers[0].setHuman(true);

	MouseSpr.Data = MouseSprData;
	MouseSpr.color = GFX_INVERT;
	MouseSpr.rotation = NOROT;
	MouseSpr.flip = NOFLIP;
	MouseSpr.x = (X_SCREEN_RESOLUTION >> 1) - 4;
	MouseSpr.y = (Y_SCREEN_RESOLUTION >> 1) - 4;

	GfxInit();

	GameLoop();
}

bool GamePause(void)
{
	if (PadButtonReleased(PAD_C) == true)
	{
		uint8_t choice = gb.menu(PauseMenuOptions, 2);

		if (choice != 0)
		{
			return true;
		}
	}

	return false;
}

void GameCalculations(void)
{
	uint8_t i;

	for (i = 0; i < GAME_MAX_PLAYERS; i++)
	{
		GamePlayers[i].Handler();
	}

	if (PadAnyKeyPressed() == true)
	{
		SystemSetRandSeed();
	}
}

void GameGraphics(void)
{
	uint8_t i;

	GfxClearScreen();

	for (i = 0; i < GAME_MAX_PLAYERS; i++)
	{
		GamePlayers[i].DrawHandler();
	}

	GfxDrawSprite(&MouseSpr);
}

void GameLoop(void)
{
	while (1)
	{
		if (GamePause() == true)
		{
			return;
		}

		GameCalculations();

		while (GfxRefreshNeeded() == false);

		GameGraphics();

		SystemIncreaseGlobalTimer();
	}
}