screen.hpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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_SUPERTUX_SCREEN_HPP
  17. #define HEADER_SUPERTUX_SUPERTUX_SCREEN_HPP
  18. #include "sdk/integration.hpp"
  19. class Compositor;
  20. class Controller;
  21. union SDL_Event;
  22. /**
  23. * Abstract base class for code the MainLoop runs exclusively and full-screen.
  24. *
  25. * Examples of Screens are: The TitleScreen, a WorldMap, a level's
  26. * GameSession, a TextScroller, ...
  27. */
  28. class Screen
  29. {
  30. public:
  31. virtual ~Screen()
  32. {}
  33. /**
  34. * gets called before this screen gets activated (which is at least once
  35. * before the first draw or update call
  36. */
  37. virtual void setup()
  38. {}
  39. /** gets called when the current screen is temporarily suspended */
  40. virtual void leave()
  41. {}
  42. /**
  43. * gets called once per frame. The screen should draw itself in this function.
  44. * State changes should not be done in this function, but rather in update
  45. */
  46. virtual void draw(Compositor& compositor) = 0;
  47. /**
  48. * gets called for once (per logical) frame. Screens should do their state
  49. * updates and logic here
  50. */
  51. virtual void update(float dt_sec, const Controller& controller) = 0;
  52. /**
  53. * gets called whenever an SDL event occurs
  54. */
  55. virtual void event(const SDL_Event& ev) {}
  56. /**
  57. * gets called whenever the game window is resized or resolution settings are changed
  58. */
  59. virtual void on_window_resize() {}
  60. /**
  61. * Gives details about what the user is doing right now.
  62. *
  63. * @returns activity details for presence integrations
  64. */
  65. virtual IntegrationStatus get_status() const = 0;
  66. };
  67. #endif
  68. /* EOF */