Пример #1
0
    // Update is called once per frame
    void Update()
    {
        switch (currentState)
        {
        case MovementStatusEnum.Stop:
            break;

        case MovementStatusEnum.Exiting:
            MoveToNode(exitHallNode);
            if (transform.position == exitHallNode.transform.position)
            {
                currentState = MovementStatusEnum.AtHall;
            }
            break;

        case MovementStatusEnum.AtHall:
            MoveToNode(enterHallNode);
            if (transform.position == enterHallNode.transform.position)
            {
                currentState = MovementStatusEnum.Entering;
            }
            break;

        case MovementStatusEnum.Entering:
            MoveToNode(targetNode);
            if (transform.position == targetNode.transform.position)
            {
                currentState = MovementStatusEnum.Stop;
                currentNode  = targetNode;
                if (isPlayer)
                {
                    targetNode.GetComponent <RoomNode>().PlayerCommand(gameObject);
                }
                else
                {
                    targetNode.GetComponent <RoomNode>().CustomerCommand(gameObject);
                }
            }
            break;

        default:
            break;
        }
    }
Пример #2
0
    public void SetDestination(GameObject destNode, GameObject hallNode)
    {
        if (currentNode == destNode && currentState == MovementStatusEnum.Stop)
        {
            if (isPlayer)
            {
                currentNode.GetComponent <RoomNode>().PlayerCommand(gameObject);
            }
            return;
        }

        if (targetNode == destNode)
        {
            return;
        }

        switch (currentState)
        {
        case MovementStatusEnum.Stop:
            exitHallNode  = currentNode.GetComponent <RoomNode>().hallNode;
            enterHallNode = hallNode;
            targetNode    = destNode;
            currentState  = MovementStatusEnum.Exiting;

            if (isPlayer)
            {
                currentNode.GetComponent <RoomNode>().PlayerExitCommand(gameObject);
            }
            else
            {
                currentNode.GetComponent <RoomNode>().CustomerExitCommand(gameObject);
            }
            break;

        case MovementStatusEnum.Exiting:
            enterHallNode = hallNode;
            targetNode    = destNode;
            if (destNode == currentNode)
            {
                currentState = MovementStatusEnum.Entering;
            }
            break;

        case MovementStatusEnum.AtHall:
            enterHallNode = hallNode;
            targetNode    = destNode;
            break;

        case MovementStatusEnum.Entering:
            if (destNode != targetNode)
            {
                exitHallNode  = enterHallNode;
                enterHallNode = hallNode;
                targetNode    = destNode;
                currentState  = MovementStatusEnum.Exiting;
            }
            break;

        default:
            break;
        }
        animator.SetTrigger("Walking");
    }