// 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(); }