阶段性完成
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user