Exemplo n.º 1
0
    /// <summary>
    /// 冷蔵庫のコンテナがなければ新規追加し、初期アイテムをコンテナに設定する
    /// </summary>
    private void CreateContainer()
    {
        // コンテナがすでに作成されていたら追加を行わない
        if (_refContainers.GetContainer(gameObject.name) != null)
        {
            return;
        }

        _refContainers.AddContainer(gameObject.name);

        _selfContainer = _refContainers.GetContainer(gameObject.name);

        for (var i = 0; i < RefrigeratorManager.Instance.SlotSize; i++)
        {
            var selfSlotDefaultItem = (DefaultItems.Count != 0)
                                          ? DefaultItems[i].Item
                                          : null;

            // スロットインデックスがアイテム数以上の場合は空アイテムを追加
            if (i >= DefaultItems.Count)
            {
                _selfContainer.AddItem(null);

                continue;
            }

            // スロットインデックスがコンテナのアイテム数以上の場合は追加処理
            if (i >= _selfContainer.Container.Count)
            {
                _selfContainer.AddItem(selfSlotDefaultItem,
                                       // アイテムが存在するかによって状態変化
                                       (selfSlotDefaultItem != null)
                                           ? DefaultItems[i].State
                                           : new List <FoodState>()
                {
                    FoodState.None
                });
            }
            // すでにコンテナに同一インデックスのスロットが存在するなら内容更新
            else
            {
                _selfContainer.UpdateItem(i, selfSlotDefaultItem,
                                          (selfSlotDefaultItem != null)
                                              ? DefaultItems[i].State
                                              : new List <FoodState>()
                {
                    FoodState.None
                });
            }
        }
    }
    /// <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;
    }