- static int fish_counter = 0;
- fish_counter ++;
-
- if( fish_counter > 20 )
- {
- fish_counter = 0;
-
- // Advance characters
- for( int i = 0; i < map.num_fishes; i ++ )
- {
- struct fish *fish = map.fishes + i;
-
- if( !fish->alive )
- continue;
-
- struct cell *tile, *next;
- tile = map_tile_at( fish->co );
-
- if( tile->flags & CELL_FLAG_OUTPUT )
- {
- vg_info( "Fish got zucced (%d)\n", i );
- fish->alive = 0;
- continue;
- }
-
- int die = 0;
- if( tile->flags & CELL_FLAG_SPLIT )
- {
- die = 1;
- int new_dir[][2] = { {0,-1},{1,0},{-1,0} };
- int *test_dir;
-
- for( int j = 0; j < 3; j ++ )
- {
- test_dir = new_dir[ tile->state ];
- tile->state = (tile->state+1)%3;
-
- next = map_tile_at( (int[2]){ fish->co[0]+test_dir[0], fish->co[1]+test_dir[1] } );
- if( next && (next->flags & (CELL_FLAG_WALKABLE)) )
- {
- fish->dir[0] = test_dir[0];
- fish->dir[1] = test_dir[1];
- die = 0;
- break;
- }
- }
- }
-
- next = map_tile_at( (int[2]){ fish->co[0]+fish->dir[0], fish->co[1]+fish->dir[1] } );
- if( !next || (next && !(next->flags & CELL_FLAG_WALKABLE)) )
- {
- // Try UP
- die = 1;
- }
-
- if( die )
- {
- vg_info( "Fish died! (%d)\n", i );
- fish->alive = 0;
- continue;
- }
-
-
- fish->co[0] += fish->dir[0];
- fish->co[1] += fish->dir[1];
- }
-
- // Try spawn fish
- for( int i = 0; i < arrlen( map.io ); i ++ )
- {
- struct cell *input = &map.cells[ map.io[i] ];
-
- if( input->flags & CELL_FLAG_INPUT )
- {
- if( input->state < arrlen( input->conditions ) )
- {
- struct fish *fish = &map.fishes[ map.num_fishes ];
- map_tile_coords_from_index( map.io[i], fish->co );
-
- int output_dirs[][2] = { {0,-1}, {-1,0}, {1,0} };
- int can_spawn = 0;
-
- for( int i = 0; i < vg_list_size( output_dirs ); i ++ )
- {
- int *dir = output_dirs[i];
- struct cell *next = map_tile_at( (int[2]){ fish->co[0]+dir[0], fish->co[1]+dir[1] } );
- if( next && next->flags & CELL_FLAG_CANAL )
- {
- fish->dir[0] = dir[0];
- fish->dir[1] = dir[1];
- can_spawn = 1;
- }
- }
-
- if( can_spawn )
- {
- fish->alive = 1;
- input->state ++;
- map.num_fishes ++;
- }
- }
- }
- }
-
- vg_info( "There are now %u active fish\n", map.num_fishes );
- }
-