1// SuperTux
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#ifndef HEADER_SUPERTUX_OBJECT_CANDLE_HPP
18#define HEADER_SUPERTUX_OBJECT_CANDLE_HPP
19
20#include "object/moving_sprite.hpp"
21#include "scripting/candle.hpp"
22#include "squirrel/exposed_object.hpp"
23
24/**
25 * A burning candle: Simple, scriptable level decoration.
26 */
27class Candle final : public MovingSprite,
28 public ExposedObject<Candle, scripting::Candle>
29{
30public:
31 Candle(const ReaderMapping& mapping);
32 virtual void draw(DrawingContext& context) override;
33
34 virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override;
35 virtual std::string get_class() const override { return "candle"; }
36 virtual std::string get_display_name() const override { return _("Candle"); }
37
38 virtual ObjectSettings get_settings() override;
39 virtual void after_editor_set() override;
40
41 /** @name Scriptable Methods
42 @{ */
43 void puff_smoke(); /**< spawn a puff of smoke */
44 bool get_burning() const; /**< returns true if candle is lighted */
45 void set_burning(bool burning); /**< true: light candle, false: extinguish candle */
46 /** @} */
47
48private:
49 bool burning; /**< true if candle is currently lighted */
50 bool flicker; /**< true if candle light is to flicker */
51 Color lightcolor; /**< determines color or light given off */
52 SpritePtr candle_light_1; /**< drawn to lightmap */
53 SpritePtr candle_light_2; /**< drawn to lightmap (alternative image) */
54
55private:
56 Candle(const Candle&) = delete;
57 Candle& operator=(const Candle&) = delete;
58};
59
60#endif
61
62/* EOF */
63