#ifndef GAME_SIM_H
#define GAME_SIM_H
#include <stdint.h>
#include <vector>
enum ObjectClass
{
Terrain,
Obstacle,
Vehicle,
WaterCraft,
Pickup
//Player
};
enum Movement
{
Forward,
Backward,
Right,
Left
};
enum ObjectType
{
// Terrain
Ground,
Road,
Rail,
WaterLane,
Water,
// Obstacle
Tree,
Shrub,
Building,
Rocks,
// Vehicle
Bike,
Car,
Van,
Truck,
Train1,
Train2,
Train3,
Train4,
// WaterCraft
Log,
Boat,
Crocodile,
LilyPad,
SteppingStone,
// Pickup
Coin,
Food,
Life,
Bonus,
// Player
Player
};
class GameObject
{
public:
ObjectType m_type = Ground;
float m_x, m_y, m_z, m_w, m_h, m_d, m_dx, m_dy;
uint32_t m_color; // type
};
typedef std::vector<GameObject> GameObjectList;
class GameSim
{
public:
GameSim();
~GameSim();
void reset();
void movePlayer(Movement a_movement);
bool isGameOver() { return m_gameOver; }
bool hasWon() { return m_won; }
void update(float a_dt);
std::vector<GameObjectList*> objectLists();
private:
void generateLevel();
bool checkGameOver();
GameObjectList m_backgroundLevel;
GameObjectList m_populationLevel;
GameObjectList m_movingObjects;
GameObjectList m_player;
bool m_gameOver;
bool m_won;
};
#endif // GAME_SIM_H