Fixes for datatype size on amd64.
[crack-attack.git] / src / obj_swapper.cxx
blob2addd1e601ef035cc6ad2c376bf54beae61a21ea
1 /*
2 * swapper.c_xx
3 * Daniel Nelson 9/22/0
5 * Copyright (C) 2000 Daniel Nelson
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 * Daniel Nelson - aluminumangel.org
22 * 174 W. 18th Ave.
23 * Columbus, OH 43210
25 * Generates the swapper's displa_y list.
28 #include <GL/glut.h>
30 #include "glext.h"
32 #include "Game.h"
33 #include "Displayer.h"
35 // swapper's geometric constants
36 #define SG_A (0.1f)
37 #define SG_B (2.0f * SG_A / 2.414214f)
38 #define SG_C (0.8f)
39 #define SG_D (0.1f)
40 #define SG_E (1.0f)
41 #define SG_F (0.4f)
42 #define SG_H (1.0f)
43 #define SG_I (0.1f)
44 #define SG_J (0.16f)
45 #define SG_S (1.0f)
47 GLuint Displayer::swapper_list;
49 void Displayer::drawTriangle ( float a_x, float a_y, float a_z,
50 float b_x, float b_y, float b_z, float c_x, float c_y, float c_z )
52 float n_x = (c_y - a_y) * (a_z - b_z) - (a_y - b_y) * (c_z - a_z);
53 float n_y = (c_z - a_z) * (a_x - b_x) - (a_z - b_z) * (c_x - a_x);
54 float n_z = (c_x - a_x) * (a_y - b_y) - (a_x - b_x) * (c_y - a_y);
56 float norm = sqrt(n_x * n_x + n_y * n_y + n_z * n_z);
57 n_x /= norm;
58 n_y /= norm;
59 n_z /= norm;
61 glNormal3f(n_x, n_y, n_z);
63 glVertex3f(a_x, a_y, a_z);
64 glVertex3f(b_x, b_y, b_z);
65 glVertex3f(c_x, c_y, c_z);
68 void Displayer::generateSwapperList ( )
70 swapper_list = glGenLists(1);
72 glNewList(swapper_list, GL_COMPILE);
74 glBegin(GL_TRIANGLES);
76 // not the fastest method, but this is at start up and may change
77 // someday; plus, if you have a super cool compiler, it could do it at
78 // compile time; plus, if you're going to complain, why don't you buy me
79 // a copy of 3D Studio Max
81 drawTriangle(SG_S + SG_E - SG_C, -SG_E, SG_H,
82 SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I,
83 SG_S + SG_E - SG_C + SG_D, -SG_E + SG_A, SG_H);
85 drawTriangle(SG_S + SG_E - SG_C + SG_D, -SG_E + SG_A, SG_H,
86 SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I,
87 SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H);
89 drawTriangle(SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H,
90 SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I,
91 SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I);
93 drawTriangle(SG_S + SG_E - SG_F, -SG_E + SG_A, SG_H,
94 SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I,
95 SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H);
97 drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H,
98 SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I,
99 SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I);
101 drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_F, SG_H,
102 SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I,
103 SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H);
105 drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H,
106 SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I,
107 SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I);
109 drawTriangle(SG_S + SG_E - SG_A, -SG_E + SG_C - SG_D, SG_H,
110 SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I,
111 SG_S + SG_E, -SG_E + SG_C, SG_H);
113 drawTriangle(SG_S + SG_E - SG_C, -SG_E, SG_H,
114 SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H,
115 SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I);
117 drawTriangle(SG_S + SG_E - SG_C + SG_J, -SG_E, SG_H + SG_I,
118 SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H,
119 SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I);
121 drawTriangle(SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I,
122 SG_S + SG_E - SG_C + SG_D, -SG_E - SG_A, SG_H,
123 SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H);
125 drawTriangle(SG_S + SG_E - SG_F + SG_B / 2.0f, -SG_E, SG_H + SG_I,
126 SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H,
127 SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I);
129 drawTriangle(SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I,
130 SG_S + SG_E - SG_F + SG_B, -SG_E - SG_A, SG_H,
131 SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H);
133 drawTriangle(SG_S + SG_E, -SG_E + SG_F - SG_B / 2.0f, SG_H + SG_I,
134 SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H,
135 SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I);
137 drawTriangle(SG_S + SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I,
138 SG_S + SG_E + SG_A, -SG_E + SG_F - SG_B, SG_H,
139 SG_S + SG_E + SG_A, -SG_E + SG_C - SG_D, SG_H);
141 drawTriangle(SG_S + SG_E, -SG_E + SG_C, SG_H,
142 SG_S+ SG_E, -SG_E + SG_C - SG_J, SG_H + SG_I,
143 SG_S + SG_E + SG_A, -SG_E + SG_C - SG_D, SG_H);
145 glEnd();
147 glEndList();