Ejemplo n.º 1
0
    /// <summary>
    /// ボタン入力を処理する
    /// </summary>
    /// <returns></returns>
    private IEnumerator InputHandler()
    {
        var selectedFood      = _playerInvContainer.GetItem(_playerInvRenderer.LastSelectedIndex);
        var selectedFoodState = _playerInvContainer.GetStates(_playerInvRenderer.LastSelectedIndex);

        // 調味料か調理済みの食材のみ受け付ける
        if (selectedFood == null ||                                  // 食材を持っていない
            selectedFood.KindOfItem1 != Item.KindOfItem.Seasoning && // 食材が調味料ではなく、
            (selectedFoodState.Contains(FoodState.None) ||           // 状態がNoneまたはRawである
             selectedFoodState.Contains(FoodState.Raw)))
        {
            yield break;
        }

        _windowCor       = _choicePopup.ShowWindow($"{selectedFood.ItemName}を入れますか?", SE.PutFood);
        _isShowingWindow = true;

        // ボタン入力を待機
        yield return(_windowCor);

        // ボタン入力結果がはいだったら大皿に食材を入れる
        if (_windowCor.Current != null &&
            (bool)_windowCor.Current)
        {
            var targetFoodIndex = _playerInvRenderer.LastSelectedIndex;

            // 大皿に現在選択しているアイテムをぶち込む
            selfContainer.AddSlot(_playerInvContainer.GetItem(targetFoodIndex),
                                  selectedFoodState);

            // 表示中の寝言の達成をチェック
            NegotoManager.Instance.CheckNegotoAchieved(_playerInvContainer.GetItem(targetFoodIndex));

            // プレイヤーのアイテムを削除
            _playerInvContainer.RemoveItem(targetFoodIndex);
        }

        _choicePopup.HideWindow();
        _isShowingWindow = false;
    }
    /// <summary>
    /// プレイヤーインベントリスロットをクリックした際の動作
    /// </summary>
    public void OnClickForPlayer()
    {
        // 交換モードなら
        if (!_invManager.IsSwapMode)
        {
            return;
        }

        _nearRefContainer = RefrigeratorManager.Instance.NearRefrigeratorContainer;

        var selfIndex    = _playerInvRenderer.LastSelectedIndex;
        var refLastIndex = _refInvRenderer.LastSelectedIndex;

        // 交換先にアイテムを渡す
        _nearRefContainer.UpdateItem(_refInvRenderer.LastSelectedIndex,
                                     _playerContainer.GetItem(selfIndex),
                                     _playerContainer.GetStates(selfIndex));

        // 選択スロットに交換先のアイテムを配置
        _playerContainer.UpdateItem(selfIndex,
                                    _invManager.ItemToSwapFromRef,
                                    _invManager.ItemStatesToSwap);

        // フォーカスを冷蔵庫に戻す
        _playerCanvasGroup.interactable = false;
        _refCanvasGroup.interactable    = true;
        _refInvRenderer.SelectSlot();

        // 冷蔵庫スロットのハイライトを解除
        _refInvRenderer.GetSlotAt(refLastIndex).GetComponent <Button>().enabled = true;
        _refInvRenderer.UnhighlightSlotAt(_refInvRenderer.LastSelectedIndex);

        // キャッシュアイテムクリア
        _invManager.ItemToSwapFromRef = null;
        _invManager.ItemStatesToSwap  = null;
    }