/// <summary> /// Update is called every frame, if the MonoBehaviour is enabled. /// </summary> void Update() { if (Interactable) { Vector2 local; Canvas cvs = transform.root.GetComponent <Canvas>(); RectTransformUtility.ScreenPointToLocalPointInRectangle((RectTransform)transform, Input.mousePosition, cvs.worldCamera, out local); var poly = HitTestUtil.HitTest(m_Polygons.Values.ToArray(), local); if (poly != null && m_CurrentPolygon == null) { OnMouseOverPolygon.Invoke(Array.Find(m_Polygons.ToArray(), p => p.Value == poly).Key, poly); m_CurrentPolygon = poly; } else if (poly == null && m_CurrentPolygon != null) { OnMouseOutPolygon.Invoke(Array.Find(m_Polygons.ToArray(), p => p.Value == poly).Key, m_CurrentPolygon); m_CurrentPolygon = null; } if (m_CurrentPolygon != null && Input.GetMouseButtonDown(0)) { // Mouse left down ChartItemVO data = Array.Find(m_Polygons.ToArray(), p => p.Value == poly).Key; OnChartItemClicked.Invoke(data.data as JSONNode); } } }
protected override Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp) { // canvas.strokeStyle.stroke = false; // canvas.strokeStyle.fill = true; // canvas.strokeStyle.fillColor = item.color; // canvas.Rect(pos.x, pos.y, size.x, size.y); Vector2 center; Vector2 lerped = GetLerpedSize(size, lerp); if (Data.dir == ChartVO.Directions.H) { center = new Vector2(lerped.x, pos.y); } else { center = new Vector2(pos.x, lerped.y); } canvas.Arc(center, Radius, false, Color.black, 1, true, DotColor, 0, 100, 30); Vector2[] arr = new Vector2[4] { new Vector2(pos.x, pos.y), new Vector2(pos.x + lerped.x, pos.y), new Vector2(pos.x + lerped.x, pos.y + lerped.y), new Vector2(pos.x, pos.y + lerped.y) }; return(arr); }
protected override Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp) { Vector2 lerpedSize = GetLerpedSize(size, lerp); canvas.strokeStyle.stroke = false; Vector2 center = Vector2.zero; if (Data.dir == BarVO.Directions.V) { center.x = pos.x; center.y = lerpedSize.y; } else { center.x = lerpedSize.x; center.y = pos.y; } canvas.Arc(center, Radius, false, Color.white, 1, true, item.color, 0, 100, 30); float degrees = 1f; int fa = 361; List <Vector2> allV = new List <Vector2>(); for (int i = 0; i < fa; i++) { float rad = Mathf.Deg2Rad * (i * degrees); float c = Mathf.Cos(rad); float s = Mathf.Sin(rad); Vector2 p0 = new Vector2(center.x + Radius * c, center.y + Radius * s); // 外边框 顶点0 allV.Add(p0); } return(allV.ToArray()); }
protected Vector2 GetItemSize(ChartItemVO item) { if (Data.dir == BarVO.Directions.V) { return(new Vector2((boundary.width / Data.Items.Length) * ChartItemSizeWeightage, boundary.height * (item.value / Data.maxScale))); } else { return(new Vector2(boundary.width * (item.value / Data.maxScale), (boundary.height / Data.Items.Length) * ChartItemSizeWeightage)); } }
protected override Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp) { Vector2 sizeDelta = (transform as RectTransform).sizeDelta; float radius = Mathf.Min(sizeDelta.x, sizeDelta.y) / 2; Vector2 center = Vector2.one * radius; PiePieceVO piece = item as PiePieceVO; Vector2 fillInfo = Data.GetItemFillInfo(piece); canvas.Arc(center, radius, false, Color.white, 1, true, item.color, fillInfo.x, fillInfo.y, 180); return(new Vector2[] {}); }
protected void DrawItem(ChartItemVO item, int index, float lerp) { Vector2 siz = GetItemSize(item); // Vector2 sizLerp = Vector2.Lerp(Vector2.zero, siz, lerp); Vector2 pos = GetItemPos(index); // if (Data.dir == ChartVO.Directions.H) // { // siz.x = sizLerp.x; // } // else // { // siz.y = sizLerp.y; // } var v = FillItem(item, pos, siz, lerp); m_Polygons.Add(item, v); }
private ChartItemVO FindLargestItem() { ChartItemVO largest = null; for (int i = 0; i < Data.Items.Length; i++) { if (largest == null) { largest = Data.Items[i]; continue; } var item = Data.Items[i]; if (item.value > largest.value) { largest = item; } } return(largest); }
protected override Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp) { Vector2 sizLerp = GetLerpedSize(size, lerp); canvas.strokeStyle.stroke = false; canvas.strokeStyle.fill = true; canvas.strokeStyle.fillColor = item.color; canvas.Rect(pos.x, pos.y, sizLerp.x, sizLerp.y); Vector2[] arr = new Vector2[4] { new Vector2(pos.x, pos.y), new Vector2(pos.x + sizLerp.x, pos.y), new Vector2(pos.x + sizLerp.x, pos.y + sizLerp.y), new Vector2(pos.x, pos.y + sizLerp.y) }; // m_ItemVertexDic.Add(item, arr); return(arr); }
protected List <UIVertex[]> OnPopulatePolygon(UIVertex[] vertices, string name) { if (vertices.Length != 4) { return(null); } ChartItemVO data = FindItem(vertices); if (data == null) { return(null); } Sprite sprite = canvas.MainSprite; if (sprite) { var uv = (sprite != null) ? UnityEngine.Sprites.DataUtility.GetOuterUV(sprite) : Vector4.zero; vertices[0].uv0 = new Vector2(uv.x, uv.y); vertices[1].uv0 = new Vector2(uv.z, uv.y); vertices[2].uv0 = new Vector2(uv.z, uv.w); vertices[3].uv0 = new Vector2(uv.x, uv.w); vertices[0].color = Color.white; vertices[1].color = Color.white; vertices[2].color = Color.white; vertices[3].color = Color.white; } else { vertices[0].color = data.ColorBL; vertices[1].color = data.ColorBR; vertices[2].color = data.ColorTR; vertices[3].color = data.ColorTL; vertices[0].uv0 = Vector2.zero; vertices[1].uv0 = Vector2.zero; vertices[2].uv0 = Vector2.zero; vertices[3].uv0 = Vector2.zero; } var list = new List <UIVertex[]>(); list.Add(vertices); return(list); }
protected override Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp) { LineChartItemVO vo = item as LineChartItemVO; canvas.strokeStyle.fill = true; canvas.strokeStyle.fillColor = Color.white; canvas.strokeStyle.stroke = false; List <Vector2> allV = new List <Vector2>(); float siz = GetItemCenter(vo) * lerp; if (Data.dir == ChartVO.Directions.V) { var rect = canvas.Rect(pos.x, 0, BarSize, boundary.height); rect.name = SLIDER_BACKGROUND; rect = canvas.Rect(pos.x, 0, BarSize, siz); rect.name = SLIDER_FOREGROUND; rect = canvas.Rect(pos.x - Radius + BarSize / 2, siz - Radius, Radius * 2, Radius * 2); rect.name = SLIDER; allV.Add(new Vector2(pos.x, pos.y)); allV.Add(new Vector2(pos.x + BarSize, pos.y)); allV.Add(new Vector2(pos.x + BarSize, pos.y + boundary.height)); allV.Add(new Vector2(pos.x, pos.y + boundary.height)); } else { // float siz = GetItemCenter(vo) * lerp; var rect = canvas.Rect(0, pos.y, boundary.width, BarSize); rect.name = SLIDER_BACKGROUND; rect = canvas.Rect(0, pos.y, siz, BarSize); rect.name = SLIDER_FOREGROUND; rect = canvas.Rect(siz - Radius, pos.y - Radius + BarSize / 2, Radius * 2, Radius * 2); rect.name = SLIDER; allV.Add(new Vector2(pos.x, pos.y)); allV.Add(new Vector2(pos.x + boundary.width, pos.y)); allV.Add(new Vector2(pos.x + boundary.width, pos.y + BarSize)); allV.Add(new Vector2(pos.x, pos.y + BarSize)); } return(allV.ToArray()); }
protected override Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp) { return(new Vector2[] {}); }
protected abstract Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp);
protected override Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp) { float lerpCache = lerp; // if (AnimateSpecialLabelOnly) lerp = 1; // if (m_StandardItem == null) // m_StandardItem = FindLargestItem(); float width = GetWidth(); Vector2 sizLerp = GetLerpedSize(size, lerp); sizLerp.x = width; if ((item as BarItemVO).SpecialItem) { canvas.strokeStyle.stroke = false; canvas.strokeStyle.fill = true; canvas.strokeStyle.fillColor = item.color; canvas.Rect(0, 0, sizLerp.x, sizLerp.y); Vector2[] arr1 = new Vector2[4] { new Vector2(0, 0), new Vector2(sizLerp.x, 0), new Vector2(sizLerp.x, sizLerp.y), new Vector2(0, sizLerp.y) }; m_ItemVertexDic[item] = arr1; } // canvas.strokeStyle.fill = false; // canvas.strokeStyle.stroke = true; // canvas.strokeStyle.strokeColor = DivideLineColor; // canvas.strokeStyle.thickness = DivideLineThickness; // canvas.MoveTo(0, sizLerp.y); // canvas.LineTo(sizLerp.x, sizLerp.y); // canvas.Stroke(); Text label; if (m_ItemLabelDic.TryGetValue(item, out label)) { float value = Mathf.Round(item.value * lerp * 100) / 100; label.text = value.ToString(); label.transform.localPosition = new Vector2(label.transform.localPosition.x, sizLerp.y + 5); if (AnimateSpecialLabelOnly && (item as BarItemVO).SpecialItem) { value = Mathf.Round(item.value * lerpCache * 100) / 100; label.text = value.ToString(); Vector2 sizLerp1 = GetLerpedSize(size, lerpCache); label.transform.localPosition = new Vector2(label.transform.localPosition.x, sizLerp1.y + 5); } } Vector2[] arr = new Vector2[4] { new Vector2(pos.x, pos.y), new Vector2(pos.x + sizLerp.x, pos.y), new Vector2(pos.x + sizLerp.x, pos.y + sizLerp.y), new Vector2(pos.x, pos.y + sizLerp.y) }; return(arr); }