32
32
/*===========================================================================
33
33
Rendering of the bike
34
34
===========================================================================*/
35
void GameRenderer::_RenderBike(BikeState *pBike, BikeParams *pBikeParms, TextureTheme *p_theme) {
35
void GameRenderer::_RenderBike(BikeState *pBike, BikeParams *pBikeParms, BikerTheme *p_theme) {
37
40
Vector2f p0,p1,p2,p3,o0,o1,o2,o3;
41
44
/* Draw front wheel */
65
68
Fc = (p0 + p1 + p2 + p3) * 0.25f + C;
69
glBegin(GL_LINE_STRIP);
74
glBegin(GL_LINE_STRIP);
80
glBegin(GL_LINE_LOOP);
82
for(int i=0;i<nSteps;i++) {
83
float r = (3.14159f * 2.0f * (float)i)/ (float)nSteps;
84
_Vertex( Vector2f(C.x + pBikeParms->WR*sin(r),C.y + pBikeParms->WR*cos(r)) );
72
if(m_bUglyMode == false) {
73
pSprite = p_theme->getWheel();
75
pTexture = pSprite->getTexture();
76
if(pTexture != NULL) {
77
_RenderAlphaBlendedSection(pTexture,p0+C,p1+C,p2+C,p3+C);
90
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
91
glBindTexture(GL_TEXTURE_2D,p_theme->BikeWheel->nID);
92
glEnable(GL_TEXTURE_2D);
82
if(m_bUglyMode || m_bTestThemeMode) {
83
glBegin(GL_LINE_STRIP);
84
glColor3ub(GET_RED(p_theme->getUglyWheelColor()),GET_GREEN(p_theme->getUglyWheelColor()),GET_BLUE(p_theme->getUglyWheelColor()));
88
glBegin(GL_LINE_STRIP);
89
glColor3ub(GET_RED(p_theme->getUglyWheelColor()),GET_GREEN(p_theme->getUglyWheelColor()),GET_BLUE(p_theme->getUglyWheelColor()));
104
glDisable(GL_TEXTURE_2D);
93
_RenderCircle(16,p_theme->getUglyWheelColor(),C,pBikeParms->WR);
108
96
/* Draw rear wheel */
132
120
Rc = (p0 + p1 + p2 + p3) * 0.25f + C;
136
glBegin(GL_LINE_STRIP);
141
glBegin(GL_LINE_STRIP);
147
glBegin(GL_LINE_LOOP);
149
for(int i=0;i<nSteps;i++) {
150
float r = (3.14159f * 2.0f * (float)i)/ (float)nSteps;
151
_Vertex( Vector2f(C.x + pBikeParms->WR*sin(r),C.y + pBikeParms->WR*cos(r)) );
123
if(m_bUglyMode == false) {
124
pSprite = p_theme->getWheel();
125
if(pSprite != NULL) {
126
pTexture = pSprite->getTexture();
127
if(pTexture != NULL) {
128
_RenderAlphaBlendedSection(p_theme->getWheel()->getTexture(),p0+C,p1+C,p2+C,p3+C);
157
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
158
glBindTexture(GL_TEXTURE_2D,p_theme->BikeWheel->nID);
159
glEnable(GL_TEXTURE_2D);
133
if(m_bUglyMode || m_bTestThemeMode) {
134
glBegin(GL_LINE_STRIP);
135
glColor3ub(GET_RED(p_theme->getUglyWheelColor()),GET_GREEN(p_theme->getUglyWheelColor()),GET_BLUE(p_theme->getUglyWheelColor()));
139
glBegin(GL_LINE_STRIP);
140
glColor3ub(GET_RED(p_theme->getUglyWheelColor()),GET_GREEN(p_theme->getUglyWheelColor()),GET_BLUE(p_theme->getUglyWheelColor()));
171
glDisable(GL_TEXTURE_2D);
144
_RenderCircle(16,p_theme->getUglyWheelColor(),C,pBikeParms->WR);
175
147
if(!m_bUglyMode) {
191
163
p3 = pBike->FrontWheelP - Vector2f(-Sv.y,Sv.x)*0.07f - Sv*0.08f;
195
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
196
glBindTexture(GL_TEXTURE_2D,p_theme->BikeRear->nID);
197
glEnable(GL_TEXTURE_2D);
209
glDisable(GL_TEXTURE_2D);
166
pSprite = p_theme->getRear();
167
if(pSprite != NULL) {
168
pTexture = pSprite->getTexture();
169
if(pTexture != NULL) {
170
_RenderAlphaBlendedSection(pTexture,p0,p1,p2,p3);
212
174
/* Draw front suspension */
213
175
if(pBike->Dir == DD_RIGHT) {
214
176
Sv = pBike->FrontAnchorP - Fc;
226
188
p2 = pBike->FrontAnchor2P - Vector2f(-Sv.y,Sv.x)*0.04f - Sv*0.35f;
227
189
p3 = pBike->RearWheelP - Vector2f(-Sv.y,Sv.x)*0.04f - Sv*0.05f;
231
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
232
glBindTexture(GL_TEXTURE_2D,p_theme->BikeFront->nID);
233
glEnable(GL_TEXTURE_2D);
245
glDisable(GL_TEXTURE_2D);
192
if(m_renderBikeFront) {
193
pSprite = p_theme->getFront();
194
if(pSprite != NULL) {
195
pTexture = pSprite->getTexture();
196
if(pTexture != NULL) {
197
_RenderAlphaBlendedSection(pTexture,p3,p0,p1,p2);
248
202
/* Draw body/frame */
249
203
o0 = Vector2f(-1,0.5);
259
213
p3 = Vector2f(o3.x*pBike->fFrameRot[0] + o3.y*pBike->fFrameRot[1],
260
214
o3.x*pBike->fFrameRot[2] + o3.y*pBike->fFrameRot[3]);
262
C = pBike->CenterP; //Vector2f(pBike->pfFramePos[0],pBike->pfFramePos[1]);
265
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
266
glBindTexture(GL_TEXTURE_2D,p_theme->BikeBody->nID);
267
glEnable(GL_TEXTURE_2D);
270
if(pBike->Dir == DD_RIGHT) {
291
glDisable(GL_TEXTURE_2D);
218
pSprite = p_theme->getBody();
219
if(pSprite != NULL) {
220
pTexture = pSprite->getTexture();
221
if(pTexture != NULL) {
222
if(pBike->Dir == DD_RIGHT)
223
_RenderAlphaBlendedSection(pTexture,p3+C,p2+C,p1+C,p0+C);
225
_RenderAlphaBlendedSection(pTexture,p2+C,p3+C,p0+C,p1+C);
296
231
if(pBike->Dir == DD_RIGHT) {
299
glBegin(GL_LINE_STRIP);
301
_Vertex(pBike->FootP);
302
_Vertex(pBike->KneeP);
303
_Vertex(pBike->LowerBodyP);
304
_Vertex(pBike->ShoulderP);
305
_Vertex(pBike->ElbowP);
306
_Vertex(pBike->HandP);
309
glBegin(GL_LINE_LOOP);
311
for(int i=0;i<nSteps;i++) {
312
float r = (3.14159f * 2.0f * (float)i)/ (float)nSteps;
313
_Vertex( Vector2f(pBike->HeadP.x + pBikeParms->fHeadSize*sin(r),
314
pBike->HeadP.y + pBikeParms->fHeadSize*cos(r)) );
232
if(m_bUglyMode == false) {
319
233
/* Draw rider torso */
320
234
Sv = pBike->ShoulderP - pBike->LowerBodyP;
324
238
p2 = pBike->LowerBodyP - Vector2f(-Sv.y,Sv.x)*0.24f - Sv*0.1f;
325
239
p3 = pBike->ShoulderP - Vector2f(-Sv.y,Sv.x)*0.24f + Sv*0.46f;
328
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
329
glBindTexture(GL_TEXTURE_2D,p_theme->RiderTorso->nID);
330
glEnable(GL_TEXTURE_2D);
342
glDisable(GL_TEXTURE_2D);
241
pSprite = p_theme->getTorso();
242
if(pSprite != NULL) {
243
pTexture = pSprite->getTexture();
244
if(pTexture != NULL) {
245
_RenderAlphaBlendedSection(pTexture,p1,p2,p3,p0);
345
249
/* Draw rider upper arm */
346
250
Sv = pBike->ShoulderP - pBike->ElbowP;
349
253
p1 = pBike->ElbowP + Vector2f(-Sv.y,Sv.x)*0.12f - Sv*0.05f;
350
254
p2 = pBike->ElbowP - Vector2f(-Sv.y,Sv.x)*0.10f - Sv*0.05f;
351
255
p3 = pBike->ShoulderP - Vector2f(-Sv.y,Sv.x)*0.10f;
354
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
355
glBindTexture(GL_TEXTURE_2D,p_theme->RiderUpperArm->nID);
356
glEnable(GL_TEXTURE_2D);
368
glDisable(GL_TEXTURE_2D);
257
pSprite = p_theme->getUpperArm();
258
if(pSprite != NULL) {
259
pTexture = pSprite->getTexture();
260
if(pTexture != NULL) {
261
_RenderAlphaBlendedSection(pTexture,p1,p2,p3,p0);
371
265
/* Draw rider lower arm */
372
266
Sv = pBike->ElbowP - pBike->HandP;
376
270
p2 = pBike->HandP - Vector2f(-Sv.y,Sv.x)*0.10f - Sv*0.05f;
377
271
p3 = pBike->ElbowP - Vector2f(-Sv.y,Sv.x)*0.10f + Sv*0.09f;
380
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
381
glBindTexture(GL_TEXTURE_2D,p_theme->RiderLowerArm->nID);
382
glEnable(GL_TEXTURE_2D);
394
glDisable(GL_TEXTURE_2D);
273
pSprite = p_theme->getLowerArm();
274
if(pSprite != NULL) {
275
pTexture = pSprite->getTexture();
276
if(pTexture != NULL) {
277
_RenderAlphaBlendedSection(pTexture,p3,p2,p1,p0);
397
281
/* Draw rider upper leg */
398
282
Sv = pBike->LowerBodyP - pBike->KneeP;
401
285
p1 = pBike->KneeP + Vector2f(-Sv.y,Sv.x)*0.15f + Sv*0.0f;
402
286
p2 = pBike->KneeP - Vector2f(-Sv.y,Sv.x)*0.15f + Sv*0.0f;
403
287
p3 = pBike->LowerBodyP - Vector2f(-Sv.y,Sv.x)*0.1f + Sv*0.14f;
406
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
407
glBindTexture(GL_TEXTURE_2D,p_theme->RiderUpperLeg->nID);
408
glEnable(GL_TEXTURE_2D);
420
glDisable(GL_TEXTURE_2D);
289
pSprite = p_theme->getUpperLeg();
290
if(pSprite != NULL) {
291
pTexture = pSprite->getTexture();
292
if(pTexture != NULL) {
293
_RenderAlphaBlendedSection(pTexture,p0,p1,p2,p3);
423
297
/* Draw rider lower leg */
424
298
Sv = pBike->KneeP - pBike->FootP;
427
301
p1 = pBike->FootP + Vector2f(-Sv.y,Sv.x)*0.2f;
428
302
p2 = pBike->FootP - Vector2f(-Sv.y,Sv.x)*0.2f;
429
303
p3 = pBike->KneeP - Vector2f(-Sv.y,Sv.x)*0.23f + Sv*0.1f;
432
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
433
glBindTexture(GL_TEXTURE_2D,p_theme->RiderLowerLeg->nID);
434
glEnable(GL_TEXTURE_2D);
305
pSprite = p_theme->getLowerLeg();
306
if(pSprite != NULL) {
307
pTexture = pSprite->getTexture();
308
if(pTexture != NULL) {
309
_RenderAlphaBlendedSection(pTexture,p1,p2,p3,p0);
314
if(m_bUglyMode || m_bTestThemeMode) {
316
glBegin(GL_LINE_STRIP);
317
glColor3ub(GET_RED(p_theme->getUglyRiderColor()),GET_GREEN(p_theme->getUglyRiderColor()),GET_BLUE(p_theme->getUglyRiderColor()));
318
_Vertex(pBike->FootP);
319
_Vertex(pBike->KneeP);
320
_Vertex(pBike->LowerBodyP);
321
_Vertex(pBike->ShoulderP);
322
_Vertex(pBike->ElbowP);
323
_Vertex(pBike->HandP);
446
glDisable(GL_TEXTURE_2D);
325
_RenderCircle(10,p_theme->getUglyRiderColor(),pBike->HeadP,pBikeParms->fHeadSize);
450
328
else if(pBike->Dir == DD_LEFT) {
453
glBegin(GL_LINE_STRIP);
455
_Vertex(pBike->Foot2P);
456
_Vertex(pBike->Knee2P);
457
_Vertex(pBike->LowerBody2P);
458
_Vertex(pBike->Shoulder2P);
459
_Vertex(pBike->Elbow2P);
460
_Vertex(pBike->Hand2P);
463
glBegin(GL_LINE_LOOP);
465
for(int i=0;i<nSteps;i++) {
466
float r = (3.14159f * 2.0f * (float)i)/ (float)nSteps;
467
_Vertex( Vector2f(pBike->Head2P.x + pBikeParms->fHeadSize*sin(r),
468
pBike->Head2P.y + pBikeParms->fHeadSize*cos(r)) );
329
if(m_bUglyMode == false) {
473
330
/* Draw rider torso */
474
331
Sv = pBike->Shoulder2P - pBike->LowerBody2P;
477
334
p1 = pBike->LowerBody2P + Vector2f(-Sv.y,Sv.x)*0.24f - Sv*0.1f;
478
335
p2 = pBike->LowerBody2P - Vector2f(-Sv.y,Sv.x)*0.24f - Sv*0.1f;
479
336
p3 = pBike->Shoulder2P - Vector2f(-Sv.y,Sv.x)*0.24f + Sv*0.46f;
482
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
483
glBindTexture(GL_TEXTURE_2D,p_theme->RiderTorso->nID);
484
glEnable(GL_TEXTURE_2D);
496
glDisable(GL_TEXTURE_2D);
338
pSprite = p_theme->getTorso();
339
if(pSprite != NULL) {
340
pTexture = pSprite->getTexture();
341
if(pTexture != NULL) {
342
_RenderAlphaBlendedSection(pTexture,p2,p1,p0,p3);
499
346
/* Draw rider upper arm */
500
347
Sv = pBike->Shoulder2P - pBike->Elbow2P;
503
350
p1 = pBike->Elbow2P + Vector2f(-Sv.y,Sv.x)*0.12f - Sv*0.05f;
504
351
p2 = pBike->Elbow2P - Vector2f(-Sv.y,Sv.x)*0.10f - Sv*0.05f;
505
352
p3 = pBike->Shoulder2P - Vector2f(-Sv.y,Sv.x)*0.10f;
508
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
509
glBindTexture(GL_TEXTURE_2D,p_theme->RiderUpperArm->nID);
510
glEnable(GL_TEXTURE_2D);
522
glDisable(GL_TEXTURE_2D);
354
pSprite = p_theme->getUpperArm();
355
if(pSprite != NULL) {
356
pTexture = pSprite->getTexture();
357
if(pTexture != NULL) {
358
_RenderAlphaBlendedSection(pTexture,p2,p1,p0,p3);
525
362
/* Draw rider lower arm */
526
363
Sv = pBike->Elbow2P - pBike->Hand2P;
529
366
p1 = pBike->Hand2P + Vector2f(-Sv.y,Sv.x)*0.12f - Sv*0.05f;
530
367
p2 = pBike->Hand2P - Vector2f(-Sv.y,Sv.x)*0.10f - Sv*0.05f;
531
368
p3 = pBike->Elbow2P - Vector2f(-Sv.y,Sv.x)*0.10f + Sv*0.09f;
534
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
535
glBindTexture(GL_TEXTURE_2D,p_theme->RiderLowerArm->nID);
536
glEnable(GL_TEXTURE_2D);
548
glDisable(GL_TEXTURE_2D);
370
pSprite = p_theme->getLowerArm();
371
if(pSprite != NULL) {
372
pTexture = pSprite->getTexture();
373
if(pTexture != NULL) {
374
_RenderAlphaBlendedSection(pTexture,p0,p1,p2,p3);
551
378
/* Draw rider upper leg */
552
379
Sv = pBike->LowerBody2P - pBike->Knee2P;
555
382
p1 = pBike->Knee2P + Vector2f(-Sv.y,Sv.x)*0.15f + Sv*0.0f;
556
383
p2 = pBike->Knee2P - Vector2f(-Sv.y,Sv.x)*0.15f + Sv*0.0f;
557
384
p3 = pBike->LowerBody2P - Vector2f(-Sv.y,Sv.x)*0.1f + Sv*0.14f;
560
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
561
glBindTexture(GL_TEXTURE_2D,p_theme->RiderUpperLeg->nID);
562
glEnable(GL_TEXTURE_2D);
574
glDisable(GL_TEXTURE_2D);
386
pSprite = p_theme->getUpperLeg();
387
if(pSprite != NULL) {
388
pTexture = pSprite->getTexture();
389
if(pTexture != NULL) {
390
_RenderAlphaBlendedSection(pTexture,p3,p2,p1,p0);
577
394
/* Draw rider lower leg */
578
395
Sv = pBike->Knee2P - pBike->Foot2P;
581
398
p1 = pBike->Foot2P + Vector2f(-Sv.y,Sv.x)*0.2f;
582
399
p2 = pBike->Foot2P - Vector2f(-Sv.y,Sv.x)*0.2f;
583
400
p3 = pBike->Knee2P - Vector2f(-Sv.y,Sv.x)*0.23f + Sv*0.1f;
586
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
587
glBindTexture(GL_TEXTURE_2D,p_theme->RiderLowerLeg->nID);
588
glEnable(GL_TEXTURE_2D);
402
pSprite = p_theme->getLowerLeg();
403
if(pSprite != NULL) {
404
pTexture = pSprite->getTexture();
405
if(pTexture != NULL) {
406
_RenderAlphaBlendedSection(pTexture,p2,p1,p0,p3);
411
if(m_bUglyMode || m_bTestThemeMode) {
413
glBegin(GL_LINE_STRIP);
414
glColor3ub(GET_RED(p_theme->getUglyRiderColor()),GET_GREEN(p_theme->getUglyRiderColor()),GET_BLUE(p_theme->getUglyRiderColor()));
415
_Vertex(pBike->Foot2P);
416
_Vertex(pBike->Knee2P);
417
_Vertex(pBike->LowerBody2P);
418
_Vertex(pBike->Shoulder2P);
419
_Vertex(pBike->Elbow2P);
420
_Vertex(pBike->Hand2P);
600
glDisable(GL_TEXTURE_2D);
422
_RenderCircle(10,p_theme->getUglyRiderColor(),pBike->Head2P,pBikeParms->fHeadSize);
605
426
/* New wheel-spin particles? */
606
427
if(getGameObject()->isWheelSpinning()) {
607
//glBegin(GL_LINE_STRIP);
608
//glColor3f(1,0.5,0.2);
609
//_Vertex(getGameObject()->getWheelSpinPoint() - Vector2f(0.5,0));
610
//_Vertex(getGameObject()->getWheelSpinPoint() + Vector2f(0.5,0));
612
//glBegin(GL_LINE_STRIP);
613
//glColor3f(1,0.5,0.2);
614
//_Vertex(getGameObject()->getWheelSpinPoint() - Vector2f(0,0.5));
615
//_Vertex(getGameObject()->getWheelSpinPoint() + Vector2f(0,0.5));
617
//glBegin(GL_LINE_STRIP);
619
//_Vertex(getGameObject()->getWheelSpinPoint());
620
//_Vertex(getGameObject()->getWheelSpinPoint() + getGameObject()->getWheelSpinDir());
623
if(randomNum(0,1) < 0.8f) {
624
Particle *pNewParticle = spawnParticle(PT_DEBRIS,getGameObject()->getWheelSpinPoint(),
625
getGameObject()->getWheelSpinDir(),4);
626
pNewParticle->bFront = false;
428
Particle *pPrevDebris = _GetNewestParticle(PT_DEBRIS);
430
/* Limit particles to one every 0.01 seconds */
431
if(pPrevDebris==NULL || getGameObject()->getTime() - pPrevDebris->fSpawnTime > 0.01f) {
432
if(randomNum(0,1) < 0.8f) {
433
Particle *pNewParticle = spawnParticle(PT_DEBRIS,getGameObject()->getWheelSpinPoint(),
434
getGameObject()->getWheelSpinDir(),4);
435
pNewParticle->bFront = false;