void itemGUI(Rect rect, int index, bool isActive, bool isFocused) { var item = sorted[index]; var r = getRects(rect); if (item.gameObject == Selection.activeGameObject) { DTHandles.DrawSolidRectangleWithOutline(rect.ScaleBy(4, 2), new Color(0, 0, 0.2f, 0.1f), new Color(.24f, .37f, .59f)); } else if (index > 0) { DTHandles.PushHandlesColor(new Color(0.1f, 0.1f, 0.1f)); Handles.DrawLine(new Vector2(rect.xMin - 5, rect.yMin), new Vector2(rect.xMax + 4, rect.yMin)); DTHandles.PopHandlesColor(); } bool repaint = false; var cnt = new GUIContent(item.ToString(), "Click to select"); r[0].width = DTStyles.HtmlLinkLabel.CalcSize(cnt).x; if (DTGUI.LinkButton(r[0], cnt, ref repaint))// EditorStyles.label)) { DTSelection.SetGameObjects(sorted[index]); } if (repaint) { Repaint(); } item.ConnectionSyncPosition = GUI.Toggle(r[1], item.ConnectionSyncPosition, ""); item.ConnectionSyncRotation = GUI.Toggle(r[8], item.ConnectionSyncRotation, ""); if (GUI.Button(r[2], new GUIContent(CurvyStyles.DeleteSmallTexture, "Delete"), CurvyStyles.ImageButton)) { item.Disconnect(); CurvyProject.Instance.ScanConnections(); GUIUtility.ExitGUI(); } if (item.CanHaveFollowUp) { GUI.Label(r[3], "Head to"); doFollowUpPopup(r[4], item); bool b = item.FollowUpHeading == ConnectionHeadingEnum.Minus; if (GUI.Toggle(r[5], b, new GUIContent("", "Head to spline start")) != b) { item.FollowUpHeading = (!b) ? ConnectionHeadingEnum.Minus : ConnectionHeadingEnum.Auto; } b = item.FollowUpHeading == ConnectionHeadingEnum.Sharp; if (GUI.Toggle(r[6], b, new GUIContent("", "No Heading")) != b) { item.FollowUpHeading = (!b) ? ConnectionHeadingEnum.Sharp : ConnectionHeadingEnum.Auto; } b = item.FollowUpHeading == ConnectionHeadingEnum.Plus; if (GUI.Toggle(r[7], b, new GUIContent("", "Head to spline end")) != b) { item.FollowUpHeading = (!b) ? ConnectionHeadingEnum.Plus : ConnectionHeadingEnum.Auto; } } }
public override void OnModuleSceneDebugGUI() { var data = Target.SimulatedSpots; if (data) { Handles.matrix = Target.Generator.transform.localToWorldMatrix; DTGUI.PushColor(Color.red); for (int i = 0; i < data.Points.Length; i++) { var Q = data.Points[i].Rotation * Quaternion.Euler(-90, 0, 0); Handles.ArrowCap(0, data.Points[i].Position, Q, 2); Handles.Label(data.Points[i].Position, data.Points[i].Index.ToString(), EditorStyles.boldLabel); } DTGUI.PopColor(); Handles.matrix = Matrix4x4.identity; } }
public new void OnSceneGUI() { CurvySplineSegment cp; var cam = SceneView.currentDrawingSceneView.camera; if (cam && Target) { List <string> samePos = new List <string>(); for (int i = 0; i < Target.ControlPoints.Count; i++) { cp = Target.ControlPoints[i]; Color c = Color.black; if (cp.ConnectionSyncPosition) { samePos.Add(cp.ToString()); c = new Color(1, 0, 0); } else { if (cp.ConnectionSyncRotation) { c = new Color(1, 1, 0); } DTGUI.PushColor(c); Handles.Label(DTHandles.TranslateByPixel(cp.transform.position, 12, -12), new GUIContent(cp.ToString())); DTGUI.PopColor(); } } if (samePos.Count > 0) { DTGUI.PushColor(Color.white); var P1 = cam.ScreenToWorldPoint(cam.WorldToScreenPoint(Target.transform.position) + new Vector3(12, -12, 0)); Handles.Label(P1, new GUIContent(string.Join("\n", samePos.ToArray()))); DTGUI.PopColor(); } } }
void OnModuleWindowSlotGUI(CGModule module) { int i = 0; float h = 18; while (module.Input.Count > i || module.Output.Count > i) { float y = CurvyStyles.ModuleWindowTitleHeight + h * i; GUILayout.BeginHorizontal(); if (module.Input.Count > i) { CGModuleInputSlot slot = module.Input[i]; Color slotColor = getTypeColor(slot.Info.DataTypes); if (Canvas.IsLinkDrag && !slot.IsValidTarget(Canvas.LinkDragFrom)) { slotColor = new Color(0.2f, 0.2f, 0.2f).SkinAwareColor(true); } DTGUI.PushColor(slotColor); GUILayout.Box("<", CurvyStyles.Slot); DTGUI.PopColor(); string postfix = ""; if (slot.Info.Array) { postfix = (slot.LastDataCountINTERNAL > 0) ? "[" + slot.LastDataCountINTERNAL.ToString() + "]" : "[]"; } GUILayout.Label(new GUIContent(ObjectNames.NicifyVariableName(slot.Info.Name) + postfix, slot.Info.Tooltip), CurvyStyles.GetSlotLabelStyle(slot)); slot.DropZone = new Rect(0, y, module.Properties.Dimensions.width / 2, h); slot.Origin = new Vector2(module.Properties.Dimensions.xMin, module.Properties.Dimensions.yMin + y + h / 2); // LinkDrag? if (Canvas.IsLinkDrag) { // If ending drag over dropzone, create static link if (EV.type == EventType.MouseUp && slot.DropZone.Contains(EV.mousePosition) && slot.IsValidTarget(Canvas.LinkDragFrom)) { finishLink(slot); } } // Clicking on Dropzone to pick existing link else if (LMB && slot.Count == 1 && slot.DropZone.Contains(EV.mousePosition)) { var linkedOutSlot = slot.SourceSlot(); linkedOutSlot.UnlinkFrom(slot); EditorUtility.SetDirty(slot.Module); startLinkDrag(linkedOutSlot); GUIUtility.ExitGUI(); } } if (module.Output.Count > i) { CGModuleOutputSlot slot = module.Output[i]; string postfix = ""; if (slot.Info.Array) { postfix = (slot.Data != null && slot.Data.Length > 1) ? "[" + slot.Data.Length.ToString() + "]" : ""; } GUILayout.Label(new GUIContent(ObjectNames.NicifyVariableName(slot.Info.Name) + postfix, slot.Info.Tooltip), CurvyStyles.GetSlotLabelStyle(slot)); DTGUI.PushColor(getTypeColor(slot.Info.DataTypes)); GUILayout.Box(">", CurvyStyles.Slot); DTGUI.PopColor(); // Debug /* * if (Generator.ShowDebug) * { * GUI.enabled = slot.Data != null && slot.Data.Length>0; * if (GUILayout.Button(new GUIContent(CurvyStyles.DebugTexture, "Show Dump"), CurvyStyles.SmallButton, GUILayout.Width(16), GUILayout.Height(16))) * DTDebugWindow.Open(slot.Data[0].GetType().Name + ":", slot.Data[0].ToDumpString()); * GUI.enabled = true; * } */ slot.DropZone = new Rect(module.Properties.Dimensions.width / 2, y, module.Properties.Dimensions.width / 2, h); slot.Origin = new Vector2(module.Properties.Dimensions.xMax, module.Properties.Dimensions.yMin + y + h / 2); // Start Linking? if (LMB && !Canvas.IsSelectionRectDrag && slot.DropZone.Contains(EV.mousePosition)) { startLinkDrag(slot); } } GUILayout.EndHorizontal(); i++; } }
void OnModuleWindowCB(int id) { // something happened in the meantime? if (id >= Modules.Count || mModuleCount != Modules.Count) { return; } CGModule mod = Modules[id]; //if (LMB && Sel.SelectedModules.Count<=1) if (EV.type == EventType.MouseUp && !Sel.SelectedModules.Contains(mod)) { Sel.Select(Modules[id]); } Rect winRect = mod.Properties.Dimensions; // Draw Title Buttons // Enabled EditorGUI.BeginChangeCheck(); mod.Active = GUI.Toggle(new Rect(2, 2, 16, 16), mod.Active, ""); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(Generator); } //Edit Title & Color if (editTitleModule == mod) { GUI.SetNextControlName("editTitle" + id); mod.ModuleName = GUI.TextField(new Rect(30, 5, winRect.width - 120, 16), mod.ModuleName); mod.Properties.BackgroundColor = EditorGUI.ColorField(new Rect(winRect.width - 70, 5, 32, 16), mod.Properties.BackgroundColor); } if (GUI.Button(new Rect(winRect.width - 32, 6, 16, 16), new GUIContent(CurvyStyles.EditTexture, "Rename"), CurvyStyles.BorderlessButton)) { editTitleModule = mod; Sel.Select(mod); EditorGUI.FocusTextInControl("editTitle" + id); } // Help if (GUI.Button(new Rect(winRect.width - 16, 6, 16, 16), new GUIContent(CurvyStyles.HelpTexture, "Help"), CurvyStyles.BorderlessButton)) { var url = DTUtility.GetHelpUrl(mod); if (!string.IsNullOrEmpty(url)) { Application.OpenURL(url); } } // Check errors if (mod.CircularReferenceError) { EditorGUILayout.HelpBox("Circular Reference", MessageType.Error); } // Draw Slots DTGUI.PushColor(mod.Properties.BackgroundColor.SkinAwareColor(true)); EditorGUILayout.BeginVertical(CurvyStyles.ModuleWindowSlotBackground); DTGUI.PopColor(); OnModuleWindowSlotGUI(mod); EditorGUILayout.EndVertical(); var ed = GetModuleEditor(mod); if (ed && ed.target != null) { if (EditorGUILayout.BeginFadeGroup(mShowDebug.faded)) { ed.OnInspectorDebugGUIINTERNAL(Repaint); } EditorGUILayout.EndFadeGroup(); // Draw Module Options mod.Properties.Expanded.valueChanged.RemoveListener(Repaint); mod.Properties.Expanded.valueChanged.AddListener(Repaint); if (!CurvyProject.Instance.CGAutoModuleDetails) { mod.Properties.Expanded.target = GUILayout.Toggle(mod.Properties.Expanded.target, new GUIContent(mod.Properties.Expanded.target ? CurvyStyles.CollapseTexture : CurvyStyles.ExpandTexture, "Show Details"), EditorStyles.toolbarButton); } // === Module Details === // Handle Auto-Folding if (DTGUI.IsLayout && CurvyProject.Instance.CGAutoModuleDetails) { mod.Properties.Expanded.target = (mod == Sel.SelectedModule); } if (EditorGUILayout.BeginFadeGroup(mod.Properties.Expanded.faded)) { EditorGUIUtility.labelWidth = (mod.Properties.LabelWidth); // Draw Inspectors using Modules Background color DTGUI.PushColor(ed.Target.Properties.BackgroundColor.SkinAwareColor(true)); EditorGUILayout.BeginVertical(CurvyStyles.ModuleWindowBackground); DTGUI.PopColor(); ed.RenderGUI(true); if (ed.NeedRepaint) { mDoRepaint = true; } GUILayout.Space(2); EditorGUILayout.EndVertical(); } EditorGUILayout.EndFadeGroup(); } // Make it dragable GUI.DragWindow(new Rect(0, 0, winRect.width, CurvyStyles.ModuleWindowTitleHeight)); }
void DrawModules() { CGModule curSel = Sel.SelectedModule; // Begin drawing Module Windows BeginWindows(); for (int i = 0; i < Modules.Count; i++) { var mod = Modules[i]; if (mod != null) { mod.Properties.Dimensions.width = Mathf.Max(mod.Properties.Dimensions.width, mod.Properties.MinWidth); mod.Properties.Dimensions.height = 0; // will be set by GUILayout.Window // Render title string title = mod.ModuleName; if (!mod.IsConfigured) { title = string.Format("<color={0}>{1}</color>", new Color(1, 0.2f, 0.2f).SkinAwareColor().ToHtml(), mod.ModuleName); } //"<color=#ff3333>" + mod.ModuleName + "</color>"; else if (mod is IOnRequestProcessing) { title = string.Format("<color={0}>{1}</color>", CurvyStyles.IOnRequestProcessingTitleColor.SkinAwareColor().ToHtml(), mod.ModuleName); } #if CURVY_DEBUG title = mod.UniqueID + ":" + title; #endif // the actual window Vector2 oldPos = mod.Properties.Dimensions.position; Rect newWindowRect = GUILayout.Window(i, mod.Properties.Dimensions, OnModuleWindowCB, title, CurvyStyles.ModuleWindow); if (!Application.isPlaying && oldPos != newWindowRect.position) #if UNITY_5_0 || UNITY_5_1 || UNITY_5_2 { EditorApplication.MarkSceneDirty(); } #else { UnityEditor.SceneManagement.EditorSceneManager.MarkAllScenesDirty(); } #endif if (Sel.SelectedModules.Count > 1) // Multi-Module move in OnGUI() { mod.Properties.Dimensions = newWindowRect.SetPosition(oldPos); } else { if (EV.alt && Canvas.IsModuleDrag && Sel.SelectedModule == mod) { newWindowRect.position = newWindowRect.position.Snap(CurvyProject.Instance.CGGraphSnapping); } mod.Properties.Dimensions = newWindowRect; } // Debugging var lastUpdateDelta = (System.DateTime.Now - mod.DEBUG_LastUpdateTime).TotalMilliseconds; if (lastUpdateDelta < 1500) { float alpha = Mathf.SmoothStep(1, 0, (float)lastUpdateDelta / 1500f); DTGUI.PushBackgroundColor(new Color(0, 1, 0, alpha)); GUI.Box(mod.Properties.Dimensions.ScaleBy(9), "", CurvyStyles.GlowBox); DTGUI.PopBackgroundColor(); Repaint(); } // Track Window Movement for Viewport calculation Canvas.ViewPortRegisterWindow(mod); } } EndWindows(); if (Sel.SelectedModule != curSel) { Canvas.FocusSelection(); } }
void OnGUI() { mDoRepaint = false; if (!Generator) { return; } if (!Generator.IsInitialized) { Generator.Initialize(); } Modules = new List <CGModule>(Generator.Modules.ToArray()); mModuleCount = Modules.Count; // store count to be checked in window GUI if (!Application.isPlaying && !Generator.IsInitialized) { Repaint(); } DrawToolbar(); Canvas.SetClientRect(0, GUILayoutUtility.GetLastRect().yMax, 0, mStatusbarHeight); // Scrollable Canvas if (Canvas.Scroll.isAnimating) { GUI.BeginScrollView(Canvas.ClientRect, Canvas.Scroll.value, Canvas.CanvasRect); } else { Canvas.Scroll.value = GUI.BeginScrollView(Canvas.ClientRect, Canvas.Scroll.value, Canvas.CanvasRect); } // render background DTGUI.PushColor(Color.black.SkinAwareColor(true)); GUI.Box(Canvas.ViewPort, ""); DTGUI.PopColor(); #if CURVY_DEBUG GUILayout.BeginArea(Canvas.ViewPort); GUILayout.Label("Canvas ClientRect: " + Canvas.ClientRect); GUILayout.Label("Canvas Rect: " + Canvas.CanvasRect); GUILayout.Label("Canvas Scroll: " + Canvas.Scroll); GUILayout.Label("Canvas ViewPort: " + Canvas.ViewPort); GUILayout.Label("Mouse: " + EV.mousePosition); GUILayout.Label("IsWindowDrag: " + Canvas.IsWindowDrag); GUILayout.Label("IsSelectionDrag: " + Canvas.IsSelectionRectDrag); GUILayout.Label("IsLinkDrag: " + Canvas.IsLinkDrag); GUILayout.Label("IsCanvasDrag: " + Canvas.IsCanvasDrag); GUILayout.Label("IsModuleDrag: " + Canvas.IsModuleDrag); GUILayout.Label("MouseOverModule: " + Canvas.MouseOverModule); GUILayout.Label("MouseOverCanvas: " + Canvas.IsMouseOverCanvas); GUILayout.Label("SelectedLink: " + Sel.SelectedLink); GUILayout.Label("Selected Module: " + Sel.SelectedModule); GUILayout.EndArea(); #endif if (CurvyProject.Instance.CGShowHelp) { var r = new Rect(Canvas.ViewPort); r.x = r.width - 210; r.y = 10; r.width = 200; r.height = 190; GUILayout.BeginArea(r, GUI.skin.box); GUI.Label(new Rect(10, 5, 200, 20), "<i><b>General</b></i>", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 25, 50, 20), "<b>RMB</b>", DTStyles.HtmlLabel); GUI.Label(new Rect(70, 25, 150, 20), "Context Menu", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 40, 150, 40), "<b>MMB/\nSpace</b>", DTStyles.HtmlLabel); GUI.Label(new Rect(70, 40, 150, 20), "Drag Canvas", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 70, 150, 20), "<b>Alt</b>", DTStyles.HtmlLabel); GUI.Label(new Rect(70, 70, 150, 20), "Hold to snap to grid", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 85, 150, 20), "<b>Del</b>", DTStyles.HtmlLabel); GUI.Label(new Rect(70, 85, 150, 20), "Delete selection", DTStyles.HtmlLabel); GUI.Label(new Rect(10, 110, 200, 20), "<i><b>Add Modules</b></i>", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 130, 180, 40), "Hold <b>Ctrl</b> while releasing a\nlink to create & connect", DTStyles.HtmlLabel); GUI.Label(new Rect(20, 160, 180, 40), "Drag & Drop splines to create\nPath module", DTStyles.HtmlLabel); GUILayout.EndArea(); } DrawLinks(); // Init and early catch some events Canvas.BeginGUI(); DrawModules(); Canvas.EndGUI(); // Draw Selection DTGUI.PushBackgroundColor(Color.white);//.SkinAwareColor()); foreach (var mod in Sel.SelectedModules) { GUI.Box(mod.Properties.Dimensions.ScaleBy(2), "", CurvyStyles.RoundRectangle); } DTGUI.PopBackgroundColor(); // Keep dragged Module in view and handle multiselection move if (Canvas.IsModuleDrag && !DTGUI.IsLayout) { Vector2 delta = EV.delta; deltaAccu += EV.delta; if (EV.alt) { delta = deltaAccu.Snap(CurvyProject.Instance.CGGraphSnapping); if (delta == deltaAccu) { delta = Vector2.zero; } } if (Sel.SelectedModules.Count > 1) { foreach (CGModule mod in Sel.SelectedModules) { mod.Properties.Dimensions.position += delta; } if (!EV.alt || delta != Vector2.zero) { deltaAccu = Vector2.zero; } } var m = (Canvas.MouseOverModule) ? Canvas.MouseOverModule : Sel.SelectedModule; if (m) { GUI.ScrollTowards(m.Properties.Dimensions, 0.8f); } } // Linking in progress? if (Canvas.IsLinkDrag) { var linkstyle = (Canvas.LinkDragFrom.OnRequestModule != null) ? CurvyStyles.RequestLineTexture : CurvyStyles.LineTexture; Handles.DrawBezier(Canvas.LinkDragFrom.Origin, EV.mousePosition, Canvas.LinkDragFrom.Origin + new Vector2(40, 0), EV.mousePosition + new Vector2(-40, 0), Color.white, linkstyle, 2); } GUI.EndScrollView(true); // Selection if (Canvas.IsSelectionRectDrag) { DrawSelectionRect(); } // Statusbar DrawStatusbar(); // IPE SyncIPE(); mDoRepaint = mDoRepaint || Canvas.IsCanvasDrag || Canvas.IsLinkDrag || Canvas.IsSelectionRectDrag || EV.type == EventType.MouseMove || mShowDebug.isAnimating || Canvas.Scroll.isAnimating; // Disable Title edit mode? if (editTitleModule != null) { if ((EV.isKey && (EV.keyCode == KeyCode.Escape || EV.keyCode == KeyCode.Return)) || Sel.SelectedModule != editTitleModule ) { editTitleModule = null; //GUI.FocusControl(""); mDoRepaint = true; } } if (mDoRepaint) { Repaint(); } }
void OnGUI() { GUILayout.BeginVertical(); GUILayout.Label(new GUIContent(CurvyStyles.TexLogoBig)); var r = new Rect(250, 70, 215, 40); DTGUI.PushContentColor(Color.black); var st = new GUIStyle(EditorStyles.label); st.alignment = TextAnchor.UpperRight; st.richText = true; GUI.Label(r, "<b>Curvy " + CurvySpline.VERSION + "</b>\n(c) 2013-2015 Fluffy Underware", st); r.y += 40; GUI.Label(r, "<b>DevTools " + DT.VERSION + "</b>\n(c) 2015 Fluffy Underware", st); DTGUI.PopContentColor(); GUILayout.Space(10); head("What's new?"); if (buttonCol("Release notes", "View release notes and upgrade instructions!")) { OpenReleaseNotes(); } foot(); head("Learning Resources"); if (buttonCol("View Examples", "Show examples folder")) { ShowExamples(); } if (buttonCol("Tutorials", "Watch some tutorials")) { OpenTutorials(); } if (buttonCol("Documentation", "Manuals! That magic source of wisdom!")) { OpenDocs(); } if (buttonCol("API Reference", "Browse the API reference")) { OpenAPIDocs(); } if (buttonCol("Support Forum", "Visit Support forum")) { OpenForum(); } foot(); head("Links"); if (buttonCol("Website", "Visit Curvy's product website")) { OpenWeb(); } if (buttonCol("Submit a bug report", "Found a bug? Please issue a bug report!")) { CurvyEditorUtility.SendBugReport(); } foot(); GUILayout.EndVertical(); if (!heightHasBeenSet && Event.current.type == EventType.repaint) { setHeightToContent(); } }