1 #pragma once 2 // Description: 3 // All kinds of particles. 4 // 5 // Copyright (C) 2008 Frank Becker 6 // 7 // This program is free software; you can redistribute it and/or modify it under 8 // the terms of the GNU General Public License as published by the Free Software 9 // Foundation; either version 2 of the License, or (at your option) any later 10 // version. 11 // 12 // This program is distributed in the hope that it will be useful, but WITHOUT 13 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 14 // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details 15 // 16 17 #include <string> 18 19 #include <Point.hpp> 20 #include <GLBitmapFont.hpp> 21 #include <Model.hpp> 22 #include <ParticleType.hpp> 23 #include <BezierCurve.hpp> 24 25 class Particles 26 { 27 public: 28 static void Initialize( void); 29 }; 30 31 class BitmapParticleType: public ParticleType 32 { 33 public: 34 BitmapParticleType( const std::string &name); 35 virtual ~BitmapParticleType(); 36 37 virtual void init( ParticleInfo *p) = 0; 38 virtual bool update( ParticleInfo *p) = 0; 39 virtual void draw( ParticleInfo *p) = 0; 40 bindTexture(void)41 static void bindTexture( void) { _bitmaps->bind();} 42 43 protected: 44 static GLBitmapCollection *_bitmaps; 45 void LoadBitmaps( void); 46 }; 47 48 class SingleBitmapParticle: public BitmapParticleType 49 { 50 public: 51 SingleBitmapParticle( const std::string &name, const char *bitmapName); 52 53 protected: 54 float _bmHalfWidth; 55 float _bmHalfHeight; 56 float _radius; 57 58 int _bmIndex; 59 }; 60 61 class SmokePuff: public SingleBitmapParticle 62 { 63 public: 64 SmokePuff( void); 65 virtual ~SmokePuff(); 66 67 virtual void init( ParticleInfo *p); 68 virtual bool update( ParticleInfo *p); 69 virtual void draw( ParticleInfo *p); 70 71 private: 72 }; 73 74 class MiniSmoke: public SingleBitmapParticle 75 { 76 public: 77 MiniSmoke( void); 78 virtual ~MiniSmoke(); 79 80 virtual void init( ParticleInfo *p); 81 virtual bool update( ParticleInfo *p); 82 virtual void draw( ParticleInfo *p); 83 84 private: 85 }; 86 87 class Spark: public SingleBitmapParticle 88 { 89 public: 90 Spark( void); 91 virtual ~Spark(); 92 93 virtual void init( ParticleInfo *p); 94 virtual bool update( ParticleInfo *p); 95 virtual void draw( ParticleInfo *p); 96 97 private: 98 }; 99 100 class FireSpark: public SingleBitmapParticle 101 { 102 public: 103 FireSpark( const string &sp); 104 virtual ~FireSpark(); 105 106 virtual void init( ParticleInfo *p); 107 virtual bool update( ParticleInfo *p); 108 virtual void draw( ParticleInfo *p); 109 110 private: 111 }; 112 113 class FlankBurst: public SingleBitmapParticle 114 { 115 public: 116 FlankBurst( const string &sp); 117 virtual ~FlankBurst(); 118 119 virtual void init( ParticleInfo *p); 120 virtual bool update( ParticleInfo *p); 121 virtual void draw( ParticleInfo *p); 122 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 123 124 private: 125 float _dir; 126 }; 127 128 class BallOfPoison: public SingleBitmapParticle 129 { 130 public: 131 BallOfPoison( void); 132 virtual ~BallOfPoison(); 133 134 virtual void init( ParticleInfo *p); 135 virtual bool update( ParticleInfo *p); 136 virtual void draw( ParticleInfo *p); 137 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 138 139 private: 140 }; 141 142 class BallOfIce: public SingleBitmapParticle 143 { 144 public: 145 BallOfIce( void); 146 virtual ~BallOfIce(); 147 148 virtual void init( ParticleInfo *p); 149 virtual bool update( ParticleInfo *p); 150 virtual void draw( ParticleInfo *p); 151 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 152 153 private: 154 }; 155 156 class SwarmLeader: public SingleBitmapParticle 157 { 158 public: 159 SwarmLeader( void); 160 virtual ~SwarmLeader(); 161 162 virtual void init( ParticleInfo *p); 163 virtual bool update( ParticleInfo *p); 164 virtual void draw( ParticleInfo *p); 165 166 private: 167 BezierCurve<Point3D> _toHero; 168 }; 169 170 class SwarmElement: public ParticleType 171 { 172 public: 173 SwarmElement( void); 174 virtual ~SwarmElement(); 175 176 virtual void init( ParticleInfo *p); 177 virtual bool update( ParticleInfo *p); 178 virtual void draw( ParticleInfo *p); 179 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 180 181 private: 182 }; 183 184 class Phaser: public SingleBitmapParticle 185 { 186 public: 187 Phaser( void); 188 virtual ~Phaser(); 189 190 virtual void init( ParticleInfo *p); 191 virtual bool update( ParticleInfo *p); 192 virtual void draw( ParticleInfo *p); 193 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 194 195 private: 196 }; 197 198 class PlasmaBullet: public BitmapParticleType 199 { 200 public: 201 PlasmaBullet( void); 202 virtual ~PlasmaBullet(); 203 204 virtual void init( ParticleInfo *p); 205 virtual bool update( ParticleInfo *p); 206 virtual void draw( ParticleInfo *p); 207 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 208 209 private: 210 int _bulletIndex0; 211 int _bulletIndex1; 212 213 float _bmHalfWidth; 214 float _bmHalfHeight; 215 }; 216 217 class BallOfFire: public BitmapParticleType 218 { 219 public: 220 BallOfFire( void); 221 virtual ~BallOfFire(); 222 223 virtual void init( ParticleInfo *p); 224 virtual bool update( ParticleInfo *p); 225 virtual void draw( ParticleInfo *p); 226 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 227 228 private: 229 int _ballOfFire; 230 231 float _bmHalfWidth; 232 float _bmHalfHeight; 233 }; 234 235 class StingerTrail: public ParticleType 236 { 237 public: 238 StingerTrail( void); 239 virtual ~StingerTrail(); 240 241 virtual void init( ParticleInfo *p); 242 virtual bool update( ParticleInfo *p); 243 virtual void draw( ParticleInfo *p); 244 245 protected: 246 Model *_trail; 247 }; 248 249 class HeroStinger: public ParticleType 250 { 251 public: 252 HeroStinger( void); 253 virtual ~HeroStinger(); 254 255 virtual void init( ParticleInfo *p); 256 virtual bool update( ParticleInfo *p); 257 virtual void draw( ParticleInfo *p); 258 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 259 260 protected: 261 Model *_stinger; 262 }; 263 264 class StatusMessage: public ParticleType 265 { 266 public: 267 StatusMessage( void); 268 virtual ~StatusMessage(); 269 270 virtual void init( ParticleInfo *p); 271 virtual bool update( ParticleInfo *p); 272 virtual void draw( ParticleInfo *p); 273 274 protected: 275 GLBitmapFont *_smallFont; 276 }; 277 278 class ExplosionPiece: public ParticleType 279 { 280 public: 281 ExplosionPiece( void); 282 virtual ~ExplosionPiece(); 283 284 virtual void init( ParticleInfo *p); 285 virtual bool update( ParticleInfo *p); 286 virtual void draw( ParticleInfo *p); 287 288 protected: 289 Model *_cloud; 290 }; 291 292 class EnergyBlob: public ParticleType 293 { 294 public: 295 EnergyBlob( void); 296 virtual ~EnergyBlob(); 297 298 virtual void init( ParticleInfo *p); 299 virtual bool update( ParticleInfo *p); 300 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 301 virtual void draw( ParticleInfo *p); 302 303 protected: 304 Model *_blob; 305 }; 306 307 class ShieldBoost: public ParticleType 308 { 309 public: 310 ShieldBoost( void); 311 virtual ~ShieldBoost(); 312 313 virtual void init( ParticleInfo *p); 314 virtual bool update( ParticleInfo *p); 315 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 316 virtual void draw( ParticleInfo *p); 317 318 protected: 319 Model *_shield; 320 }; 321 322 class ArmorPierce: public ParticleType 323 { 324 public: 325 ArmorPierce( void); 326 virtual ~ArmorPierce(); 327 328 virtual void init( ParticleInfo *p); 329 virtual bool update( ParticleInfo *p); 330 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 331 virtual void draw( ParticleInfo *p); 332 333 protected: 334 Model *_armor; 335 }; 336 337 class WeaponUpgrade: public ParticleType 338 { 339 public: 340 WeaponUpgrade( void); 341 virtual ~WeaponUpgrade(); 342 343 virtual void init( ParticleInfo *p); 344 virtual bool update( ParticleInfo *p); 345 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 346 virtual void draw( ParticleInfo *p); 347 348 protected: 349 Model *_upgrade; 350 }; 351 352 class Bonus1: public ParticleType 353 { 354 public: 355 Bonus1( string modelName, int value); 356 virtual ~Bonus1(); 357 358 virtual void init( ParticleInfo *p); 359 virtual bool update( ParticleInfo *p); 360 virtual void hit( ParticleInfo *p, int damage, int /*radIndex*/); 361 virtual void draw( ParticleInfo *p); 362 363 protected: 364 int _value; 365 string _scoreName; 366 Model *_bonus; 367 }; 368 369 class ScoreHighlight: public ParticleType 370 { 371 public: 372 ScoreHighlight( void); 373 virtual ~ScoreHighlight(); 374 375 virtual void init( ParticleInfo *p); 376 virtual bool update( ParticleInfo *p); 377 virtual void draw( ParticleInfo *p); 378 379 protected: 380 vec3 _color; 381 std::string _value; 382 GLBitmapFont *_font; 383 }; 384