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 | |
23 | WalkingCandle::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 | |
41 | bool |
42 | WalkingCandle::is_freezable() const |
43 | { |
44 | return true; |
45 | } |
46 | |
47 | bool |
48 | WalkingCandle::is_flammable() const |
49 | { |
50 | return m_frozen; |
51 | } |
52 | |
53 | void |
54 | WalkingCandle::freeze() { |
55 | BadGuy::freeze(); |
56 | m_glowing = false; |
57 | } |
58 | |
59 | void |
60 | WalkingCandle::unfreeze() { |
61 | BadGuy::unfreeze(); |
62 | m_glowing = true; |
63 | } |
64 | |
65 | HitResponse |
66 | WalkingCandle::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 | |
77 | ObjectSettings |
78 | WalkingCandle::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 | |
89 | void |
90 | WalkingCandle::after_editor_set() |
91 | { |
92 | m_sprite->set_color(lightcolor); |
93 | m_lightsprite->set_color(lightcolor); |
94 | } |
95 | |
96 | /* EOF */ |
97 | |