示例#1
0
    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;
        }
    }
示例#2
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);
        }
    }
示例#3
0
    /// <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);
    }
示例#4
0
    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());
    }
示例#5
0
 public override void StartScript(CubeObjectScript Cube)
 {
     base.StartScript(Cube);
     StartCoroutine(Routine());
 }
示例#6
0
 public virtual void  StartScript(CubeObjectScript Cube)
 {
     currentCube      = Cube;
     transform.parent = Cube.transform;
 }
示例#7
0
 /// <summary>
 /// Start this instance.
 /// </summary>
 void Start()
 {
     currentCube = transform.GetComponentInParent <CubeObjectScript>();
     QbertMesh   = GameObject.FindGameObjectWithTag("PlayerMesh");
     lives--;
 }