/// <summary> /// 堆叠道具更新满后,添加新格子 /// </summary> /// <param name="itemId"></param> /// <param name="itemCount"></param> /// <param name="itemSourceType"></param> private void AddNewItem(int itemId, int itemCount, GetItemSourceType itemSourceType) { while (true) { // 背包满了 if (GameEntry.Archive.Data.KnapsackModels.Count == KnapsackCapacity) { if (itemSourceType != GetItemSourceType.Shop) { Log.Debug("没有存放进背包的数量 " + itemCount); } break; } var model = new KnapsackModel(itemId) { Index = GetEmptySoltIndex() }; GameEntry.Archive.Data.KnapsackModels.Add(model); // 可以放得下 if (model.StackCount >= itemCount) { model.CurrentStackCount += itemCount; if (m_KnapsackForm) { m_KnapsackForm.AddItem(model, true); } Log.Debug("放完"); break; } // 放不下 model.CurrentStackCount = model.StackCount; if (m_KnapsackForm) { m_KnapsackForm.AddItem(model, true); } // 剩下的 itemCount -= model.StackCount; Log.Debug("放一个新格子后剩下 " + itemCount); } }
/// <summary> /// 获得道具 /// </summary> /// <param name="itemId">道具编号</param> /// <param name="itemCount">道具数量</param> /// <param name="sourceType">来源类型</param> public void AddItem(int itemId, int itemCount, GetItemSourceType sourceType) { if (!KnapsackCapacityEnough(itemId, itemCount)) { // 弹窗提示用户背包满了 Log.Debug("背包装不下这么多东西"); if (sourceType == GetItemSourceType.Shop) { // 如果是购买道具则返还金币 GameEntry.Archive.Data.AddGold(ItemModel.GetItemRow(itemId).BuyPrice *itemCount); UpdateCoinAndUsedBoxCountUI(); return; } // 如果是普通拾取,就算背包一次性放不下这么多东西,也要放满再说 } AddStackItem(itemId, itemCount, sourceType); }
/// <summary> /// 获取道具后先更新堆叠的道具 /// </summary> /// <param name="itemId">道具编号</param> /// <param name="itemCount">道具数量</param> /// <param name="itemSourceType">道具来源</param> private void AddStackItem(int itemId, int itemCount, GetItemSourceType itemSourceType) { // 先去找背包中相同的道具,堆叠存放 for (var i = 0; i < GameEntry.Archive.Data.KnapsackModels.Count; i++) { if (GameEntry.Archive.Data.KnapsackModels[i].Id == itemId && GameEntry.Archive.Data.KnapsackModels[i].CurrentStackCount < GameEntry.Archive.Data.KnapsackModels[i].StackCount) { // 当前格子剩余堆叠数 var surplusStackCount = GameEntry.Archive.Data.KnapsackModels[i].StackCount - GameEntry.Archive.Data.KnapsackModels[i].CurrentStackCount; if (surplusStackCount >= itemCount) { // 可以放得下 GameEntry.Archive.Data.KnapsackModels[i].CurrentStackCount += itemCount; if (m_KnapsackForm) { m_KnapsackForm.AddItem(GameEntry.Archive.Data.KnapsackModels[i], false); } Log.Debug("放完"); return; } // 放满当前格子 GameEntry.Archive.Data.KnapsackModels[i].CurrentStackCount += surplusStackCount; itemCount -= surplusStackCount; if (m_KnapsackForm) { m_KnapsackForm.AddItem(GameEntry.Archive.Data.KnapsackModels[i], false); } // 剩下的 Log.Debug("放满当前格子后剩下 " + itemCount); } } // 相同道具堆叠满了,开始放新格子 AddNewItem(itemId, itemCount, itemSourceType); }