+
+ for( int y = 1; y < world.h-1; y ++ )
+ {
+ for( int x = 1; x < world.w-1; x ++ )
+ {
+ struct cell *cell = &world.data[y*world.w+x];
+
+ if( !(cell->state & FLAG_CANAL) )
+ cell->water = 0;
+
+ if( cell->state & FLAG_INPUT )
+ cell->water = 8;
+
+ if( cell->water )
+ {
+ v2i dirs[] = {{1,0},{0,1},{-1,0},{0,-1}};
+
+ for( int i = 0; i < vg_list_size( dirs ); i ++ )
+ {
+ struct cell *neighbour = &world.data[(y+dirs[i][1])*world.w+x+dirs[i][0]];
+
+ if( neighbour->state & FLAG_CANAL )
+ {
+ neighbour->water = vg_max( neighbour->water, cell->water-1 );
+ }
+ }
+
+ cell->water --;
+ }
+ }
+ }