From 7ae0227d6a43261faf38c5e74b960855fde25f54 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 28 八月 2018 14:29:30 +0800
Subject: [PATCH] 2960 抢Boss活动(提交封包代码)

---
 Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs |    7 +-
 System/FairyAu/FairyGrabBossBehaviour.cs                                                      |   40 +++++++++++++
 Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs           |    6 -
 System/FindPrecious/LootPreciousFrameWin.cs                                                   |    9 ---
 System/FairyAu/FairyGrabBossWin.cs                                                            |   33 +++++++++++
 System/FairyAu/FairyGrabBossModel.cs                                                          |   79 ++++++++++++++++++++++++++
 6 files changed, 157 insertions(+), 17 deletions(-)

diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs b/Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs
index 7df6801..3771ed4 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HAC_Activity/DTCAC10_tagGCAllFamilyBossHurtInfoList.cs
@@ -6,14 +6,15 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
-
-public class DTCAC10_tagGCAllFamilyBossHurtInfoList : DtcBasic {
+using Snxxz.UI;
+public class DTCAC10_tagGCAllFamilyBossHurtInfoList : DtcBasic
+{
 
     public override void Done(GameNetPackBasic vNetPack)
     {
         base.Done(vNetPack);
         var package = vNetPack as HAC10_tagGCAllFamilyBossHurtInfoList;
-
+        ModelCenter.Instance.GetModel<FairyGrabBossModel>().UpdateBossProgress(package);
     }
 
 }
diff --git a/Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs b/Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs
index 86154cd..3c59ee3 100644
--- a/Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs
+++ b/Core/NetworkPackage/ServerPack/HAC_Activity/HAC10_tagGCAllFamilyBossHurtInfoList.cs
@@ -4,8 +4,7 @@
 // AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList

 

 public class HAC10_tagGCAllFamilyBossHurtInfoList : GameNetPackBasic {

-    public uint NPCID;

-    public ushort NPCCount;    // 个数

+    public byte NPCCount;    // 个数

     public  tagGCFamilyBossHurtInfo[] NPCHurtInfo;    // NPC伤血信息列表

 

     public HAC10_tagGCAllFamilyBossHurtInfoList () {

@@ -13,8 +12,7 @@
     }

 

     public override void ReadFromBytes (byte[] vBytes) {

-        TransBytes (out NPCID, vBytes, NetDataType.DWORD);

-        TransBytes (out NPCCount, vBytes, NetDataType.WORD);

+        TransBytes (out NPCCount, vBytes, NetDataType.BYTE);

         NPCHurtInfo = new tagGCFamilyBossHurtInfo[NPCCount];

         for (int i = 0; i < NPCCount; i ++) {

             NPCHurtInfo[i] = new tagGCFamilyBossHurtInfo();

diff --git a/System/FairyAu/FairyGrabBossBehaviour.cs b/System/FairyAu/FairyGrabBossBehaviour.cs
index 48a2c5b..cf26f8b 100644
--- a/System/FairyAu/FairyGrabBossBehaviour.cs
+++ b/System/FairyAu/FairyGrabBossBehaviour.cs
@@ -1,4 +1,5 @@
-锘縰sing System.Collections;
+锘縰sing System;
+using System.Collections;
 using System.Collections.Generic;
 using TableConfig;
 using UnityEngine;
@@ -11,6 +12,8 @@
         [SerializeField] AutoSelectCyclicScroll m_Scroll;
         [SerializeField] RectTransform m_CenterSign;
         [SerializeField] RectTransform m_ContainerSelect;
+        [SerializeField] RectTransform m_ContainerKilling;
+        [SerializeField] RectTransform m_ContainerKilled;
         [SerializeField] Image m_BossPortrait;
         [SerializeField] Text m_MapName;
         [SerializeField] Text m_BossName;
@@ -36,16 +39,23 @@
             bossId = (int)_data;
 
             DrawBossBaseInfo();
+            DisplayProgress();
             OnSelected(model.selectBoss);
 
             model.bossSelectedEvent -= OnSelected;
             model.bossSelectedEvent += OnSelected;
+            model.bossProgressUpdate -= BossProgressUpdate;
+            model.bossProgressUpdate += BossProgressUpdate;
+            model.stateUpdate -= StateUpdate;
+            model.stateUpdate += StateUpdate;
         }
 
         public override void Dispose()
         {
             base.Dispose();
             model.bossSelectedEvent -= OnSelected;
+            model.bossProgressUpdate -= BossProgressUpdate;
+            model.stateUpdate -= StateUpdate;
         }
 
         private void OnSelected(int _bossId)
@@ -64,6 +74,34 @@
             m_BossName.text = npcConfig.charName;
         }
 
+        private void BossProgressUpdate(int _bossId)
+        {
+            if (_bossId == bossId)
+            {
+                DisplayProgress();
+            }
+        }
+
+        private void StateUpdate()
+        {
+            DisplayProgress();
+        }
+
+        void DisplayProgress()
+        {
+            FairyGrabBossModel.BossProgressInfo bossProgress;
+            bool killed = false;
+            bool opened = model.IsOpen;
+            if (model.TryGetBossProgress(bossId, out bossProgress))
+            {
+                var progress = (float)bossProgress.currentHp / bossProgress.totalHp;
+                m_Progress.text = StringUtility.Contact((int)progress * 100, "%");
+                killed = (float)bossProgress.currentHp / bossProgress.totalHp >= 1;
+            }
+            m_ContainerKilled.gameObject.SetActive(killed && opened);
+            m_ContainerKilling.gameObject.SetActive(!killed && opened);
+        }
+
         protected virtual void LateUpdate()
         {
             if (m_Scroll.autoSelectable && model.selectBoss != bossId && bossId > 0)
diff --git a/System/FairyAu/FairyGrabBossModel.cs b/System/FairyAu/FairyGrabBossModel.cs
index 314ff3e..69d9306 100644
--- a/System/FairyAu/FairyGrabBossModel.cs
+++ b/System/FairyAu/FairyGrabBossModel.cs
@@ -10,6 +10,7 @@
         public List<int> bosses { get; private set; }
         Dictionary<int, List<Item>> dropItemDict = new Dictionary<int, List<Item>>();
         Dictionary<int, Dictionary<int, FairyGrabBossInfo>> fairyGrabBossDict = new Dictionary<int, Dictionary<int, FairyGrabBossInfo>>();
+        Dictionary<int, BossProgressInfo> bossProgressDict = new Dictionary<int, BossProgressInfo>();
 
         public bool IsOpen
         {
@@ -62,6 +63,7 @@
         public event Action stateUpdate;
         public event Action<int> bossSelectedEvent;
         public event Action<int, int> bossHurtUpdate;
+        public event Action<int> bossProgressUpdate;
 
         DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
 
@@ -70,6 +72,7 @@
             ParseConfig();
             GlobalTimeEvent.Instance.secondEvent += SecondEvent;
             StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            DailyQuestActionTimer.Instance.RefreshDailyQuestState += RefreshDailyQuestState;
         }
 
         public void OnBeforePlayerDataInitialize()
@@ -84,6 +87,9 @@
 
         public override void UnInit()
         {
+            GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
+            StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+            DailyQuestActionTimer.Instance.RefreshDailyQuestState -= RefreshDailyQuestState;
         }
 
         private void OnStageLoadFinish()
@@ -91,6 +97,14 @@
             if (!(StageManager.Instance.CurrentStage is DungeonStage))
             {
                 fairyGrabBossDict.Clear();
+            }
+        }
+
+        private void RefreshDailyQuestState()
+        {
+            if (stateUpdate != null)
+            {
+                stateUpdate();
             }
         }
 
@@ -162,6 +176,44 @@
             GameNetSystem.Instance.SendInfo(pak);
         }
 
+        public void UpdateBossProgress(HAC10_tagGCAllFamilyBossHurtInfoList package)
+        {
+            for (int i = 0; i < package.NPCCount; i++)
+            {
+                var sBossProgress = package.NPCHurtInfo[i];
+                var bossProgress = new BossProgressInfo()
+                {
+                    NPCID = (int)sBossProgress.NPCID,
+                    CurHP = (int)sBossProgress.CurHP,
+                    CurHPEx = (int)sBossProgress.CurHPEx,
+                    MaxHP = (int)sBossProgress.MaxHP,
+                    MaxHPEx = (int)sBossProgress.MaxHPEx,
+                    FamilyID = (int)sBossProgress.FamilyID,
+                    FamilyName = UIHelper.ServerStringTrim(sBossProgress.FamilyName),
+                };
+                bossProgressDict[(int)package.NPCHurtInfo[i].NPCID] = bossProgress;
+                if (bossProgressUpdate != null)
+                {
+                    bossProgressUpdate(bossProgress.NPCID);
+                }
+            }
+        }
+
+        public bool TryGetBossProgress(int bossId,out BossProgressInfo bossProgressInfo)
+        {
+            return bossProgressDict.TryGetValue(bossId, out bossProgressInfo);
+        }
+
+        public bool TryGetBossHurt(int bossId, int queryType, out FairyGrabBossInfo fairyGrabBossInfo)
+        {
+            fairyGrabBossInfo = null;
+            if (fairyGrabBossDict.ContainsKey(bossId))
+            {
+                return fairyGrabBossDict[bossId].TryGetValue(queryType, out fairyGrabBossInfo);
+            }
+            return false;
+        }
+
         private void SecondEvent()
         {
             if (!serverInited)
@@ -234,6 +286,33 @@
                 }
             }
         }
+
+        public struct BossProgressInfo
+        {
+            public int NPCID;
+            public int CurHP;
+            public int CurHPEx;
+            public int MaxHP;
+            public int MaxHPEx;
+            public int FamilyID;
+            public string FamilyName;
+
+            public long currentHp
+            {
+                get
+                {
+                    return CurHP + (long)CurHPEx * Constants.ExpPointValue;
+                }
+            }
+
+            public long totalHp
+            {
+                get
+                {
+                    return MaxHP + (long)MaxHPEx * Constants.ExpPointValue;
+                }
+            }
+        }
     }
 }
 
diff --git a/System/FairyAu/FairyGrabBossWin.cs b/System/FairyAu/FairyGrabBossWin.cs
index b75b005..7fe3c37 100644
--- a/System/FairyAu/FairyGrabBossWin.cs
+++ b/System/FairyAu/FairyGrabBossWin.cs
@@ -36,8 +36,11 @@
         {
             DisplaySurplusTime();
             DisplayBossInfo();
+            DisplayHighestFairy();
             GlobalTimeEvent.Instance.secondEvent += SecondEvent;
             model.bossSelectedEvent += BossSelectedEvent;
+            model.bossProgressUpdate += BossProgressUpdate;
+            model.stateUpdate += StateUpdate;
         }
 
         protected override void OnActived()
@@ -54,6 +57,8 @@
         {
             GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
             model.bossSelectedEvent -= BossSelectedEvent;
+            model.bossProgressUpdate -= BossProgressUpdate;
+            model.stateUpdate -= StateUpdate;
         }
 
         protected override void OnAfterClose()
@@ -96,6 +101,20 @@
             }
         }
 
+        void DisplayHighestFairy()
+        {
+            m_FairyName.text = string.Empty;
+            if (!model.IsOpen)
+            {
+                return;
+            }
+            FairyGrabBossModel.BossProgressInfo bossProgress;
+            if (model.TryGetBossProgress(model.selectBoss, out bossProgress))
+            {
+                m_FairyName.text = bossProgress.FamilyName;
+            }
+        }
+
         int DefaultSelect()
         {
             return model.bosses[0];
@@ -130,7 +149,21 @@
         private void BossSelectedEvent(int bossId)
         {
             DisplayBossInfo();
+            DisplayHighestFairy();
         }
+
+        private void BossProgressUpdate(int bossId)
+        {
+            if (bossId == model.selectBoss)
+            {
+                DisplayHighestFairy();
+            }
+        }
+        private void StateUpdate()
+        {
+            DisplayHighestFairy();
+        }
+
     }
 
 }
diff --git a/System/FindPrecious/LootPreciousFrameWin.cs b/System/FindPrecious/LootPreciousFrameWin.cs
index a17e4b6..6ad84f7 100644
--- a/System/FindPrecious/LootPreciousFrameWin.cs
+++ b/System/FindPrecious/LootPreciousFrameWin.cs
@@ -40,8 +40,6 @@
 
         protected override void OnPreOpen()
         {
-            fairyGrabBossModel.stateUpdate += FairyGrabBossUpdate;
-            m_FairyGrabBoss.state = fairyGrabBossModel.IsOpen ? TitleBtnState.Normal : TitleBtnState.Locked;
         }
 
         protected override void OnAfterOpen()
@@ -50,8 +48,6 @@
 
         protected override void OnPreClose()
         {
-            fairyGrabBossModel.stateUpdate -= FairyGrabBossUpdate;
-
             CloseSubWindows();
             if (!WindowJumpMgr.Instance.IsJumpState)
             {
@@ -87,11 +83,6 @@
             CloseSubWindows();
             WindowCenter.Instance.Open<FairyGrabBossWin>();
             functionOrder = m_FairyGrabBoss.order;
-        }
-
-        private void FairyGrabBossUpdate()
-        {
-            m_FairyGrabBoss.state = fairyGrabBossModel.IsOpen ? TitleBtnState.Normal : TitleBtnState.Locked;
         }
 
         private void CloseSubWindows()

--
Gitblit v1.8.0