From 78bfe524ea4776c47f6314e56e97f39970b00fce Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 25 九月 2018 15:07:07 +0800
Subject: [PATCH] Merge branch 'master' into 1871天赋功能

---
 System/Dogz/DogzModel.cs |  422 +++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 345 insertions(+), 77 deletions(-)

diff --git a/System/Dogz/DogzModel.cs b/System/Dogz/DogzModel.cs
index 25fc8c0..d33c8ad 100644
--- a/System/Dogz/DogzModel.cs
+++ b/System/Dogz/DogzModel.cs
@@ -14,6 +14,7 @@
         public override void Init()
         {
             ParseConfig();
+            SetDogzAndEquipPlaceRedKey();
         }
 
         public void OnBeforePlayerDataInitialize()
@@ -37,6 +38,9 @@
             SetDogzEquipInfo();
             playerPack.RefreshItemCountAct -= RefreshDogzEquipInfo;
             playerPack.RefreshItemCountAct += RefreshDogzEquipInfo;
+            UpdateDogzAssistRed();
+            UpdateDogzEquipPlaceRed();
+            UpdateAssistNumRed();
         }
 
         public override void UnInit()
@@ -104,15 +108,15 @@
             switch (_index)
             {
                 case 0:
-                    return "鍏借";
+                    return Language.Get("DogzEquip1");
                 case 1:
-                    return "榄旂溂";
+                    return Language.Get("DogzEquip2");
                 case 2:
-                    return "鐛犵墮";
+                    return Language.Get("DogzEquip3");
                 case 3:
-                    return "鍏界埅";
+                    return Language.Get("DogzEquip4");
                 case 4:
-                    return "槌炵敳";
+                    return Language.Get("DogzEquip5");
                 default:
                     return string.Empty;
             }
@@ -124,15 +128,17 @@
             {
                 case 0:
                 case 1:
-                    return "鐧借壊";
+                    return Language.Get("DogzWhite");
                 case 2:
-                    return "钃濊壊";
+                    return Language.Get("DogzBlue");
                 case 3:
-                    return "绱壊";
+                    return Language.Get("DogzPurple");
                 case 4:
-                    return "姗欒壊";
+                    return Language.Get("DogzOrange");
                 case 5:
-                    return "绾㈣壊";
+                    return Language.Get("DogzRed");
+                case 6:
+                    return Language.Get("DogzPink");
                 default:
                     return string.Empty;
             }
@@ -155,13 +161,23 @@
             }
         }
 
-        public event Action<int> OpenFuncEvent;
-        public void OpenDogzFuncEvent(int functionOrder)
+        public event Action<int,int> OpenFuncEvent;
+        public void OpenDogzFuncEvent(int functionOrder,int equipIndex)
         {
             if(OpenFuncEvent != null)
             {
-                OpenFuncEvent(functionOrder);
+                OpenFuncEvent(functionOrder,equipIndex);
             }
+        }
+
+        public bool CheckIsAddAssistNum()
+        {
+            var _itemConfig = Config.Instance.Get<ItemConfig>(AddAssistItem);
+            if(GetAssistItemCnt() <= playerPack.GetItemCountByID(PackType.rptItem, AddAssistItem))
+            {
+                return true;
+            }
+            return false;
         }
 
         #region 鍗忚
@@ -175,6 +191,8 @@
             {
                 UpdateAssistDogzEvent();
             }
+            UpdateDogzAssistRed();
+            UpdateDogzEquipPlaceRed();
         }
 
         public event Action UpdateAssistDogzEvent;
@@ -194,6 +212,9 @@
             {
                 UpdateAssistDogzEvent();
             }
+
+            UpdateDogzAssistRed();
+            UpdateDogzEquipPlaceRed();
         }
 
         public int GetAssistDogzCount()
