Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5131 clevermous 1
/*
2
Copyright (C) 1996-1997 Id Software, Inc.
3
 
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License
6
as published by the Free Software Foundation; either version 2
7
of the License, or (at your option) any later version.
8
 
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
 
13
See the GNU General Public License for more details.
14
 
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
 
19
*/
20
 
21
#include "quakedef.h"
22
 
23
#ifdef GLTEST
24
 
25
typedef struct
26
{
27
	plane_t	*plane;
28
	vec3_t	origin;
29
	vec3_t	normal;
30
	vec3_t	up;
31
	vec3_t	right;
32
	vec3_t	reflect;
33
	float	length;
34
} puff_t;
35
 
36
#define	MAX_PUFFS	64
37
 
38
puff_t	puffs[MAX_PUFFS];
39
 
40
 
41
void Test_Init (void)
42
{
43
}
44
 
45
 
46
 
47
plane_t	junk;
48
plane_t	*HitPlane (vec3_t start, vec3_t end)
49
{
50
	trace_t		trace;
51
 
52
// fill in a default trace
53
	memset (&trace, 0, sizeof(trace_t));
54
	trace.fraction = 1;
55
	trace.allsolid = true;
56
	VectorCopy (end, trace.endpos);
57
 
58
	SV_RecursiveHullCheck (cl.worldmodel->hulls, 0, 0, 1, start, end, &trace);
59
 
60
	junk = trace.plane;
61
	return &junk;
62
}
63
 
64
void Test_Spawn (vec3_t origin)
65
{
66
	int		i;
67
	puff_t	*p;
68
	vec3_t	temp;
69
	vec3_t	normal;
70
	vec3_t	incoming;
71
	plane_t	*plane;
72
	float	d;
73
 
74
	for (i=0,p=puffs ; i
75
	{
76
		if (p->length <= 0)
77
			break;
78
	}
79
	if (i == MAX_PUFFS)
80
		return;
81
 
82
	VectorSubtract (r_refdef.vieworg, origin, incoming);
83
	VectorSubtract (origin, incoming, temp);
84
	plane = HitPlane (r_refdef.vieworg, temp);
85
 
86
	VectorNormalize (incoming);
87
	d = DotProduct (incoming, plane->normal);
88
	VectorSubtract (vec3_origin, incoming, p->reflect);
89
	VectorMA (p->reflect, d*2, plane->normal, p->reflect);
90
 
91
	VectorCopy (origin, p->origin);
92
	VectorCopy (plane->normal, p->normal);
93
 
94
	CrossProduct (incoming, p->normal, p->up);
95
 
96
	CrossProduct (p->up, p->normal, p->right);
97
 
98
	p->length = 8;
99
}
100
 
101
void DrawPuff (puff_t *p)
102
{
103
	vec3_t	pts[2][3];
104
	int		i, j;
105
	float	s, d;
106
 
107
	for (i=0 ; i<2 ; i++)
108
	{
109
		if (i == 1)
110
		{
111
			s = 6;
112
			d = p->length;
113
		}
114
		else
115
		{
116
			s = 2;
117
			d = 0;
118
		}
119
 
120
		for (j=0 ; j<3 ; j++)
121
		{
122
			pts[i][0][j] = p->origin[j] + p->up[j]*s + p->reflect[j]*d;
123
			pts[i][1][j] = p->origin[j] + p->right[j]*s + p->reflect[j]*d;
124
			pts[i][2][j] = p->origin[j] + -p->right[j]*s + p->reflect[j]*d;
125
		}
126
	}
127
 
128
	glColor3f (1, 0, 0);
129
 
130
#if 0
131
	glBegin (GL_LINES);
132
	glVertex3fv (p->origin);
133
	glVertex3f (p->origin[0] + p->length*p->reflect[0],
134
		p->origin[1] + p->length*p->reflect[1],
135
		p->origin[2] + p->length*p->reflect[2]);
136
 
137
	glVertex3fv (pts[0][0]);
138
	glVertex3fv (pts[1][0]);
139
 
140
	glVertex3fv (pts[0][1]);
141
	glVertex3fv (pts[1][1]);
142
 
143
	glVertex3fv (pts[0][2]);
144
	glVertex3fv (pts[1][2]);
145
 
146
	glEnd ();
147
#endif
148
 
149
	glBegin (GL_QUADS);
150
	for (i=0 ; i<3 ; i++)
151
	{
152
		j = (i+1)%3;
153
		glVertex3fv (pts[0][j]);
154
		glVertex3fv (pts[1][j]);
155
		glVertex3fv (pts[1][i]);
156
		glVertex3fv (pts[0][i]);
157
	}
158
	glEnd ();
159
 
160
	glBegin (GL_TRIANGLES);
161
	glVertex3fv (pts[1][0]);
162
	glVertex3fv (pts[1][1]);
163
	glVertex3fv (pts[1][2]);
164
	glEnd ();
165
 
166
	p->length -= host_frametime*2;
167
}
168
 
169
 
170
void Test_Draw (void)
171
{
172
	int		i;
173
	puff_t	*p;
174
 
175
	for (i=0, p=puffs ; i
176
	{
177
		if (p->length > 0)
178
			DrawPuff (p);
179
	}
180
}
181
 
182
#endif