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