annotate src/modules/graphics/opengl/ParticleSystem.cpp @ 1086:73f4863ee5b7

Applied the new style guidelines. Well, sort of. Lot's more to be done, but this is a start.
author rude
date Thu, 28 Jun 2012 23:52:33 +0200
parents ea70f7d54903
children adbce39432ec 86a44f2bc38f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1086
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
1 /**
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
2 * Copyright (c) 2006-2012 LOVE Development Team
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
3 *
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
4 * This software is provided 'as-is', without any express or implied
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
5 * warranty. In no event will the authors be held liable for any damages
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
6 * arising from the use of this software.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
7 *
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
8 * Permission is granted to anyone to use this software for any purpose,
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
9 * including commercial applications, and to alter it and redistribute it
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
10 * freely, subject to the following restrictions:
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
11 *
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
12 * 1. The origin of this software must not be misrepresented; you must not
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
13 * claim that you wrote the original software. If you use this software
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
14 * in a product, an acknowledgment in the product documentation would be
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
15 * appreciated but is not required.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
16 * 2. Altered source versions must be plainly marked as such, and must not be
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
17 * misrepresented as being the original software.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
18 * 3. This notice may not be removed or altered from any source distribution.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
19 **/
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
20
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
21 #include "ParticleSystem.h"
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
22
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
23 #include "common/math.h"
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
24
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
25 #include "GLee.h"
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
26 #include <cmath>
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
27 #include <cstdlib>
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
28
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
29 namespace love
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
30 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
31 namespace graphics
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
32 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
33 namespace opengl
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
34 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
35
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
36 namespace
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
37 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
38 Colorf colorToFloat(const Color &c)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
39 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
40 return Colorf((GLfloat)c.r/255.0f, (GLfloat)c.g/255.0f, (GLfloat)c.b/255.0f, (GLfloat)c.a/255.0f);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
41 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
42 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
43
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
44 float calculate_variation(float inner, float outer, float var)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
45 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
46 float low = inner - (outer/2.0f)*var;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
47 float high = inner + (outer/2.0f)*var;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
48 float r = (rand() / (float(RAND_MAX)+1));
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
49 return low*(1-r)+high*r;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
50 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
51
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
52
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
53 ParticleSystem::ParticleSystem(Image *sprite, unsigned int buffer)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
54 : pStart(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
55 , pLast(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
56 , pEnd(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
57 , active(true)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
58 , emissionRate(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
59 , emitCounter(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
60 , lifetime(-1)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
61 , life(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
62 , particleLifeMin(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
63 , particleLifeMax(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
64 , direction(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
65 , spread(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
66 , relative(false)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
67 , speedMin(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
68 , speedMax(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
69 , gravityMin(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
70 , gravityMax(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
71 , radialAccelerationMin(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
72 , radialAccelerationMax(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
73 , tangentialAccelerationMin(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
74 , tangentialAccelerationMax(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
75 , sizeVariation(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
76 , rotationMin(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
77 , rotationMax(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
78 , spinStart(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
79 , spinEnd(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
80 , spinVariation(0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
81 , offsetX(sprite->getWidth()*0.5f)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
82 , offsetY(sprite->getHeight()*0.5f)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
83 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
84 this->sprite = sprite;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
85 sprite->retain();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
86 sizes.push_back(1.0f);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
87 colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f));
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
88 setBufferSize(buffer);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
89 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
90
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
91 ParticleSystem::~ParticleSystem()
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
92 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
93 if (this->sprite != 0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
94 this->sprite->release();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
95
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
96 if (pStart != 0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
97 delete [] pStart;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
98 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
99
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
100 void ParticleSystem::add()
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
101 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
102 if (isFull()) return;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
103
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
104 float min,max;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
105
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
106 min = particleLifeMin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
107 max = particleLifeMax;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
108 if (min == max)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
109 pLast->life = min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
110 else
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
111 pLast->life = (rand() / (float(RAND_MAX)+1)) * (max - min) + min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
112 pLast->lifetime = pLast->life;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
113
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
114 pLast->position[0] = position.getX();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
115 pLast->position[1] = position.getY();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
116
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
117 min = direction - spread/2.0f;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
118 max = direction + spread/2.0f;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
119 pLast->direction = (rand() / (float(RAND_MAX)+1)) * (max - min) + min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
120
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
121 pLast->origin = position;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
122
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
123 min = speedMin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
124 max = speedMax;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
125 float speed = (rand() / (float(RAND_MAX)+1)) * (max - min) + min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
126 pLast->speed = love::Vector(cos(pLast->direction), sin(pLast->direction));
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
127 pLast->speed *= speed;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
128
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
129 min = gravityMin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
130 max = gravityMax;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
131 pLast->gravity = (rand() / (float(RAND_MAX)+1)) * (max - min) + min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
132
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
133 min = radialAccelerationMin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
134 max = radialAccelerationMax;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
135 pLast->radialAcceleration = (rand() / (float(RAND_MAX)+1)) * (max - min) + min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
136
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
137 min = tangentialAccelerationMin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
138 max = tangentialAccelerationMax;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
139 pLast->tangentialAcceleration = (rand() / (float(RAND_MAX)+1)) * (max - min) + min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
140
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
141 pLast->sizeOffset = (rand() / (float(RAND_MAX)+1)) * sizeVariation; // time offset for size change
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
142 pLast->sizeIntervalSize = (1.0f - (rand() / (float(RAND_MAX)+1)) * sizeVariation) - pLast->sizeOffset;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
143 pLast->size = sizes[(size_t)(pLast->sizeOffset - .5f) * (sizes.size() - 1)];
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
144
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
145 min = rotationMin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
146 max = rotationMax;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
147 pLast->spinStart = calculate_variation(spinStart, spinEnd, spinVariation);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
148 pLast->spinEnd = calculate_variation(spinEnd, spinStart, spinVariation);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
149 pLast->rotation = (rand() / (float(RAND_MAX)+1)) * (max - min) + min;;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
150
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
151 pLast->color = colors[0];
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
152
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
153 pLast++;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
154 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
155
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
156 void ParticleSystem::remove(particle *p)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
157 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
158 if (!isEmpty())
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
159 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
160 *p = *(--pLast);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
161 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
162 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
163
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
164 void ParticleSystem::setSprite(Image *image)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
165 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
166 if (sprite != 0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
167 sprite->release();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
168
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
169 sprite = image;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
170 sprite->retain();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
171 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
172
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
173 void ParticleSystem::setBufferSize(unsigned int size)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
174 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
175 // delete previous data
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
176 delete [] pStart;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
177
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
178 pLast = pStart = new particle[size];
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
179
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
180 pEnd = pStart + size;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
181 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
182
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
183 void ParticleSystem::setEmissionRate(int rate)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
184 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
185 emissionRate = rate;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
186 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
187
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
188 void ParticleSystem::setLifetime(float life)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
189 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
190 this->life = lifetime = life;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
191 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
192
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
193 void ParticleSystem::setParticleLife(float min, float max)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
194 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
195 particleLifeMin = min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
196 if (max == 0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
197 particleLifeMax = min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
198 else
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
199 particleLifeMax = max;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
200 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
201
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
202 void ParticleSystem::setPosition(float x, float y)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
203 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
204 position = love::Vector(x, y);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
205 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
206
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
207 void ParticleSystem::setDirection(float direction)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
208 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
209 this->direction = direction;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
210 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
211
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
212 void ParticleSystem::setSpread(float spread)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
213 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
214 this->spread = spread;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
215 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
216
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
217 void ParticleSystem::setRelativeDirection(bool relative)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
218 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
219 this->relative = relative;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
220 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
221
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
222 void ParticleSystem::setSpeed(float speed)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
223 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
224 speedMin = speedMax = speed;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
225 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
226
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
227 void ParticleSystem::setSpeed(float min, float max)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
228 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
229 speedMin = min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
230 speedMax = max;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
231 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
232
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
233 void ParticleSystem::setGravity(float gravity)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
234 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
235 gravityMin = gravityMax = gravity;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
236 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
237
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
238 void ParticleSystem::setGravity(float min, float max)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
239 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
240 gravityMin = min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
241 gravityMax = max;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
242 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
243
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
244 void ParticleSystem::setRadialAcceleration(float acceleration)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
245 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
246 radialAccelerationMin = radialAccelerationMax = acceleration;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
247 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
248
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
249 void ParticleSystem::setRadialAcceleration(float min, float max)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
250 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
251 radialAccelerationMin = min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
252 radialAccelerationMax = max;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
253 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
254
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
255 void ParticleSystem::setTangentialAcceleration(float acceleration)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
256 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
257 tangentialAccelerationMin = tangentialAccelerationMax = acceleration;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
258 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
259
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
260 void ParticleSystem::setTangentialAcceleration(float min, float max)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
261 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
262 tangentialAccelerationMin = min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
263 tangentialAccelerationMax = max;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
264 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
265
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
266 void ParticleSystem::setSize(float size)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
267 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
268 sizes.resize(1);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
269 sizes[0] = size;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
270 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
271
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
272 void ParticleSystem::setSize(const std::vector<float> &newSizes, float variation)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
273 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
274 sizes = newSizes;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
275 sizeVariation = variation;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
276 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
277
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
278 void ParticleSystem::setSizeVariation(float variation)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
279 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
280 sizeVariation = variation;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
281 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
282
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
283 void ParticleSystem::setRotation(float rotation)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
284 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
285 rotationMin = rotationMax = rotation;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
286 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
287
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
288 void ParticleSystem::setRotation(float min, float max)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
289 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
290 rotationMin = min;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
291 rotationMax = max;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
292 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
293
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
294 void ParticleSystem::setSpin(float spin)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
295 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
296 spinStart = spin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
297 spinEnd = spin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
298 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
299
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
300 void ParticleSystem::setSpin(float start, float end)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
301 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
302 spinStart = start;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
303 spinEnd = end;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
304 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
305
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
306 void ParticleSystem::setSpin(float start, float end, float variation)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
307 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
308 spinStart = start;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
309 spinEnd = end;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
310 spinVariation = variation;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
311 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
312
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
313 void ParticleSystem::setSpinVariation(float variation)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
314 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
315 spinVariation = variation;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
316 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
317
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
318 void ParticleSystem::setColor(const Color &color)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
319 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
320 colors.resize(1);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
321 colors[0] = colorToFloat(color);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
322 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
323
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
324 void ParticleSystem::setColor(const std::vector<Color> &newColors)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
325 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
326 colors.resize(newColors.size());
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
327 for (size_t i = 0; i < newColors.size(); ++i)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
328 colors[i] = colorToFloat(newColors[i]);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
329 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
330
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
331 void ParticleSystem::setOffset(float x, float y)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
332 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
333 offsetX = x;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
334 offsetY = y;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
335 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
336
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
337 float ParticleSystem::getX() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
338 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
339 return position.getX();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
340 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
341
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
342 float ParticleSystem::getY() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
343 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
344 return position.getY();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
345 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
346
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
347 const love::Vector &ParticleSystem::getPosition() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
348 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
349 return position;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
350 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
351
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
352 float ParticleSystem::getDirection() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
353 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
354 return direction;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
355 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
356
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
357 float ParticleSystem::getSpread() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
358 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
359 return spread;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
360 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
361
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
362 float ParticleSystem::getOffsetX() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
363 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
364 return offsetX;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
365 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
366
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
367 float ParticleSystem::getOffsetY() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
368 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
369 return offsetY;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
370 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
371
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
372 int ParticleSystem::count() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
373 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
374 return (int)(pLast - pStart);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
375 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
376
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
377 void ParticleSystem::start()
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
378 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
379 active = true;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
380 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
381
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
382 void ParticleSystem::stop()
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
383 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
384 active = false;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
385 life = lifetime;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
386 emitCounter = 0;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
387 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
388
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
389 void ParticleSystem::pause()
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
390 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
391 active = false;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
392 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
393
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
394 void ParticleSystem::reset()
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
395 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
396 pLast = pStart;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
397 life = lifetime;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
398 emitCounter = 0;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
399 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
400
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
401 bool ParticleSystem::isActive() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
402 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
403 return active;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
404 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
405
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
406 bool ParticleSystem::isEmpty() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
407 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
408 return pStart == pLast;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
409 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
410
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
411 bool ParticleSystem::isFull() const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
412 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
413 return pLast == pEnd;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
414 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
415
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
416 void ParticleSystem::draw(float x, float y, float angle, float sx, float sy, float ox, float oy, float kx, float ky) const
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
417 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
418 if (sprite == 0) return; // just in case of failure
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
419
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
420 glPushMatrix();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
421 glPushAttrib(GL_CURRENT_BIT);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
422
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
423 Matrix t;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
424 t.setTransformation(x, y, angle, sx, sy, ox, oy, kx, ky);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
425 glMultMatrixf((const GLfloat *)t.getElements());
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
426
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
427 particle *p = pStart;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
428 while (p != pLast)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
429 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
430 glPushMatrix();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
431
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
432 glColor4f(p->color.r, p->color.g, p->color.b, p->color.a);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
433 sprite->draw(p->position[0], p->position[1], p->rotation, p->size, p->size, offsetX, offsetY, 0.0f, 0.0f);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
434
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
435 glPopMatrix();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
436 p++;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
437 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
438
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
439 glPopAttrib();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
440 glPopMatrix();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
441 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
442
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
443 void ParticleSystem::update(float dt)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
444 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
445 // Traverse all particles and update.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
446 particle *p = pStart;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
447
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
448 // Make some more particles.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
449 if (active)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
450 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
451 float rate = 1.0f / emissionRate; // the amount of time between each particle emit
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
452 emitCounter += dt;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
453 while (emitCounter > rate)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
454 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
455 add();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
456 emitCounter -= rate;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
457 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
458 /*int particles = (int)(emissionRate * dt);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
459 for (int i = 0; i != particles; i++)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
460 add();*/
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
461
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
462 life -= dt;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
463 if (lifetime != -1 && life < 0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
464 stop();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
465 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
466
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
467 while (p != pLast)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
468 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
469 // Decrease lifespan.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
470 p->life -= dt;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
471
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
472 if (p->life > 0)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
473 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
474
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
475 // Temp variables.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
476 love::Vector radial, tangential, gravity(0, p->gravity);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
477 love::Vector ppos(p->position[0], p->position[1]);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
478
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
479 // Get vector from particle center to particle.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
480 radial = ppos - p->origin;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
481 radial.normalize();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
482 tangential = radial;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
483
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
484 // Resize radial acceleration.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
485 radial *= p->radialAcceleration;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
486
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
487 // Calculate tangential acceleration.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
488 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
489 float a = tangential.getX();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
490 tangential.setX(-tangential.getY());
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
491 tangential.setY(a);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
492 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
493
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
494 // Resize tangential.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
495 tangential *= p->tangentialAcceleration;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
496
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
497 // Update position.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
498 p->speed += (radial+tangential+gravity)*dt;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
499
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
500 // Modify position.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
501 ppos += p->speed * dt;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
502
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
503 p->position[0] = ppos.getX();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
504 p->position[1] = ppos.getY();
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
505
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
506 const float t = 1.0f - p->life / p->lifetime;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
507
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
508 // Rotate.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
509 p->rotation += (p->spinStart * (1.0f - t) + p->spinEnd * t)*dt;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
510
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
511 // Change size according to given intervals:
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
512 // i = 0 1 2 3 n-1
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
513 // |-------|-------|------|--- ... ---|
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
514 // t = 0 1/(n-1) 3/(n-1) 1
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
515 //
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
516 // `s' is the interpolation variable scaled to the current
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
517 // interval width, e.g. if n = 5 and t = 0.3, then the current
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
518 // indices are 1,2 and s = 0.3 - 0.25 = 0.05
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
519 float s = p->sizeOffset + t * p->sizeIntervalSize; // size variation
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
520 s *= (float)(sizes.size() - 1); // 0 <= s < sizes.size()
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
521 size_t i = (size_t)s;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
522 size_t k = (i == sizes.size() - 1) ? i : i + 1; // boundary check (prevents failing on t = 1.0f)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
523 s -= (float)i; // transpose s to be in interval [0:1]: i <= s < i + 1 ~> 0 <= s < 1
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
524 p->size = sizes[i] * (1.0f - s) + sizes[k] * s;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
525
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
526 // Update color according to given intervals (as above)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
527 s = t * (float)(colors.size() - 1);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
528 i = (size_t)s;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
529 k = (i == colors.size() - 1) ? i : i + 1;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
530 s -= (float)i; // 0 <= s <= 1
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
531 p->color = colors[i] * (1.0f - s) + colors[k] * s;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
532
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
533 // Next particle.
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
534 p++;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
535 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
536 else
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
537 {
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
538 remove(p);
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
539
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
540 if (p >= pLast)
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
541 return;
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
542 } // else
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
543 } // while
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
544 }
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
545
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
546 } // opengl
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
547 } // graphics
73f4863ee5b7 Applied the new style guidelines.
rude
parents: 979
diff changeset
548 } // love