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

165 lines
6.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace TBTK{
public class UITooltip : UIScreen {
//~ public int buttonLimit=8;
//~ public List<UIButton> buttonList=new List<UIButton>();
public GameObject tooltipObj;
public Text tooltipLabel;
private RectTransform tooltipRectT;
private RectTransform labelRectT;
private static UITooltip instance;
public override void Awake(){
base.Awake();
instance=this;
}
public override void Start(){
canvasGroup.interactable=false;
canvasGroup.blocksRaycasts=false;
tooltipRectT=tooltipObj.GetComponent<RectTransform>();
labelRectT=tooltipLabel.gameObject.GetComponent<RectTransform>();
tooltipObj.SetActive(false);
canvasGroup.alpha=1;
}
void OnEnable(){
TBTK.onActionInProgressE += OnActionInProgress ;
}
void OnDisable(){
TBTK.onActionInProgressE -= OnActionInProgress ;
}
void OnActionInProgress(bool flag){
if(flag && tooltipObj.activeInHierarchy) HideTooltip();
}
public static void Show(Effect effect, Vector3 screenPos=default(Vector3), Vector2 offset=default(Vector2), int pivot=0){//, bool useWorldSpace=true){
if(effect==null) return;
//~ instance.StartCoroutine(instance._ShowEffect(ability, screenPos, useWorldSpace));
instance.StartCoroutine(instance._ShowEffect(effect, screenPos, offset, pivot));
}
public IEnumerator _ShowEffect(Effect effect, Vector3 screenPos=default(Vector3), Vector2 offset=default(Vector2), int pivot=0){//, bool useWorldSpace=true){
string text="<b><size="+(tooltipLabel.fontSize+5)+">"+effect.name+"</size></b>\n\n";
text+="<i><b>"+effect.desp+"</b></i>";
text+="<i>\n\n"+effect.durationRemain+" "+(effect.durationRemain>1 ? "turns" : "turn")+" left</i>";
tooltipLabel.text=text;
tooltipLabel.lineSpacing=1.0f;
if(pivot==0) tooltipRectT.pivot=new Vector2(0, 0);
if(pivot==1) tooltipRectT.pivot=new Vector2(0, 1);
if(pivot==2) tooltipRectT.pivot=new Vector2(1, 1);
if(pivot==3) tooltipRectT.pivot=new Vector2(1, 0);
tooltipObj.SetActive(true); canvasGroup.alpha=0;
yield return null;
//tooltipRectT.localPosition=screenPos;//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
//if(useWorldSpace) tooltipRectT.position=screenPos;//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
//else tooltipRectT.localPosition=screenPos;//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
tooltipRectT.position=screenPos;//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
tooltipRectT.localPosition+=new Vector3(offset.x, offset.y, 0);//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
tooltipRectT.sizeDelta=labelRectT.sizeDelta+new Vector2(40, 30);
canvasGroup.alpha=1;
}
public static void Show(Ability ability, Vector3 screenPos=default(Vector3), Vector2 offset=default(Vector2), int pivot=0){//, bool useWorldSpace=true){
if(ability==null) return;
//~ instance.StartCoroutine(instance._ShowAbility(ability, screenPos, useWorldSpace));
instance.StartCoroutine(instance._ShowAbility(ability, screenPos, offset, pivot));
}
public IEnumerator _ShowAbility(Ability ability, Vector3 screenPos=default(Vector3), Vector2 offset=default(Vector2), int pivot=0){//, bool useWorldSpace=true){
string text="<b><size="+(tooltipLabel.fontSize+5)+">"+ability.name+"</size></b>\n\n";
text+="<i><b>"+ability.desp+"</b></i>";
if(ability.GetCurrentCD()>0) text+="<i>\n\nCooldown: "+ability.GetCurrentCD()+"-"+(ability.GetCurrentCD()>1 ? "turns" : "turn")+"</i>";
tooltipLabel.text=text;
tooltipLabel.lineSpacing=1.0f;
if(pivot==0) tooltipRectT.pivot=new Vector2(0, 0);
if(pivot==1) tooltipRectT.pivot=new Vector2(0, 1);
if(pivot==2) tooltipRectT.pivot=new Vector2(1, 1);
if(pivot==3) tooltipRectT.pivot=new Vector2(1, 0);
tooltipObj.SetActive(true); canvasGroup.alpha=0;
yield return null;
//tooltipRectT.localPosition=screenPos;//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
//if(useWorldSpace) tooltipRectT.position=screenPos;//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
//else tooltipRectT.localPosition=screenPos;//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
tooltipRectT.position=screenPos;//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
tooltipRectT.localPosition+=new Vector3(offset.x, offset.y, 0);//GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
tooltipRectT.sizeDelta=labelRectT.sizeDelta+new Vector2(40, 30);
canvasGroup.alpha=1;
}
public static void ShowAttackInfo(Attack attack){
instance.StartCoroutine(instance._ShowAttackInfo(attack));
}
public IEnumerator _ShowAttackInfo(Attack attack){
Vector3 screenPos1 = Camera.main.WorldToScreenPoint(attack.srcUnit.GetPos());
Vector3 screenPos2 = Camera.main.WorldToScreenPoint(attack.tgtUnit.GetPos());
float offsetX=0; float fontSize=tooltipLabel.fontSize;
if(screenPos1.x>screenPos2.x){ tooltipRectT.pivot=new Vector2(1, 0); offsetX=-20; }
if(screenPos1.x<screenPos2.x){ tooltipRectT.pivot=new Vector2(0, 0); offsetX=20; }
//float textSizeH=(tooltipLabel.fontSize+6);///UI.GetScaleFactor();
string text="";
text+="<i>damage: <b><size="+(fontSize+10)+">"+attack.damageHPMin.ToString("f0")+" - "+attack.damageHPMax.ToString("f0")+"</size></b></i>\n";
text+="<i>hit: <b><size="+(fontSize+0)+">"+(attack.hitChance*100).ToString("f0")+"%</size></b></i>\n";
text+="<i>critical: <b><size="+(fontSize+0)+">"+(attack.critChance*100).ToString("f0")+"%</size></b></i>";
if(attack.cover==1) text+="\n\ntarget in <i><b>Half-Cover</b></i>";
if(attack.cover==2) text+="\n\ntarget in <i><b>Full-Cover</b></i>";
tooltipLabel.text=text;
tooltipLabel.lineSpacing=1.2f;
tooltipObj.SetActive(true); canvasGroup.alpha=0;
yield return null;
tooltipRectT.localPosition=GetScreenPos(attack.tgtUnit.GetPos(), new Vector3(offsetX, 20));
tooltipRectT.sizeDelta=labelRectT.sizeDelta+new Vector2(40, 30);
canvasGroup.alpha=1;
}
public static void HideTooltip(){
instance.tooltipObj.SetActive(false);
}
public static Vector3 GetScreenPos(Vector3 point, Vector3 offset=default(Vector3)){
Vector3 screenPos=Camera.main.WorldToScreenPoint(point); screenPos.z=0;
return (screenPos+offset)*UI.GetScaleFactor();
}
}
}