void DrawWebLine(int radarIndex, int nodeIndex) { Handles.color = Color.grey; RadarNode node = iRadarGraphs[radarIndex].BaseNodes[nodeIndex]; Handles.DrawLine(node.center, node.maxPosition); }
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); }
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)); }
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); }
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); } } }