Esempio n. 1
0
    void DrawWebLine(int radarIndex, int nodeIndex)
    {
        Handles.color = Color.grey;
        RadarNode node = iRadarGraphs[radarIndex].BaseNodes[nodeIndex];

        Handles.DrawLine(node.center, node.maxPosition);
    }
Esempio n. 2
0
    void DrawRadarGraph(int radarIndex, int nodeCount, RadarType type)
    {
        Vector2 center  = position.size / 2;
        Vector3 center3 = center;

        Handles.color = Color.black;
        Handles.DrawSphere(42, center3 - Vector3.forward * 10, Quaternion.identity, 10f);

        for (int j = 0; j < nodeCount; j++)
        {
            float     nodeAngle      = j * unitAngle - 90f;
            Vector2   unitNodeVector = nodeAngle.ConvertAngleToVector2();
            RadarNode node           = iRadarGraphs[radarIndex].BaseNodes[j];

            node.center    = center;
            node.direction = unitNodeVector * shapeRadius;
            Vector2 boundaryNodePosition = center + unitNodeVector * shapeRadius;
            Rect    labelRect            = new Rect(-115f / 2f, -standardHeight / 2, 150, standardHeight).AddPosition(boundaryNodePosition).AddPosition(unitNodeVector * (labelSpacing));
            Rect    sliderRect           = new Rect(labelRect).AddPosition(Vector3.up * standardSpacing);
            node.maxPosition = boundaryNodePosition;

            if (j > 0)
            {
                RadarNode lastNode = iRadarGraphs[radarIndex].BaseNodes[j - 1];
                if (radarIndex == 0)
                {
                    DrawBoundaryLine(lastNode.maxPosition, node.maxPosition);
                    DrawSegmentLines(radarIndex, j - 1, j);
                }
                DrawActualValueLine(radarIndex, lastNode.Position, node.Position);
                Handles.DrawSphere(49, new Vector3(node.Position.x, node.Position.y, -10), Quaternion.identity, 5f);
            }
            float snapAmount = (1f / (segments + 1));

            if (radarIndex == SelectedRadarIndex || !hideUnSelectedHandles)
            {
                DrawHandle(radarIndex, j, nodeAngle, snapAmount);
            }
            if (drawWebLines)
            {
                DrawWebLine(radarIndex, j);
            }

            DrawSelectedGraphControls(radarIndex, j, sliderRect, labelRect, type);
        }
        if (radarIndex == 0)
        {
            DrawSegmentLines(radarIndex, nodeCount - 1, 0);
            DrawBoundaryLine(iRadarGraphs[radarIndex].BaseNodes[nodeCount - 1].maxPosition, iRadarGraphs[radarIndex].BaseNodes[0].maxPosition);
        }
        DrawActualValueLine(radarIndex, iRadarGraphs[radarIndex].BaseNodes[nodeCount - 1].Position, iRadarGraphs[radarIndex].BaseNodes[0].Position);
        Handles.DrawSphere(49, new Vector3(iRadarGraphs[radarIndex].BaseNodes[0].Position.x, iRadarGraphs[radarIndex].BaseNodes[0].Position.y, -10), Quaternion.identity, 5f);
    }
Esempio n. 3
0
    void DrawHandle(int radarIndex, int nodeIndex, float nodeAngle, float snapAmount)
    {
        Handles.color = iRadarGraphs[radarIndex].Color;
        RadarNode node = iRadarGraphs[radarIndex].BaseNodes[nodeIndex];
        float     size = 300f;

        //TO DO
        //project position handles.onto node direction
        //node.value = Handles.SnapValue(node.value, snapAmount);
        //if (Event.current.type==EventType.Repaint) {
        //    Handles.ArrowHandleCap(radarIndex * 200 + nodeIndex, node.Position - Vector3.forward * 10, Quaternion.Euler(-nodeAngle, 90, 0), size, EventType.Repaint);
        //}
        //Vector3 newPos = Handles.handle(node.Position, Quaternion.Euler(-nodeAngle, 90, 0));//, size, node.direction.normalized * snapAmount, Handles.ArrowHandleCap);
        //Handles.DoPositionHandle
        //Vector3 fromCenter = newPos - node.center;
        //float newValue = fromCenter.magnitude / node.direction.magnitude;
        //node.value = newValue;
        node.value = Mathf.Clamp01(Handles.ScaleValueHandle(node.value, node.Position - Vector3.forward * 10, Quaternion.Euler(-nodeAngle, 90, 0), size, Handles.ArrowHandleCap, snapAmount));
    }
Esempio n. 4
0
    float GetArea(int radarIndex, AreaType type = AreaType.Actual)
    {
        float area      = 0;
        int   nodeCount = iRadarGraphs[radarIndex].BaseNodes.Count;

        for (int i = 1; i < nodeCount; i++)
        {
            RadarNode node     = iRadarGraphs[radarIndex].BaseNodes[i];
            RadarNode lastNode = iRadarGraphs[radarIndex].BaseNodes[i - 1];

            float lastValue = type == AreaType.Actual ? lastNode.Value : lastNode.valueRange.Max;
            float value     = type == AreaType.Actual ? node.Value : node.valueRange.Max;
            area += TriangleArea(lastValue - lastNode.valueRange.Min, value - node.valueRange.Min, unitAngle);
        }
        RadarNode firstNode  = iRadarGraphs[radarIndex].BaseNodes[0];
        RadarNode finalNode  = iRadarGraphs[radarIndex].BaseNodes[nodeCount - 1];
        float     firstValue = type == AreaType.Actual ? firstNode.Value : firstNode.valueRange.Max;
        float     finalValue = type == AreaType.Actual ? finalNode.Value : finalNode.valueRange.Max;

        area += TriangleArea(firstValue - firstNode.valueRange.Min, finalValue - finalNode.valueRange.Min, unitAngle);
        return(area);
    }
Esempio n. 5
0
    void DrawSelectedGraphControls(int radarIndex, int nodeIndex, Rect sliderRect, Rect labelRect, RadarType type)
    {
        RadarNode node = iRadarGraphs[radarIndex].BaseNodes[nodeIndex];

        if (radarIndex == SelectedRadarIndex)
        {
            DrawLabel(radarIndex, nodeIndex, labelRect, type);
            if (!setValuesManually)
            {
                if (node.isRangeReversed)
                {
                    node.Value = EditorGUI.Slider(sliderRect, node.Value, node.valueRange.Max, node.valueRange.Min);
                }
                else
                {
                    node.Value = EditorGUI.Slider(sliderRect, node.Value, node.valueRange.Min, node.valueRange.Max);
                }
            }
            else
            {
                node.Value = EditorGUI.FloatField(sliderRect, node.Value);
            }
        }
    }