1 /* bzflag
2  * Copyright (c) 1993-2021 Tim Riker
3  *
4  * This package is free software;  you can redistribute it and/or
5  * modify it under the terms of the license found in the file
6  * named COPYING that should have accompanied this file.
7  *
8  * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
9  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
10  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
11  */
12 
13 /* TankGeometryMgr:
14  *  Generates the display lists for TankSceneNodes
15  */
16 
17 #ifndef BZF_TANK_GEOMETRY_MGR_H
18 #define BZF_TANK_GEOMETRY_MGR_H
19 
20 #include "common.h"
21 #include "SceneNode.h"
22 
23 
24 namespace TankGeometryEnums
25 {
26 
27 enum TankShadow
28 {
29     ShadowOff = 0,
30     ShadowOn,
31     LastTankShadow
32 };
33 
34 enum TankLOD
35 {
36     LowTankLOD = 0,
37     MedTankLOD,
38     HighTankLOD,
39     LastTankLOD
40 };
41 
42 enum TankSize
43 {
44     Normal = 0,
45     Obese,
46     Tiny,
47     Narrow,
48     Thief,
49     LastTankSize
50 };
51 
52 enum TankPart
53 {
54     Body = 0,
55     Barrel,
56     Turret,
57     LeftCasing,
58     RightCasing,
59 
60     LeftTread, // animated parts
61     RightTread,
62     LeftWheel0,
63     LeftWheel1,
64     LeftWheel2,
65     LeftWheel3,
66     RightWheel0,
67     RightWheel1,
68     RightWheel2,
69     RightWheel3,
70 
71     LastTankPart,
72     BasicTankParts = LeftTread,
73     LowTankParts = LeftTread,
74     MedTankParts = LeftTread,
75     HighTankParts = LastTankPart
76 };
77 }
78 
79 
80 namespace TankGeometryMgr
81 {
82 
83 void init();
84 void kill();
85 void buildLists();
86 void deleteLists();
87 
88 GLuint getPartList(TankGeometryEnums::TankShadow shadow,
89                    TankGeometryEnums::TankPart part,
90                    TankGeometryEnums::TankSize size,
91                    TankGeometryEnums::TankLOD lod);
92 
93 int getPartTriangleCount(TankGeometryEnums::TankShadow shadow,
94                          TankGeometryEnums::TankPart part,
95                          TankGeometryEnums::TankSize size,
96                          TankGeometryEnums::TankLOD lod);
97 
98 const float* getScaleFactor(TankGeometryEnums::TankSize size);
99 }
100 
101 
102 namespace TankGeometryUtils
103 {
104 
105 enum TreadStyle
106 {
107     Covered = 0,
108     Exposed = 1
109 };
110 void setTreadStyle(int style);
111 
112 // degrees / meter
113 float getWheelScale();
114 // texcoords / meter
115 float getTreadScale();
116 // texcoords
117 float getTreadTexLen();
118 
119 // help to scale vertices and normals
120 void doVertex3f(GLfloat x, GLfloat y, GLfloat z);
121 void doNormal3f(GLfloat x, GLfloat y, GLfloat z);
122 void doTexCoord2f(GLfloat x, GLfloat y);
123 
124 //
125 // NOTE:  these all return their triangle count
126 //
127 
128 // lowtank geometry builder
129 int buildLowBody (void);
130 int buildLowTurret (void);
131 int buildLowLCasing (void);
132 int buildLowRCasing (void);
133 int buildLowBarrel (void);
134 
135 // medtank geometry builder
136 int buildMedBody (void);
137 int buildMedTurret (void);
138 int buildMedLCasing (void);
139 int buildMedRCasing (void);
140 //int buildMedBarrel (void); // Same as buildLowBarrel
141 
142 // hightank geometry builder
143 int buildHighBody (void);
144 int buildHighBarrel (void);
145 int buildHighTurret (void);
146 int buildHighLCasing (void);
147 int buildHighRCasing (void);
148 
149 // animated geometry builder
150 int buildHighLCasingAnim (void);
151 int buildHighRCasingAnim (void);
152 int buildHighLTread (int divs);
153 int buildHighRTread (int divs);
154 int buildHighLWheel (int wheel, float angle, int divs);
155 int buildHighRWheel (int wheel, float angle, int divs);
156 }
157 
158 
159 #endif // BZF_TANK_GEOMETRY_MGR_H
160 
161 
162 // Local Variables: ***
163 // mode: C++ ***
164 // tab-width: 4 ***
165 // c-basic-offset: 4 ***
166 // indent-tabs-mode: nil ***
167 // End: ***
168 // ex: shiftwidth=4 tabstop=4
169