using Cielonos.MainGame.Characters; using Cielonos.MainGame.Characters.Buffs; using SLSFramework.UI; using TMPro; using UnityEngine; namespace Cielonos.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 GeneralIncapacitation 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 ElectronicDisturbance buff)) { currentArmor = 100 - buff.unitedStackSubmodule.stackAmount; } float maximumArmor = 100; armorBar.UpdateFillColor(new Color(1, 0.78f, 0.58f), true); armorBar.UpdateFillImage(currentArmor, maximumArmor); //armorBar.gameObject.SetActive(currentArmor < maximumArmor); 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); } } }