using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using DG.Tweening; using UnityEngine; using UnityEngine.UI; /// /// 公会基础界面 /// 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); } } }