Terminus
level.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <memory>
5 
6 #include <QVector2D>
7 #include <QVector3D>
8 
10 #include <util/perlinnoise.h>
11 #include <util/polyline.h>
13 
14 namespace terminus
15 {
16 
26 class Level
27 {
28 public:
29  Level();
31 
35  void generateLevel();
39  void resetLevel();
40 
46  void configure(const LevelConfiguration & config);
50  const LevelConfiguration & config() const;
51 
56  std::vector<GLfloat> * copyTerrainMapData() const;
67 
68 protected:
69  float trackHeight(float x, float z) const;
70 
71  void generateTracks();
72 
73  void generateTerrainMap();
74  QVector2D terrainDisplacement(float x, float z);
75  void setTrackEnvironment(const CatmullRomSpline & track);
76  float terrainHeight(float x, float z, float fTrack);
77 
78  int tMapIndex(int s, int t) const;
79  void tMapSetXYZ(int i, float dx, float dy, float dz);
80  QVector3D tMapGetXYZ(int i) const;
81  void tMapSetW(int i, float w);
82  float tMapGetW(int i) const;
83 
84 protected:
86 
88 
90  std::unique_ptr<CatmullRomSpline> m_rightTrack;
91  std::unique_ptr<CatmullRomSpline> m_leftTrack;
92 
94  std::vector<GLfloat> m_terrainMapData;
95 
96 };
97 
98 }
void generateTracks()
Definition: level.cpp:100
PerlinNoise m_noise
Definition: level.h:87
void generateLevel()
generate terrain and tracks if not already generated
Definition: level.cpp:34
std::unique_ptr< CatmullRomSpline > m_leftTrack
Definition: level.h:91
The Polyline class implements a sequence of line segments and is used to approximate a real spline...
Definition: polyline.h:14
The LevelConfiguration class contains all information necessary to configure a Level instance as well...
Definition: levelconfiguration.h:25
The Level class is a generator for level data such as terrain geometry and track courses.
Definition: level.h:26
float tMapGetW(int i) const
Definition: level.cpp:256
float trackHeight(float x, float z) const
Definition: level.cpp:90
void setTrackEnvironment(const CatmullRomSpline &track)
Definition: level.cpp:172
LevelConfiguration m_config
Definition: level.h:85
std::vector< GLfloat > * copyTerrainMapData() const
Definition: level.cpp:47
bool m_texGenerated
Definition: level.h:93
bool m_tracksGenerated
Definition: level.h:89
Polyline * createRightTrackCourse() const
Definition: level.cpp:52
The CatmullRomSpline class implements a spline, that is determined by control points that lie on the ...
Definition: catmullromspline.h:14
The PerlinNoise class implements a two dimensional noise function using multiple selectable gradient ...
Definition: perlinnoise.h:16
Polyline * createLeftTrackCourse() const
Definition: level.cpp:71
QVector2D terrainDisplacement(float x, float z)
Definition: level.cpp:164
const LevelConfiguration & config() const
Definition: level.cpp:29
std::unique_ptr< CatmullRomSpline > m_rightTrack
Definition: level.h:90
QVector3D tMapGetXYZ(int i) const
Definition: level.cpp:246
void generateTerrainMap()
Definition: level.cpp:130
Level()
Definition: level.cpp:10
void configure(const LevelConfiguration &config)
set a new configuration and discard the previously generated terrain and tracks if already generated ...
Definition: level.cpp:22
Definition: eventhandler.cpp:18
void tMapSetXYZ(int i, float dx, float dy, float dz)
Definition: level.cpp:240
int tMapIndex(int s, int t) const
Definition: level.cpp:235
float terrainHeight(float x, float z, float fTrack)
Definition: level.cpp:199
void tMapSetW(int i, float w)
Definition: level.cpp:252
std::vector< GLfloat > m_terrainMapData
Definition: level.h:94
void resetLevel()
discard terrain and tracks if already generated
Definition: level.cpp:40