#define Graph_And_Chart_PRO using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; namespace ChartAndGraph { public class WorldSpaceRadarChart : RadarChart { GameObject mEmptyPointPrefab; /// /// If this value is set all the text in the chart will be rendered to this specific camera. otherwise text is rendered to the main camera /// [SerializeField] [Tooltip("If this value is set all the text in the chart will be rendered to this specific camera. otherwise text is rendered to the main camera")] private Camera textCamera; /// /// If this value is set all the text in the chart will be rendered to this specific camera. otherwise text is rendered to the main camera /// public Camera TextCamera { get { return textCamera; } set { textCamera = value; OnPropertyUpdated(); } } protected override Camera TextCameraLink { get { return TextCamera; } } [SerializeField] private PathGenerator axisPrefab; public PathGenerator AxisPrefab { get { return axisPrefab; } set { axisPrefab = value; Invalidate(); } } [SerializeField] private GameObject axisPointPrefab; public GameObject AxisPointPrefab { get { return axisPointPrefab; } set { axisPointPrefab = value; Invalidate(); } } protected override GameObject CreateAxisObject(float thickness, Vector3[] path) { GameObject obj = ChartCommon.CreateChartItem(); ChartCommon.HideObject(obj, true); if (AxisPrefab != null && AxisThickness > 0.0001f) { GameObject axis = GameObject.Instantiate(AxisPrefab.gameObject); axis.AddComponent(); ChartCommon.HideObject(axis, hideHierarchy); axis.transform.SetParent(obj.transform, true); axis.transform.localScale = new Vector3(1f, 1f, 1f); axis.transform.localPosition = Vector3.zero; axis.transform.rotation = Quaternion.identity; Renderer rend = axis.GetComponent(); if (rend != null && AxisLineMaterial != null) rend.material = AxisLineMaterial; PathGenerator gen = axis.GetComponent(); gen.Generator(path, thickness, true); } if (AxisPointPrefab != null && AxisPointSize > 0.0001f) { for(int i=0; i< path.Length; i++) { GameObject point = GameObject.Instantiate(AxisPointPrefab.gameObject); ChartCommon.HideObject(point, hideHierarchy); point.transform.SetParent(obj.transform, true); point.transform.localScale = new Vector3(AxisPointSize, AxisPointSize, AxisPointSize); point.transform.localPosition = path[i]; point.transform.rotation = Quaternion.identity; Renderer rend = point.GetComponent(); if(rend != null && AxisPointMaterial != null) rend.material = AxisPointMaterial; } } return obj; } protected GameObject CreatePrefab(GameObject container,GameObject prefab) { GameObject obj = GameObject.Instantiate(prefab); ChartCommon.HideObject(obj, hideHierarchy); ChartCommon.EnsureComponent(obj); obj.transform.SetParent(container.transform, false); obj.transform.localScale = new Vector3(1f, 1f, 1f); obj.transform.localPosition = Vector3.zero; obj.transform.localRotation = Quaternion.identity; return obj; } protected RadarFillGenerator CreateFillObject(GameObject conatiner) { GameObject obj = ChartCommon.CreateChartItem(); ChartCommon.HideObject(obj, hideHierarchy); obj.AddComponent(); RadarFillGenerator fill = obj.AddComponent(); obj.transform.SetParent(conatiner.transform, false); obj.transform.localScale = new Vector3(1f, 1f, 1f); obj.transform.localPosition = Vector3.zero; obj.transform.localRotation = Quaternion.identity; return fill; } public override bool IsCanvas { get { return false; } } protected override GameObject CreateCategoryObject(Vector3[] path, int category) { RadarChartData.CategoryData cat = ((IInternalRadarData)DataSource).getCategoryData(category); GameObject container = ChartCommon.CreateChartItem(); ChartCommon.HideObject(container, hideHierarchy); container.transform.SetParent(transform, false); container.transform.localScale = new Vector3(1f, 1f, 1f); container.transform.localPosition = new Vector3(0f,0f,cat.Seperation); container.transform.localRotation = Quaternion.identity; if (cat.FillMaterial != null) { RadarFillGenerator fill = CreateFillObject(container); fill.Smoothing = cat.FillSmoothing; Renderer rend = fill.GetComponent(); if(rend != null) rend.material = cat.FillMaterial; fill.Generate(path, Radius, cat.Curve); } if (cat.LinePrefab != null && cat.LineMaterial != null && cat.LineThickness > 0) { GameObject line = CreatePrefab(container,cat.LinePrefab.gameObject); PathGenerator pathGen = line.GetComponent(); Renderer rend = line.GetComponent(); if (rend != null) rend.material = cat.LineMaterial; pathGen.Generator(path, cat.LineThickness, true); } GameObject prefab = cat.PointPrefab; if(prefab == null) { if (mEmptyPointPrefab == null) mEmptyPointPrefab = (GameObject)Resources.Load("Chart And Graph/SelectHandle"); prefab = mEmptyPointPrefab; } if (prefab != null) { for (int i=0; i(); if (rend != null) rend.material = cat.PointMaterial; ChartMaterialController controller = point.GetComponent(); if (controller != null && controller.Materials != null) { Color hover = controller.Materials.Hover; Color selected = controller.Materials.Selected; controller.Materials = new ChartDynamicMaterial(cat.PointMaterial, hover, selected); } ChartItemEvents[] events = point.GetComponentsInChildren(); for (int j = 0; j < events.Length; ++j) { if (events[j] == null) continue; InternalItemEvents comp = (InternalItemEvents)events[j]; comp.Parent = this; comp.UserData = args; } } } if (mCategoryLabels != null && mCategoryLabels.isActiveAndEnabled) { for (int i = 0; i < path.Length ; i++) { string group = DataSource.GetGroupName(i); double val = DataSource.GetValue(cat.Name, group); Vector3 labelPos = path[i]; Vector3 dir = labelPos.normalized; labelPos += dir * mCategoryLabels.Seperation; labelPos += new Vector3(mCategoryLabels.Location.Breadth, 0f, mCategoryLabels.Location.Depth); int fractionDigits = 2; if (mItemLabels != null) fractionDigits = mItemLabels.FractionDigits; string toSet = mCategoryLabels.TextFormat.Format(ChartAdancedSettings.Instance.FormatFractionDigits(fractionDigits, val, CustomNumberFormat), cat.Name, group); BillboardText billboard = ChartCommon.CreateBillboardText(null,mCategoryLabels.TextPrefab, transform, toSet, labelPos.x, labelPos.y, labelPos.z, 0f, null, hideHierarchy, mCategoryLabels.FontSize, mCategoryLabels.FontSharpness); TextController.AddText(billboard); AddBillboardText(cat.Name, billboard); } } return container; } } }