1 #ifdef _WIN32
2 #include "windows.h"
3 #endif
4
5 #include "string.h"
6 #include "stdio.h"
7 #include "math.h"
8
9 #include "GL/gl.h"
10 #include "GL/glu.h"
11 #include "GL/glut.h"
12 #include "SDL/SDL.h"
13 #include "SDL/SDL_mixer.h"
14
15 #include "list.h"
16 #include "vector.h"
17 #include "cmc.h"
18 #include "3dobject.h"
19 #include "shadow3dobject.h"
20 #include "piece3dobject.h"
21 #include "myglutaux.h"
22 #include "nether.h"
23
PARTICLE(void)24 PARTICLE::PARTICLE(void)
25 {
26 size1=size2=0;
27 r=g=b=0;
28 a1=a2=0;
29 lifetime=acttime=0;
30 } /* PARTICLE::PARTICLE */
31
32
PARTICLE(Vector p,Vector spd1,Vector spd2,float sz1,float sz2,float rp,float gp,float bp,float a1p,float a2p,int lt)33 PARTICLE::PARTICLE(Vector p,Vector spd1,Vector spd2,float sz1,float sz2,float rp,float gp,float bp,float a1p,float a2p,int lt)
34 {
35 pos=p;
36 speed1=spd1;
37 speed2=spd2;
38 size1=sz1;
39 size2=sz2;
40 r=rp;
41 g=gp;
42 b=gp;
43 a1=a1p;
44 a2=a2p;
45 lifetime=lt;
46 acttime=0;
47
48 } /* PARTICLE::PARTICLE */
49
50
51
DrawParticle(PARTICLE * p)52 void NETHER::DrawParticle(PARTICLE *p)
53 {
54 float val,val2;
55 float sz;
56
57 val2=float(p->acttime)/float(p->lifetime);
58 val=1-val2;
59
60 glMatrixMode(GL_MODELVIEW);
61 glPushMatrix();
62
63 glTranslatef(p->pos.x,p->pos.y,p->pos.z);
64 glDepthMask(GL_FALSE);
65 glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
66 glEnable(GL_BLEND);
67 sz=val*p->size1+val2*p->size2;
68 glNormal3f(0,0,1);
69
70 glBegin(GL_TRIANGLES);
71 glColor4f(p->r,p->g,p->b,val*p->a1+val2*p->a2);
72 glVertex3f(0,0,0);
73 glColor4f(p->r,p->g,p->b,0);
74 glVertex3f(sz,0,0);
75 glVertex3f(0,sz,0);
76
77 glColor4f(p->r,p->g,p->b,val*p->a1+val2*p->a2);
78 glVertex3f(0,0,0);
79 glColor4f(p->r,p->g,p->b,0);
80 glVertex3f(0,sz,0);
81 glVertex3f(-sz,0,0);
82
83 glColor4f(p->r,p->g,p->b,val*p->a1+val2*p->a2);
84 glVertex3f(0,0,0);
85 glColor4f(p->r,p->g,p->b,0);
86 glVertex3f(-sz,0,0);
87 glVertex3f(0,-sz,0);
88
89 glColor4f(p->r,p->g,p->b,val*p->a1+val2*p->a2);
90 glVertex3f(0,0,0);
91 glColor4f(p->r,p->g,p->b,0);
92 glVertex3f(0,-sz,0);
93 glVertex3f(sz,0,0);
94
95 glEnd();
96
97 glDisable(GL_BLEND);
98 glDepthMask(GL_TRUE);
99
100
101 glPopMatrix();
102
103 } /* NETHER::DrawParticle */
104
105
106
CycleParticle(PARTICLE * p)107 bool NETHER::CycleParticle(PARTICLE *p)
108 {
109 float val,val2;
110
111 val2=float(p->acttime)/float(p->lifetime);
112 val=1-val2;
113
114 p->pos=p->pos+(p->speed1*val+p->speed2*val2);
115
116 p->acttime++;
117 if (p->acttime>=p->lifetime) return false;
118 return true;
119 } /* NETHER::CyclePArticle */
120