// // Created by trotfunky on 27/05/19. // #ifndef RAYCASTING_WORLD_H #define RAYCASTING_WORLD_H #include #include #include #include #include "Player.h" enum class BlockType { AIR, WALL, DOOR, WINDOW, }; class World { public: Player player; World(int w, int h, sf::Color groundColor = sf::Color::Green, sf::Color ceilingColor = sf::Color::Blue, std::vector worldMap = {}); int getW() const; int getH() const; BlockType getBlock(float x, float y) const; void setBlock(BlockType block, int x, int y, int width = 1, int height = 1); void render(sf::RenderWindow&) const; friend std::ostream& operator<<(std::ostream& ostream, World const & world); private: int w; int h; std::vector map; sf::Color groundColor; sf::Color ceilingColor; void fillColumn(sf::RenderWindow&, int column, float scale, sf::Color wallColor = sf::Color(127,127,127)) const; /** * Cast a ray from a given position and return the on-screen scale. * @param originX Ray X origin * @param originY Ray Y origin * @param orientation Angle to cast to, in degrees * @return Scale on the screen of the hit wall. */ float castRay(float originX, float originY, float orientation); }; #endif //RAYCASTING_WORLD_H