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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
 
 
/// <summary>
/// 公会基础界面
/// </summary>
public class GuildBossWin : UIBase
{
    [SerializeField] Text endTimeText;
    [SerializeField] Text fightPowerText;
    [SerializeField] Transform rankRect;
    [SerializeField] Text rankText;
    [SerializeField] Text noRankText;
    [SerializeField] AvatarCell headCell;
    [SerializeField] Text nameText;
    [SerializeField] Text todayHurtText;
    [SerializeField] Image newHighestHurtImg;
    //布阵
    [SerializeField] Text bzAttrText;
    [SerializeField] UIEffectPlayer bzEffect1;
    [SerializeField] Text bzLayerText;
    [SerializeField] UIEffectPlayer bzEffect2;
    [SerializeField] Button bzBtn;
    [SerializeField] Text bzTimesText;  //布阵次数
    [SerializeField] Button bzRecordBtn;
 
    //怒气条
    [SerializeField] Image processLeft; //颜色从00FF0B 到 FFE400 到 E30400
    [SerializeField] Image processRight;
    [SerializeField] Button atkBtn;
    [SerializeField] Image angerAtk; //怒气攻击
    [SerializeField] Transform normalAtk; //普通攻击
    [SerializeField] UIEffectPlayer atkEffect;  //普通攻击特效 0次不显示
    [SerializeField] Text normalAtkCntText; //普通攻击次数
    [SerializeField] Text atkCDText; //攻击cd
    [SerializeField] Transform addTimesRect;
    [SerializeField] Image addTimesItemImg;
    [SerializeField] Text addTimesItemText;
 
    [SerializeField] ButtonEx closeBtn;
    [SerializeField] ButtonEx scoreBtn;
    [SerializeField] ButtonEx awardBtn;
    [SerializeField] Transform awardCntRect;
    [SerializeField] Text awardCntText;
    //攻击区
    [SerializeField] UIHeroController bossModel;
    [SerializeField] UIHeroController heroModel;
    [SerializeField] Transform attackArea1;
    [SerializeField] Transform attackArea2;
    [SerializeField] Transform attackArea3;
    [SerializeField] GuildBossOtherPlayer otherPlayer;  //创建多个用
    [SerializeField] GuildBossOtherPlayerAttack otherPlayerAttack;  //创建多个用
 
 
 
    int beforeLayerNum; //布阵层级 对比变化展示特效
    protected override void InitComponent()
    {
        closeBtn.AddListener(CloseWindow);
    }
 
 
    protected override void OnPreOpen()
    {
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
        // GuildManager.Instance.FamilyActionInfoEvent += OnFamilyActionInfoEvent;
        Display();
    }
 
    protected override void OnPreClose()
    {
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
        // GuildManager.Instance.FamilyActionInfoEvent -= OnFamilyActionInfoEvent;
    }
 
 
    void Display()
    {
        endTimeText.text = Language.Get("Arena14", TimeUtility.SecondsToHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds));
        fightPowerText.text = PlayerDatas.Instance.baseData.FightPower.ToString();
 
        var bossAction = GuildBossManager.Instance.GetGuildBossAction();
        ShowBzInfo(bossAction);
 
    }
 
    //战力变化
    void OnPlayerDataRefresh(PlayerDataType type)
    {
        if (type == PlayerDataType.FightPower)
            fightPowerText.text = PlayerDatas.Instance.baseData.FightPower.ToString();
    }
 
    void OnFamilyActionInfoEvent(int familyID, int actionType)
    {
        if (actionType == GuildManager.GuildBossActionType)
        {
            var bossAction = GuildBossManager.Instance.GetGuildBossAction();
            if (beforeLayerNum != bossAction.Value3)
            {
                bzEffect1.Play();
                bzEffect2.Play();
                ShowBzInfo(bossAction);
            }
        }
    }
 
 
    void ShowBzInfo(HA513_tagMCFamilyActionInfo.tagMCFamilyAction bossAction)
    {
        bzAttrText.text = GetAddAttrs(bossAction);
        bzLayerText.text = $"{bossAction.Value3}/{GuildBossManager.Instance.bzMaxLevel}";
    }
 
    //获取布阵属性
    string GetAddAttrs(HA513_tagMCFamilyActionInfo.tagMCFamilyAction action)
    {
        var layerNum = action.Value3;
        var superHitRate = GuildBossManager.Instance.initSuperHitRate + (int)layerNum * GuildBossManager.Instance.bzAddAttrs[0];
        var addHurtPer = (int)layerNum * GuildBossManager.Instance.bzAddAttrs[1];
 
        if (addHurtPer == 0)
        {
            return Language.Get("GuildBoss18_0", superHitRate / 100);
        }
        return Language.Get("GuildBoss18_0", superHitRate / 100) + Language.Get("L1112") + Language.Get("GuildBoss18_1", addHurtPer / 100);
    }
 
    void OnSecondEvent()
    {
        endTimeText.text = Language.Get("Arena14", TimeUtility.SecondsToHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds));
    }
 
    void ShowProcess(float value)
    {
        //颜色从00FF0B 到 FFE400 到 E30400
        processLeft.fillAmount = value;
        processRight.fillAmount = value;
 
        Color processColor = GetProcessColor(value);
        processLeft.color = processColor;
        processRight.color = processColor;
    }
 
    Color GetProcessColor(float value)
    {
        // 限制值在0-1范围内
        value = Mathf.Clamp01(value);
 
        if (value <= 0.5f)
        {
            float t = value / 0.5f;
            return Color.Lerp(new Color(0f, 1f, 0.043f), new Color(1f, 0.894f, 0f), t);
        }
        else
        {
            float t = (value - 0.5f) / 0.5f;
            return Color.Lerp(new Color(1f, 0.894f, 0f), new Color(0.89f, 0.016f, 0f), t);
        }
    }
 
 
}