Example #1
0
        public static void DrawCurve(Rect rect, SimpleCurve curve, SimpleCurveDrawerStyle style = null, List <CurveMark> marks = null, Rect legendScreenRect = default(Rect))
        {
            SimpleCurveDrawInfo simpleCurveDrawInfo = new SimpleCurveDrawInfo();

            simpleCurveDrawInfo.curve = curve;
            DrawCurve(rect, simpleCurveDrawInfo, style, marks, legendScreenRect);
        }
Example #2
0
 public static void DrawCurve(Rect rect, SimpleCurveDrawInfo curve, SimpleCurveDrawerStyle style = null, List <CurveMark> marks = null, Rect legendScreenRect = default(Rect))
 {
     if (curve.curve != null)
     {
         List <SimpleCurveDrawInfo> list = new List <SimpleCurveDrawInfo>();
         list.Add(curve);
         DrawCurves(rect, list, style, marks, legendScreenRect);
     }
 }
Example #3
0
        public static void DrawCurveMousePoint(List <SimpleCurveDrawInfo> curves, Rect screenRect, Rect viewRect, string labelX)
        {
            if (curves.Count == 0 || !Mouse.IsOver(screenRect))
            {
                return;
            }
            GUI.BeginGroup(screenRect);
            Vector2             mousePosition       = Event.current.mousePosition;
            Vector2             vector              = default(Vector2);
            Vector2             vector2             = default(Vector2);
            SimpleCurveDrawInfo simpleCurveDrawInfo = null;
            bool flag = false;

            foreach (SimpleCurveDrawInfo curf in curves)
            {
                if (curf.curve.PointsCount != 0)
                {
                    Vector2 vector3 = ScreenToCurveCoords(screenRect, viewRect, mousePosition);
                    vector3.y = curf.curve.Evaluate(vector3.x);
                    Vector2 vector4 = CurveToScreenCoordsInsideScreenRect(screenRect, viewRect, vector3);
                    if (!flag || Vector2.Distance(vector4, mousePosition) < Vector2.Distance(vector2, mousePosition))
                    {
                        flag                = true;
                        vector              = vector3;
                        vector2             = vector4;
                        simpleCurveDrawInfo = curf;
                    }
                }
            }
            if (flag)
            {
                DrawPoint(vector2);
                Rect rect = new Rect(vector2.x, vector2.y, 120f, 60f);
                Text.Anchor = TextAnchor.UpperLeft;
                if (rect.x + rect.width > screenRect.width)
                {
                    rect.x     -= rect.width;
                    Text.Anchor = TextAnchor.UpperRight;
                }
                if (rect.y + rect.height > screenRect.height)
                {
                    rect.y -= rect.height;
                    if (Text.Anchor == TextAnchor.UpperLeft)
                    {
                        Text.Anchor = TextAnchor.LowerLeft;
                    }
                    else
                    {
                        Text.Anchor = TextAnchor.LowerRight;
                    }
                }
                string text = (!simpleCurveDrawInfo.valueFormat.NullOrEmpty()) ? string.Format(simpleCurveDrawInfo.valueFormat, vector.y) : vector.y.ToString("0.##");
                Widgets.Label(rect, simpleCurveDrawInfo.label + "\n" + labelX + " " + vector.x.ToString("0.##") + "\n" + text);
                Text.Anchor = TextAnchor.UpperLeft;
            }
            GUI.EndGroup();
        }
 public static void DrawCurve(Rect rect, SimpleCurveDrawInfo curve, SimpleCurveDrawerStyle style = null, List <CurveMark> marks = null, Rect legendScreenRect = default(Rect))
 {
     if (curve.curve != null)
     {
         SimpleCurveDrawer.DrawCurves(rect, new List <SimpleCurveDrawInfo>
         {
             curve
         }, style, marks, legendScreenRect);
     }
 }
