Пример #1
0
    private Func <bool> TryGetUseItemAction(InteractableObject item, InteractableObject target, RoomState roomState)
    {
        if (roomState == null)
        {
            Debug.LogError("ROOM STATE IS NULL IN INVENTORY");
        }

        /*
         * if(item.Id == StatefulGameObjectId.Money)
         * {
         *  switch(target.Id)
         *  {
         *      case StatefulGameObjectId.ElectricityBill:
         *          return () => roomState.PayElectricityBill();
         *
         *      case StatefulGameObjectId.Trash:
         *          return () => { GuideText.Instance.SetText("You tried putting money in the trash"); return false; };
         *  }
         * }
         * else */if (item.Id == StatefulGameObjectId.WateringCan)
        {
            switch (target.Id)
            {
            case StatefulGameObjectId.Flower:
                var waterCanState = RoomGenerator.Instance.GetRoomStateByRoom(CurrentPickedObject.ParentRoom).WaterCanState;
                if (waterCanState == WaterCanState.FallenDown)
                {
                    return(() => { GuideText.Instance.SetText("There is no water in the watering can"); return false; });
                }


                if (waterCanState == WaterCanState.Filled)
                {
                    if (roomState.FlowerState == FlowerState.Dead)
                    {
                        return(() => { GuideText.Instance.SetText("There flower is already dead. Watering does not help.."); return false; });
                    }

                    return(() =>
                    {
                        roomState.WaterPlant(); GuideText.Instance.SetText("You watered the plant"); return false;
                    });
                }
                break;

            case StatefulGameObjectId.Tap:
                if (roomState.WaterPipeState == WaterPipeState.Fixed)
                {
                    return(() =>
                    {
                        if (roomState.FillWateringCan())
                        {
                            var filledCan = item.GetComponentInParent <StatefulGameObject>().GetStateObject("Filled");
                            if (filledCan != null)
                            {
                                this.CurrentPickedObject = filledCan.GetComponentInChildren <InteractableObject>();
                                GuideText.Instance.SetText("You filled the watering can");
                            }
                        }
                        return false;
                    });
                }
                else
                {
                    return(() => { GuideText.Instance.SetText("The tap doesnt work because the pipe is broken"); return false; });
                }

                break;
            }
        }
        else if (item.Id == StatefulGameObjectId.Tape)
        {
            switch (target.Id)
            {
            case StatefulGameObjectId.WaterPipe:
                if (roomState.WaterPipeState == WaterPipeState.PipeBroken)
                {
                    return(() => roomState.FixPipe());
                }

                break;
            }
        }
        else if (item.Id == StatefulGameObjectId.Ball)
        {
            switch (target.Id)
            {
            case StatefulGameObjectId.Dog:
                if (roomState.DogState == DogState.Angry)
                {
                    return(() => roomState.AddBallToDog());
                }
                else if (roomState.DogState == DogState.Sleeping)
                {
                    return(() => { GuideText.Instance.SetText("The dog is sleeping, it doesnt want to play with the ball right now"); return false; });
                }
                else if (roomState.DogState == DogState.Happy)
                {
                    return(() => { GuideText.Instance.SetText("The dog is already happy!"); return false; });
                }

                break;
            }
        }


        return(() => { GuideText.Instance.SetText("Nothing happens..."); return false; });
    }