Пример #1
0
    /*
     * protected override void Init()
     * {
     *  base.Init();
     *  currentState = KitchenStandState.EMPTY;
     * }
     */

    public override bool Execute(Command command, Carrier playerCarrier = null)
    {
        bool result = base.Execute(command, playerCarrier);

        switch (currentState)
        {
        case KitchenStandState.EMPTY:
            if (command == Command.DROP)
            {
                PlateItem plate = Instantiate(platePrefab);     //TODO use object pooling
                plate.AddSalad((SaladItem)playerCarrier.GetCarryingItem());
                currentState = KitchenStandState.CONTAIN_SALAD; //ready to pick up
                carrier.OnItemPickup(plate);
                playerCarrier.OnItemDrop();
                result = true;
            }
            break;

        case KitchenStandState.CONTAIN_SALAD:
            if (command == Command.PICKUP)
            {
                currentState = KitchenStandState.EMPTY;
                playerCarrier.OnItemPickup(carrier.GetCarryingItem());
                carrier.OnItemDrop();
                result = true;
            }
            else if (command == Command.DROP)
            {
                PlateItem plate = (PlateItem)carrier.GetCarryingItem();
                plate.AddSalad((SaladItem)playerCarrier.GetCarryingItem());
                playerCarrier.OnItemDrop();
                result = true;
            }
            break;
        }
        return(result);
    }