public void Build(Cone cone) { topCap = cone.height * Vector3.up; bottomCap = Vector3.zero; if (extremities == null) { extremities = new List <Vector3>(8); } extremities.Clear(); extremities.Add(topCap + Vector3.forward * cone.radius1); extremities.Add(topCap - Vector3.forward * cone.radius1); extremities.Add(topCap + Vector3.left * cone.radius1); extremities.Add(topCap - Vector3.left * cone.radius1); extremities.Add(bottomCap + Vector3.forward * cone.radius0); extremities.Add(bottomCap - Vector3.forward * cone.radius0); extremities.Add(bottomCap + Vector3.left * cone.radius0); extremities.Add(bottomCap - Vector3.left * cone.radius0); visibleCount = 4; }
public void Build(Cone cone, float degArc) { topCap = cone.height * Vector3.up; bottomCap = Vector3.zero; int count = 4; visibleCount = Mathf.CeilToInt(degArc / 90); if (visibleCount <= 0) { visibleCount = 1; } if (extremities == null) { extremities = new List <Vector3>(8); } extremities.Clear(); extremities.Add(topCap + Vector3.forward * cone.radius1); if (count > 1) { extremities.Add(topCap - Vector3.left * cone.radius1); if (count > 2) { extremities.Add(topCap - Vector3.forward * cone.radius1); if (count > 3) { extremities.Add(topCap + Vector3.left * cone.radius1); } } } extremities.Add(bottomCap + Vector3.forward * cone.radius0); if (count > 1) { extremities.Add(bottomCap - Vector3.left * cone.radius0); if (count > 2) { extremities.Add(bottomCap - Vector3.forward * cone.radius0); if (count > 3) { extremities.Add(bottomCap + Vector3.left * cone.radius0); } } } }
public override void OnDrawSpacedGizmo(ArcCone arcCone) { float arc = arcCone.arc * Mathf.Rad2Deg; Cone cone = new Cone { center = arcCone.center, radius0 = arcCone.radius0, radius1 = arcCone.radius1, height = arcCone.height }; extremities.Build(cone, arc); Vector3 arcDirection = Quaternion.AngleAxis(arc, Vector3.up) * Vector3.forward; if (Event.current != null && Event.current.type == EventType.MouseDown) { m_Dragging = true; } if (Event.current != null && Event.current.type == EventType.MouseUp) { m_Dragging = false; } if (!m_Dragging) { radius1Screen = (HandleUtility.WorldToGUIPoint(extremities.topCap) - HandleUtility.WorldToGUIPoint(extremities.topCap + Vector3.forward * cone.radius1)).magnitude; radius0Screen = (HandleUtility.WorldToGUIPoint(extremities.bottomCap) - HandleUtility.WorldToGUIPoint(extremities.bottomCap + Vector3.forward * cone.radius0)).magnitude; } using (new Handles.DrawingScope(Handles.matrix * Matrix4x4.Translate(arcCone.center))) { if (radius1Screen > 2) { Handles.DrawWireArc(extremities.topCap, Vector3.up, Vector3.forward, arc, arcCone.radius1); } if (radius0Screen > 2) { Handles.DrawWireArc(extremities.bottomCap, Vector3.up, Vector3.forward, arc, arcCone.radius0); } for (int i = 0; i < extremities.extremities.Count / 2 && i < extremities.visibleCount; ++i) { Handles.DrawLine(extremities.extremities[i], extremities.extremities[i + extremities.extremities.Count / 2]); } Handles.DrawLine(extremities.topCap, extremities.extremities[0]); Handles.DrawLine(extremities.bottomCap, extremities.extremities[extremities.extremities.Count / 2]); Handles.DrawLine(extremities.topCap, extremities.topCap + arcDirection * arcCone.radius1); Handles.DrawLine(extremities.bottomCap, arcDirection * arcCone.radius0); Handles.DrawLine(arcDirection * arcCone.radius0, extremities.topCap + arcDirection * arcCone.radius1); float radius = arcCone.radius0 > arcCone.radius1 ? arcCone.radius0 : arcCone.radius1; Vector3 center = arcCone.radius0 > arcCone.radius1 ? Vector3.zero : extremities.topCap; if (radius != 0) { ArcGizmo(center, radius, arc, m_ArcProperty, Quaternion.identity, true); } } VFXConeGizmo.DrawCone(cone, this, ref extremities, m_CenterProperty, m_Radius0Property, m_Radius1Property, m_HeightProperty, radius0Screen, radius1Screen); }