function paint_fill(VECTOR* pPos, COLOR* pCol)
{
paint_begin();
COLOR pOldCol;
var start_pixel = pixel_for_bmap(paint_bmap, pPos.x, pPos.y); //start pixel
pixel_to_vec(pOldCol, NULL, paint_txtype, start_pixel); //start pixel color
paint_fill_spread(pPos, pCol, pOldCol); //replace pixels
wait_for(paint_fill_spread); //wait till all pixels done
paint_end(); // maybe the "draw_quad(paint_bmap, ..." is causing the bmap to unlock.
paint_begin(); //paint_begin required to re-fresh BMAP. I DONT KNOW why this is needed,
paint_end(); // maybe the "draw_quad(paint_bmap, ..." is causing the bmap to unlock.
}
function paint_fill_spread(VECTOR* ppPos, COLOR* ppCol, COLOR* ppOldCol)
{ VECTOR pPos; COLOR this_color, pCol, pOldCol;
vec_set(pPos, ppPos); vec_set(pCol, ppCol); vec_set(pOldCol, ppOldCol);
//
paint_point(pPos, pCol);
wait(1); //*** CRITICAL PLACEMENT ***
if (pPos.x<paint_w-1)
{
var this_pixel = pixel_for_bmap(paint_bmap,pPos.x+1,pPos.y);
pixel_to_vec(this_color, NULL, paint_txtype, this_pixel);
if(abs(vec_dist(pOldCol,this_color))<=16)
if(vec_dist(this_color, pCol)!=0)
paint_fill_spread(vector(pPos.x+1,pPos.y,0), pCol, pOldCol);
}
if (pPos.y<paint_h-1)
{
var this_pixel = pixel_for_bmap(paint_bmap,pPos.x,pPos.y+1);
pixel_to_vec(this_color, NULL, paint_txtype, this_pixel);
if(abs(vec_dist(pOldCol,this_color))<=16)
if(vec_dist(this_color, pCol)!=0)
paint_fill_spread(vector(pPos.x,pPos.y+1,0), pCol, pOldCol);
}
if (pPos.x>0)
{
var this_pixel = pixel_for_bmap(paint_bmap, pPos.x-1, pPos.y);
pixel_to_vec(this_color, NULL, paint_txtype, this_pixel);
if(abs(vec_dist(pOldCol,this_color))<=16)
if(vec_dist(this_color, pCol)!=0)
paint_fill_spread(vector(pPos.x-1,pPos.y,0), pCol, pOldCol);
}
if (pPos.y>0)
{
var this_pixel = pixel_for_bmap(paint_bmap,pPos.x,pPos.y-1);
pixel_to_vec(this_color, NULL, paint_txtype, this_pixel);
if(abs(vec_dist(pOldCol,this_color))<=16)
if(vec_dist(this_color, pCol)!=0)
paint_fill_spread(vector(pPos.x,pPos.y-1,0), pCol, pOldCol);
}
}