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(); } } 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().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; } } }