少年修仙传客户端代码仓库
hch
2025-07-24 50e53441950268933694eeb5aad36147bbe1014d
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
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
 
namespace vnxbqy.UI
{
    public class FairySiegeCityItem : MonoBehaviour
    {
        [SerializeField] ButtonEx btnCity;
        [SerializeField] ImageEx imgCity;
        [SerializeField] ImageEx imgRank;
        [SerializeField] TextEx txtRank;
        [SerializeField] ImageEx imgDestroy;
        [SerializeField] ImageEx imgPlayerName;
        [SerializeField] TextEx txtPlayerName;
        [SerializeField] ImageEx imgFairyRank1;
        [SerializeField] ImageEx imgPlayerRank1;
        [SerializeField] AvatarCell head;
        [SerializeField] ImageEx imgEffect;
        [SerializeField] TextEx txtFairyName;
        [SerializeField] TextEx txtServerName;
        [SerializeField] Slider slidCity;
        [SerializeField] Text txtSlidExp;
        FairySiegeActModel model { get { return ModelCenter.Instance.GetModel<FairySiegeActModel>(); } }
 
        public void Display(FairySiegeBatSceneCity data)
        {
            //修罗城(城池ID20亿)不同分组的修罗城城池ID一样,修罗城的守卫ID从1~100
            //一般城池ID=仙盟ID
            if (data.CityID != data.FamilyID)
                return;
            if (data == null)
                return;
            if (!model.TryGetFairySiegeFamilyInfo((uint)data.FamilyID, out FairySiegeFamilyInfo familyInfo))
                return;
            if (!model.TryGetBatSceneInfo(model.showBatType, model.showBatGroup, out FairySiegeBatSceneInfo batSceneInfo))
                return;
            btnCity.SetListener(() =>
            {
                model.isClickCity = true;
                // 不能攻击自己的城池
                if (data.FamilyID == model.myFamilyID)
                {
                    SysNotifyMgr.Instance.ShowTip("FairySiege07");
                    return;
                }
 
                // 无法进入已被摧毁的城池
                if (data.HP <= 0)
                {
                    SysNotifyMgr.Instance.ShowTip("FairySiege06");
                    return;
                }
 
                //不能进入其他类型和分组的城池
                if (!model.TryGetNowBatTypeAndGroup(model.myFamilyID, out int myBattleType, out int myBattleGroup))
                    return;
                if (myBattleType != model.showBatType || model.showBatGroup != myBattleGroup)
                {
                    SysNotifyMgr.Instance.ShowTip("FairySiege12");
                    return;
                }
 
                if (model.isWaitC030Pack)
                    return;
                model.isWaitC030Pack = true;
                model.showCityId = data.CityID;
                model.SendQuery(4, model.showBatType, model.showBatGroup, data.CityID);
            });
 
            imgCity.SetActive(true);
            int state = model.GetCityState(data); // 0 未摧毁-默认状态 1 未摧毁-被攻击 2 已被摧毁
            string spriteStr = StringUtility.Contact("FairySiegeCityState" + state);
            imgCity.SetSprite(spriteStr);
 
            bool isRankImageDisplay = model.IsRankImageDisplay(data.Rank);
            imgRank.SetActive(isRankImageDisplay);
            if (isRankImageDisplay)
            {
                imgRank.SetSprite(model.GetRankNumImage(data.Rank));
            }
            txtRank.text = data.Rank.ToString();
 
            float rate = (float)data.HP / (float)data.HPMax; 
            string rateStr = Language.Get("BlessedLand039", (rate * 100).ToString("F2"));
            slidCity.value = rate;
            txtSlidExp.text = rateStr;
            string serverName = ServerListCenter.Instance.GetServerName((int)familyInfo.ServerID);
 
            txtServerName.text = serverName.ToString();
            txtFairyName.text = familyInfo.Name.ToString();
 
            bool isTopPlayerFamily = batSceneInfo.TopPlayerFamilyID == data.FamilyID;// 是伤害第一玩家所在的仙盟
            bool isTopFamilyID = batSceneInfo.TopFamilyID == data.FamilyID; // 伤害第一的仙盟
 
            imgDestroy.SetActive(state == 2 && !isTopPlayerFamily && !isTopFamilyID);
            imgPlayerRank1.SetActive(isTopPlayerFamily);
            imgPlayerName.SetActive(isTopPlayerFamily || isTopFamilyID);
            head.SetActive(isTopPlayerFamily || isTopFamilyID);
            if (isTopPlayerFamily)
            {
                FairySiegeBatScenePlayer batScenePlayerInfo;
                batSceneInfo.BatScenePlayerInfoDict.TryGetValue(batSceneInfo.TopPlayerID, out batScenePlayerInfo);
                if (batScenePlayerInfo != null)
                {
                    txtPlayerName.text = batScenePlayerInfo != null ? batScenePlayerInfo.Name : string.Empty;
                    head.InitUI(AvatarHelper.GetOtherAvatarModel((int)batScenePlayerInfo.Face, (int)batScenePlayerInfo.FacePic, (int)batScenePlayerInfo.Job));
                }
            }
 
            imgFairyRank1.SetActive(!isTopPlayerFamily && isTopFamilyID);
            if (!isTopPlayerFamily && isTopFamilyID)
            {
                FairySiegeBatScenePlayer batScenePlayerInfo;
                batSceneInfo.BatScenePlayerInfoDict.TryGetValue(batSceneInfo.TopLeaderID, out batScenePlayerInfo);
                if (batScenePlayerInfo != null)
                {
                    txtPlayerName.text = batScenePlayerInfo != null ? batScenePlayerInfo.Name : string.Empty;
                    head.InitUI(AvatarHelper.GetOtherAvatarModel((int)batScenePlayerInfo.Face, (int)batScenePlayerInfo.FacePic, (int)batScenePlayerInfo.Job));
                }
            }
        }
 
        public void PlayDamageSeq(long damage)
        {
            GameObject prefab = UIUtility.CreateWidget("FairySiegeCityPopUpNum", "FairySiegeCityPopUpNum");
            prefab.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
            prefab.GetComponent<FairySiegeCityPopUpNum>().Play(damage);
        }
 
        public bool IsPlayingThunderEffect()
        {
            return imgEffect.gameObject.activeSelf;
        }
 
        public void PlayThunderEffect()
        {
            imgEffect.SetActive(true);
        }
 
        public void StopThunderEffect()
        {
            imgEffect.SetActive(false);
        }
 
        private Tweener shakeTween;
 
        public void PlayShakeTween()
        {
            shakeTween = imgCity.transform.DOShakeRotation(0.5f, 10, 10, 90).SetEase(Ease.InOutElastic).OnComplete(() =>
            {
                imgCity.transform.localRotation = Quaternion.identity;
            });
        }
 
        public void StopShakeTween()
        {
            shakeTween?.Kill();
            imgCity.transform.localRotation = Quaternion.identity;
        }
    }
}