コード例 #1
0
    /// <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);
            }
        }
    }
コード例 #2
0
    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);
    }
コード例 #3
0
    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());
    }
コード例 #4
0
 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));
     }
 }
コード例 #5
0
    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[] {});
    }
コード例 #6
0
    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);
    }
コード例 #7
0
    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);
    }
コード例 #8
0
ファイル: UIBar.cs プロジェクト: wyyayy/UIGraphicAPI
    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);
    }
コード例 #9
0
    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);
    }
コード例 #10
0
    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());
    }
コード例 #11
0
ファイル: UIRadarChart.cs プロジェクト: wyyayy/UIGraphicAPI
 protected override Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp)
 {
     return(new Vector2[] {});
 }
コード例 #12
0
 protected abstract Vector2[] FillItem(ChartItemVO item, Vector2 pos, Vector2 size, float lerp);
コード例 #13
0
    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);
    }