From 7494724b974885f7ab28e645b61a94c09b1f0841 Mon Sep 17 00:00:00 2001
From: Client_PangDeRong <593317293@qq.com>
Date: 星期二, 14 八月 2018 14:10:34 +0800
Subject: [PATCH] [2155]炼丹炉功能优化

---
 System/BlastFurnace/DandrugCell.cs       |    3 
 System/KnapSack/Logic/MakeDrugCell.cs    |   17 +----
 System/BlastFurnace/BlastFurnaceModel.cs |   82 +++++++++++++++++++++++----
 System/BlastFurnace/LingDanTips.cs       |   20 +++++-
 4 files changed, 91 insertions(+), 31 deletions(-)

diff --git a/System/BlastFurnace/BlastFurnaceModel.cs b/System/BlastFurnace/BlastFurnaceModel.cs
index f175f1c..06aa331 100644
--- a/System/BlastFurnace/BlastFurnaceModel.cs
+++ b/System/BlastFurnace/BlastFurnaceModel.cs
@@ -83,12 +83,14 @@
         treasureRefineDict.Clear();
         FuncOpen.Instance.OnFuncStateChangeEvent -= RefreshFuncOpenState;
         playerPack.RefreshItemCountAct -= RefreshMat;
+        playerPack.RefreshItemSumUseCntAct -= RefreshItemUsce;
     }
 
     public void OnAfterPlayerDataInitialize()
     {
         playerPack.RefreshItemCountAct += RefreshMat;
         FuncOpen.Instance.OnFuncStateChangeEvent += RefreshFuncOpenState;
+        playerPack.RefreshItemSumUseCntAct += RefreshItemUsce;
     }
 
     private void RefreshFuncOpenState(int funcId)
@@ -370,34 +372,64 @@
     /// <summary>
     /// 寰楀埌棰勮鍚堟垚涓硅嵂鐨勫垪琛�
     /// </summary>
-    public List<int> GetPreviewMakeDruglist(AlchemyConfig alchemyModel)
+    public Dictionary<int, int> GetPreviewMakeDruglist(AlchemyConfig alchemyModel)
     {
         JsonData jsonData = JsonMapper.ToObject(alchemyModel.AlchemPreviewItem);
-        List<int> drugIdlist = new List<int>();
+        PreviewItemDict.Clear();
         if (jsonData.IsArray)
         {
             for (int i = 0; i < jsonData.Count; i++)
             {
-                int itemId = int.Parse(jsonData[i].ToString());
-                drugIdlist.Add(itemId);
+                if (jsonData[i].IsArray)
+                {
+                    int itemId = int.Parse(jsonData[i][0].ToString());
+                    if (jsonData[i].Count > 1)
+                    {
+                        int effectId = int.Parse(jsonData[i][1].ToString());
+                        PreviewItemDict.Add(itemId, effectId);
+                    }
+                    else
+                    {
+                        PreviewItemDict.Add(itemId, 0);
+                    }
+                }
             }
         }
-        return drugIdlist;
+        return PreviewItemDict;
     }
 
-    public List<int> GetPreviewSpecMakeDruglist(AlchemySpecConfig alchemyModel)
+    Dictionary<int, int> PreviewItemDict = new Dictionary<int, int>();
+    public Dictionary<int, int> GetPreviewSpecMakeDruglist(AlchemySpecConfig alchemyModel)
     {
         JsonData jsonData = JsonMapper.ToObject(alchemyModel.AlchemPreviewItem);
-        List<int> drugIdlist = new List<int>();
+        PreviewItemDict.Clear();
         if (jsonData.IsArray)
         {
             for (int i = 0; i < jsonData.Count; i++)
             {
-                int itemId = int.Parse(jsonData[i].ToString());
-                drugIdlist.Add(itemId);
+                if(jsonData[i].IsArray)
+                {
+                    int itemId = int.Parse(jsonData[i][0].ToString());
+                    if (jsonData[i].Count > 1)
+                    {
+                        int effectId = int.Parse(jsonData[i][1].ToString());
+                        PreviewItemDict.Add(itemId,effectId);
+                    }
+                    else
+                    {
+                        PreviewItemDict.Add(itemId,0);
+                    }
+                }
             }
         }
-        return drugIdlist;
+        return PreviewItemDict;
+    }
+
+    public int GetEffectIdByItemId(int itemId)
+    {
+        int effectId = 0;
+        PreviewItemDict.TryGetValue(itemId,out effectId);
+        return effectId;
     }
 
     /// <summary>
