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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef GROUND_FLASH_H
#define GROUND_FLASH_H
#include "Sim/Projectiles/ExpGenSpawnable.h"
#include "Sim/Projectiles/ExplosionGenerator.h"
#include "System/Color.h"
struct AtlasedTexture;
struct GroundFlashInfo;
class CColorMap;
class CVertexArray;
class CGroundFlash : public CExpGenSpawnable
{
public:
CR_DECLARE(CGroundFlash)
CGroundFlash(const float3& _pos);
CGroundFlash();
virtual ~CGroundFlash() {}
virtual void Draw(CVertexArray* va) {}
/// @return false when it should be deleted
virtual bool Update() { return false; }
virtual void Init(const CUnit* owner, const float3& offset) {}
float3 CalcNormal(const float3 midPos, const float3 camDir, float quadSize) const;
protected:
static bool GetMemberInfo(SExpGenSpawnableMemberInfo& memberInfo);
public:
float size;
bool depthTest;
bool depthMask;
};
class CStandardGroundFlash : public CGroundFlash
{
public:
CR_DECLARE_DERIVED(CStandardGroundFlash)
CStandardGroundFlash();
CStandardGroundFlash(const float3& pos, const GroundFlashInfo& info);
CStandardGroundFlash(
const float3& pos,
float _circleAlpha,
float _flashAlpha,
float _flashSize,
float _circleGrowth,
float _ttl,
const float3& _color = float3(1.0f, 1.0f, 0.7f)
);
void InitCommon(const float3& _pos, const float3& _color);
void Draw(CVertexArray* va) override;
bool Update() override;
static bool GetMemberInfo(SExpGenSpawnableMemberInfo& memberInfo);
private:
float3 side1;
float3 side2;
int ttl;
float flashSize;
float circleSize;
float circleGrowth;
float circleAlpha;
float flashAlpha;
float flashAge;
float flashAgeSpeed;
float circleAlphaDec;
SColor color;
};
/**
* A simple groundflash, using a texture and a colormap, used in
* the custom explosion-generator (unlike CStandardGroundFlash)
*/
class CSimpleGroundFlash : public CGroundFlash
{
public:
CR_DECLARE_DERIVED(CSimpleGroundFlash)
CSimpleGroundFlash();
void Init(const CUnit* owner, const float3& offset) override;
void Draw(CVertexArray* va) override;
bool Update() override;
static bool GetMemberInfo(SExpGenSpawnableMemberInfo& memberInfo);
private:
float3 side1;
float3 side2;
float sizeGrowth;
int ttl;
float age, agerate;
CColorMap* colorMap;
AtlasedTexture* texture;
};
/**
* A simple groundflash, only creating one quad with specified texture.
* This one also sets alwaysVisible=true because it is used by the
* seismic effect, so do not use it (or fix it) for things that should
* be affected by LOS.
*/
class CSeismicGroundFlash : public CGroundFlash
{
public:
CR_DECLARE_DERIVED(CSeismicGroundFlash)
CSeismicGroundFlash(
const float3& _pos,
int _ttl,
int _fade,
float _size,
float _sizeGrowth,
float _alpha,
const float3& _color
);
void Draw(CVertexArray* va) override;
/// @return false when it should be deleted
bool Update() override;
private:
float3 side1;
float3 side2;
AtlasedTexture* texture;
float sizeGrowth;
float alpha;
int fade;
int ttl;
SColor color;
};
#endif /* GROUND_FLASH_H */
|