Fix patch application
[supertux.git] / src / object / pulsing_light.cpp
1 //  SuperTux - Pulsing Light
2 //  Copyright (C) 2006 Christoph Sommer <christoph.sommer@2006.expires.deltadevelopment.de>
3 //
4 //  This program is free software: you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation, either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 #include "object/pulsing_light.hpp"
18 #include <math.h>
19
20 #include "math/random_generator.hpp"
21
22 PulsingLight::PulsingLight(const Vector& center, float cycle_len_, float min_alpha_, float max_alpha_, const Color& color_) :
23   Light(center, color_),
24   min_alpha(min_alpha_),
25   max_alpha(max_alpha_),
26   cycle_len(cycle_len_),
27   t(0)
28 {
29   assert(cycle_len > 0);
30
31   // start with random phase offset
32   t = gameRandom.randf(0.0, cycle_len);
33 }
34
35 PulsingLight::~PulsingLight()
36 {
37 }
38
39 void
40 PulsingLight::update(float elapsed_time)
41 {
42   Light::update(elapsed_time);
43
44   t += elapsed_time;
45   if (t > cycle_len) t -= cycle_len;
46 }
47
48 void
49 PulsingLight::draw(DrawingContext& context)
50 {
51   Color old_color = color;
52
53   color.alpha *= min_alpha + ((max_alpha - min_alpha) * cos(2 * M_PI * t / cycle_len));
54   Light::draw(context);
55
56   color = old_color;
57 }
58
59 /* EOF */