@@ -699,6 +731,14 @@
         CheckRecycleStoreRed();
     }
 
+    private void RefreshItemUsce(int id)
+    {
+        if(playerPack.CheckIsDrugById(id))
+        {
+            CheckMakerDandrugCondition();
+        }
+    }
+
     public void CheckMakerDandrugCondition()
     {
         for (int i = alchemyModellist.Count - 1; i > -1; i--)
@@ -726,7 +766,7 @@
             {
                 if(!CheckNormalAlchemyIsReachMaxUse(alchemyModellist[i]))
                 {
-                    if (IsNormalMatEnough(alchemyModellist[i]))
+                    if (IsNormalMatEnough(alchemyModellist[i]) && !IsHaveReachFull(alchemyModellist[i]))
                     {
                         danDrugRedPointlist[i].state = RedPointState.Simple;
                         return;
@@ -773,11 +813,29 @@
         return isEnough;
     }
 
+    public bool IsHaveReachFull(AlchemyConfig alchemyConfig)
+    {
+        if (alchemyConfig == null) return false;
+        List<int> previewlist = GetPreviewMakeDruglist(alchemyConfig).Keys.ToList();
+        for(int i = 0; i < previewlist.Count; i++)
+        {
+            if(playerPack.CheckIsDrugById(previewlist[i]))
+            {
+                AttrFruitConfig fruitConfig = ConfigManager.Instance.GetTemplate<AttrFruitConfig>(previewlist[i]);
+                if(playerPack.IsReachMaxUseDrug(fruitConfig))
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     public bool CheckNormalAlchemyIsReachMaxUse(AlchemyConfig alchemyConfig)
     {
         if (alchemyConfig == null) return false;
 
-        List<int> previewlist = GetPreviewMakeDruglist(alchemyConfig);
+        List<int> previewlist = GetPreviewMakeDruglist(alchemyConfig).Keys.ToList();
         for(int i = 0; i < previewlist.Count; i++)
         {
             if(playerPack.CheckIsDrugById(previewlist[i]))
diff --git a/System/BlastFurnace/DandrugCell.cs b/System/BlastFurnace/DandrugCell.cs
index eff0ba5..fdb477a 100644
--- a/System/BlastFurnace/DandrugCell.cs
+++ b/System/BlastFurnace/DandrugCell.cs
@@ -1,5 +1,6 @@
 锘縰sing Snxxz.UI;
 using System.Collections.Generic;
+using System.Linq;
 using TableConfig;
 using UnityEngine;
 using UnityEngine.UI;
@@ -59,7 +60,7 @@
             selectImg.SetActive(false);
         }
 
-        List<int> previewDanlist = FurnaceModel.GetPreviewMakeDruglist(alchemyModel);
+        List<int> previewDanlist = FurnaceModel.GetPreviewMakeDruglist(alchemyModel).Keys.ToList();
         bool isReach = true;
         for(int i = 0; i < previewDanlist.Count; i++)
         {
diff --git a/System/BlastFurnace/LingDanTips.cs b/System/BlastFurnace/LingDanTips.cs
index 77b5205..260444d 100644
--- a/System/BlastFurnace/LingDanTips.cs
+++ b/System/BlastFurnace/LingDanTips.cs
@@ -5,6 +5,7 @@
 using System;
 using Snxxz.UI;
 using System.Collections;
+using System.Linq;
 
 namespace Snxxz.UI
 {
@@ -134,7 +135,7 @@
                         isJumpToId = FurnaceModel.alchemyModellist[i].AlchemyID;
                         isMakeDan = true;
                         presentIndex = i;
-                        _danDrugCtrl.JumpIndex(presentIndex);
+                        _danDrugCtrl.JumpIndex(presentIndex - 1);
                         _danDrugCtrl.m_Scorller.RefreshActiveCellViews();
                         break;
                     }
@@ -177,7 +178,7 @@
                         }
                     }
                 }
-                _danDrugCtrl.JumpIndex(presentIndex);
+                _danDrugCtrl.JumpIndex(presentIndex - 1);
                 _danDrugCtrl.m_Scorller.RefreshActiveCellViews();
             }
 
@@ -421,9 +422,9 @@
         private void CreateRandomLineCell()
         {
             if(chooseSpecModel == null)
-                previewDanlist = FurnaceModel.GetPreviewMakeDruglist(curAlchemyModel);
+                previewDanlist = FurnaceModel.GetPreviewMakeDruglist(curAlchemyModel).Keys.ToList();
             else
-                previewDanlist = FurnaceModel.GetPreviewSpecMakeDruglist(chooseSpecModel);
+                previewDanlist = FurnaceModel.GetPreviewSpecMakeDruglist(chooseSpecModel).Keys.ToList();
 
             _randomLineCtrl.Refresh();
             if (previewDanlist.Count > 0)
@@ -452,9 +453,20 @@
                 GameObject randomCell = cell.transform.GetChild(i).gameObject;
                 ItemCell itemCell = randomCell.transform.Find("ItemCell1").GetComponent<ItemCell>();
                 GameObject fullImg = randomCell.transform.Find("FullImg").gameObject;
+                UIEffect effect = randomCell.transform.Find("UIEffect").GetComponent<UIEffect>();
                 if (previewIndex <= previewDanlist.Count - 1)
                 {
                     int itemId = previewDanlist[previewIndex];
+                    int effectId = FurnaceModel.GetEffectIdByItemId(itemId);
+                    if(effectId != 0)
+                    {
+                        effect.effect = effectId;
+                        effect.gameObject.SetActive(true);
+                    }
+                    else
+                    {
+                        effect.gameObject.SetActive(false);
+                    }
                     randomCell.SetActive(true);
                     ItemCellModel cellModel = new ItemCellModel(itemId);
                     itemCell.Init(cellModel);
diff --git a/System/KnapSack/Logic/MakeDrugCell.cs b/System/KnapSack/Logic/MakeDrugCell.cs
index f620024..aa318f4 100644
--- a/System/KnapSack/Logic/MakeDrugCell.cs
+++ b/System/KnapSack/Logic/MakeDrugCell.cs
@@ -21,6 +21,7 @@
         [SerializeField] Button useBtn;
         [SerializeField] Image useBtnBG;
         [SerializeField] Text useBtnText;
+        [SerializeField] GameObject reachMaxUse;
 
         Dictionary<int, int> attrDict = new Dictionary<int, int>();
         StringBuilder attrSB = new StringBuilder();
@@ -137,6 +138,7 @@
             useBtn.RemoveAllListeners();
             if (useNum < fruitConfig.MaxUseCnt)
             {
+                reachMaxUse.SetActive(false);
                 useBtnText.text = Language.Get("KnapS103");
                 useBtn.AddListener(ClickMakeUseBtn);
                 useBtn.gameObject.SetActive(true);
@@ -153,21 +155,8 @@
             }
             else
             {
-                useBtnBG.material = MaterialUtility.GetInstantiatedSpriteGrayMaterial();
                 useBtn.gameObject.SetActive(false);
-                //if (haveCnt > 0)
-                //{
-                //    useBtnBG.material = MaterialUtility.GetUIDefaultGraphicMaterial();
-                //    useBtn.gameObject.SetActive(true);
-                //    useBtnText.color = brightColor;
-                //    useBtnText.text = Language.Get("BlastFurnace113");
-                //    useBtn.AddListener(ClickRecycle);
-                //}
-                //else
-                //{
-                    
-                //}
-              
+                reachMaxUse.SetActive(true);
             }
             
           

--
Gitblit v1.8.0