36 #include "Core-Level-JR.h"
54 laTile::~laTile(
void){
67 fp->readUnsigned(&_nTileIndex, M_FALSE);
69 ASSERT(_pTileset,
"Nil tileset");
70 ASSERT( _pTileset->getElementCnt() >_nTileIndex,
71 "Tile index %u exceeds tileset size %u", _nTileIndex, _pTileset->getElementCnt());
73 _pTile = _pTileset->getElement(_nTileIndex);
80 unsigned nTrap = _pTileset->getElementIndex( _pTile->getText(
"trap-name") );
81 laPropertyList* pTrapElem = _pTileset->getElement( nTrap );
86 _pTrap->load( pTrapElem );
88 _rgbTrap = pTrapElem->getColor(
"color");
89 _texTrap.load( pTrapElem->getText(
"texture") );
95 _pfxTrap =
new fxParticleSystem();
96 _pfxTrap->create(pTrapElem->getFx(
"fx")->parameters);
98 _pfxTrap->parameters.gen_linearEmitter = M_TRUE;
99 _pfxTrap->lnEmitter.origin = laPoint3(0, -
M_UNIT*1.5,
M_UNIT*0.4);
101 catch(laError_PropertyNotDefined&){ _pTrap = NULL; _pfxTrap = NULL; };
107 ASSERT(_pTile,
"Nil tile");
108 _pTile->drawGeometry(r);
114 void laTile::drawDynamicGeometry(
laRenderer *r)
116 PROFILE_REN(laTile_drawDynamicGeometry);
117 ASSERT(_pTile,
"Nil tile TS object");
121 double dOffsetDelta = _pSegment->terrainZOffset(_nSegX) - _pSegment->terrainZOffset(_nSegX+1);
122 double dLenght = sqrt(
M_UNIT*
M_UNIT + dOffsetDelta*dOffsetDelta );
124 double y0 = _pSegment->getWave(_nSegX)*WAVE_AMPLITUDE - M_LAVASURFACE_OFFSET;
125 double y1 = _pSegment->getWave(_nSegX+1)*WAVE_AMPLITUDE - M_LAVASURFACE_OFFSET;
127 double an0 = _pSegment->terrainAngle(_nSegX-1);
128 double an1 = _pSegment->terrainAngle(_nSegX);
129 double an2 = _pSegment->terrainAngle(_nSegX+1);
130 double sin1=sin(0.5*(an0-an1)), cos1=cos(0.5*(an0-an1));
131 double sin2=sin(0.5*(an2-an1)), cos2=cos(0.5*(an2-an1));
133 double v = _pTileset->getAnimatedOffset()*0.1;
138 laPoint3 ptStart(0, y0,
M_UNIT/2.0);
139 laPoint3 ptEnd(dLenght, y1,
M_UNIT/2.0);
141 *(pquad++) = ptStart + 0.5*
M_UNIT*laPoint3(sin1, 0, cos1);
142 *(pquad++) = ptStart - 0.5*
M_UNIT*laPoint3(sin1, 0, cos1);
143 *(pquad++) = ptEnd - 0.5*
M_UNIT*laPoint3(sin2, 0, cos2);
144 *(pquad++) = ptEnd + 0.5*
M_UNIT*laPoint3(sin2, 0, cos2);
151 r->styleSet( _rgbTrap );
166 ASSERT(_pTile,
"Nil tile TS object");
172 double dCurrentOffset = _pSegment->terrainZOffset( _nSegX );
173 double dNextOffset = _pSegment->terrainZOffset( _nSegX+1 );
174 double _y0 = _pSegment->getWave( _nSegX )*WAVE_AMPLITUDE;
175 double _y1 = _pSegment->getWave( _nSegX+1 )*WAVE_AMPLITUDE;
177 _pfxTrap->lnEmitter.vector[0] =
M_UNIT;
178 _pfxTrap->lnEmitter.vector[2] = dNextOffset - dCurrentOffset;
179 _pfxTrap->lnEmitter.vector[1] = _y1 - _y0;
182 r->transTranslate( laPoint3(0, _y0, 0) );
192 void laTile::animate(laTimer &t){
193 if( _pTrap ) _pfxTrap->animate( t );
201 unsigned laTile::bulidDomain(laPoint3 pos)
203 ASSERT(_pTile,
"Nil tile TS element");
206 _pTile->buildCollisionData(&_domain, _pTrap);
207 _domain.updateBounds();
209 return _domain.countLines();
215 double laTile::getOffset() {
216 return _pSegment->terrainZOffset(_nSegX);
219 double laTile::getAngle() {
220 return _pSegment->terrainAngle(_nSegX);
laPoint2 * vquadsTexCoord(unsigned nQuad, unsigned nCount=1)
Get a pointer to VQ texture coordinates.
#define M_UNIT
Unit of 1 meter.
virtual void vquadsDrawSingle(laPoint2 *ar_uv=NULL)=0
Draw a single VQ (Note this is slower than drawing an array of VQ and should be avoided) ...
Virtual interface for the Engine graphics renderer.
laPoint3 * vquadsData(unsigned nQuad, unsigned nCount=1)
Get a pointer to VQ vertex data.