#pragma once #include #include #include #include #include #include #include "matrix.hpp" #include #include #include "dbc.hpp" #include "amt/pixel.hpp" #include "amt/texture.hpp" #include using Matrix = amt::Matrix; struct Raycaster { int PITCH=0; TexturePack textures; double posX = 0; double posY = 0; // initial direction vector double dirX = -1; double dirY = 0; // the 2d raycaster version of camera plane double planeX = 0; double planeY = 0.66; sf::Texture view_texture; sf::Sprite view_sprite; //ZED: USE smart pointer for this int $width; int $height; amt::PixelBuf pixels; sf::RenderWindow& $window; Matrix& $map; std::vector spriteOrder; std::vector spriteDistance; std::vector ZBuffer; // width Raycaster(sf::RenderWindow& window, Matrix &map, int width, int height); void draw_pixel_buffer(); void clear(); void cast_rays(); void draw_ceiling_floor(); void sprite_casting(); void sort_sprites(std::vector& order, std::vector& dist, int amount); void render(); bool empty_space(int new_x, int new_y); void run(double speed, int dir); void rotate(double speed, int dir); void position_camera(float player_x, float player_y); void set_position(int x, int y); inline size_t pixcoord(int x, int y) { return ((y) * $width) + (x); } };