ProjectCreep/Assets/TBTK/Scripts/UI/UIUnitInfo.cs

148 lines
4.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace TBTK{
public class UIUnitInfo : UIScreen {
public Text labelName;
public Slider sliderHP;
public Slider sliderAP;
public Text labelHP;
public Text labelAP;
public Text labelStats;
private int abilityItemLimit=5;
public List<UIObject> abilityItemList=new List<UIObject>();
private int effectItemLimit=8;
public List<UIObject> effectItemList=new List<UIObject>();
public RectTransform windowRect;
[Space(5)]
public UIButton buttonClose;
public UIButton buttonCloseBG;
private static UIUnitInfo instance;
public override void Awake(){
base.Awake();
instance=this;
}
public override void Start(){
for(int i=0; i<abilityItemLimit; i++){
if(i>0) abilityItemList.Add(UIButton.Clone(abilityItemList[0].rootObj, "AbilityItem"+(i)));
abilityItemList[i].Init();
abilityItemList[i].SetCallback(this.OnHoverABItem, this.OnExitABItem);
abilityItemList[i].SetActive(false);
}
for(int i=0; i<effectItemLimit; i++){
if(i>0) effectItemList.Add(UIButton.Clone(effectItemList[0].rootObj, "EffectItem"+(i)));
effectItemList[i].Init();
effectItemList[i].SetCallback(this.OnHoverEffItem, this.OnExitEffItem);
effectItemList[i].SetActive(false);
}
buttonClose.Init();
buttonClose.button.onClick.AddListener(delegate { OnCloseButton(); });
buttonCloseBG.Init();
buttonCloseBG.button.onClick.AddListener(delegate { OnCloseButton(); });
thisObj.SetActive(false);
}
public void OnCloseButton(){
Hide();
}
void Update(){
if(Input.GetKeyDown(KeyCode.Escape)) OnCloseButton();
}
private Unit currentUnit;
public void UpdateDisplay(Unit unit){
currentUnit=unit;
labelName.text=unit.itemName;
sliderHP.value=unit.GetHPRatio();
sliderAP.value=unit.GetAPRatio();
labelHP.text=unit.hp+"/"+unit.GetFullHP();
labelAP.text=unit.ap+"/"+unit.GetFullAP();
labelStats.text=unit.GetDmgHPMin().ToString("f0")+" - "+unit.GetDmgHPMax().ToString("f0")+"\n";
labelStats.text+=unit.GetAttack().ToString("f0")+"\n";
labelStats.text+=unit.GetHit().ToString("f0")+"\n\n";
labelStats.text+=unit.GetDefense().ToString("f0")+"\n";
labelStats.text+=unit.GetDodge().ToString("f0")+"\n";
for(int i=0; i<abilityItemList.Count; i++){
if(i<unit.abilityList.Count){
abilityItemList[i].image.sprite=unit.abilityList[i].icon;
abilityItemList[i].SetActive(true);
}
else abilityItemList[i].SetActive(false);
}
for(int i=0; i<effectItemList.Count; i++){
if(i<unit.effectList.Count){
effectItemList[i].image.sprite=unit.effectList[i].icon;
effectItemList[i].SetActive(true);
}
else effectItemList[i].SetActive(false);
}
}
public void OnHoverABItem(GameObject butObj){
int idx=UI.GetIdxFromList(abilityItemList, butObj);
//Vector3 sPos=UI.GetCorner(abilityItemList[idx].rectT, 1)+new Vector3(0, 10*abilityItemList[idx].rectT.lossyScale.y, 0);
Vector3 sPos=UI.GetCorner(windowRect, 0);//+new Vector3(0, 10*abilityItemList[idx].rectT.lossyScale.y, 0);
UITooltip.Show(currentUnit.GetAbility(idx), sPos, new Vector3(-10, 115), 3);
}
public void OnExitABItem(GameObject butObj){
UITooltip.HideTooltip();
}
public void OnHoverEffItem(GameObject butObj){
int idx=UI.GetIdxFromList(effectItemList, butObj);
Vector3 sPos=UI.GetCorner(windowRect, 0);//+new Vector3(0, 10*abilityItemList[idx].rectT.lossyScale.y, 0);
UITooltip.Show(currentUnit.GetEffect(idx), sPos, new Vector3(-10, 115), 3);
}
public void OnExitEffItem(GameObject butObj){
UITooltip.HideTooltip();
}
public static void Show(Unit unit){ instance._Show(unit); }
public void _Show(Unit unit){
UpdateDisplay(unit);
if(thisObj.activeInHierarchy) return;
base.Show(.1f);
}
public static void Hide(){ instance._Hide(); }
public void _Hide(){
base.Hide(.1f);
}
}
}