- Codi preparat per a pintar a partir de i fins a certes coordenades Y

This commit is contained in:
2025-09-26 11:43:37 +02:00
parent 2d7740a22d
commit 513f7426bf

View File

@@ -172,14 +172,14 @@ void drawColumn(sector &s, int screen_column, int start, int end, float a_inc, v
float dpix = 64/wall_height; float dpix = 64/wall_height;
float cpix = 0; float cpix = 0;
float wall_start = 120-(wall_height/64)*(64-height); float wall_start = 120-(wall_height/64)*(64-height);
if (wall_start<0) { if (wall_start<start) {
cpix = -wall_start*dpix; cpix = (start-wall_start)*dpix;
wall_height += wall_start; wall_height -= (start-wall_start);
wall_start=0; wall_start=start;
} }
// Pinta el sostre // Pinta el sostre
for (int y=0; y<wall_start-1; y++) { for (int y=start; y<wall_start-1; y++) {
float straight_dist = (277 * (64-height)) / (y - (240 >> 1)); float straight_dist = (277 * (64-height)) / (y - (240 >> 1));
float actual_dist = straight_dist / SDL_cosf(a_inc*DEG_TO_RAD); float actual_dist = straight_dist / SDL_cosf(a_inc*DEG_TO_RAD);
int tx = abs(int(actual_dist * SDL_cosf(angle*DEG_TO_RAD) - position.x)) % 64; int tx = abs(int(actual_dist * SDL_cosf(angle*DEG_TO_RAD) - position.x)) % 64;
@@ -189,14 +189,14 @@ void drawColumn(sector &s, int screen_column, int start, int end, float a_inc, v
// Pinta la pared // Pinta la pared
for (int i=0; i<wall_height; ++i) { for (int i=0; i<wall_height; ++i) {
if (i>=240) break; if (wall_start+i>=end) break;
putp(screen_column, wall_start+i, gif[(int(v)%64)+int(cpix)*64]); putp(screen_column, wall_start+i, gif[(int(v)%64)+int(cpix)*64]);
cpix += dpix; cpix += dpix;
} }
// Pinta el piso // Pinta el piso
int paint_end = wall_start+wall_height-1; int paint_end = wall_start+wall_height-1;
for (int y=paint_end+1; y<240-1; y++) { for (int y=paint_end+1; y<end-1; y++) {
float straight_dist = (277 * height) / (y - (240 >> 1)); float straight_dist = (277 * height) / (y - (240 >> 1));
float actual_dist = straight_dist / SDL_cosf(a_inc*DEG_TO_RAD); float actual_dist = straight_dist / SDL_cosf(a_inc*DEG_TO_RAD);
int tx = abs(int(actual_dist * SDL_cosf(angle*DEG_TO_RAD) + position.x)) % 64; int tx = abs(int(actual_dist * SDL_cosf(angle*DEG_TO_RAD) + position.x)) % 64;
@@ -287,7 +287,7 @@ int main(int argc, char *argv[])
infi.x = position.x + SDL_cosf(angle*DEG_TO_RAD)*40000; infi.x = position.x + SDL_cosf(angle*DEG_TO_RAD)*40000;
infi.y = position.y + SDL_sinf(angle*DEG_TO_RAD)*40000; infi.y = position.y + SDL_sinf(angle*DEG_TO_RAD)*40000;
drawColumn(s, screen_column, 0, 240, a_inc, infi); drawColumn(s, screen_column, 10, 220, a_inc, infi);
/* /*
vec2 result, tmp_result; vec2 result, tmp_result;
wall *w = nullptr; wall *w = nullptr;