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