Beispiel #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();
        }
    }
Beispiel #2
0
 public void HideWindow()
 {
     // ウィンドウを非表示
     canvasGroup.alpha          = 0;
     canvasGroup.interactable   = false;
     canvasGroup.blocksRaycasts = false;
     // プレイヤーインベントリ有効化
     _playerInvRenderer.EnableAllSlot();
     _playerInvRenderer.SelectSlot();
     // ボタンを有効化
     yesButton.enabled = false;
     noButton.enabled  = false;
 }
    /// <summary>
    /// 冷蔵庫インベントリスロットをクリックした際の動作
    /// </summary>
    public void OnClickForRefrigerator()
    {
        _nearRefContainer = RefrigeratorManager.Instance.NearRefrigeratorContainer;
        var selfIndex   = _refInvRenderer.LastSelectedIndex;
        var selfButton  = GetComponent <Button>();
        var nearRefSlot = _nearRefContainer.Container[selfIndex];
        var selfItem    = nearRefSlot.Item;
        var selfStates  = nearRefSlot.States;

        // スロットにアイテムがなければ弾く
        if (selfItem == null)
        {
            return;
        }

        // プレイヤーの空きスロットにアイテム配置
        if (!_playerContainer.IsFull)
        {
            _playerContainer.AddItem(selfItem, selfStates);

            return;
        }

        // 冷蔵庫スロットは空にする
        // 無限獲得可能への仕様変更につきCO
        // _nearRefContainer.RemoveItem(selfIndex);

        // プレイヤーとアイテム交換
        // 交換アイテムをキャッシュ
        _invManager.ItemToSwapFromRef = selfItem;
        _invManager.ItemStatesToSwap  = selfStates;
        // 交換モード発動
        _invManager.IsSwapMode = true;
        // 冷蔵庫スロット無効化(交換対象はハイライト)
        _refCanvasGroup.interactable = false;
        selfButton.interactable      = true;
        selfButton.enabled           = false;
        _refInvRenderer.HighlightSlotAt(selfIndex);
        // プレイヤースロット有効化
        _playerCanvasGroup.interactable = true;
        _playerInvRenderer.SelectSlot();

        // ここから先はOnClickForPlayer()
    }
    /// <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;
    }