예제 #1
0
    public void step()
    {
        if (cameraState != CameraMoveState.NotMoving)
        {
            cameraMoving = true;
            switch (cameraState)
            {
            case CameraMoveState.MoveOut:
                if (currentNode.previous != null)
                {
                    currentNode = currentNode.previous;
                }
                if (areX_AtRoot(currentNode))
                {
                    cameraState = CameraMoveState.MoveVertically;
                }
                break;

            case CameraMoveState.MoveVertically:

                if (currentNode.nodeYIndex > endNode.nodeYIndex)
                {
                    currentNode = levels[currentNode.nodeYIndex - 1];
                }
                else if (currentNode.nodeYIndex < endNode.nodeYIndex)
                {
                    currentNode = levels[currentNode.nodeYIndex + 1];
                }

                if (areYsEqual(currentNode, endNode))
                {
                    cameraState = CameraMoveState.MoveIn;
                }


                break;

            case CameraMoveState.MoveIn:

                if (currentNode.next != null)
                {
                    currentNode = currentNode.next;
                }

                if (areXsEquals(currentNode, endNode))
                {
                    cameraState = CameraMoveState.NotMoving;
                }


                break;
            }


            if (areNodesEqual(currentNode, endNode))
            {
                cameraState = CameraMoveState.NotMoving;
            }
        }
    }
예제 #2
0
    public bool areNodesEqual(CameraPathNode currentNode, CameraPathNode targetNode)
    {
        if (currentNode.nodeXIndex == targetNode.nodeXIndex && currentNode.nodeYIndex == targetNode.nodeYIndex)
        {
            return(true);
        }

        return(false);
    }
예제 #3
0
    private CameraPathNode getNodeInLevel(int n)
    {
        CameraPathNode tmpNode = levels[currentNode.nodeYIndex];

        for (int i = 0; i < n && tmpNode.next != null; i++)
        {
            tmpNode = tmpNode.next;
        }

        return(tmpNode);
    }
예제 #4
0
 /// <summary>
 /// To Check whether x-axis of the currentNode reached the root or not yet.
 /// </summary>
 /// <param name="currentNode"></param>
 /// <returns></returns>
 public bool areX_AtRoot(CameraPathNode currentNode)
 {
     if (currentNode.nodeXIndex == 0)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #5
0
 /// <summary>
 /// To Check whether x-axis of the currentNode and the target node are equal or not.
 /// </summary>
 /// <param name="currentNode"></param>
 /// <param name="targetNode"></param>
 /// <returns></returns>
 public bool areXsEquals(CameraPathNode currentNode, CameraPathNode targetNode)
 {
     if (currentNode.nodeXIndex == targetNode.nodeXIndex)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #6
0
    // Start is called before the first frame update
    void Start()
    {
        CameraPathNode tmpNode = GetComponent <CameraPathNode>();

        int xIndexCounter = 0;

        while (tmpNode.previous != null)
        {
            xIndexCounter++;
            tmpNode = tmpNode.previous;
        }

        nodeXIndex = xIndexCounter;
        nodeYIndex = tmpNode.nodeYIndex;
    }
예제 #7
0
    private void Awake()
    {
        if (!instance)
        {
            instance = this;
        }
        else
        {
            Destroy(gameObject);
        }

        cameraState = CameraMoveState.NotMoving;

        for (int i = 0; i < levels.Count; i++)
        {
            levels[i].nodeYIndex = i;
        }

        defaultNode = levels[0];
    }
예제 #8
0
 public void setTarget(CameraPathNode targetNode)
 {
     endNode = targetNode;
 }
예제 #9
0
 int calculateDistanceToNode(CameraPathNode targetNode)
 {
     return(currentNode.nodeXIndex + targetNode.nodeXIndex + Mathf.Abs(currentNode.nodeYIndex - targetNode.nodeYIndex));
 }