File: GroundFlash.h

package info (click to toggle)
spring 104.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 47,512 kB
  • sloc: cpp: 391,093; ansic: 79,943; python: 12,356; java: 12,201; awk: 5,889; sh: 1,826; xml: 655; makefile: 486; perl: 405; php: 211; objc: 194; sed: 2
file content (154 lines) | stat: -rw-r--r-- 3,106 bytes parent folder | download
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 */