private void DrawLODLevelSlider(Rect sliderPosition, List <LODGroupGUI.LODInfo> lods) { int sliderId = GUIUtility.GetControlID(m_LODSliderId, FocusType.Passive); Event evt = Event.current; switch (evt.GetTypeForControl(sliderId)) { case EventType.Repaint: { LODGroupGUI.DrawLODSlider(sliderPosition, lods, m_SelectedLODRange); break; } case EventType.MouseDown: { // Slightly grow position on the x because edge buttons overflow by 5 pixels var barPosition = sliderPosition; barPosition.x -= 5; barPosition.width += 10; if (barPosition.Contains(evt.mousePosition)) { evt.Use(); GUIUtility.hotControl = sliderId; // Check for button click var clickedButton = false; // case:464019 have to re-sort the LOD array for these buttons to get the overlaps in the right order... var lodsLeft = lods.Where(lod => lod.ScreenPercent > 0.5f).OrderByDescending(x => x.LODLevel); var lodsRight = lods.Where(lod => lod.ScreenPercent <= 0.5f).OrderBy(x => x.LODLevel); var lodButtonOrder = new List <LODGroupGUI.LODInfo>(); lodButtonOrder.AddRange(lodsLeft); lodButtonOrder.AddRange(lodsRight); foreach (var lod in lodButtonOrder) { if (lod.m_ButtonPosition.Contains(evt.mousePosition)) { m_SelectedLODSlider = lod.LODLevel; m_SelectedLODRange = lod.LODLevel; clickedButton = true; break; } } if (!clickedButton) { // Check for range click foreach (var lod in lodButtonOrder) { if (lod.m_RangePosition.Contains(evt.mousePosition)) { m_SelectedLODSlider = -1; m_SelectedLODRange = lod.LODLevel; break; } } } } break; } case EventType.MouseUp: { if (GUIUtility.hotControl == sliderId) { GUIUtility.hotControl = 0; evt.Use(); } break; } case EventType.MouseDrag: { if (GUIUtility.hotControl == sliderId && m_SelectedLODSlider >= 0 && lods[m_SelectedLODSlider] != null) { evt.Use(); var cameraPercent = LODGroupGUI.GetCameraPercent(evt.mousePosition, sliderPosition); // Bias by 0.1% so that there is no skipping when sliding LODGroupGUI.SetSelectedLODLevelPercentage(cameraPercent - 0.001f, m_SelectedLODSlider, lods); m_LODSettings.GetArrayElementAtIndex(m_SelectedLODSlider).FindPropertyRelative("height").floatValue = lods[m_SelectedLODSlider].RawScreenPercent; } break; } } }
private void DrawLODLevelSlider(Rect sliderPosition, List <LODGroupGUI.LODInfo> lods) { int controlID = GUIUtility.GetControlID(this.m_LODSliderId, FocusType.Passive); Event current = Event.current; switch (current.GetTypeForControl(controlID)) { case EventType.MouseDown: { Rect rect = sliderPosition; rect.x -= 5f; rect.width += 10f; if (rect.Contains(current.mousePosition)) { current.Use(); GUIUtility.hotControl = controlID; bool flag = false; IOrderedEnumerable <LODGroupGUI.LODInfo> collection = from lod in lods where lod.ScreenPercent > 0.5f select lod into x orderby x.LODLevel descending select x; IOrderedEnumerable <LODGroupGUI.LODInfo> collection2 = from lod in lods where lod.ScreenPercent <= 0.5f select lod into x orderby x.LODLevel select x; List <LODGroupGUI.LODInfo> list = new List <LODGroupGUI.LODInfo>(); list.AddRange(collection); list.AddRange(collection2); foreach (LODGroupGUI.LODInfo current2 in list) { if (current2.m_ButtonPosition.Contains(current.mousePosition)) { this.m_SelectedLODSlider = current2.LODLevel; this.m_SelectedLODRange = current2.LODLevel; flag = true; break; } } if (!flag) { foreach (LODGroupGUI.LODInfo current3 in list) { if (current3.m_RangePosition.Contains(current.mousePosition)) { this.m_SelectedLODSlider = -1; this.m_SelectedLODRange = current3.LODLevel; break; } } } } break; } case EventType.MouseUp: if (GUIUtility.hotControl == controlID) { GUIUtility.hotControl = 0; current.Use(); } break; case EventType.MouseDrag: if (GUIUtility.hotControl == controlID && this.m_SelectedLODSlider >= 0 && lods[this.m_SelectedLODSlider] != null) { current.Use(); float cameraPercent = LODGroupGUI.GetCameraPercent(current.mousePosition, sliderPosition); LODGroupGUI.SetSelectedLODLevelPercentage(cameraPercent - 0.001f, this.m_SelectedLODSlider, lods); this.m_LODSettings.GetArrayElementAtIndex(this.m_SelectedLODSlider).FindPropertyRelative("height").floatValue = lods[this.m_SelectedLODSlider].RawScreenPercent; } break; case EventType.Repaint: LODGroupGUI.DrawLODSlider(sliderPosition, lods, this.m_SelectedLODRange); break; } }