Example #5
0
        public static void DrawCurves(Rect rect, List <SimpleCurveDrawInfo> curves, SimpleCurveDrawerStyle style = null, List <CurveMark> marks = null, Rect legendRect = default(Rect))
        {
            if (Event.current.type != EventType.Repaint)
            {
                return;
            }
            if (style == null)
            {
                style = new SimpleCurveDrawerStyle();
            }
            if (curves.Count == 0)
            {
                return;
            }
            bool flag     = true;
            Rect viewRect = default(Rect);

            for (int i = 0; i < curves.Count; i++)
            {
                SimpleCurveDrawInfo simpleCurveDrawInfo = curves[i];
                if (simpleCurveDrawInfo.curve != null)
                {
                    if (flag)
                    {
                        flag     = false;
                        viewRect = simpleCurveDrawInfo.curve.View.rect;
                        continue;
                    }
                    viewRect.xMin = Mathf.Min(viewRect.xMin, simpleCurveDrawInfo.curve.View.rect.xMin);
                    viewRect.xMax = Mathf.Max(viewRect.xMax, simpleCurveDrawInfo.curve.View.rect.xMax);
                    viewRect.yMin = Mathf.Min(viewRect.yMin, simpleCurveDrawInfo.curve.View.rect.yMin);
                    viewRect.yMax = Mathf.Max(viewRect.yMax, simpleCurveDrawInfo.curve.View.rect.yMax);
                }
            }
            if (style.UseFixedScale)
            {
                viewRect.yMin = style.FixedScale.x;
                viewRect.yMax = style.FixedScale.y;
            }
            if (style.OnlyPositiveValues)
            {
                if (viewRect.xMin < 0f)
                {
                    viewRect.xMin = 0f;
                }
                if (viewRect.yMin < 0f)
                {
                    viewRect.yMin = 0f;
                }
            }
            if (style.UseFixedSection)
            {
                viewRect.xMin = style.FixedSection.min;
                viewRect.xMax = style.FixedSection.max;
            }
            if (!Mathf.Approximately(viewRect.width, 0f) && !Mathf.Approximately(viewRect.height, 0f))
            {
                Rect rect2 = rect;
                if (style.DrawMeasures)
                {
                    rect2.xMin += 60f;
                    rect2.yMax -= 30f;
                }
                if (marks != null)
                {
                    Rect rect3 = rect2;
                    rect3.height = 15f;
                    DrawCurveMarks(rect3, viewRect, marks);
                    rect2.yMin = rect3.yMax;
                }
                if (style.DrawBackground)
                {
                    GUI.color = new Color(0.302f, 0.318f, 0.365f);
                    GUI.DrawTexture(rect2, BaseContent.WhiteTex);
                }
                if (style.DrawBackgroundLines)
                {
                    DrawGraphBackgroundLines(rect2, viewRect);
                }
                if (style.DrawMeasures)
                {
                    DrawCurveMeasures(rect, viewRect, rect2, style.MeasureLabelsXCount, style.MeasureLabelsYCount, style.XIntegersOnly, style.YIntegersOnly);
                }
                foreach (SimpleCurveDrawInfo curf in curves)
                {
                    DrawCurveLines(rect2, curf, style.DrawPoints, viewRect, style.UseAntiAliasedLines, style.PointsRemoveOptimization);
                }
                if (style.DrawLegend)
                {
                    DrawCurvesLegend(legendRect, curves);
                }
                if (style.DrawCurveMousePoint)
                {
                    DrawCurveMousePoint(curves, rect2, viewRect, style.LabelX);
                }
            }
        }
