From 89d962d2bc10600122fff481750c72e5e2be6185 Mon Sep 17 00:00:00 2001 From: En Yi Date: Fri, 21 Jul 2023 21:19:38 +0800 Subject: [PATCH] Fix runner bug of not reaching water surface Also fix bound checking in runner --- scenes/water_flow.c | 52 ++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/scenes/water_flow.c b/scenes/water_flow.c index 7164917..92343ad 100644 --- a/scenes/water_flow.c +++ b/scenes/water_flow.c @@ -63,38 +63,36 @@ static void runner_BFS(const TileGrid_t* tilemap, CWaterRunner_t* p_crunner, int unsigned int next = curr_idx + p_crunner->bfs_tilemap.width; Tile_t* next_tile = tilemap->tiles + next; - if ( - curr_height > curr_low - && curr_tile->water_level < tilemap->max_water_level - && next_tile->water_level < tilemap->max_water_level - ) - { - *lowest_tile = curr_idx; - } - - if (next < p_crunner->bfs_tilemap.len) { - to_go[0] = next_tile->solid != SOLID; - } - - if ( - next_tile->solid == SOLID - || next_tile->water_level == tilemap->max_water_level - || curr_tile->water_level == tilemap->max_water_level - ) - { - if (curr_idx % p_crunner->bfs_tilemap.width != 0) + if ( + curr_height > curr_low + && curr_tile->water_level < tilemap->max_water_level + ) { - next = curr_idx - 1; - next_tile = tilemap->tiles + next; - to_go[1] = next_tile->solid != SOLID; + *lowest_tile = curr_idx; } - next = curr_idx + 1; - if (next % p_crunner->bfs_tilemap.width != 0) + + to_go[0] = next_tile->solid != SOLID; + + if ( + next_tile->solid == SOLID + || next_tile->water_level == tilemap->max_water_level + || curr_tile->water_level == tilemap->max_water_level + ) { - next_tile = tilemap->tiles + next; - to_go[2] = next_tile->solid != SOLID; + if (curr_idx % p_crunner->bfs_tilemap.width != 0) + { + next = curr_idx - 1; + next_tile = tilemap->tiles + next; + to_go[1] = next_tile->solid != SOLID; + } + next = curr_idx + 1; + if (next % p_crunner->bfs_tilemap.width != 0) + { + next_tile = tilemap->tiles + next; + to_go[2] = next_tile->solid != SOLID; + } } }