1
/************************************************************************************
3
AstroMenace (Hardcore 3D space shooter with spaceship upgrade possibilities)
4
Copyright © 2006-2012 Michael Kurinnoy, Viewizard
7
AstroMenace is free software: you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation, either version 3 of the License, or
10
(at your option) any later version.
12
AstroMenace is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with AstroMenace. If not, see <http://www.gnu.org/licenses/>.
21
Web Site: http://www.viewizard.com/
22
Project: http://sourceforge.net/projects/openastromenace/
23
E-mail: viewizard@viewizard.com
25
*************************************************************************************/
28
#ifndef PARTICLESYSTEM_H
29
#define PARTICLESYSTEM_H
33
#include "../Light/Light.h"
34
#include "../Texture/Texture.h"
48
// обновить все частицы в этой системе, по времени
49
bool Update(float Time);
50
// прорисовка всех частиц
51
void Draw(eTexture **CurrentTexture);
52
// базовая текстура частиц
55
// последовательность прорисовки
61
// начальный установки, или установки где пред. и текушее положения равны
62
void SetStartLocation(VECTOR3D NewLocation);
63
// передвинуть все частици на указаное значение
64
void MoveSystem(VECTOR3D NewLocation);
65
// сдвинуть только центр системы
66
void MoveSystemLocation(VECTOR3D NewLocation);
67
// развернуть направление системы
68
void RotateSystemByAngle(VECTOR3D NewDirection);
69
void RotateSystemAndParticlesByAngle(VECTOR3D NewAngle);
70
// разворот только частиц
71
void RotateParticlesByAngle(VECTOR3D NewAngle);
73
// остановить все частицы в системе
74
void StopAllParticles();
76
// поставить правильный полет частиц, т.е. учет внешней скорости
77
void ChangeSpeed(VECTOR3D Vel);
80
// текущее направление системы (используется для создания частиц+некоторые вариации)
82
// угол поворота системы
86
// кол-во создаваемых частиц в секунду
88
// кол-во частиц активных в настоящий момент
93
// если нужно замедлять и остановить
96
// размер частиц в мировых координатах
101
// Прозрачность частиц. Alpha 0 = невидем, Alpha 1 = видемость 100%
105
bool AlphaShowHide; // если нужно сначало ув. потом ум.
107
// Цвет частиц при старте и завершении
108
// линейно интерполируется
109
COLORVALUE3D ColorStart;
110
COLORVALUE3D ColorVar;
111
COLORVALUE3D ColorEnd;
113
// Скалярная скорость, с вектором направления получаем вектор движения
116
// Скорость при создании, сохраняем, если будут менять скорость в процессе
117
float SpeedOnCreation;
120
// тип создания... 0-точка, 1-куб, 2-сфера
122
VECTOR3D CreationSize;
125
// если нужно - корректировка размера частицы при создании относительно камеры
126
// мертвая зона (радиус, где вообще не рисуем)
128
// коэффициент уменьшения от расстояния (чем ближе к камере - тем меньше)
129
float Resize; // если 0, то у самой камеры будет нулевой, у крайней точки системы - Size
132
// жизнь частицы в секундах
136
// показывает, насколько отличным будет выбор направления у создаваемой частицы
137
// с направлением системы
140
// система притягивает частицы или нет
142
float AttractiveValue;
144
// можем ли мы создавать частицы или нет
146
bool DestroyIfNoParticles;
148
// возраст системы в секундах
151
// последнее время обновления системы
152
float TimeLastUpdate;
154
// остаток создания частицы (если к примеру 0.5 частиц в секунду стоит)
155
float EmissionResidue;
157
// для проверки вхождения в видимую область
161
// подвязка к динамическому массиву
164
void Attach(eParticle * NewParticle);
165
void Detach(eParticle * OldParticle);
166
// указатели на цепь систем, для менеджера
167
eParticleSystem *Next;
168
eParticleSystem *Prev;
171
// источник света, если он нужен
173
bool LightNeedDeviation;
174
float LightDeviation;
175
float NextLightDeviation;
176
float LightDeviationSpeed;
178
// доступ к private данным
179
void GetLocation(VECTOR3D *Vec){*Vec = Location;};
184
// последнее положение системы (для интерполяции)
185
VECTOR3D PrevLocation;
186
// текущее положение частиц в пространстве
189
// матрицы поворота, для оптимизации просчетов
190
float CurrentRotationMat[9];
191
float OldInvRotationMat[9];
200
//-----------------------------------------------------------------------------
201
// Менеджер CParticleSystem
202
//-----------------------------------------------------------------------------
204
// Инициализация менеджера частиц
205
void vw_InitParticleSystems(bool UseGLSL, float Quality);
207
void vw_AttachParticleSystem(eParticleSystem * NewParticleSystem);
208
// Исключаем из списка
209
void vw_DetachParticleSystem(eParticleSystem * OldParticleSystem);
210
// Удаляем все объекты в списке
211
void vw_ReleaseAllParticleSystems();
212
// Прорисовываем все системы
213
void vw_DrawAllParticleSystems();
214
// Прорисовываем блок ParticleSystems
215
void vw_DrawParticleSystems(eParticleSystem **DrawParticleSystem, int Quantity);
216
// Проверяем все объекты, обновляем данные
217
void vw_UpdateAllParticleSystems(float Time);
222
#endif //PARTICLESYSTEM_H