-
Notifications
You must be signed in to change notification settings - Fork 1
/
GameStructs.h
205 lines (164 loc) · 4.53 KB
/
GameStructs.h
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
//
// Created by wiskiw on 01.12.17.
//
#include <GL/glut.h>
#include "PREFERENCES.h"
#ifndef COURSE_PAPER_GAME_STRUCTS_H
#define COURSE_PAPER_GAME_STRUCTS_H
// SW_ - Star Wars
// SW_State = -1 - undefined
enum GameState {
GAME_STATE_MAIN_MENU, GAME_STATE_PLAY, GAME_STATE_PAUSE_MENU, GAME_STATE_ADD_NEW_RECORD,
GAME_STATE_RECORD_LIST, GAME_STATE_GAME_OVER_SCREEN, GAME_STATE_GAME_OVER_NEW_RECORD_SCREEN
};
typedef int SW_State;
typedef int SW_Type;
struct SW_Color {
GLubyte R = 0;
GLubyte G = 0;
GLubyte B = 0;
GLubyte A = 255;
};
struct SW_Speed {
float x = 0;
float y = 0;
};
struct SW_Pos {
float x = 0;
float y = 0;
float z = 0;
};
struct SW_Borders {
float leftBottomX;
float leftBottomY;
float rightTopX;
float rightTopY;
};
struct SW_Star {
SW_Pos pos;
SW_Speed speed;
int color = 0;
float size = 1;
};
enum BulletState {
BULLET_STATE_NORMAL, BULLET_STATE_UNDEFINED
};
struct SW_Bullet {
SW_Color color = {0, 255, 0};
SW_Pos pos;
SW_Speed speed;
SW_State state = BULLET_STATE_NORMAL;
float damage;
};
enum GunState {
GUN_STATE_OK, GUN_STATE_RELOAD, GUN_STATE_SHOOTING_DELAY,
};
struct SW_Gun {
int waitBeforeShoot = 0; // переменная для хранения оставшихся тиков до выстрела
int gunSpeed; // тики между выстрелами
int reloadTicks; // количество тиков для перезарядки
int ammorSize; // количество патронов в обойме
int ammorLeft = 0; // количество оставшихся патронов в обойме
SW_Bullet bullet;
SW_State state = GUN_STATE_OK;
// state 1 - ready
// state 2 - reload
};
enum EnemyState {
ENEMY_STATE_GOING_LEFT, ENEMY_STATE_GOING_RIGHT, ENEMY_STATE_STAY_FORWARD, ENEMY_STATE_UNDEFINED
};
struct SW_Enemy {
SW_Pos pos;
SW_Pos gunPosValue; // относительно центра родителя;
SW_Speed speed;
SW_Type type;
unsigned int textureIndex = 0;
SW_Borders hitBox;
float health;
float originHealth;
SW_Gun gun;
int score = 0;
EnemyState state = ENEMY_STATE_UNDEFINED;
unsigned int dropChance = 0; // 1 min - 10 max
unsigned int spawnChance = 0; // 1 rarely - 10 often
};
struct SW_Enemy_Map {
float enemiesHealth = 0; // здоровье всех врагов на поле
const static int maxNumber = PREF_ENEMY_BUFFER_SIZE;
SW_Enemy list[maxNumber];
int number;
};
enum PlayerState {
PLAYER_STATE_GOING_LEFT, PLAYER_STATE_GOING_RIGHT, PLAYER_STATE_STAY_FORWARD,
};
struct SW_Player {
SW_Borders hitBox;
SW_Gun gun;
SW_State state = PLAYER_STATE_STAY_FORWARD;
float health;
SW_Pos pos;
SW_Speed speed;
};
struct SW_Planet {
SW_Pos pos;
SW_Speed speed;
int textureIndex = -1;
float size = 1;
};
struct SW_Background {
SW_Type type;
const static int starNumber = PREF_STARS_NUMBER;
SW_Star stars[starNumber];
SW_Planet planet;
};
struct SW_Bullet_Map {
const static int maxNumber = PREF_BULLET_BUFFER_SIZE;
SW_Bullet list[maxNumber];
};
enum DropState {
DROP_STATE_NORMAL, DROP_STATE_UNDEFINED
};
struct SW_Drop {
unsigned int chance = 0; // 1 min - 10 max
int timeToLive = -1; // -1 пока есть место в буфере
int livingTime = 0; // сколько прожил после падения
SW_Type type;
DropState state = DROP_STATE_UNDEFINED;
SW_Pos pos;
SW_Borders hitBox;
float scaleState = 1;
bool scaleGrownUp = true;
};
struct SW_Drop_Map {
const static int maxNumber = PREF_DROP_BUFFER_SIZE;
SW_Drop list[maxNumber];
};
enum RecordType {
RECORD_TYPE_OK = 'k', RECORD_TYPE_UNDEFINED = 'u'
};
struct SW_Record {
RecordType type = RECORD_TYPE_UNDEFINED;
char name[PREF_RECORD_LIST_MAX_NAME_LENGTH + 1] = "";
int score = 0;
};
struct GameFieldStruct {
unsigned long int globalTickTimer = 0;
float windowX = 0;
float windowY = 0;
// состояние
GameState gameState = GAME_STATE_MAIN_MENU;
int difficult;
int score = 0;
// TODO: DEBUG ON:Y
int positionInRecordTable = PREF_RECORD_LIST_SIZE - 4;
// границы игрового поля
SW_Borders gameBorders;
SW_Borders interfaceBorders;
SW_Background background;
SW_Bullet_Map bulletMap;
SW_Enemy_Map enemyMap;
SW_Drop_Map dropMap;
SW_Player player;
SW_Record recordList[PREF_RECORD_LIST_SIZE];
};
#endif //COURSE_PAPER_GAME_STRUCTS_H