@@ -218,7 +239,7 @@
 
         public void SetDogzEquipInfo()
         {
-            m_DogzEquipDict = new Dictionary<int, List<ItemModel>>();
+            m_DogzEquipDict.Clear();
             SinglePackModel singlePack = playerPack.GetSinglePackModel(PackType.rptDogzEquip);
             if (singlePack == null) return;
 
@@ -244,63 +265,75 @@
         public Action<int> RefreshDogzEquipAct;
         private void RefreshDogzEquipInfo(PackType type, int index, int id)
         {
-            if (type != PackType.rptDogzEquip) return;
-
-            ItemModel itemModel = playerPack.GetItemModelByIndex(type, index);
-            int dogzId = GetDogzIDByIndex(index);
-            List<ItemModel> modellist = GetDogzEquips(dogzId);
-            if(modellist != null)
+            if(type == PackType.rptItem && id == AddAssistItem)
             {
-                if (itemModel != null)
+                UpdateAssistNumRed();
+            }
+            else if(type == PackType.rptDogzItem)
+            {
+                UpdateDogzAssistRed();
+                UpdateDogzEquipPlaceRed();
+            }
+            else if(type == PackType.rptDogzEquip)
+            {
+                ItemModel itemModel = playerPack.GetItemModelByIndex(type, index);
+                int dogzId = GetDogzIDByIndex(index);
+                List<ItemModel> modellist = GetDogzEquips(dogzId);
+                if (modellist != null)
                 {
-                    bool isAdd = true;
-                    for (int i = 0; i < modellist.Count; i++)
+                    if (itemModel != null)
                     {
-                        if (modellist[i].itemInfo.ItemPlace == index)
+                        bool isAdd = true;
+                        for (int i = 0; i < modellist.Count; i++)
                         {
-                            isAdd = false;
-                            modellist[i] = itemModel;
-                            break;
+                            if (modellist[i].itemInfo.ItemPlace == index)
+                            {
+                                isAdd = false;
+                                modellist[i] = itemModel;
+                                break;
+                            }
+                        }
+                        if (isAdd)
+                        {
+                            modellist.Add(itemModel);
                         }
                     }
-                    if(isAdd)
+                    else
                     {
-                       modellist.Add(itemModel);
+                        for (int i = 0; i < modellist.Count; i++)
+                        {
+                            if (modellist[i].itemInfo.ItemPlace == index)
+                            {
+                                modellist.RemoveAt(i);
+                                break;
+                            }
+                        }
                     }
                 }
                 else
                 {
-                    for (int i = 0; i < modellist.Count; i++)
+                    if (itemModel != null)
                     {
-                        if (modellist[i].itemInfo.ItemPlace == index)
-                        {
-                            modellist.RemoveAt(i);
-                            break;
-                        }
+                        List<ItemModel> equipDatas = new List<ItemModel>();
+                        equipDatas.Add(itemModel);
+                        m_DogzEquipDict.Add(dogzId, equipDatas);
                     }
                 }
-            }
-            else
-            {
-                if(itemModel != null)
-                {
-                    List<ItemModel> equipDatas = new List<ItemModel>();
-                    equipDatas.Add(itemModel);
-                    m_DogzEquipDict.Add(dogzId,equipDatas);
-                }
-            }
-          
 
-            if(RefreshDogzEquipAct != null)
-            {
-                RefreshDogzEquipAct(dogzId);
+                if (RefreshDogzEquipAct != null)
+                {
+                    RefreshDogzEquipAct(dogzId);
+                }
+
+                UpdateDogzAssistRed();
+                UpdateDogzEquipPlaceRed();
             }
         }
 
         /// <summary>
         /// 鑾峰緱绁炲吔绌挎埓鐨勮澶囨暟鎹�
         /// </summary>
-        public Dictionary<int, List<ItemModel>> m_DogzEquipDict { get; private set; }
+        private Dictionary<int, List<ItemModel>> m_DogzEquipDict = new Dictionary<int, List<ItemModel>>();
 
         public List<ItemModel> GetDogzEquips(int _dogzId)
         {
@@ -510,13 +543,13 @@
         }
 
         public List<ItemModel> selectEquipPlacelist { get; private set; }
-        public List<ItemModel> GetDogzItemListByIndex(int index)
+        public List<ItemModel> GetDogzItemListByIndex(int dogzId,int index)
         {
             SinglePackModel singlePack = playerPack.GetSinglePackModel(PackType.rptDogzItem);
             selectEquipPlacelist.Clear();
             if (singlePack == null) return selectEquipPlacelist;
 
-            var _itemColor = GetDogzEquipLimitByIndex(presentSelectDogz, index);
+            var _itemColor = GetDogzEquipLimitByIndex(dogzId, index);
             var _equipPlace = GetDogzEquipPlaceByIndex(index);
             Dictionary<int, ItemModel> pairs = singlePack.GetPackModelIndexDict();
             foreach (var value in pairs.Values)
@@ -547,41 +580,276 @@
         }
         #endregion
 
-        #region 瑁呭璇︾粏淇℃伅
-        public DogzEquipData viewDetailData { get; private set; }
-
-        public bool viewDetailCompare { get; private set; }
-
-        public void ViewDetail(int _itemId, bool compare = false)
-        {
-            //viewDetailData = new DogzEquipData(_itemId);
-            //viewDetailCompare = compare;
-            //if (!WindowCenter.Instance.CheckOpen<DogzDetailsWin>())
-            //{
-            //    WindowCenter.Instance.Open<DogzDetailsWin>();
-            //}
-        }
-
-        public int DogzEquipScore(DogzEquipData data)
-        {
-            return 0;
-        }
-        #endregion
-
         #region 榛樿閫夋嫨閫昏緫澶勭悊
         public void SetDefaultSelectDogz()
         {
             var configs = Config.Instance.GetAllValues<DogzConfig>();
             presentSelectDogz = configs[0].ID;
-            foreach (var key in dogzAssistStateDict.Keys)
+            foreach (var key in m_DogzEquipLimit.Keys)
             {
-                if(dogzAssistStateDict[key] == 1)
+                Redpoint redpoint = GetSingleDogzRedpointById(key);
+                if (redpoint.state == RedPointState.Simple)
                 {
-                    if(presentSelectDogz < key)
+                    presentSelectDogz = key;
+                    break;
+                }
+            }
+        }
+        #endregion
+
+        #region 绾㈢偣閫昏緫澶勭悊
+        public const int MAINDOGZ_REDKEY = 112;
+        public const int DOGZFUNC_REDKEY = 11201;
+        public const int ADDASSISTDOGZ_REDKEY = 1120100002;
+        public Redpoint mainDogzRedpoint = new Redpoint(MainRedDot.RedPoint_key, MAINDOGZ_REDKEY);
+        public Redpoint dogzFuncRedpoint = new Redpoint(MAINDOGZ_REDKEY,DOGZFUNC_REDKEY);
+        public Redpoint addAssistDogzRedpoint = new Redpoint(DOGZFUNC_REDKEY,ADDASSISTDOGZ_REDKEY);
+        private Dictionary<int, Redpoint> singleDogzRedDict = new Dictionary<int, Redpoint>();
+        private Dictionary<int, Redpoint> dogzAssistRedDict = new Dictionary<int, Redpoint>();
+        private Dictionary<int, Dictionary<int, Redpoint>> dogzEquipPlaceRedDict = new Dictionary<int, Dictionary<int, Redpoint>>();
+        public void SetDogzAndEquipPlaceRedKey()
+        {
+            singleDogzRedDict.Clear();
+            dogzEquipPlaceRedDict.Clear();
+            dogzAssistRedDict.Clear();
+            int i = 0;
+            foreach(var dogzId in m_DogzEquipLimit.Keys)
+            {
+                i += 1;
+                int dogzRedKey = DOGZFUNC_REDKEY * 100 + i;
+                Redpoint dogzRedPoint = new Redpoint(DOGZFUNC_REDKEY,dogzRedKey);
+                singleDogzRedDict.Add(dogzId, dogzRedPoint);
+                int dogzAssistRedKey = dogzRedKey * 100 + i;
+                Redpoint dogzAssistRedPoint = new Redpoint(dogzRedKey, dogzAssistRedKey);
+                dogzAssistRedDict.Add(dogzId,dogzAssistRedPoint);
+                Dictionary<int, Redpoint> equipPlaceRedDict = new Dictionary<int, Redpoint>();
+                dogzEquipPlaceRedDict.Add(dogzId,equipPlaceRedDict);
+                int equipPlaceNum = m_DogzEquipLimit[dogzId].Count;
+                for (int j = 0; j < equipPlaceNum; j++)
+                {
+                    int equipPlaceRedKey = dogzRedKey * 10 + j;
+                    Redpoint equipPlaceRedpoint = new Redpoint(dogzRedKey,equipPlaceRedKey);
+                    equipPlaceRedDict.Add(j, equipPlaceRedpoint);
+                }
+
+            }
+        }
+
+        public Redpoint GetSingleDogzRedpointById(int dogzId)
+        {
+            Redpoint redpoint = null;
+            singleDogzRedDict.TryGetValue(dogzId, out redpoint);
+            return redpoint;
+        }
+
+        public Redpoint GetDogzAssistRedpointById(int dogzId)
+        {
+            Redpoint redpoint = null;
+            dogzAssistRedDict.TryGetValue(dogzId,out redpoint);
+            return redpoint;
+        }
+
+        public Redpoint GetDogzEquipPlaceRedpointById(int dogzId,int index)
+        {
+            Redpoint redpoint = null;
+            if(dogzEquipPlaceRedDict.ContainsKey(dogzId))
+            {
+                dogzEquipPlaceRedDict[dogzId].TryGetValue(index, out redpoint);
+            }
+            return redpoint;
+        }
+
+        public void UpdateDogzAssistRed()
+        {
+            foreach(var value in dogzAssistRedDict.Values)
+            {
+                value.state = RedPointState.None;
+            }
+            bool isMaxAssistNum = GetAssistDogzCount() >= DogzAssistDefaultCnt ? true : false;
+            if(!isMaxAssistNum)
+            {
+                int maxDogzId = 0;
+                foreach(var dogzId in m_DogzEquipLimit.Keys)
+                {
+                    var equips = GetDogzEquips(dogzId);
+                    int equipNum = equips == null ? 0 : equips.Count;
+                    if(equipNum >= 5 && maxDogzId < dogzId
+                        && !TryGetAssistDogzState(dogzId))
                     {
-                        presentSelectDogz = key;
+                        maxDogzId = dogzId;
                     }
                 }
+                if(maxDogzId > 0)
+                {
+                    Redpoint assistRedpoint = GetDogzAssistRedpointById(maxDogzId);
+                    if(assistRedpoint.state == RedPointState.None)
+                    {
+                        assistRedpoint.state = RedPointState.Simple;
+                    }
+                }
+            }
+            else
+            {
+                foreach (var dogzId in m_DogzEquipLimit.Keys)
+                {
+                    var equips = GetDogzEquips(dogzId);
+                    int equipNum = equips == null ? 0 : equips.Count;
+                    if(!TryGetAssistDogzState(dogzId) && equipNum == 5)
+                    {
+                        Redpoint assistRedpoint = GetDogzAssistRedpointById(dogzId);
+                        if (assistRedpoint.state == RedPointState.None)
+                        {
+                            assistRedpoint.state = RedPointState.Simple;
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+
+        public void UpdateDogzEquipPlaceRed()
+        {
+            foreach(var value in dogzEquipPlaceRedDict.Values)
+            {
+                foreach(var value2 in value.Values)
+                {
+                    value2.state = RedPointState.None;
+                }
+            }
+
+            foreach(var value in dogzAssistRedDict.Values)
+            {
+                if(value.state == RedPointState.Simple)
+                {
+                    return;
+                }
+            }
+            bool isMaxAssistNum = GetAssistDogzCount() >= DogzAssistDefaultCnt ? true : false;
+            if (!isMaxAssistNum)
+            {
+                int maxEquipNum = 0;
+                int spaceDogzId = 0;
+                foreach (var dogzId in m_DogzEquipLimit.Keys)
+                {
+                    var equips = GetDogzEquips(dogzId);
+                    int equipNum = equips == null ? 0 : equips.Count;
+                    if (equipNum < 5)
+                    {
+                        if (spaceDogzId == 0)
+                        {
+                            if (maxEquipNum <= equipNum)
+                            {
+                                maxEquipNum = equipNum;
+                                spaceDogzId = dogzId;
+                            }
+                        }
+                        else
+                        {
+                            if (maxEquipNum < equipNum)
+                            {
+                                maxEquipNum = equipNum;
+                                spaceDogzId = dogzId;
+                            }
+                        }
+                    }
+                }
+
+                if(spaceDogzId != 0)
+                {
+                    for(int i = 0; i < 5; i++)
+                    {
+                        ItemModel _data;
+                        bool _equiped = TryGetDogzEquip(spaceDogzId, i + 101, out _data);
+                        if(!_equiped)
+                        {
+                            GetDogzItemListByIndex(spaceDogzId,i);
+                            if (selectEquipPlacelist.Count > 0)
+                            {
+                                Redpoint equipPlaceRedpoint = GetDogzEquipPlaceRedpointById(spaceDogzId,i);
+                                if(equipPlaceRedpoint.state == RedPointState.None)
+                                {
+                                    equipPlaceRedpoint.state = RedPointState.Simple;
+                                }
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+            else
+            {
+                int minAlreadyAssistId = 0;
+                foreach (var dogzId in m_DogzEquipLimit.Keys)
+                {
+                    if(TryGetAssistDogzState(dogzId)
+                        && minAlreadyAssistId != 0
+                        && minAlreadyAssistId < dogzId)
+                    {
+                        minAlreadyAssistId = dogzId;
+                    }
+                }
+
+                foreach (var dogzId in m_DogzEquipLimit.Keys)
+                {
+                    var equips = GetDogzEquips(dogzId);
+                    int equipNum = equips == null ? 0 : equips.Count;
+                    bool isBetterDogz = true;
+                    if(!TryGetAssistDogzState(dogzId) && dogzId > minAlreadyAssistId && equipNum < 5)
+                    {
+                        for (int i = 0; i < 5; i++)
+                        {
+                            ItemModel _data;
+                            bool _equiped = TryGetDogzEquip(dogzId, i + 101, out _data);
+                            if (!_equiped)
+                            {
+                                GetDogzItemListByIndex(dogzId,i);
+                                if (selectEquipPlacelist.Count < 1)
+                                {
+                                    isBetterDogz = false;
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                    else
+                    {
+                        isBetterDogz = false;
+                    }
+
+                    if(isBetterDogz)
+                    {
+                        for (int i = 0; i < 5; i++)
+                        {
+                            ItemModel _data;
+                            bool _equiped = TryGetDogzEquip(dogzId, i + 101, out _data);
+                            if (!_equiped)
+                            {
+                                Redpoint equipPlaceRedpoint = GetDogzEquipPlaceRedpointById(dogzId, i);
+                                if (equipPlaceRedpoint.state == RedPointState.None)
+                                {
+                                    equipPlaceRedpoint.state = RedPointState.Simple;
+                                    break;
+                                }
+                            }
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+
+        public void UpdateAssistNumRed()
+        {
+          if(CheckIsAddAssistNum())
+           {
+                if(addAssistDogzRedpoint.state == RedPointState.None)
+                {
+                    addAssistDogzRedpoint.state = RedPointState.Simple;
+                }
+            }
+          else
+            {
+                addAssistDogzRedpoint.state = RedPointState.None;
             }
         }
         #endregion

--
Gitblit v1.8.0