One More Time
|
|
Join Date: Aug 2010
Location: TN, USA
Posts: 631
|
|
Flood fill issue
well I attempted two methods to create a tile flood fill, first method is working fine, but is slow, second seems to be fast but stops after 3 'lines', the queue is updated in it but is temp.queue for the for-each loop updated?
PHP Code:
function floodFill( temp.tile, temp.targetTile, temp.replaceTile) {
/*//Method 1 - SUCCESS - temp.queue = { temp.tile};
while (( @ temp.queue) != ( @ {{ NULL, NULL}})) { temp.n = temp.queue[ 0]; if ( player.level.tilelayers[ Tile_Editor_Layer.text].tiles[ temp.n[ 0], temp.n[ 1]] == temp.targetTile) triggerServer( "weapon", name, "PlaceTiles", Tile_Editor_Layer.text, { temp.replaceTile}, { temp.n[ 0], temp.n[ 1], 1, 1});
temp.queue.delete( 0); for ( temp.a = 0; temp.a < 4; temp.a ++;) { if ( player.level.tilelayers[ Tile_Editor_Layer.text].tiles[ temp.n[ 0] + ( !temp.a? -1: temp.a == 1? 1: 0), temp.n[ 1] + ( temp.a == 2? -1: temp.a == 3? 1: 0)] == temp.targetTile) { triggerServer( "weapon", name, "PlaceTiles", Tile_Editor_Layer.text, { temp.replaceTile}, { temp.n[ 0] + ( temp.a == 0? -1: temp.a == 1? 1: 0), temp.n[ 1] + ( temp.a == 2? -1: temp.a == 3? 1: 0), 1, 1}); temp.queue.add({ temp.n[ 0] + ( !temp.a? -1: temp.a == 1? 1: 0), temp.n[ 1] + ( temp.a == 2? -1: temp.a == 3? 1: 0)});
} } sleep( 0.05); //Added to prevent freeze } */ // Method 2 - BROKEN temp.queue = { temp.tile}; for ( temp.n: temp.queue) { if ( player.level.tilelayers[ Tile_Editor_Layer.text].tiles[ temp.n[ 0], temp.n[ 1]] == temp.targetTile) temp.w = temp.e = temp.n[ 0]; while ( player.level.tilelayers[ Tile_Editor_Layer.text].tiles[ temp.w - 1, temp.n[ 1]] == temp.targetTile) temp.w --; while ( player.level.tilelayers[ Tile_Editor_Layer.text].tiles[ temp.e, temp.n[ 1]] == temp.targetTile) temp.e ++; for ( temp.a = temp.w; temp.a < temp.e; temp.a ++;) {
if ( player.level.tilelayers[ Tile_Editor_Layer.text].tiles[ temp.a, temp.n[ 1]] == temp.targetTile) triggerServer( "weapon", name, "PlaceTiles", Tile_Editor_Layer.text, { temp.replaceTile}, { temp.a, temp.n[ 1], 1, 1}); if ( player.level.tilelayers[ Tile_Editor_Layer.text].tiles[ temp.a, temp.n[ 1] - 1] == temp.targetTile) temp.queue.add({ temp.a, temp.n[ 1] - 1}); if ( player.level.tilelayers[ Tile_Editor_Layer.text].tiles[ temp.a, temp.n[ 1] + 1] == temp.targetTile) temp.queue.add({ temp.a, temp.n[ 1] + 1}); } sleep( 0.05); //Added to prevent client from freezing } return;
}
|
__________________
Time is the fire in which we burn...
Up, Up, Down, Down, Left, Right, Left, Right, B, A, Select, Start! Now I got 99 LIVES!!!
|
|