// Use this for initialization
    void Start()
    {
        coroutineStack = new Stack <bool>();
        Vector2 position2D = new Vector2(this.transform.position.x, this.transform.position.y);
        NewStep newStep    = new NewStep();

        newStep.position     = position2D;
        newStep.lastPosition = position2D;
        StartCoroutine("SlowStep", newStep);
    }
 public bool WalkInAllDirections(Vector2[] direction, ref Vector2 position)
 {
     // Carry on walking in this direction
     if (direction.Length == 1)
     {
         WalkerCentraliser.AddDungeonSize();
         position += direction[0];
         return(true);
     }
     else
     {
         WalkerCentraliser.AddCrossRoads();
         for (int i = 0; i < direction.Length; i++)
         {
             WalkerCentraliser.AddDungeonSize();
             NewStep newStep = new NewStep();
             newStep.position     = position + direction[i];
             newStep.lastPosition = position;
             StartCoroutine("SlowStep", newStep);
         }
         return(false);
     }
 }
    public IEnumerator SlowStep(NewStep newStep)
    {
        coroutineStack.Push(true);
        Vector2    lastPos  = newStep.lastPosition;
        bool       walkable = true;
        GameObject token    = Instantiate <GameObject>(marker);

        token.transform.position = newStep.position;
        token.transform.parent   = this.transform;
        while (walkable)
        {
            yield return(new WaitForSeconds(0.1f));

            //token.GetComponent<SpriteRenderer>().enabled = false;
            token = Instantiate <GameObject>(marker);
            Vector2[] available = SurroundingTilesStateNotVisited(newStep.position, lastPos);
            lastPos  = newStep.position;
            walkable = WalkInAllDirections(available, ref newStep.position);
            token.transform.position = newStep.position;
        }

        coroutineStack.Pop();
    }