Question by
mezzostatic · Feb 17, 2017 at 10:19 PM ·
array.netrecursionadvancedstackoverflow
Stack pop and push for unityscript?
In C# you can control the stack using generic list stack.push and stack.pop, for example to have just 10 recursions at a time rather than 1billion recursions.
How can i control the stack on this code please? I have to only add the stack functions and perhaps to use Position XYZ as a vector3 ?
//A working 3D floodfill function that reads and writes a boolean voxel array:
private var maxAbort = 1000000000;
function boundary( x:int, y:int, z:int ): IEnumerator //floodfill algo
{
if ( read3DboolArray(x,y,z)==false && bcnt<maxAbort){
if ( x >= 0 && x < bsizex && y >= 0 && y < bsizey && z >= 0 && z < bsizez)
{
write3DboolArray(x,y,z,true);
yield WaitForFixedUpdate();
boundary(x+1,y,z);
boundary(x-1,y,z);
boundary(x,y+1,z);
boundary(x,y-1,z);
boundary(x,y,z+1);
boundary(x,y,z-1);
}
if ( bcnt % 1000== 0 )//mark new start if ended this recursion run
{
print(bcnt+ " ------ " +
(Time.realtimeSinceStartup-tt));
bcnt+=1;
yield WaitForFixedUpdate();
}
} else return;
}
function read3DboolArray( x:int , y:int , z:int ) : boolean//bail if null
{
var tally = Mathf.Clamp
( z * bsize.x * bsize.y + y * bsize.x + x ,
0 , cubic ) ;
return supernormous[ tally ];
}
function write3DboolArray( x:int , y:int , z:int,val : boolean) //used for writing
{
var tally = Mathf.Clamp
( z * bsize.x * bsize.y + y * bsize.x + x ,
0 , cubic) ;
supernormous[ tally ]= val;
}
EDIT AM NOT ABLE TO REPLY BUT I HAVE THIS FUNCTION COMPILING OK:
function boundary2( q: Vector3 ): IEnumerator //floodfill algo
{
if ( q.x < 0 || q.x > bsizex || q.y < 0 || q.y > bsizey || q.z < 0 || q.z > bsizez)return;
var stack : Stack.<Vector3> = new Stack.<Vector3>();
stack.Push(q);
while (stack.Count > 0)
{
var p : Vector3= stack.Pop();
var x = p.x;
var y = p.y;
var z = p.z;
if ( x < 0 || x > bsizex || y < 0 || y > bsizey || z < 0 || z > bsizez)return;
continue;
if (wsn( x,y,z) == false)
{
wsf(x,y, z,true) ;
stack.Push(new Vector3(x+1,y,z));
stack.Push(new Vector3(x-1,y,z));
stack.Push(new Vector3(x,y+1,z));
stack.Push(new Vector3(x,y-1,z));
stack.Push(new Vector3(x,y,z+1));
stack.Push(new Vector3(x,y,z-1));
}
}
}
Comment
Your answer
Follow this Question
Related Questions
Advanced/native unity client with custom .net server 0 Answers
[Solved] Recursive Method causing Stack Overflow 1 Answer
Stack Overflow error in recursive method 0 Answers
Random.Range throws StackOverFlow exception in recursion 1 Answer
How can I fix UnityEngine.Random.Range (Int32 min, Int32 max) Stack Overflow 0 Answers