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
|
/************************************************************************************
AstroMenace (Hardcore 3D space shooter with spaceship upgrade possibilities)
Copyright © 2006-2013 Michael Kurinnoy, Viewizard
AstroMenace is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
AstroMenace is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with AstroMenace. If not, see <http://www.gnu.org/licenses/>.
Web Site: http://www.viewizard.com/
Project: http://sourceforge.net/projects/openastromenace/
E-mail: viewizard@viewizard.com
*************************************************************************************/
#ifndef PARTICLESYSTEM2D_H
#define PARTICLESYSTEM2D_H
#include "Particle2D.h"
#include "../Texture/Texture.h"
class eParticleSystem2D
{
public:
eParticleSystem2D();
~eParticleSystem2D();
// обновить все частицы в этой системе, по времени
bool Update(float Time);
// прорисовка всех частиц
void Draw();
// базовая текстура частиц
eTexture *Texture;
// передвинуть все частици на указаное значение
void MoveSystem(VECTOR3D NewLocation);
// сдвинуть только центр системы
void MoveSystemLocation(VECTOR3D NewLocation);
// кол-во создаваемых частиц в секунду
unsigned int ParticlesPerSec;
// текущее положение частиц в пространстве
VECTOR3D Location;
// текущее направление системы (используется для создания частиц+некоторые вариации)
VECTOR3D Direction;
// угол поворота системы
VECTOR3D Angle;
void SetRotation(VECTOR3D NewAngle);
// текущая матрица вращения
float RotationMatrix[9];
// размер частиц в мировых координатах
float SizeStart;
float SizeVar;
float SizeEnd;
// Прозрачность частиц. Alpha 0 = невидем, Alpha 1 = видемость 100%
float AlphaStart;
float AlphaVar;
float AlphaEnd;
// Цвет частиц при старте и завершении
// линейно интерполируется
COLORVALUE2D ColorStart;
COLORVALUE2D ColorVar;
COLORVALUE2D ColorEnd;
// Скалярная скорость, с вектором направления получаем вектор движения
float Speed;
float SpeedVar;
// Скорость при создании, сохраняем, если будут менять скорость в процессе
float SpeedOnCreation;
// тип создания... 0-точка, 1-квадрат, 2-окружность
int CreationType;
VECTOR3D CreationSize;
// если нужно - корректировка размера частицы при создании относительно камеры
// мертвая зона (радиус, где вообще не рисуем)
float DeadZone;
// жизнь частицы в секундах
float Life;
float LifeVar;
// показывает, насколько отличным будет выбор направления у создаваемой частицы
// с направлением системы
float Theta;
// система притягивает частицы или нет
bool IsAttractive;
float AttractiveValue;
// можем ли мы создавать частицы или нет
bool IsSuppressed;
bool DestroyIfNoParticles;
// возраст системы в секундах
float Age;
// последнее время обновления системы
float TimeLastUpdate;
// остаток создания частицы (если к примеру 0.5 частиц в секунду стоит)
float EmissionResidue;
// подвязка к динамическому массиву
eParticle2D * Start;
eParticle2D * End;
void Attach(eParticle2D * NewParticle);
void Detach(eParticle2D * OldParticle);
};
#endif //PARTICLESYSTEM2D_H
|