We now have a scene we can twirl around and we can see the rays being cast in the left side.

master
Zed A. Shaw 1 day ago
parent b30ac77049
commit 35f6fcc01d
  1. 34
      fenscaster.cpp

@ -59,16 +59,16 @@ void draw_rect(Fenster &window, Point pos, Point size, uint32_t color) {
} }
} }
void draw_map_rect(Fenster &window, int x, int y, uint8_t color) { void draw_map_rect(Fenster &window, int x, int y, uint32_t color) {
draw_rect(window, draw_rect(window,
{size_t(x * TILE_SIZE), size_t(y * TILE_SIZE)}, {size_t(x * TILE_SIZE), size_t(y * TILE_SIZE)},
{size_t(TILE_SIZE-1), size_t(TILE_SIZE-1)}, {size_t(TILE_SIZE-1), size_t(TILE_SIZE-1)},
gray_color(color)); color);
} }
void draw_map(Fenster &window, Matrix &map) { void draw_map(Fenster &window, Matrix &map) {
uint8_t light_grey = 191; uint32_t light_grey = gray_color(191);
uint8_t dark_grey = 65; uint32_t dark_grey = gray_color(65);
for(size_t y = 0; y < matrix::height(map); y++) { for(size_t y = 0; y < matrix::height(map); y++) {
for(size_t x = 0; x < matrix::width(map); x++) { for(size_t x = 0; x < matrix::width(map); x++) {
@ -78,7 +78,31 @@ void draw_map(Fenster &window, Matrix &map) {
} }
void draw_line(Fenster &window, Point start, Point end) { void draw_line(Fenster &window, Point start, Point end) {
int x = int(start.x);
int y = int(start.y);
int x1 = int(end.x);
int y1 = int(end.y);
int dx = std::abs(x1 - x);
int sx = x < x1 ? 1 : -1;
int dy = std::abs(y1 - y) * -1;
int sy = y < y1 ? 1 : -1;
int error = dx + dy;
while(x != x1 || y != y1) {
int e2 = 2 * error;
if(e2 >= dy) {
error = error + dy;
x = x + sx;
}
if(e2 <= dx) {
error = error + dx;
y = y + sy;
}
window.px(x, y) = rgba_color(200, 20, 20, 255);
}
} }
void clear(Fenster &window) { void clear(Fenster &window) {
@ -90,7 +114,7 @@ void clear(Fenster &window) {
} }
void draw_map_rays(Fenster &window, int col, int row, Point target) { void draw_map_rays(Fenster &window, int col, int row, Point target) {
draw_map_rect(window, col, row, 100); draw_map_rect(window, col, row, rgba_color(100, 20, 20, 255));
draw_line(window, {size_t(player_x), size_t(player_y)}, target); draw_line(window, {size_t(player_x), size_t(player_y)}, target);
} }

Loading…
Cancel
Save