void BFS(CubeObjectScript startNode, CubeObjectScript endNode) { Queue <CubeObjectScript> queue = new Queue <CubeObjectScript>(); List <CubeObjectScript> exploredNodes = new List <CubeObjectScript>(); Stack <CubeObjectScript> _path = new Stack <CubeObjectScript>(); count = 0; if (startNode == endNode) { return; } queue.Enqueue(startNode); while (queue.Count != 0) { CubeObjectScript currentNode = queue.Dequeue(); if (currentNode == endNode) { while (currentNode != startNode) { path.Push(currentNode); currentNode = currentNode.ParentNode; } //path.Push(currentNode); //currentNode = currentNode.ParentNode; } foreach (CubeObjectScript node in currentNode.Connections) { NodeDirection++; if (node == null) { continue; } if (!exploredNodes.Contains(node)) { node.ParentNode = currentNode; node.NodeDirection = NodeDirection - 1; exploredNodes.Add(node); queue.Enqueue(node); } } NodeDirection = 0; } }
protected override IEnumerator Routine() { while (Alive) { if (instantiate) { if (currentCube == qbert.CurrentCube) { yield return(null); } else { if (destinationCube != qbert.CurrentCube && path.Count < 3) { destinationCube = qbert.CurrentCube; BFS(currentCube, qbert.CurrentCube); } else { count++; if (transform.parent.tag == "Elevator") { Debug.Log("Elevator"); // Destroy(gameObject); } else { if (path.Count != 0) { currentCube = path.Pop(); if (currentCube == null) { BFS(currentCube, qbert.CurrentCube); } else { MoveCoily(); } } } } yield return(new WaitForSeconds(0.6f)); } } yield return(null); } }
/// <summary> /// Moves Qbert /// </summary> /// <param name="cubeObject">Cube object.</param> /// <param name="directions">Directions.</param> void MoveQbert(CubeObjectScript cubeObject, Directions directions) { InputAllowed = false; QbertMesh.SetActive(false); enableCollison = false; QbertAnimation = Instantiate(QbertAnim, Position, transform.rotation, transform.parent); Animator QbertAnimator = QbertAnimation.GetComponent <Animator>(); QbertAnimator.applyRootMotion = false; QbertAnimator.SetBool("Jump", true); QbertAnimator.SetInteger("Direction", (int)directions); CurrentCube = cubeObject; transform.parent = CurrentCube.transform; Position = new Vector3(CurrentCube.transform.position.x, CurrentCube.transform.position.y + CurrentCube.YOffset, CurrentCube.transform.position.z); }
public override void StartScript(CubeObjectScript Cube) { if (coily == null) { coily = this; } else if (coily != this) { Destroy(gameObject); } base.StartScript(Cube); qbert = GameObject.FindGameObjectWithTag("Player").GetComponent <QbertScript>(); CoilyMesh = GameObject.FindGameObjectWithTag("CoilyMesh"); destinationCube = qbert.CurrentCube; BFS(currentCube, qbert.CurrentCube); StartCoroutine(Routine()); }
public override void StartScript(CubeObjectScript Cube) { base.StartScript(Cube); StartCoroutine(Routine()); }
public virtual void StartScript(CubeObjectScript Cube) { currentCube = Cube; transform.parent = Cube.transform; }
/// <summary> /// Start this instance. /// </summary> void Start() { currentCube = transform.GetComponentInParent <CubeObjectScript>(); QbertMesh = GameObject.FindGameObjectWithTag("PlayerMesh"); lives--; }