#define Graph_And_Chart_PRO using ChartAndGraph; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public partial class HoverText : MonoBehaviour { public Text TextPrefab; public int FontSize = 5; public Vector3 TextOffset = new Vector3(); int fractionDigits = 0; AnyChart mChart; List mItems = new List(); List mRemoved = new List(); partial void HoverStart(); void Start () { var graph = GetComponent(); var labels = GetComponent(); if (labels != null) fractionDigits = labels.FractionDigits; else fractionDigits = 2; if (graph != null) { mChart = graph; graph.PointHovered.AddListener(GraphHover); graph.NonHovered.AddListener(NonHover); return; } var bar = GetComponent(); if (bar != null) { mChart = bar; bar.BarHovered.AddListener(BarHover); bar.NonHovered.AddListener(NonHover); return; } var pie = GetComponent(); if(pie != null) { mChart = pie; pie.PieHovered.AddListener(PieHover); pie.NonHovered.AddListener(NonHover); } HoverStart(); } void NonHover() { for (int i = 0; i < mItems.Count; i++) { RemoveText(mItems[i]); } mItems.Clear(); } void Update() { mRemoved.RemoveAll(x => { if(!x.enabled) { ChartCommon.SafeDestroy(x.gameObject); return true; } return false; }); } IEnumerator SelectText(Text text) { yield return new WaitForEndOfFrame(); if (text != null) { ChartItemEvents e = text.GetComponent(); if (e != null) { e.OnMouseHover.Invoke(e.gameObject); } } } void RemoveText(Text text) { if (text != null) { ChartItemEvents e = text.GetComponent(); CharItemEffectController control = text.GetComponent(); if (e != null && control != null) { e.OnMouseLeave.Invoke(e.gameObject); mRemoved.Add(control); } else { ChartCommon.SafeDestroy(text); } } } void PopText(string data,Vector3 position,bool worldPositionStays) { var canvas = GetComponentInParent(); if (canvas == null || TextPrefab == null) return; NonHover(); GameObject obj =(GameObject) GameObject.Instantiate(TextPrefab.gameObject, position + TextOffset, Quaternion.identity); var text = obj.GetComponent(); text.maskable = false; text.text = data; text.fontSize = FontSize; obj.transform.SetParent(transform, false); if (worldPositionStays) obj.transform.position = position + TextOffset; else obj.transform.localPosition = position + TextOffset; Vector3 local = obj.transform.localPosition; local.z = 0f; obj.transform.localPosition = local; mItems.Add(text); StartCoroutine(SelectText(text)); } void PieHover(PieChart.PieEventArgs args) { String data = ChartAdancedSettings.Instance.FormatFractionDigits(fractionDigits, args.Value); PopText(data, args.LabelPosition, true); } void BarHover(BarChart.BarEventArgs args) { String data = ChartAdancedSettings.Instance.FormatFractionDigits(fractionDigits, args.Value); PopText(data, args.TopPosition,true); } void GraphHover(GraphChartBase.GraphEventArgs args) { var graph = mChart as GraphChart; var point = graph.DataSource.GetPoint(args.Category, args.Index); Vector3 position; if(graph.PointToWorldSpace(out position, point.x, point.y, args.Category)) PopText(args.XString + ":" + args.YString, position, true); else PopText(args.XString + ":" + args.YString, args.Position,false); } }