#define Graph_And_Chart_PRO using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; namespace ChartAndGraph.Legened { /// /// class for canvas legned. this class basiically creates the legned prefab for each category in the chart /// [ExecuteInEditMode] class CanvasLegend : MonoBehaviour { [SerializeField] private int fontSize; [Serializable] public class ImageOverride { public Texture2D Image = null; public String category = ""; } [SerializeField] public ImageOverride[] CategoryImages = null; private Dictionary CreateimageDictionary() { Dictionary dic = new Dictionary(); if (CategoryImages == null) return dic; foreach(ImageOverride ent in CategoryImages) { dic[ent.category] = ent.Image; } return dic; } public int FontSize { get { return fontSize; } set { fontSize = value; PropertyChanged(); } } [SerializeField] private CanvasLegendItem legendItemPrefab; public CanvasLegendItem LegenedItemPrefab { get { return legendItemPrefab; } set { legendItemPrefab = value; PropertyChanged(); } } [SerializeField] private AnyChart chart; List mToDispose = new List(); bool mGenerateNext = false; public AnyChart Chart { get { return chart; } set { if (chart != null) ((IInternalUse)chart).Generated -= CanvasLegend_Generated; chart = value; if(chart != null) ((IInternalUse)chart).Generated += CanvasLegend_Generated; PropertyChanged(); } } void Start() { if (chart != null) ((IInternalUse)chart).Generated += CanvasLegend_Generated; InnerGenerate(); } void OnEnable() { if (chart != null) ((IInternalUse)chart).Generated += CanvasLegend_Generated; InnerGenerate(); } void OnDisable() { if (chart != null) ((IInternalUse)chart).Generated -= CanvasLegend_Generated; // Clear(); } void OnDestory() { if (chart != null) ((IInternalUse)chart).Generated -= CanvasLegend_Generated; Clear(); } private void CanvasLegend_Generated() { InnerGenerate(); } protected void OnValidate() { if (chart != null) ((IInternalUse)chart).Generated += CanvasLegend_Generated; Generate(); } protected void PropertyChanged() { Generate(); } public void Clear() { CanvasLegendItem[] items = gameObject.GetComponentsInChildren(); for(int i=0; i(); Texture2D overrideImage = null; if (dic.TryGetValue(item.Name, out overrideImage) == false) overrideImage = null; if(overrideImage != null) { legendItemData.Image.material = null; Texture2D tex = overrideImage; legendItemData.Image.sprite = CreateSpriteFromTexture(tex); } else if (legendItemData.Image != null) { if (item.Material == null) legendItemData.Image.material = null; else { if (isGradientShader(item.Material)) { legendItemData.Image.material = CreateCanvasGradient(item.Material); } else { legendItemData.Image.material = null; Texture2D tex = item.Material.mainTexture as Texture2D; if (tex != null) legendItemData.Image.sprite = CreateSpriteFromTexture(tex); legendItemData.Image.color = item.Material.color; } } } if (legendItemData.Text != null) { legendItemData.Text.text = item.Name; legendItemData.Text.fontSize = fontSize; } } } } }