electrifier.hpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // SuperTux
  2. // Copyright (C) 2006 Matthias Braun <matze@braunis.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. #ifndef HEADER_SUPERTUX_OBJECT_ELECTRIFIER_HPP
  17. #define HEADER_SUPERTUX_OBJECT_ELECTRIFIER_HPP
  18. #include "supertux/game_object.hpp"
  19. #include "supertux/timer.hpp"
  20. #include <map>
  21. #include <stdint.h>
  22. /** Changes all tiles sharing an ID of a key in a TileChangeMap to the
  23. key's assigned value(another tile ID) for a given amount of time,
  24. then removes itself Used by the Kugelblitz to electrify water -
  25. can be used for other effects, too */
  26. class Electrifier final : public GameObject
  27. {
  28. public:
  29. /** A one-to-one relation that maps one tile ID with another */
  30. using TileChangeMap = std::map<uint32_t, uint32_t>;
  31. public:
  32. Electrifier(TileChangeMap replacements, float seconds);
  33. Electrifier(uint32_t oldtile, uint32_t newtile, float seconds);
  34. virtual bool is_saveable() const override {
  35. return false;
  36. }
  37. protected:
  38. virtual void update(float dt_sec) override;
  39. virtual void draw(DrawingContext& context) override;
  40. private:
  41. TileChangeMap change_map;
  42. Timer duration;
  43. private:
  44. Electrifier(const Electrifier&) = delete;
  45. Electrifier& operator=(const Electrifier&) = delete;
  46. };
  47. #endif
  48. /* EOF */