1// SuperTux
2// Copyright (C) 2015 Hume2 <teratux.mail@gmail.com>
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 "badguy/walking_candle.hpp"
18
19#include "object/lantern.hpp"
20#include "sprite/sprite.hpp"
21#include "util/reader_mapping.hpp"
22
23WalkingCandle::WalkingCandle(const ReaderMapping& reader)
24 : WalkingBadguy(reader, "images/creatures/mr_candle/mr-candle.sprite", "left", "right"),
25 lightcolor(1, 1, 1)
26{
27 walk_speed = 80;
28 max_drop_height = 64;
29
30 std::vector<float> vColor;
31 if (reader.get("color", vColor)) {
32 lightcolor = Color(vColor);
33 }
34 m_sprite->set_color(lightcolor);
35 m_lightsprite->set_color(lightcolor);
36
37 m_countMe = false;
38 m_glowing = true;
39}
40
41bool
42WalkingCandle::is_freezable() const
43{
44 return true;
45}
46
47bool
48WalkingCandle::is_flammable() const
49{
50 return m_frozen;
51}
52
53void
54WalkingCandle::freeze() {
55 BadGuy::freeze();
56 m_glowing = false;
57}
58
59void
60WalkingCandle::unfreeze() {
61 BadGuy::unfreeze();
62 m_glowing = true;
63}
64
65HitResponse
66WalkingCandle::collision(GameObject& other, const CollisionHit& hit) {
67 auto l = dynamic_cast<Lantern*>(&other);
68 if (l && !m_frozen) if (l->get_bbox().get_bottom() < m_col.m_bbox.get_top()) {
69 l->add_color(lightcolor);
70 run_dead_script();
71 remove_me();
72 return FORCE_MOVE;
73 }
74 return WalkingBadguy::collision(other, hit);
75}
76
77ObjectSettings
78WalkingCandle::get_settings()
79{
80 ObjectSettings result = BadGuy::get_settings();
81
82 result.add_color(_("Color"), &lightcolor, "color", Color::WHITE);
83
84 result.reorder({"color", "x", "y"});
85
86 return result;
87}
88
89void
90WalkingCandle::after_editor_set()
91{
92 m_sprite->set_color(lightcolor);
93 m_lightsprite->set_color(lightcolor);
94}
95
96/* EOF */
97