X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fghosttree.hpp;h=7e57d5c19d5010f4183bed5b75cee1b8acf0e529;hb=13c84268f16872f9b442251c4175a3a1a7a7899a;hp=c52b6a0a35e28d9b0cccf59b9338ab02a68e2f44;hpb=9f9a92cd9d8433c6d4d63b0178fd038a95b9e1a1;p=supertux.git diff --git a/src/badguy/ghosttree.hpp b/src/badguy/ghosttree.hpp index c52b6a0a3..7e57d5c19 100644 --- a/src/badguy/ghosttree.hpp +++ b/src/badguy/ghosttree.hpp @@ -19,30 +19,56 @@ #ifndef __GHOSTTREE_H__ #define __GHOSTTREE_H__ +#include #include "badguy.hpp" +class TreeWillOWisp; +class Lantern; + class GhostTree : public BadGuy { public: GhostTree(const lisp::Lisp& lisp); ~GhostTree(); + virtual bool is_flammable() const { return false; } + virtual bool is_freezable() const { return false; } + virtual void kill_fall() { } + void activate(); void active_update(float elapsed_time); - void willowisp_died(); - void start_sucking(); + void willowisp_died(TreeWillOWisp* willowisp); + virtual void draw(DrawingContext& context); + + virtual bool collides(GameObject& other, const CollisionHit& hit); + virtual HitResponse collision(GameObject& other, const CollisionHit& hit); + + void die(); private: - int willowisp_counter; + enum MyState { + STATE_IDLE, STATE_SUCKING, STATE_SWALLOWING, STATE_DYING + }; + MyState mystate; Timer willowisp_timer; float willo_spawn_y; float willo_radius; float willo_speed; int willo_color; + std::auto_ptr glow_sprite; Timer colorchange_timer; + Timer suck_timer; Timer root_timer; int treecolor; + Color suck_lantern_color; + + Lantern* suck_lantern; /**< Lantern that is currently being sucked in */ + + std::vector willowisps; + + bool is_color_deadly(Color color) const; + void spawn_lantern(); }; #endif