README.md edited online with Bitbucket
[gdash.git] / src / cave / particle.cpp
blobc757c780e1600c38ea033170f02b6bbc447bd186
1 /*
2 * Copyright (c) 2007-2013, Czirkos Zoltan http://code.google.com/p/gdash/
4 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sublicense, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
12 * The above copyright notice and this permission notice shall be
13 * included in all copies or substantial portions of the Software.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
19 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
20 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 #include <glib.h>
26 #include "cave/particle.hpp"
28 ParticleSet::ParticleSet(int count, float size, float opacity, float p0x, float p0y, float dp0x, float dp0y, float v0x, float v0y, float dvx, float dvy, const GdColor &color)
29 : color(color)
30 , life(1000)
31 , is_new(true)
32 , size(size)
33 , opacity(opacity)
34 , particles(count) {
35 for (size_t i = 0; i < particles.size(); ++i) {
36 Particle &p = particles[i];
37 p.px = p0x + g_random_double_range(-dp0x, dp0x);
38 p.py = p0y + g_random_double_range(-dp0y, dp0y);
39 p.vx = v0x + g_random_double_range(-dvx, dvx);
40 p.vy = v0y + g_random_double_range(-dvy, dvy);
45 void ParticleSet::move(int dt_ms) {
46 float dt = dt_ms / 1000.0;
48 for (size_t i = 0; i < particles.size(); ++i) {
49 Particle &p = particles[i];
50 p.px += p.vx * dt;
51 p.py += p.vy * dt;
54 life -= dt_ms;
58 void ParticleSet::normalize(double factor) {
59 if (!is_new)
60 return;
61 is_new = false;
63 size *= factor;
64 for (size_t i = 0; i < particles.size(); ++i) {
65 Particle &p = particles[i];
66 p.px *= factor;
67 p.py *= factor;
68 p.vx *= factor;
69 p.vy *= factor;