1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef PIECE_PROJECTILE_H
#define PIECE_PROJECTILE_H
#include "Projectile.h"
#include "Sim/Misc/DamageArray.h"
//! Piece Flags
const int PF_Shatter = (1 << 0); // 1
const int PF_Explode = (1 << 1); // 2
const int PF_Fall = (1 << 2); // 4, if they dont fall they could live forever
const int PF_Smoke = (1 << 3); // 8, smoke and fire is turned off when there are too many projectiles so make sure they are unsynced
const int PF_Fire = (1 << 4); // 16
const int PF_NONE = (1 << 5); // 32
const int PF_NoCEGTrail = (1 << 6); // 64
const int PF_NoHeatCloud= (1 << 7); // 128
class CSmokeTrailProjectile;
struct S3DModelPiece;
struct LocalModelPiece;
struct S3DOPiece;
struct SS3OPiece;
class CPieceProjectile: public CProjectile
{
CR_DECLARE(CPieceProjectile);
void creg_Serialize(creg::ISerializer& s);
public:
CPieceProjectile(const float3& pos, const float3& speed, LocalModelPiece* piece, int flags, CUnit* owner, float radius);
virtual ~CPieceProjectile();
virtual void Detach();
void Update();
void Draw();
virtual void DrawOnMinimap(CVertexArray& lines, CVertexArray& points);
void Collision();
void Collision(CUnit* unit);
void DrawCallback();
private:
bool HasVertices() const;
float3 RandomVertexPos();
public:
unsigned int flags;
unsigned int dispList;
unsigned int cegID;
const S3DModelPiece* omp;
float3 spinVec;
float spinSpeed;
float spinAngle;
float alphaThreshold;
float3 oldSmokePos;
float3 oldSmokeDir;
bool drawTrail;
struct OldInfo {
float3 pos;
float size;
};
OldInfo* oldInfos[8];
CSmokeTrailProjectile* curCallback;
int age;
int colorTeam;
};
#endif /* PIECE_PROJECTILE_H */
|