예제 #1
0
    /// <summary>
    /// インタラクト時の処理
    /// </summary>
    private void InteractHandler()
    {
        // インタラクト範囲内におり、ポーズ中でなければインタラクトを許可
        if (!_isNear ||
            PushPause.Instance.IsNowPausing)
        {
            return;
        }

        // 開いたとき
        if (Input.GetButtonDown("Interact") && // インタラクトボタン押下
            _selfCanvasGroup.alpha.Equals(0))  // インベントリが開かれていない
        {
            // 冷蔵庫インベントリの描画をリセット
            _selfInvRenderer.ClearRender();

            _selfCanvasGroup.alpha          = 1;
            _selfCanvasGroup.interactable   = true;
            _selfCanvasGroup.blocksRaycasts = true;

            // SE再生
            SoundManager.Instance.PlaySe(SE.RifregeratorOpen);

            // 冷蔵庫インベントリをフォーカス
            _selfInvRenderer.SelectSlot();

            // プレイヤーインベントリを無効化
            _playerCanvasGroup.interactable = false;
        }
        // 閉じたとき
        else if (Input.GetButtonDown("Cancel") &&  // キャンセルボタン押下
                 _selfCanvasGroup.alpha.Equals(1)) // インベントリが開かれている
        {
            // 冷蔵庫インベントリの描画をリセット
            _selfInvRenderer.ClearRender();

            // 冷蔵庫インベントリを無効化
            _selfCanvasGroup.alpha          = 0;
            _selfCanvasGroup.interactable   = false;
            _selfCanvasGroup.blocksRaycasts = false;

            // 冷蔵庫インベントリのハイライトがあったら解除
            _selfInvRenderer.UnhighlightSlotAt(_selfInvRenderer.LastSelectedIndex);

            // プレイヤーインベントリを有効化し、フォーカス
            _playerCanvasGroup.interactable = true;
            _playerInvRenderer.SelectSlot();
        }
    }
    /// <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;
    }