From 481cf9ae682dca7a0491bb5238c3bcc1092272ca Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Wed, 3 Oct 2018 22:30:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Scripts/BaseAxesChart.cs | 19 ++++++++++++------- Scripts/BaseChart.cs | 33 ++++++++++++++++++++++++++------- Scripts/ChartTheme.cs | 13 +++++++++---- Scripts/ChartUtils.cs | 26 ++++++++++++++++---------- Scripts/LineChart.cs | 6 ++++-- Scripts/RadarChart.cs | 20 ++++++++++++++------ 6 files changed, 81 insertions(+), 36 deletions(-) diff --git a/Scripts/BaseAxesChart.cs b/Scripts/BaseAxesChart.cs index aadcd185..86a51f93 100644 --- a/Scripts/BaseAxesChart.cs +++ b/Scripts/BaseAxesChart.cs @@ -244,7 +244,8 @@ namespace xcharts float scaleWid = coordinateWid / (xAxis.splitNumber - 1); if (xAxis.type == AxisType.value) { - return new Vector3(zeroX + (i + 1 - 0.5f) * scaleWid, zeroY - coordinate.scaleLen - 10, 0); + return new Vector3(zeroX + (i + 1 - 0.5f) * scaleWid, + zeroY - coordinate.scaleLen - 10, 0); } else { @@ -254,7 +255,8 @@ namespace xcharts } else { - return new Vector3(zeroX + (i + 1 - 0.5f) * scaleWid, zeroY - coordinate.scaleLen - 5, 0); + return new Vector3(zeroX + (i + 1 - 0.5f) * scaleWid, + zeroY - coordinate.scaleLen - 5, 0); } } } @@ -389,7 +391,7 @@ namespace xcharts float pX = zeroX - coordinate.scaleLen; float pY = zeroY + i * coordinateHig / (yAxis.splitNumber - 1); ChartUtils.DrawLine(vh, new Vector3(pX, pY), new Vector3(zeroX, pY), coordinate.tickness, - Color.white); + themeInfo.axisLineColor); if (yAxis.showSplitLine) { DrawSplitLine(vh, true,yAxis.splitLineType, new Vector3(zeroX, pY), @@ -401,7 +403,7 @@ namespace xcharts float pX = zeroX + i * coordinateWid / (xAxis.splitNumber - 1); float pY = zeroY - coordinate.scaleLen - 2; ChartUtils.DrawLine(vh, new Vector3(pX, zeroY), new Vector3(pX, pY), coordinate.tickness, - Color.white); + themeInfo.axisLineColor); if (xAxis.showSplitLine) { DrawSplitLine(vh, false,xAxis.splitLineType, new Vector3(pX, zeroY), @@ -410,12 +412,15 @@ namespace xcharts } //draw x,y axis ChartUtils.DrawLine(vh, new Vector3(zeroX, zeroY - coordinate.scaleLen), - new Vector3(zeroX, zeroY + coordinateHig + 2), coordinate.tickness, themeInfo.axisLineColor); + new Vector3(zeroX, zeroY + coordinateHig + 2), coordinate.tickness, + themeInfo.axisLineColor); ChartUtils.DrawLine(vh, new Vector3(zeroX - coordinate.scaleLen, zeroY), - new Vector3(zeroX + coordinateWid + 2, zeroY), coordinate.tickness, themeInfo.axisLineColor); + new Vector3(zeroX + coordinateWid + 2, zeroY), coordinate.tickness, + themeInfo.axisLineColor); } - private void DrawSplitLine(VertexHelper vh,bool isYAxis,SplitLineType type,Vector3 startPos,Vector3 endPos) + private void DrawSplitLine(VertexHelper vh,bool isYAxis,SplitLineType type,Vector3 startPos, + Vector3 endPos) { switch (type) { diff --git a/Scripts/BaseChart.cs b/Scripts/BaseChart.cs index 2c1f9373..199bc3b1 100644 --- a/Scripts/BaseChart.cs +++ b/Scripts/BaseChart.cs @@ -67,10 +67,12 @@ namespace xcharts public float top; public float bottom; public List dataList = new List(); + public int checkDataListCount { get; set; } public bool IsShowSeries(int seriesIndex) { if (seriesIndex < 0 || seriesIndex >= dataList.Count) seriesIndex = 0; + if (seriesIndex >= dataList.Count) return false; return dataList[seriesIndex].show; } } @@ -236,7 +238,8 @@ namespace xcharts break; case Align.right: anchor = TextAnchor.MiddleRight; - titlePosition = new Vector3(chartWid - title.right - titleWid, chartHig - title.top, 0); + titlePosition = new Vector3(chartWid - title.right - titleWid, + chartHig - title.top, 0); break; case Align.center: anchor = TextAnchor.MiddleCenter; @@ -265,7 +268,7 @@ namespace xcharts themeInfo.textColor, Vector2.zero,Vector2.zero, Vector2.zero, new Vector2(legend.dataWid, legend.dataHig)); legend.dataList[i].button = btn; - Color bcolor = data.show ? themeInfo.GetColor(i) : Color.grey; + Color bcolor = data.show ? themeInfo.GetColor(i) : themeInfo.unableColor; btn.gameObject.SetActive(legend.show); btn.transform.localPosition = GetLegendPosition(i); btn.GetComponent().color = bcolor; @@ -273,7 +276,7 @@ namespace xcharts btn.onClick.AddListener(delegate () { data.show = !data.show; - btn.GetComponent().color = data.show ? themeInfo.GetColor(i) : Color.grey; + btn.GetComponent().color = data.show ? themeInfo.GetColor(i) : themeInfo.unableColor; OnYMaxValueChanged(); OnLegendButtonClicked(); RefreshChart(); @@ -306,10 +309,13 @@ namespace xcharts } else if (startY <= 0) { - float offset = (chartHig - (legendCount * legend.dataHig - (legendCount - 1) * legend.dataSpace)) / 2; + float legendHig = legendCount * legend.dataHig - (legendCount - 1) * legend.dataSpace; + float offset = (chartHig - legendHig) / 2; startY = chartHig - offset - legend.dataHig; } - float posX = legend.location == Location.left ? legend.left : chartWid - legend.right - legend.dataWid; + float posX = legend.location == Location.left ? + legend.left : + chartWid - legend.right - legend.dataWid; return new Vector3(posX, startY - i * (legend.dataHig + legend.dataSpace), 0); default: break; } @@ -353,6 +359,12 @@ namespace xcharts private void CheckLegend() { + if (checkLegend.checkDataListCount != legend.dataList.Count) + { + checkLegend.checkDataListCount = legend.dataList.Count; + OnLegendDataListChanged(); + } + if (checkLegend.dataWid != legend.dataWid || checkLegend.dataHig != legend.dataHig || checkLegend.dataSpace != legend.dataSpace || @@ -404,15 +416,22 @@ namespace xcharts for (int i = 0; i < legend.dataList.Count; i++) { Button btn = legend.dataList[i].button; - btn.GetComponent().sizeDelta = new Vector2(legend.dataWid, legend.dataHig); + btn.GetComponent().sizeDelta = + new Vector2(legend.dataWid, legend.dataHig); Text txt = btn.GetComponentInChildren(); - txt.transform.GetComponent().sizeDelta = new Vector2(legend.dataWid, legend.dataHig); + txt.transform.GetComponent().sizeDelta = + new Vector2(legend.dataWid, legend.dataHig); txt.transform.localPosition = Vector3.zero; btn.transform.localPosition = GetLegendPosition(i); btn.gameObject.SetActive(legend.show); } } + protected virtual void OnLegendDataListChanged() + { + InitLegend(); + } + protected virtual void OnYMaxValueChanged() { } diff --git a/Scripts/ChartTheme.cs b/Scripts/ChartTheme.cs index 747c1c3d..8c790c87 100644 --- a/Scripts/ChartTheme.cs +++ b/Scripts/ChartTheme.cs @@ -19,6 +19,7 @@ namespace xcharts public Color contrastColor; public Color textColor; public Color subTextColor; + public Color unableColor; public Color axisLineColor; public Color axisSplitLineColor; @@ -40,6 +41,7 @@ namespace xcharts font = theme.font; backgroundColor = theme.backgroundColor; contrastColor = theme.contrastColor; + unableColor = theme.unableColor; textColor = theme.textColor; subTextColor = theme.subTextColor; axisLineColor = theme.axisLineColor; @@ -60,6 +62,7 @@ namespace xcharts font = Resources.GetBuiltinResource("Arial.ttf"), backgroundColor = new Color32(255, 255, 255, 255), contrastColor = GetColor("#514D4D"), + unableColor = GetColor("#cccccc"), textColor = GetColor("#514D4D"), subTextColor = GetColor("#514D4D"), axisLineColor = GetColor("#514D4D"), @@ -91,6 +94,7 @@ namespace xcharts font = Resources.GetBuiltinResource("Arial.ttf"), backgroundColor = new Color32(255, 255, 255, 255), contrastColor = GetColor("#514D4D"), + unableColor = GetColor("#cccccc"), textColor = GetColor("#514D4D"), subTextColor = GetColor("#514D4D"), axisLineColor = GetColor("#514D4D"), @@ -98,14 +102,14 @@ namespace xcharts colorPalette = new Color[] { new Color32(55, 162, 218, 255), - new Color32(50, 197, 233, 255), - new Color32(103, 224, 227, 255), - new Color32(159, 230, 184, 255), - new Color32(255, 219, 92, 255), new Color32(255, 159, 127, 255), + new Color32(50, 197, 233, 255), new Color32(251, 114, 147, 255), + new Color32(103, 224, 227, 255), new Color32(224, 98, 174, 255), + new Color32(159, 230, 184, 255), new Color32(230, 144, 209, 255), + new Color32(255, 219, 92, 255), new Color32(230, 188, 243, 255), new Color32(157, 150, 245, 255), new Color32(131, 120, 234, 255), @@ -122,6 +126,7 @@ namespace xcharts return new ThemeInfo() { font = Resources.GetBuiltinResource("Arial.ttf"), + unableColor = GetColor("#cccccc"), backgroundColor = new Color32(34, 34, 34, 255), contrastColor = GetColor("#eee"), textColor = GetColor("#eee"), diff --git a/Scripts/ChartUtils.cs b/Scripts/ChartUtils.cs index 6755487b..7eefbb4d 100644 --- a/Scripts/ChartUtils.cs +++ b/Scripts/ChartUtils.cs @@ -7,8 +7,9 @@ namespace xcharts public static class ChartUtils { private static float CRICLE_SMOOTHNESS = 1f; - public static Text AddTextObject(string name, Transform parent, Font font, Color color,TextAnchor anchor, - Vector2 anchorMin, Vector2 anchorMax, Vector2 pivot, Vector2 sizeDelta, int fontSize = 14) + public static Text AddTextObject(string name, Transform parent, Font font, Color color, + TextAnchor anchor,Vector2 anchorMin, Vector2 anchorMax, Vector2 pivot, Vector2 sizeDelta, + int fontSize = 14) { GameObject txtObj; if (parent.Find(name)) @@ -73,6 +74,7 @@ namespace xcharts { rect = btnObj.AddComponent(); } + btnObj.GetComponentInChildren().color = color; rect.anchorMax = anchorMax; rect.anchorMin = anchorMin; rect.pivot = pivot; @@ -167,8 +169,8 @@ namespace xcharts DrawSector(vh, p, radius, color, 0, 360, segments); } - public static void DrawCicleNotFill(VertexHelper vh, Vector3 p, float radius, float tickness, Color color, - int segments = 0) + public static void DrawCicleNotFill(VertexHelper vh, Vector3 p, float radius, float tickness, + Color color, int segments = 0) { if (segments <= 0) { @@ -206,7 +208,8 @@ namespace xcharts for (int i = 0; i <= segments; i++) { float currAngle = startAngle + i * angle; - p3 = new Vector3(p.x + radius * Mathf.Sin(currAngle), p.y + radius * Mathf.Cos(currAngle)); + p3 = new Vector3(p.x + radius * Mathf.Sin(currAngle), + p.y + radius * Mathf.Cos(currAngle)); DrawTriangle(vh, vertexs, p, p2, p3, color); p2 = p3; } @@ -227,14 +230,17 @@ namespace xcharts Vector3 p1, p2, p3, p4; float startAngle = startDegree * Mathf.Deg2Rad; float angle = (toDegree - startDegree) * Mathf.Deg2Rad / segments; - p1 = new Vector3(p.x + insideRadius * Mathf.Sin(startAngle), p.y + insideRadius * Mathf.Cos(startAngle)); - p2 = new Vector3(p.x + outsideRadius * Mathf.Sin(startAngle), p.y + outsideRadius * Mathf.Cos(startAngle)); + p1 = new Vector3(p.x + insideRadius * Mathf.Sin(startAngle), + p.y + insideRadius * Mathf.Cos(startAngle)); + p2 = new Vector3(p.x + outsideRadius * Mathf.Sin(startAngle), + p.y + outsideRadius * Mathf.Cos(startAngle)); for (int i = 0; i <= segments; i++) { float currAngle = startAngle + i * angle; - p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), p.y + outsideRadius * Mathf.Cos(currAngle)); - p4 = new Vector3(p.x + insideRadius * Mathf.Sin(currAngle), p.y + insideRadius * Mathf.Cos(currAngle)); - + p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), + p.y + outsideRadius * Mathf.Cos(currAngle)); + p4 = new Vector3(p.x + insideRadius * Mathf.Sin(currAngle), + p.y + insideRadius * Mathf.Cos(currAngle)); DrawPolygon(vh, p1, p2, p3, p4, color); p1 = p4; p2 = p3; diff --git a/Scripts/LineChart.cs b/Scripts/LineChart.cs index 5d65ae43..5e3743ca 100644 --- a/Scripts/LineChart.cs +++ b/Scripts/LineChart.cs @@ -97,10 +97,12 @@ namespace xcharts { SeriesData data = series.dataList[i]; - Vector3 p = new Vector3(startX + i * scaleWid, zeroY + data.value * coordinateHig / max); + Vector3 p = new Vector3(startX + i * scaleWid, + zeroY + data.value * coordinateHig / max); if(theme == Theme.Dark) { - ChartUtils.DrawCricle(vh, p, lineInfo.pointWid, color, (int)lineInfo.pointWid * 5); + ChartUtils.DrawCricle(vh, p, lineInfo.pointWid, color, + (int)lineInfo.pointWid * 5); } else { diff --git a/Scripts/RadarChart.cs b/Scripts/RadarChart.cs index f0cf2701..461e75a4 100644 --- a/Scripts/RadarChart.cs +++ b/Scripts/RadarChart.cs @@ -210,7 +210,10 @@ namespace xcharts { toPoint = new Vector3(p.x + radius * Mathf.Sin(currAngle), p.y + radius * Mathf.Cos(currAngle)); - if (radarInfo.area) ChartUtils.DrawTriangle(vh, p, startPoint, toPoint, areaColor); + if (radarInfo.area) + { + ChartUtils.DrawTriangle(vh, p, startPoint, toPoint, areaColor); + } ChartUtils.DrawLine(vh, startPoint, toPoint, radarInfo.lineTickness, color); startPoint = toPoint; } @@ -245,8 +248,10 @@ namespace xcharts for (int j = 0; j <= indicatorNum; j++) { float currAngle = j * angle; - p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), p.y + outsideRadius * Mathf.Cos(currAngle)); - p4 = new Vector3(p.x + insideRadius * Mathf.Sin(currAngle), p.y + insideRadius * Mathf.Cos(currAngle)); + p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), + p.y + outsideRadius * Mathf.Cos(currAngle)); + p4 = new Vector3(p.x + insideRadius * Mathf.Sin(currAngle), + p.y + insideRadius * Mathf.Cos(currAngle)); ChartUtils.DrawPolygon(vh, p1, p2, p3, p4, color); ChartUtils.DrawLine(vh, p2, p3, radarInfo.lineTickness, radarInfo.lineColor); @@ -258,7 +263,8 @@ namespace xcharts for (int j = 0; j <= indicatorNum; j++) { float currAngle = j * angle; - p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), p.y + outsideRadius * Mathf.Cos(currAngle)); + p3 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), + p.y + outsideRadius * Mathf.Cos(currAngle)); ChartUtils.DrawLine(vh, p, p3, radarInfo.lineTickness/2, radarInfo.lineColor); } } @@ -276,13 +282,15 @@ namespace xcharts Color color = radarInfo.backgroundColorList[i % radarInfo.backgroundColorList.Count]; outsideRadius = insideRadius + block; ChartUtils.DrawDoughnut(vh, p, insideRadius, outsideRadius, 0, 360, color); - ChartUtils.DrawCicleNotFill(vh, p, outsideRadius, radarInfo.lineTickness, radarInfo.lineColor); + ChartUtils.DrawCicleNotFill(vh, p, outsideRadius, radarInfo.lineTickness, + radarInfo.lineColor); insideRadius = outsideRadius; } for (int j = 0; j <= indicatorNum; j++) { float currAngle = j * angle; - p1 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), p.y + outsideRadius * Mathf.Cos(currAngle)); + p1 = new Vector3(p.x + outsideRadius * Mathf.Sin(currAngle), + p.y + outsideRadius * Mathf.Cos(currAngle)); ChartUtils.DrawLine(vh, p, p1, radarInfo.lineTickness / 2, radarInfo.lineColor); } }