chore: corner case fix WIP
This commit is contained in:
@@ -96,39 +96,92 @@ function is_area_red_green(
|
||||
// - Every surround must form a line
|
||||
// old: Every corner needs to be surrounded
|
||||
// Error 1: 4560365591
|
||||
// Error 2: 248032161
|
||||
// Error 3: 4638219675
|
||||
// NOTE: I do not need to verify every wall, just the opposite corners
|
||||
// Verify left wall
|
||||
// floor.red_tiles.some((tile) => {
|
||||
// // point and side or point and point and the inverse
|
||||
// });
|
||||
const l_cover =
|
||||
floor.red_tiles.some((tile) =>
|
||||
tile.x <= tl_corner.x && tile.y <= tl_corner.y
|
||||
) && floor.red_tiles.some((tile) =>
|
||||
tile.x <= bl_corner.x && tile.y >= bl_corner.y
|
||||
);
|
||||
// r
|
||||
const r_cover =
|
||||
floor.red_tiles.some((tile) =>
|
||||
tile.x >= tr_corner.x && tile.y <= tr_corner.y
|
||||
) && floor.red_tiles.some((tile) =>
|
||||
tile.x >= br_corner.x && tile.y >= br_corner.y
|
||||
);
|
||||
// b
|
||||
const b_cover =
|
||||
floor.red_tiles.some((tile) =>
|
||||
tile.x <= bl_corner.x && tile.y >= bl_corner.y
|
||||
) && floor.red_tiles.some((tile) =>
|
||||
tile.x >= br_corner.x && tile.y >= br_corner.y
|
||||
);
|
||||
// t
|
||||
const t_cover =
|
||||
floor.red_tiles.some((tile) =>
|
||||
tile.x >= tr_corner.x && tile.y <= tr_corner.y
|
||||
) && floor.red_tiles.some((tile) =>
|
||||
tile.x <= tl_corner.x && tile.y <= tl_corner.y
|
||||
);
|
||||
const ls_cover = floor.red_tiles.some((tile) => {
|
||||
return (tile.x === tl_corner.x && tile.y <= tl_corner.y &&
|
||||
((floor.red_tiles.some((tile_2) =>
|
||||
tile_2.x === tile.x && tile_2.y >= bl_corner.y
|
||||
)) || (floor.red_tiles.some((tile_3) =>
|
||||
tile_3.x <= tile.x && tile_3.y >= bl_corner.y &&
|
||||
floor.red_tiles.some((tile_4) =>
|
||||
tile_3.x <= tile_4.x && tile_3.y === tile_4.y
|
||||
)
|
||||
)))) ||
|
||||
(tile.x === bl_corner.x && tile.y <= bl_corner.y &&
|
||||
((floor.red_tiles.some((tile_2) =>
|
||||
tile_2.x === tile.x && tile_2.y <= tl_corner.y
|
||||
)) || (floor.red_tiles.some((tile_3) =>
|
||||
tile_3.x <= tile.x && tile_3.y <= tl_corner.y &&
|
||||
floor.red_tiles.some((tile_4) =>
|
||||
tile_3.x <= tile_4.x && tile_3.y === tile_4.y
|
||||
)
|
||||
)))); // NOTE: should also compare with opposite situation (first side and then point or 2 sides)
|
||||
});
|
||||
const rs_cover = floor.red_tiles.some((tile) => {
|
||||
return (tile.x === tr_corner.x && tile.y <= tr_corner.y &&
|
||||
((floor.red_tiles.some((tile_2) =>
|
||||
tile_2.x === tile.x && tile_2.y >= br_corner.y
|
||||
)) || (floor.red_tiles.some((tile_3) =>
|
||||
tile_3.x <= tile.x && tile_3.y >= br_corner.y &&
|
||||
floor.red_tiles.some((tile_4) =>
|
||||
tile_3.x <= tile_4.x && tile_3.y === tile_4.y
|
||||
)
|
||||
)))) ||
|
||||
(tile.x === br_corner.x && tile.y >= br_corner.y &&
|
||||
((floor.red_tiles.some((tile_2) =>
|
||||
tile_2.x === tile.x && tile_2.y <= tr_corner.y
|
||||
)) || (floor.red_tiles.some((tile_3) =>
|
||||
tile_3.x <= tile.x && tile_3.y <= tr_corner.y &&
|
||||
floor.red_tiles.some((tile_4) =>
|
||||
tile_3.x <= tile_4.x && tile_3.y === tile_4.y
|
||||
)
|
||||
)))); // NOTE: should also compare with opposite situation (first side and then point)
|
||||
});
|
||||
const ts_cover = floor.red_tiles.some((tile) => {
|
||||
return (tile.x <= tl_corner.x && tile.y === tr_corner.y &&
|
||||
((floor.red_tiles.some((tile_2) =>
|
||||
tile_2.x >= tr_corner.x && tile_2.y === tile.y
|
||||
)) || (floor.red_tiles.some((tile_3) =>
|
||||
tile_3.x >= tile.x && tile_3.y <= tr_corner.y &&
|
||||
floor.red_tiles.some((tile_4) =>
|
||||
tile_3.x === tile_4.x && tile_3.y >= tile_4.y
|
||||
)
|
||||
)))) ||
|
||||
(tile.x >= bl_corner.x && tile.y === br_corner.y &&
|
||||
((floor.red_tiles.some((tile_2) =>
|
||||
tile_2.x <= br_corner.x && tile_2.y === tile.y
|
||||
)) || (floor.red_tiles.some((tile_3) =>
|
||||
tile_3.x >= tile.x && tile_3.y >= br_corner.y &&
|
||||
floor.red_tiles.some((tile_4) =>
|
||||
tile_3.x === tile_4.x && tile_3.y >= tile_4.y
|
||||
)
|
||||
)))); // NOTE: should also compare with opposite situation (first side and then point)
|
||||
});
|
||||
const bs_cover = floor.red_tiles.some((tile) => {
|
||||
return (tile.x <= bl_corner.x && tile.y === bl_corner.y &&
|
||||
((floor.red_tiles.some((tile_2) =>
|
||||
tile_2.x >= tr_corner.x && tile_2.y === tile.y
|
||||
)) || (floor.red_tiles.some((tile_3) =>
|
||||
tile_3.x >= tile.x && tile_3.y >= br_corner.y &&
|
||||
floor.red_tiles.some((tile_4) =>
|
||||
tile_3.x === tile_4.x && tile_3.y <= tile_4.y
|
||||
)
|
||||
)))) ||
|
||||
(tile.x >= tr_corner.x && tile.y === tr_corner.y &&
|
||||
((floor.red_tiles.some((tile_2) =>
|
||||
tile_2.x <= tl_corner.x && tile_2.y === tile.y
|
||||
)) || (floor.red_tiles.some((tile_3) =>
|
||||
tile_3.x >= tile.x && tile_3.y <= tr_corner.y &&
|
||||
floor.red_tiles.some((tile_4) =>
|
||||
tile_3.x === tile_4.x && tile_3.y <= tile_4.y
|
||||
)
|
||||
)))); // NOTE: should also compare with opposite situation (first side and then point)
|
||||
});
|
||||
|
||||
return l_cover && r_cover && b_cover && t_cover;
|
||||
return ls_cover && rs_cover && ts_cover && bs_cover;
|
||||
}
|
||||
|
||||
function calc_distance(a: Coordinate, b: Coordinate): number {
|
||||
|
||||
Reference in New Issue
Block a user