54 char _strFileName[256];
67 M_BOOL _bIntroPresent;
70 char _strNextLevel[64];
84 laPoint3 _ptViewPosition;
89 double *_arCurviture_ZOffsets;
90 double *_arCurviture_Angles;
91 double *_arCurviture_Scales;
93 void _curviture_precompute();
102 void _save_profile(
char* strName);
109 r->transTranslate( -1 * _ptViewPosition );
125 void load(
char* strFile, M_BOOL bReload=M_FALSE);
126 void create(
unsigned nSegCnt,
laTileset *pTS);
134 void forceCompleted() {
137 _bCompleted = M_TRUE;
138 _save_profile( laSystemIntegrator::getSettings()->load_player_name );
143 _save_profile( laSystemIntegrator::getSettings()->load_player_name );
146 inline M_BOOL isCompleted() {
return _bCompleted; };
150 inline char* fileName() {
return _strFileName; }
151 inline char*
name() {
return _strName; }
152 inline laTileset* getTS() { ASSERT(_pTileSet,
"Nil tileset");
return _pTileSet; }
156 inline unsigned segmentCount()
const {
return _nSegCnt; };
158 inline unsigned segmentIndex(
double x)
const {
159 int ix = (int) floor( x/(
M_UNIT*M_SEGW) );
160 return (
unsigned) M_CLAMP(0, (
int)segmentCount()-1, ix);
163 inline laSegment* segmentAtIndex(
int ix) {
165 ix = M_CLAMP(0, (
int)segmentCount()-1, ix);
168 for(
int i=0; i<ix; i++) {
170 ASSERT(p,
"Nil segmnent, wrong segment count?");
175 inline laSegment* segmentAtPixel(
double dx) {
176 return segmentAtIndex( segmentIndex(dx) );
182 inline laTile* laLevel::getTile(laPoint3 pos) {
183 unsigned index = segmentIndex(pos.x());
186 pos.x( M_CLAMP(0, segmentCount()*M_SEGW*
M_UNIT -
M_UNIT, pos.x()) );
187 return ps->get( pos - laPoint3(index*M_SEGW*
M_UNIT, 0) );
190 inline laTile* laLevel::getTile(
int ix,
int iy )
192 int nSegIndex = M_CLAMP(0, (
int)_nSegCnt-1, ix/M_SEGW);
194 laSegment* ps = segmentAtIndex(nSegIndex);
195 return ps->get( ix - nSegIndex*M_SEGW, iy);
200 inline unsigned getObjCnt()
const{
return _nObjCnt; }
202 inline class laPlayer* getPlayer()
const{
203 ASSERT(_nObjCnt>0,
"Nil object list");
207 inline class laObject* getObject(
unsigned i)
const{
208 ASSERT(i<_nObjCnt,
"Nil object list");
209 return (_arObjects[i]);
216 inline void scroll(laPoint3 ptViewPos) { _ptViewPosition = ptViewPos; }
217 inline void zoom(
double zoom) { _dZoom = zoom; }
218 inline double zoom() {
return _dZoom; }
222 void drawInterface(
laRenderer *r, laPoint3 ptBasePos);
235 void animate(laTimer &t,
laSegment* pfirst,
unsigned nSegments);
239 inline double terrainZOffset(
long int nX)
const{
240 return _arCurviture_ZOffsets[ M_CLAMP(0, (
int)_nSegCnt*M_SEGW-1, nX) ];
243 inline double terrainAngle(
long int nX)
const{
244 return _arCurviture_Angles[ M_CLAMP(0, (
int)_nSegCnt*M_SEGW-1, nX) ];
247 inline double terrainScale(
long int nX)
const{
248 return _arCurviture_Scales[ M_CLAMP(0, (
int)_nSegCnt*M_SEGW-1, nX) ];
251 inline double terrainZOffset_atPixel(
double x )
const{
252 double div = x/
M_UNIT, dw = ceil(div)-div;
253 return terrainZOffset( floor(div) )*dw + terrainZOffset( ceil(div) )*(1-dw);
256 inline double terrainAngle_atPixel(
double x )
const{
257 double div = x/
M_UNIT, dw = ceil(div)-div;
258 return M_R2D( terrainAngle(floor(div) )*dw + terrainAngle( ceil(div) )*(1-dw) );
263 M_BOOL isIntroPresent() {
return _bIntroPresent; }
264 M_BOOL isIntroOver() {
return _bIntroOver; }
265 void introOver(M_BOOL bOver = M_TRUE) { _bIntroOver = bOver; }
267 char* nextLevel() {
return strcmp(_strNextLevel,
"none") ? _strNextLevel : NULL; }
271 aiPercepts _perceptsGlobal;
272 inline aiPercepts *getGlobalPercepts() {
return &_perceptsGlobal; }
276 laTexture* getNoiseTex() {
return _pNoiseTex; };
279 #endif //#ifndef M_LEVEL_H
Level Terrain Building-block.
#define M_R2D(r)
Convert radians to degrees.
#define M_UNIT
Unit of 1 meter.
#define M_MAXOBJCNT
Count limitations.
Virtual interface for the Engine graphics renderer.
Base Class for Level Objects.
virtual std::string name()=0
Abstract naming method.