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 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;
    }