Renderer.hpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #include <SFML/Graphics.hpp>
  3. #include <fstream>
  4. #include "IEntity.hpp"
  5. class MapLayer;
  6. class Renderer: public IEntity {
  7. public:
  8. Renderer() = delete;
  9. Renderer(sf::RenderWindow* window);
  10. enum Mode {
  11. BG, FG, UI
  12. };
  13. static void registerDrawable(sf::Drawable* drawable, unsigned z_index, Mode mode, std::string name = "Sprite");
  14. static void deregisterDrawable(sf::Drawable* drawable);
  15. static void follow(sf::Transformable* followed);
  16. static void registerLayer(MapLayer* layer);
  17. static void deregisterLayer(MapLayer* layer);
  18. static void attach(sf::Vector2f pos);
  19. static void setReadyToDie() {
  20. s_self->m_killable = true;
  21. }
  22. static bool readyToDie() {
  23. return s_self->m_killable;
  24. }
  25. static void goWhack() {
  26. s_self->m_whack = true;
  27. std::ofstream ofs("THANKYOU.TXT");
  28. ofs << "I woke up." << std::endl;
  29. ofs << "Thanks for your help." << std::endl;
  30. ofs << "Make sure to give alaah a low rating" << std::endl;
  31. ofs << "for writing such a dangerous loop." << std::endl;
  32. ofs << std::endl;
  33. }
  34. static bool isDead() {
  35. return s_self->m_dead;
  36. }
  37. static sf::Vector2f getPosition();
  38. static void sort();
  39. void clear();
  40. void update(float dt) override;
  41. void render();
  42. static void list();
  43. private:
  44. struct RenderObject {
  45. sf::Drawable* drawable;
  46. unsigned z_index;
  47. Mode mode;
  48. std::string name;
  49. };
  50. sf::Transformable* m_followed{ nullptr };
  51. sf::RenderWindow* m_window;
  52. sf::View m_view;
  53. bool m_whack{ false };
  54. bool m_dead{ false };
  55. bool m_killable{ false };
  56. std::vector<RenderObject> m_data;
  57. std::vector<MapLayer*> m_layers;
  58. static Renderer* s_self;
  59. };