using Cielonos.MainGame.Buffs; using Cielonos.MainGame.Buffs.Character; using Cielonos.MainGame.Characters; using SLSUtilities.UI; using TMPro; using UnityEngine; namespace Cielonos.MainGame.UI { public class BossInfoUnit : UIElementBase { public CharacterBase bossCharacter; public TMP_Text nameText; public RectTransform barContainer; public BossHealthBar healthBar; public BossArmorBar armorBar; public BossEnergyBar energyBar; public void Initialize(CharacterBase character) { bossCharacter = character; nameText.text = "Nexus Crab"; //TODO: 后续改为读取角色名称 UpdateHealth(true); UpdateArmor(true); UpdateEnergy(true); } public void UpdateHealth(bool isInstant = false) { float currentHealth = bossCharacter.attributeSm["Health"]; float maximumHealth = bossCharacter.attributeSm["MaximumHealth"]; float ratio = currentHealth / maximumHealth; Color fillColor = healthBar.GetTargetColor(ratio); healthBar.UpdateFillImage(currentHealth, maximumHealth); //healthBar.UpdateFillColor(fillColor, isInstant); if(!isInstant) healthBar.Blink(Color.white); } public void UpdateArmor(bool isInstant = false) { if (bossCharacter.buffSm.TryGetBuff(out ElectronicParalysis incapacitation)) { float remainingTime = incapacitation.independentStackSubmodule.LongestUnit.remainingTime; float maximumTime = incapacitation.independentStackSubmodule.LongestUnit.duration; armorBar.UpdateFillColor(new Color(1, 0.3f, 0.3f), true); armorBar.UpdateFillImage(remainingTime, maximumTime); armorBar.gameObject.SetActive(true); return; } float currentArmor = 100; if (bossCharacter.buffSm.TryGetBuff(out ElectronicParalysis.Progress buff)) { currentArmor = (100 - buff.percentage); } float maximumArmor = 100; armorBar.UpdateFillColor(new Color(1, 0.78f, 0.58f), true); armorBar.UpdateFillImage(currentArmor, maximumArmor); if (currentArmor < maximumArmor) { if (!armorBar.gameObject.activeSelf) { armorBar.willFadeOut = false; armorBar.FadeIn(); } } else { armorBar.willFadeOut = true; } if(!isInstant) armorBar.Blink(Color.white); } public void UpdateEnergy(bool isInstant = false) { float currentEnergy = bossCharacter.attributeSm["Energy"]; float maximumEnergy = bossCharacter.attributeSm["MaximumEnergy"]; energyBar.UpdateFillImage(currentEnergy, maximumEnergy); if(!isInstant) energyBar.Blink(Color.white); } } }