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
19#include <assert.h>
20#include <math.h>
21
22#include "math/random.hpp"
23#include "math/util.hpp"
24
25PulsingLight::PulsingLight(const Vector& center, float cycle_len_, float min_alpha_, float max_alpha_, const Color& color_) :
26 Light(center, color_),
27 min_alpha(min_alpha_),
28 max_alpha(max_alpha_),
29 cycle_len(cycle_len_),
30 t(0)
31{
32 assert(cycle_len > 0);
33
34 // start with random phase offset
35 t = gameRandom.randf(0.0, cycle_len);
36}
37
38PulsingLight::~PulsingLight()
39{
40}
41
42void
43PulsingLight::update(float dt_sec)
44{
45 Light::update(dt_sec);
46
47 t += dt_sec;
48 if (t > cycle_len) t -= cycle_len;
49}
50
51void
52PulsingLight::draw(DrawingContext& context)
53{
54 Color old_color = color;
55
56 color.alpha *= min_alpha + ((max_alpha - min_alpha) * cosf(math::TAU * t / cycle_len));
57 Light::draw(context);
58
59 color = old_color;
60}
61
62/* EOF */
63