Example #6
0
        public static void DrawCurveLines(Rect rect, SimpleCurveDrawInfo curve, bool drawPoints, Rect viewRect, bool useAALines, bool pointsRemoveOptimization)
        {
            if (curve.curve == null || curve.curve.PointsCount == 0)
            {
                return;
            }
            Rect position = rect;

            position.yMin -= 1f;
            position.yMax += 1f;
            GUI.BeginGroup(position);
            if (Event.current.type == EventType.Repaint)
            {
                if (useAALines)
                {
                    bool    flag       = true;
                    Vector2 start      = default(Vector2);
                    Vector2 curvePoint = default(Vector2);
                    int     num        = curve.curve.Points.Count((CurvePoint x) => x.x >= viewRect.xMin && x.x <= viewRect.xMax);
                    int     num2       = RemovePointsOptimizationFreq(num);
                    for (int i = 0; i < curve.curve.PointsCount; i++)
                    {
                        CurvePoint curvePoint2 = curve.curve[i];
                        if (!pointsRemoveOptimization || i % num2 != 0 || i == 0 || i == num - 1)
                        {
                            curvePoint.x = curvePoint2.x;
                            curvePoint.y = curvePoint2.y;
                            Vector2 vector = CurveToScreenCoordsInsideScreenRect(rect, viewRect, curvePoint);
                            if (flag)
                            {
                                flag = false;
                            }
                            else if ((start.x >= 0f && start.x <= rect.width) || (vector.x >= 0f && vector.x <= rect.width))
                            {
                                Widgets.DrawLine(start, vector, curve.color, 1f);
                            }
                            start = vector;
                        }
                    }
                    Vector2 start2 = CurveToScreenCoordsInsideScreenRect(rect, viewRect, curve.curve[0]);
                    Vector2 start3 = CurveToScreenCoordsInsideScreenRect(rect, viewRect, curve.curve[curve.curve.PointsCount - 1]);
                    Widgets.DrawLine(start2, new Vector2(0f, start2.y), curve.color, 1f);
                    Widgets.DrawLine(start3, new Vector2(rect.width, start3.y), curve.color, 1f);
                }
                else
                {
                    GUI.color = curve.color;
                    float num3 = viewRect.x;
                    float num4 = rect.width / 1f;
                    float num5 = viewRect.width / num4;
                    while (num3 < viewRect.xMax)
                    {
                        num3 += num5;
                        Vector2 vector2 = CurveToScreenCoordsInsideScreenRect(rect, viewRect, new Vector2(num3, curve.curve.Evaluate(num3)));
                        GUI.DrawTexture(new Rect(vector2.x, vector2.y, 1f, 1f), BaseContent.WhiteTex);
                    }
                }
                GUI.color = Color.white;
            }
            if (drawPoints)
            {
                for (int j = 0; j < curve.curve.PointsCount; j++)
                {
                    DrawPoint(CurveToScreenCoordsInsideScreenRect(curvePoint: curve.curve[j].Loc, rect: rect, viewRect: viewRect));
                }
            }
            foreach (float debugInputValue in curve.curve.View.DebugInputValues)
            {
                GUI.color = new Color(0f, 1f, 0f, 0.25f);
                DrawInfiniteVerticalLine(rect, viewRect, debugInputValue);
                float   y           = curve.curve.Evaluate(debugInputValue);
                Vector2 screenPoint = CurveToScreenCoordsInsideScreenRect(curvePoint: new Vector2(debugInputValue, y), rect: rect, viewRect: viewRect);
                GUI.color = Color.green;
                DrawPoint(screenPoint);
                GUI.color = Color.white;
            }
            GUI.EndGroup();
        }
        public static void DrawCurveMousePoint(List <SimpleCurveDrawInfo> curves, Rect screenRect, Rect viewRect, string labelX)
        {
            if (curves.Count == 0)
            {
                return;
            }
            if (!Mouse.IsOver(screenRect))
            {
                return;
            }
            GUI.BeginGroup(screenRect);
            Vector2             mousePosition       = Event.current.mousePosition;
            Vector2             vector              = default(Vector2);
            Vector2             vector2             = default(Vector2);
            SimpleCurveDrawInfo simpleCurveDrawInfo = null;
            bool flag = false;

            foreach (SimpleCurveDrawInfo simpleCurveDrawInfo2 in curves)
            {
                if (simpleCurveDrawInfo2.curve.PointsCount != 0)
                {
                    Vector2 vector3 = SimpleCurveDrawer.ScreenToCurveCoords(screenRect, viewRect, mousePosition);
                    vector3.y = simpleCurveDrawInfo2.curve.Evaluate(vector3.x);
                    Vector2 vector4 = SimpleCurveDrawer.CurveToScreenCoordsInsideScreenRect(screenRect, viewRect, vector3);
                    if (!flag || Vector2.Distance(vector4, mousePosition) < Vector2.Distance(vector2, mousePosition))
                    {
                        flag                = true;
                        vector              = vector3;
                        vector2             = vector4;
                        simpleCurveDrawInfo = simpleCurveDrawInfo2;
                    }
                }
            }
            if (flag)
            {
                SimpleCurveDrawer.DrawPoint(vector2);
                Rect rect = new Rect(vector2.x, vector2.y, 100f, 60f);
                Text.Anchor = TextAnchor.UpperLeft;
                if (rect.x + rect.width > screenRect.width)
                {
                    rect.x     -= rect.width;
                    Text.Anchor = TextAnchor.UpperRight;
                }
                if (rect.y + rect.height > screenRect.height)
                {
                    rect.y -= rect.height;
                    if (Text.Anchor == TextAnchor.UpperLeft)
                    {
                        Text.Anchor = TextAnchor.LowerLeft;
                    }
                    else
                    {
                        Text.Anchor = TextAnchor.LowerRight;
                    }
                }
                Widgets.Label(rect, string.Concat(new string[]
                {
                    labelX,
                    ": ",
                    vector.x.ToString("0.##"),
                    "\n",
                    simpleCurveDrawInfo.labelY,
                    ": ",
                    vector.y.ToString("0.##")
                }));
                Text.Anchor = TextAnchor.UpperLeft;
            }
            GUI.EndGroup();
        }
        public static void DrawCurveLines(Rect rect, SimpleCurveDrawInfo curve, bool drawPoints, Rect viewRect, bool useAALines, bool pointsRemoveOptimization)
        {
            if (curve.curve != null && curve.curve.PointsCount != 0)
            {
                Rect position = rect;
                position.yMin -= 1f;
                position.yMax += 1f;
                GUI.BeginGroup(position);
                if (Event.current.type == EventType.Repaint)
                {
                    if (useAALines)
                    {
                        bool    flag       = true;
                        Vector2 start      = default(Vector2);
                        Vector2 curvePoint = default(Vector2);
                        int     num        = curve.curve.AllPoints.Count((CurvePoint x) => x.x >= viewRect.xMin && x.x <= viewRect.xMax);
                        int     num2       = SimpleCurveDrawer.RemovePointsOptimizationFreq(num);
                        for (int i = 0; i < curve.curve.PointsCount; i++)
                        {
                            CurvePoint curvePoint2 = curve.curve[i];
                            if (pointsRemoveOptimization && i % num2 == 0 && i != 0 && i != num - 1)
                            {
                                continue;
                            }
                            curvePoint.x = curvePoint2.x;
                            curvePoint.y = curvePoint2.y;
                            Vector2 vector = SimpleCurveDrawer.CurveToScreenCoordsInsideScreenRect(rect, viewRect, curvePoint);
                            if (flag)
                            {
                                flag = false;
                            }
                            else
                            {
                                if (start.x >= 0.0 && start.x <= rect.width)
                                {
                                    goto IL_0168;
                                }
                                if (vector.x >= 0.0 && vector.x <= rect.width)
                                {
                                    goto IL_0168;
                                }
                            }
                            goto IL_017b;
IL_017b:
                            start = vector;
                            continue;
IL_0168:
                            Widgets.DrawLine(start, vector, curve.color, 1f);
                            goto IL_017b;
                        }
                        Vector2 start2 = SimpleCurveDrawer.CurveToScreenCoordsInsideScreenRect(rect, viewRect, curve.curve.AllPoints.First());
                        Vector2 start3 = SimpleCurveDrawer.CurveToScreenCoordsInsideScreenRect(rect, viewRect, curve.curve.AllPoints.Last());
                        Widgets.DrawLine(start2, new Vector2(0f, start2.y), curve.color, 1f);
                        Widgets.DrawLine(start3, new Vector2(rect.width, start3.y), curve.color, 1f);
                    }
                    else
                    {
                        GUI.color = curve.color;
                        float num3 = viewRect.x;
                        float num4 = (float)(rect.width / 1.0);
                        float num5 = viewRect.width / num4;
                        while (num3 < viewRect.xMax)
                        {
                            num3 += num5;
                            Vector2 vector2 = SimpleCurveDrawer.CurveToScreenCoordsInsideScreenRect(rect, viewRect, new Vector2(num3, curve.curve.Evaluate(num3)));
                            GUI.DrawTexture(new Rect(vector2.x, vector2.y, 1f, 1f), BaseContent.WhiteTex);
                        }
                    }
                    GUI.color = Color.white;
                }
                if (drawPoints)
                {
                    for (int j = 0; j < curve.curve.PointsCount; j++)
                    {
                        CurvePoint curvePoint3 = curve.curve[j];
                        Vector2    screenPoint = SimpleCurveDrawer.CurveToScreenCoordsInsideScreenRect(rect, viewRect, curvePoint3.Loc);
                        SimpleCurveDrawer.DrawPoint(screenPoint);
                    }
                }
                foreach (float debugInputValue in curve.curve.View.DebugInputValues)
                {
                    float num6 = debugInputValue;
                    GUI.color = new Color(0f, 1f, 0f, 0.25f);
                    SimpleCurveDrawer.DrawInfiniteVerticalLine(rect, viewRect, num6);
                    float   y            = curve.curve.Evaluate(num6);
                    Vector2 curvePoint4  = new Vector2(num6, y);
                    Vector2 screenPoint2 = SimpleCurveDrawer.CurveToScreenCoordsInsideScreenRect(rect, viewRect, curvePoint4);
                    GUI.color = Color.green;
                    SimpleCurveDrawer.DrawPoint(screenPoint2);
                    GUI.color = Color.white;
                }
                GUI.EndGroup();
            }
        }