Beispiel #1
0
    public void ShowGraph(List <float> valueList, bool makeDotsVisible = true, bool makeLinksVisible = true,
                          bool makeOriginZero = false, int maxVisibleValueAmount = -1,
                          Func <float, string> getAxisLabelX = null, Func <float, string> getAxisLabelY = null)
    {
        if (getAxisLabelX == null)
        {
            getAxisLabelX = delegate(float _i) { return(_i.ToString()); }
        }
        ;
        if (getAxisLabelY == null)
        {
            getAxisLabelY = delegate(float _f) { return(Mathf.RoundToInt(_f).ToString()); }
        }
        ;

        if (maxVisibleValueAmount <= 0)
        {
            maxVisibleValueAmount = valueList.Count;
        }

        if (DotObjects != null)
        {
            foreach (var go in DotObjects)
            {
                Destroy(go);
            }
            DotObjects.Clear();
        }
        if (LinkObjects != null)
        {
            foreach (var go in LinkObjects)
            {
                Destroy(go);
            }
            LinkObjects.Clear();
        }
        if (LabelXObjects != null)
        {
            foreach (var go in LabelXObjects)
            {
                Destroy(go);
            }
            LabelXObjects.Clear();
        }
        if (LabelYObjects != null)
        {
            foreach (var go in LabelYObjects)
            {
                Destroy(go);
            }
            LabelYObjects.Clear();
        }
        if (DashXObjects != null)
        {
            foreach (var go in DashXObjects)
            {
                Destroy(go);
            }
            DashXObjects.Clear();
        }
        if (DashYObjects != null)
        {
            foreach (var go in DashYObjects)
            {
                Destroy(go);
            }
            DashYObjects.Clear();
        }

        var graphWidth  = GraphContainer.sizeDelta.x;
        var graphHeight = GraphContainer.sizeDelta.y;

        var yMaximum = 1.0f; //valueList[0];
        var yMinimum = 0.0f; //valueList[0];

        /*for (var i = Mathf.Max(valueList.Count - maxVisibleValueAmount, 0); i < valueList.Count; i++)
         * {
         *  var value = valueList[i];
         *  if (value > yMaximum)
         *      yMaximum = value;
         *  if (value < yMinimum)
         *      yMinimum = value;
         * }*/

        var yDifference = yMaximum - yMinimum;

        if (yDifference <= 0)
        {
            yDifference = 5f;
        }
        //yMaximum = yMaximum + (yDifference * 0.2f);
        yMinimum = yMinimum - (yDifference * 0.2f);

        if (makeOriginZero)
        {
            yMinimum = 0f; // Start the graph at zero
        }
        var xSize  = graphWidth / (maxVisibleValueAmount + 1);
        var xIndex = 0;

        GameObject lastCircleGameObject = null;

        for (var i = Mathf.Max(valueList.Count - maxVisibleValueAmount, 0); i < valueList.Count; i++)
        {
            var xPosition        = xSize + xIndex * xSize;
            var yPosition        = (valueList[i] - yMinimum) / (yMaximum - yMinimum) * graphHeight;
            var circleGameObject = CreateCircle(new Vector2(xPosition, yPosition), makeDotsVisible);
            DotObjects.Add(circleGameObject);
            if (lastCircleGameObject != null)
            {
                var dotConnectionGameObject = CreateDotConnection(lastCircleGameObject.GetComponent <RectTransform>().anchoredPosition,
                                                                  circleGameObject.GetComponent <RectTransform>().anchoredPosition,
                                                                  makeLinksVisible, graphHeight);
                LinkObjects.Add(dotConnectionGameObject);
            }
            lastCircleGameObject = circleGameObject;

            /*var labelX = Instantiate(_labelTemplateX);
             * labelX.SetParent(GraphContainer, false);
             * labelX.gameObject.SetActive(true);
             * labelX.anchoredPosition = new Vector2(xPosition, -7f);
             * labelX.GetComponent<Text>().text = getAxisLabelX(i);
             * LabelXObjects.Add(labelX.gameObject);
             *
             * var dashX = Instantiate(_dashTemplateX);
             * dashX.SetParent(GraphContainer, false);
             * dashX.gameObject.SetActive(true);
             * dashX.anchoredPosition = new Vector2(yPosition, -3);
             * DashXObjects.Add(dashX.gameObject);*/

            xIndex++;
        }

        var separatorCount = 10;

        for (var i = 0; i <= separatorCount; i++)
        {
            /*var labelY = Instantiate(_labelTemplateY);
             * labelY.SetParent(GraphContainer, false);
             * labelY.gameObject.SetActive(true);
             * var normalizedValue = i                                    * 1f / separatorCount;
             * labelY.anchoredPosition = new Vector2(-7f, normalizedValue * graphHeight);
             * labelY.GetComponent<Text>().text = getAxisLabelY(yMinimum + (normalizedValue * (yMaximum - yMinimum)));
             * LabelYObjects.Add(labelY.gameObject);
             *
             * var dashY = Instantiate(_dashTemplateY);
             * dashY.SetParent(GraphContainer, false);
             * dashY.gameObject.SetActive(true);
             * dashY.anchoredPosition = new Vector2(-4f, normalizedValue * graphHeight);
             * DashYObjects.Add(dashY.gameObject);*/
        }
    }