Files
Cielonos/Assets/Scripts/MainGame/UI/PlayerUI/EnemyInfo/BossInfo/BossInfoUnit.cs
SoulliesOfficial f26f9fd374 爆更
2026-03-20 12:07:44 -04:00

83 lines
3.0 KiB
C#

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