Newer
Older
Import / applications / HighwayDash / ports / GameSim / GameSim.h
#ifndef GAME_SIM_H
#define GAME_SIM_H


#include <stdint.h>
#include <vector>
#include <memory>
#include <limits>
#include "Math.h"


namespace Game {


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;
    uint32_t m_lane;
    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);
    float getTime() { return m_time; }
    int getLaneHeight(int y);
    int getPlayerHeight();

    std::vector<GameObjectList*> objectLists();

    //GameObjectList& carObjectList() { return m_carObjects; }

private:
    void generateLevel();
    bool checkGameOver();
    GameObjectList m_backgroundLevel;
    GameObjectList m_populationLevel;
    GameObjectList m_movingObjects;
    GameObjectList m_player;

    //GameObjectList m_carObjects;
  
    bool m_gameOver;
    bool m_won;
    Math::RandomNumberGenerator m_rng;
    float m_time;
#define LANES 150
    const int lanes = LANES;
    ObjectType laneFlags[LANES];
};


};


#endif // GAME_SIM_H