public bool Update()
        {
            switch (state)
            {
            case 0:
                if (currentAction.Update())
                {
                    currentAction.End();
                    state         = 1;
                    currentAction = new PickDropAction(player);
                }

                return(false);

            case 1:
                if (currentAction.Update())
                {
                    currentAction.End();
                    state = 2;

                    ClientPlateStation deliverStation = ComponentUtil
                                                        .GetClosestComponent <ClientPlateStation>(player.transform.position);

                    Logger.Log($"Current pos: {Logger.FormatPosition(player.transform.position)}, " +
                               $"station pos: {Logger.FormatPosition(deliverStation.transform.position)}");

                    currentAction = new PathFindAction(player, deliverStation);
                }

                return(false);

            case 2:
                if (currentAction.Update())
                {
                    currentAction.End();
                    state         = 3;
                    currentAction = new PickDropAction(player);
                }

                return(false);

            case 3:
                if (currentAction.Update())
                {
                    currentAction.End();

                    return(true);
                }

                return(false);

            default:
                return(false);
            }
        }
        public bool Update()
        {
            switch (state)
            {
            case 0:
                state         = 1;
                currentAction = new GetRawIngredientAction(player, ingredient);

                return(false);

            case 1:
                if (currentAction.Update())
                {
                    currentAction.End();
                    state = 2;

                    currentAction = new ProcessIngredientAction(player);
                }

                return(false);

            case 2:
                if (currentAction.Update())
                {
                    currentAction.End();
                    state = 3;

                    if (orderData.plate == null)
                    {
                        orderData.plate = ComponentUtil.GetClosestComponent <ClientPlate>(player.transform.position);
                    }

                    currentAction = new PlateHoldingAction(player, orderData.plate);
                }

                return(false);

            case 3:
                if (currentAction.Update())
                {
                    currentAction.End();

                    return(true);
                }

                return(false);

            default:
                return(false);
            }
        }