parent
ec8f8b6a36
commit
7d00d348f6
|
@ -717,7 +717,6 @@ void init_level_scene(LevelScene_t* scene)
|
|||
|
||||
scene->data.tilemap.width = DEFAULT_MAP_WIDTH;
|
||||
scene->data.tilemap.height = DEFAULT_MAP_HEIGHT;
|
||||
scene->data.tilemap.max_water_level = MAX_WATER_LEVEL;
|
||||
scene->data.tilemap.tile_size = TILE_SIZE;
|
||||
scene->data.tilemap.n_tiles = scene->data.tilemap.width * scene->data.tilemap.height;
|
||||
assert(scene->data.tilemap.n_tiles <= MAX_N_TILES);
|
||||
|
@ -728,6 +727,7 @@ void init_level_scene(LevelScene_t* scene)
|
|||
all_tiles[i].solid = NOT_SOLID;
|
||||
all_tiles[i].tile_type = EMPTY_TILE;
|
||||
all_tiles[i].moveable = true;
|
||||
all_tiles[i].max_water_level = 4;
|
||||
sc_map_init_64v(&all_tiles[i].entities_set, 16, 0);
|
||||
all_tiles[i].size = (Vector2){TILE_SIZE, TILE_SIZE};
|
||||
}
|
||||
|
|
|
@ -14,7 +14,8 @@ typedef struct Tile {
|
|||
unsigned int tile_type;
|
||||
SolidType_t solid;
|
||||
uint8_t def;
|
||||
unsigned int water_level;
|
||||
uint8_t water_level;
|
||||
uint8_t max_water_level;
|
||||
struct sc_map_64v entities_set;
|
||||
Vector2 offset;
|
||||
Vector2 size;
|
||||
|
@ -27,7 +28,7 @@ typedef struct TileGrid
|
|||
unsigned int height;
|
||||
unsigned int n_tiles;
|
||||
unsigned int tile_size;
|
||||
unsigned int max_water_level;
|
||||
//unsigned int max_water_level;
|
||||
Tile_t* tiles;
|
||||
}TileGrid_t;
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ static void runner_BFS(const TileGrid_t* tilemap, CWaterRunner_t* p_crunner, int
|
|||
|
||||
if (
|
||||
((curr_height <= init_height && !first_reached) || curr_height > curr_low)
|
||||
&& curr_tile->water_level < tilemap->max_water_level
|
||||
&& curr_tile->water_level < curr_tile->max_water_level
|
||||
)
|
||||
{
|
||||
first_reached = true;
|
||||
|
@ -84,8 +84,8 @@ static void runner_BFS(const TileGrid_t* tilemap, CWaterRunner_t* p_crunner, int
|
|||
|
||||
if (
|
||||
next_tile->solid == SOLID
|
||||
|| next_tile->water_level == tilemap->max_water_level
|
||||
|| curr_tile->water_level == tilemap->max_water_level
|
||||
|| next_tile->water_level >= next_tile->max_water_level
|
||||
|| curr_tile->water_level >= curr_tile->max_water_level
|
||||
)
|
||||
{
|
||||
if (curr_idx % p_crunner->bfs_tilemap.width != 0)
|
||||
|
@ -103,7 +103,7 @@ static void runner_BFS(const TileGrid_t* tilemap, CWaterRunner_t* p_crunner, int
|
|||
}
|
||||
}
|
||||
|
||||
if (curr_tile->water_level == tilemap->max_water_level)
|
||||
if (curr_tile->water_level >= curr_tile->max_water_level)
|
||||
{
|
||||
|
||||
next = curr_idx - p_crunner->bfs_tilemap.width;
|
||||
|
@ -227,7 +227,8 @@ void update_water_runner_system(Scene_t* scene)
|
|||
break;
|
||||
case REACHABILITY_SEARCH:
|
||||
{
|
||||
if (tilemap.tiles[p_crunner->current_tile].water_level == tilemap.max_water_level)
|
||||
Tile_t* curr_tile = tilemap.tiles + p_crunner->current_tile;
|
||||
if (curr_tile->water_level >= curr_tile->max_water_level)
|
||||
{
|
||||
p_crunner->state = BFS_RESET;
|
||||
break;
|
||||
|
@ -282,11 +283,11 @@ void update_water_runner_system(Scene_t* scene)
|
|||
p_crunner->bfs_tilemap.tilemap[curr_idx].reachable
|
||||
)
|
||||
{
|
||||
if (curr_tile->water_level < tilemap.max_water_level)
|
||||
if (curr_tile->water_level < curr_tile->max_water_level)
|
||||
{
|
||||
curr_tile->water_level++;
|
||||
}
|
||||
if (curr_tile->water_level != tilemap.max_water_level)
|
||||
if (curr_tile->water_level < curr_tile->max_water_level)
|
||||
{
|
||||
p_crunner->counter++;
|
||||
}
|
||||
|
|
27
water_test.c
27
water_test.c
|
@ -55,19 +55,16 @@ static void level_scene_render_func(Scene_t* scene)
|
|||
DrawRectangle(x, y, TILE_SIZE, TILE_SIZE, BLACK);
|
||||
}
|
||||
|
||||
//if (tilemap.tiles[i].water_level > 0)
|
||||
{
|
||||
float water_height = tilemap.tiles[i].water_level * 1.0f / tilemap.max_water_level;
|
||||
// Draw water tile
|
||||
Color water_colour = ColorAlpha(BLUE, 0.5);
|
||||
DrawRectangle(
|
||||
x,
|
||||
y + (1.0f - water_height) * TILE_SIZE,
|
||||
TILE_SIZE,
|
||||
water_height * TILE_SIZE,
|
||||
water_colour
|
||||
);
|
||||
}
|
||||
uint32_t water_height = tilemap.tiles[i].water_level * WATER_BBOX_STEP;
|
||||
// Draw water tile
|
||||
Color water_colour = ColorAlpha(BLUE, 0.5);
|
||||
DrawRectangle(
|
||||
x,
|
||||
y + (TILE_SIZE - water_height),
|
||||
TILE_SIZE,
|
||||
water_height,
|
||||
water_colour
|
||||
);
|
||||
}
|
||||
|
||||
sc_map_foreach_value(&scene->ent_manager.entities, p_ent)
|
||||
|
@ -237,7 +234,7 @@ static void toggle_block_system(Scene_t* scene)
|
|||
}
|
||||
else
|
||||
{
|
||||
tilemap.tiles[tile_idx].water_level = tilemap.max_water_level;
|
||||
tilemap.tiles[tile_idx].water_level = tilemap.tiles[tile_idx].max_water_level;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -362,7 +359,6 @@ int main(void)
|
|||
scene.data.tilemap.width = DEFAULT_MAP_WIDTH;
|
||||
scene.data.tilemap.height = DEFAULT_MAP_HEIGHT;
|
||||
scene.data.tilemap.tile_size = TILE_SIZE;
|
||||
scene.data.tilemap.max_water_level = 4;
|
||||
scene.data.tilemap.n_tiles = scene.data.tilemap.width * scene.data.tilemap.height;
|
||||
assert(scene.data.tilemap.n_tiles <= MAX_N_TILES);
|
||||
scene.data.tilemap.tiles = all_tiles;
|
||||
|
@ -372,6 +368,7 @@ int main(void)
|
|||
all_tiles[i].solid = NOT_SOLID;
|
||||
all_tiles[i].tile_type = EMPTY_TILE;
|
||||
all_tiles[i].moveable = true;
|
||||
all_tiles[i].max_water_level = 3;
|
||||
sc_map_init_64v(&all_tiles[i].entities_set, 16, 0);
|
||||
all_tiles[i].size = (Vector2){TILE_SIZE, TILE_SIZE};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue