少年修仙传客户端代码仓库
client_linchunjie
2018-09-19 aecb6a5a62d8a4cfc7b924ce957a9c7ea90c235d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
namespace Snxxz.UI
{
    public class FairyCallMemberBehaviour : MonoBehaviour
    {
        [SerializeField] Button m_CallMember;
        [SerializeField] Text m_Timer;
 
        long lastTick = 0;
 
        FairyGrabBossModel model { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
 
        private void Awake()
        {
            m_CallMember.AddListener(CallMember);
        }
 
        public void Init()
        {
            model.bossGrabHintEvent += BossGrabHintEvent;
            PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo;
            GlobalTimeEvent.Instance.secondEvent += DisplayTimer;
            Display();
            DisplayTimer();
        }
 
        public void UnInit()
        {
            model.bossGrabHintEvent -= BossGrabHintEvent;
            PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
            GlobalTimeEvent.Instance.secondEvent -= DisplayTimer;
        }
 
        private void BossGrabHintEvent()
        {
            Display();
        }
 
        private void OnRefreshFairyInfo()
        {
            Display();
        }
 
        void Display()
        {
            m_CallMember.gameObject.SetActive(CheckCallMember());
        }
 
        bool CheckCallMember()
        {
            if (PlayerDatas.Instance.baseData.Family == 0
                || !model.grabBossHintOpen)
            {
                return false;
            }
            var fairyMember = PlayerDatas.Instance.fairyData.mine;
            if (fairyMember == null || fairyMember.FamilyLV < model.callMemberDuty)
            {
                return false;
            }
            return true;
        }
 
        private void CallMember()
        {
            var bossId = 0;
            var list = GAMgr.Instance.GetTypeList(E_ActorClassType.NpcFightBoss);
            if (list != null)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    GA_NpcFightBoss bossActor = list[i] as GA_NpcFightBoss;
                    if (bossActor != null && model.bosses.Contains(bossActor.NpcConfig.NPCID))
                    {
                        bossId = bossActor.NpcConfig.NPCID;
                        break;
                    }
                }
            }
            if (bossId != 0)
            {
                var deltaTick = DateTime.Now.Ticks - lastTick;
                var ts = new TimeSpan(deltaTick);
                if (ts.TotalSeconds >= model.callMemberSeconds)
                {
                    lastTick = DateTime.Now.Ticks;
                    DisplayTimer();
                    CAC05_tagCGCallupFamilyMemberToBoss pak = new CAC05_tagCGCallupFamilyMemberToBoss();
                    pak.NPCID = (uint)bossId;
                    GameNetSystem.Instance.SendInfo(pak);
                }
                else
                {
                    SysNotifyMgr.Instance.ShowTip("FairyCallMemberCd");
                }
            }
        }
 
        void DisplayTimer()
        {
            if (m_CallMember.gameObject.activeInHierarchy)
            {
                var ticks = DateTime.Now.Ticks - lastTick;
                var ts = new TimeSpan(ticks < 0 ? 0 : ticks);
                var seconds = (int)(model.callMemberSeconds - ts.TotalSeconds);
                if (seconds <= 0 && m_Timer.gameObject.activeSelf)
                {
                    m_Timer.gameObject.SetActive(false);
                }
                else if (seconds > 0)
                {
                    if (!m_Timer.gameObject.activeSelf)
                    {
                        m_Timer.gameObject.SetActive(true);
                    }
                    m_Timer.text = StringUtility.Contact(seconds, Language.Get("RealmWin_Bewrite_35"));
                }
            }
        }
    }
}