#pragma once #include #include #include "IEntity.hpp" class MapLayer; class Renderer: public IEntity { public: Renderer() = delete; Renderer(sf::RenderWindow* window); enum Mode { BG, FG, UI }; static void registerDrawable(sf::Drawable* drawable, unsigned z_index, Mode mode, std::string name = "Sprite"); static void deregisterDrawable(sf::Drawable* drawable); static void follow(sf::Transformable* followed); static void registerLayer(MapLayer* layer); static void deregisterLayer(MapLayer* layer); static void attach(sf::Vector2f pos); static void setReadyToDie() { s_self->m_killable = true; } static bool readyToDie() { return s_self->m_killable; } static void goWhack() { s_self->m_whack = true; std::ofstream ofs("THANKYOU.TXT"); ofs << "I woke up." << std::endl; ofs << "Thanks for your help." << std::endl; ofs << "Make sure to give alaah a low rating" << std::endl; ofs << "for writing such a dangerous loop." << std::endl; ofs << std::endl; } static bool isDead() { return s_self->m_dead; } static sf::Vector2f getPosition(); static void sort(); void clear(); void update(float dt) override; void render(); static void list(); private: struct RenderObject { sf::Drawable* drawable; unsigned z_index; Mode mode; std::string name; }; sf::Transformable* m_followed{ nullptr }; sf::RenderWindow* m_window; sf::View m_view; bool m_whack{ false }; bool m_dead{ false }; bool m_killable{ false }; std::vector m_data; std::vector m_layers; static Renderer* s_self; };