1 // SuperTux - Weak Block 2 // Copyright (C) 2006 Matthias Braun <matze@braunis.de> 3 // Copyright (C) 2006 Christoph Sommer <christoph.sommer@2006.expires.deltadevelopment.de> 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 #ifndef HEADER_SUPERTUX_OBJECT_WEAK_BLOCK_HPP 19 #define HEADER_SUPERTUX_OBJECT_WEAK_BLOCK_HPP 20 21 #include "object/moving_sprite.hpp" 22 23 class Bullet; 24 25 /** A block that can be destroyed by Bullet hits */ 26 class WeakBlock final : public MovingSprite 27 { 28 public: 29 WeakBlock(const ReaderMapping& mapping); 30 31 virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; 32 virtual void update(float dt_sec) override; 33 virtual void draw(DrawingContext& context) override; get_class() const34 virtual std::string get_class() const override { return "weak_block"; } get_display_name() const35 virtual std::string get_display_name() const override { return _("Weak Tile"); } 36 37 virtual ObjectSettings get_settings() override; 38 39 private: 40 virtual HitResponse collision_bullet(Bullet& bullet, const CollisionHit& hit); 41 42 private: 43 /** called by self when hit by a bullet */ 44 void startBurning(); 45 46 /** pass hit to nearby WeakBlock objects */ 47 void spreadHit(); 48 49 private: 50 enum State { 51 STATE_NORMAL, /**< default state */ 52 STATE_BURNING, /**< on fire, still solid */ 53 STATE_DISINTEGRATING /**< crumbling to dust, no longer solid */ 54 }; 55 56 private: 57 State state; 58 bool linked; 59 SpritePtr lightsprite; 60 61 private: 62 WeakBlock(const WeakBlock&) = delete; 63 WeakBlock& operator=(const WeakBlock&) = delete; 64 }; 65 66 #endif 67 68 /* EOF */ 69