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 77 78 79 80 81 82 83 84
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef FLYING_PIECE_H
#define FLYING_PIECE_H
#include "System/MemPool.h"
#include "System/float3.h"
#include "System/Matrix44f.h"
class CVertexArray;
struct S3DOPrimitive;
struct S3DOPiece;
struct SS3OVertex;
struct FlyingPiece {
public:
virtual ~FlyingPiece() {}
virtual void Draw(size_t* lastTeam, size_t* lastTex, CVertexArray* va) {}
bool Update();
size_t GetTeam() const { return team; }
size_t GetTexture() const { return texture; }
inline void* operator new(size_t size) { return mempool.Alloc(size); }
inline void operator delete(void* p, size_t size) { mempool.Free(p, size); }
protected:
void InitCommon(const float3& _pos, const float3& _speed, int _team);
void DrawCommon(size_t* lastTeam, CVertexArray* va);
protected:
CMatrix44f transMat;
float3 pos;
float3 speed;
float3 rotAxis;
float rotAngle;
float rotSpeed;
size_t team;
size_t texture;
};
struct S3DOFlyingPiece: public FlyingPiece {
public:
S3DOFlyingPiece(const float3& pos, const float3& speed, int team, const S3DOPiece* _piece, const S3DOPrimitive* _chunk)
{
InitCommon(pos, speed, team);
piece = _piece;
chunk = _chunk;
}
void Draw(size_t* lastTeam, size_t* lastTex, CVertexArray* va);
private:
const S3DOPiece* piece;
const S3DOPrimitive* chunk;
};
struct SS3OFlyingPiece: public FlyingPiece {
public:
~SS3OFlyingPiece();
SS3OFlyingPiece(const float3& pos, const float3& speed, int team, int textureType, const SS3OVertex* _chunk)
{
InitCommon(pos, speed, team);
chunk = _chunk;
texture = textureType;
}
void Draw(size_t* lastTeam, size_t* lastTex, CVertexArray* va);
private:
const SS3OVertex* chunk;
};
#endif // FLYING_PIECE_H
|