diff --git a/sfmlcaster.cpp b/sfmlcaster.cpp index 66118b3..feb69f0 100644 --- a/sfmlcaster.cpp +++ b/sfmlcaster.cpp @@ -23,26 +23,23 @@ Matrix MAP{ {8,8,8,8,8,8,8,8,8} }; -const int SCREEN_HEIGHT=480; -const int SCREEN_WIDTH=SCREEN_HEIGHT * 2; +const int RAY_VIEW_WIDTH=1920; +const int RAY_VIEW_HEIGHT=1080; +const int RAY_VIEW_X=0; +const int RAY_VIEW_Y=0; + +const int SCREEN_HEIGHT=RAY_VIEW_HEIGHT; +const int SCREEN_WIDTH=1920; -const int THREED_VIEW_WIDTH=480; -const int THREED_VIEW_HEIGHT=480; const int MAP_SIZE=matrix::width(MAP); -const int TILE_SIZE=(SCREEN_WIDTH/2) / MAP_SIZE; -const float FOV = std::numbers::pi / 3.0; -const float HALF_FOV = FOV / 2; -const int CASTED_RAYS=120; -const float STEP_ANGLE = FOV / CASTED_RAYS; -const int MAX_DEPTH = MAP_SIZE * TILE_SIZE; -const float SCALE = (SCREEN_WIDTH / 2) / CASTED_RAYS; +const int TILE_SIZE=RAY_VIEW_HEIGHT / MAP_SIZE; int PITCH=0; // I chose fixed textures for this instead const int floorTexture = 3; const int ceilingTexture = 6; -float player_x = SCREEN_WIDTH / 4; -float player_y = SCREEN_WIDTH / 4; +float player_x = RAY_VIEW_HEIGHT / 2; +float player_y = RAY_VIEW_HEIGHT / 2; // x and y start position double posX = player_x / TILE_SIZE; @@ -63,9 +60,9 @@ std::vector texture[8]; #define texWidth 256 // must be power of two #define texHeight 256 // must be power of two -#define pixcoord(X, Y) ((Y) * SCREEN_HEIGHT) + (X) +#define pixcoord(X, Y) ((Y) * RAY_VIEW_WIDTH) + (X) -uint32_t pixels[SCREEN_HEIGHT * SCREEN_HEIGHT] = {0}; +uint32_t pixels[RAY_VIEW_WIDTH * RAY_VIEW_HEIGHT] = {0}; sf::Texture view_texture; sf::Sprite view_sprite; @@ -100,22 +97,8 @@ void draw_sfml_rect(sf::RenderWindow &window, sf::Vector2f pos, sf::Vector2f siz window.draw(rect); } -void draw_pixel_rect(sf::RenderWindow &window, Point pos, Point size, uint32_t color) { - size_t x_start = size_t(pos.x - SCREEN_HEIGHT); - size_t y_start = size_t(pos.y); - size_t width = size_t(size.x); - size_t height = size_t(size.y); - - for(size_t y = y_start; y < y_start + height; y++) { - for(size_t x = x_start; x < x_start + width; x++) { - size_t pixel_index = (y * SCREEN_HEIGHT) + x; - pixels[pixel_index] = color; - } - } -} - void draw_pixel_buffer(sf::RenderWindow &window) { - view_texture.update((uint8_t *)pixels, SCREEN_HEIGHT, SCREEN_HEIGHT, 0, 0); + view_texture.update((uint8_t *)pixels, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT, 0, 0); // BUG: can I do this once and just update it? window.draw(view_sprite); } @@ -167,7 +150,7 @@ void draw_line(sf::RenderWindow &window, Point start, Point end, uint32_t color) } void clear(sf::RenderWindow &window) { - std::fill_n(pixels, SCREEN_HEIGHT * SCREEN_HEIGHT, 0); + std::fill_n(pixels, RAY_VIEW_WIDTH * RAY_VIEW_HEIGHT, 0); window.clear(); } @@ -176,8 +159,8 @@ void draw_map_blocks(sf::RenderWindow &window, int col, int row) { } void ray_casting(sf::RenderWindow &window, Matrix& map) { - int w = THREED_VIEW_WIDTH; - int h = THREED_VIEW_HEIGHT; + int w = RAY_VIEW_WIDTH; + int h = RAY_VIEW_HEIGHT; for(int x = 0; x < w; x++) { // calculate ray position and direction @@ -241,9 +224,7 @@ void ray_casting(sf::RenderWindow &window, Matrix& map) { perpWallDist = (sideDistY - deltaDistY); } - draw_map_blocks(window, mapX, mapY); - - // TODO: player direction ray + // draw_map_blocks(window, mapX, mapY); int lineHeight = int(h / perpWallDist); @@ -287,8 +268,8 @@ void ray_casting(sf::RenderWindow &window, Matrix& map) { } void draw_ceiling_floor(sf::RenderWindow &window) { - int screenHeight = THREED_VIEW_HEIGHT; - int screenWidth = THREED_VIEW_HEIGHT; + int screenHeight = RAY_VIEW_HEIGHT; + int screenWidth = RAY_VIEW_WIDTH; for(int y = screenHeight / 2 + 1; y < screenHeight; ++y) { // rayDir for leftmost ray (x=0) and rightmost (x = w) @@ -353,7 +334,7 @@ void draw_ceiling_floor(sf::RenderWindow &window) { void draw_everything(sf::RenderWindow &window) { clear(window); - draw_map(window, MAP); + // draw_map(window, MAP); draw_ceiling_floor(window); ray_casting(window, MAP); draw_pixel_buffer(window); @@ -374,9 +355,9 @@ int main() { sf::RenderWindow window(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT), "SFMLCaster"); window.setVerticalSyncEnabled(true); - view_texture.create(SCREEN_HEIGHT, SCREEN_HEIGHT); + view_texture.create(RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT); view_sprite.setTexture(view_texture); - view_sprite.setPosition(THREED_VIEW_WIDTH, 0); + view_sprite.setPosition(RAY_VIEW_X, 0); load_textures();