71 lines
2.7 KiB
C#
71 lines
2.7 KiB
C#
using Cielonos.MainGame.Buffs;
|
|
using Cielonos.MainGame.Characters;
|
|
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);
|
|
}
|
|
}
|
|
}
|