private void DrawMouseOverWindow(int id) { int index = id - ConfigHandler.Instance.MouseOverWindow; if (index < MouseOverStack.Count) { MouseOverStackEntry Entry = MouseOverStack[index]; if (index == 0 && Entry.Tag.ChildTags.Count == 0) { GUILayout.Space(15); GUILayout.BeginHorizontal(); GUILayout.Space(Entry.Tag.Name.Length * 10); GUILayout.EndHorizontal(); //GUILayout.Label(Entry.Tag.Name, GUILayout.ExpandWidth(true)); } GUILayout.BeginVertical(GUILayout.MinWidth(Entry.Tag.Name.Length * 9)); foreach (PartTag subTag in Entry.Tag.ChildTags) { if (ConfigHandler.Instance.HideUnresearchedTags && !subTag.Researched) { continue; } GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); bool pushed = false; if (subTag.IconName != "") { pushed |= GUILayout.Button(ResourceProxy.Instance.GetIconTexture(subTag.IconName, true), iconStyle, GUILayout.Width(ConfigHandler.Instance.ButtonSize.x), GUILayout.Height(ConfigHandler.Instance.ButtonSize.y)); } pushed |= GUILayout.Button(subTag.Name, subTag.Enabled ? ButtonStyleEnabled : ButtonStyle, GUILayout.ExpandWidth(true)); GUILayout.EndHorizontal(); if (pushed) { PartFilterManager.Instance.ToggleFilter(subTag); } //GUILayout.Box(ResourceProxy.Instance.GetTagIcon(subTag)); if (Event.current.type == EventType.Repaint && GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition)) { while (index + 1 < MouseOverStack.Count) { MouseOverStack.RemoveAt(index + 1); } MouseOverStack.Insert(index + 1, new MouseOverStackEntry(subTag, new Vector2(0, GUILayoutUtility.GetLastRect().y + GUILayoutUtility.GetLastRect().height * 0.5f))); MouseOverClear = false; } } GUILayout.EndVertical(); } else { GUILayout.Space(1); } }
private void DrawMouseOverTags() { if (GUILayoutSettings.Instance.IsOpen) { return; } for (int i = 0; i < MouseOverStack.Count; i++) { MouseOverStackEntry Entry = MouseOverStack[i]; if (i != 0 && Entry.Tag.ChildTags.Count == 0) { break; } Entry.WindowPos = GUILayout.Window(ConfigHandler.Instance.MouseOverWindow + i, Entry.WindowPos, DrawMouseOverWindow, Entry.Tag.Name, GUILayout.MinHeight(200), GUILayout.MinWidth(200), GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); if (i > 0) { MouseOverStackEntry LastEntry = MouseOverStack[i - 1]; if (ConfigHandler.Instance.ToolBarPreset == ToolBarPositions.VerticalRight) { Entry.WindowPos.x = Entry.Position.x - Entry.WindowPos.width; } else { Entry.WindowPos.x = Entry.Position.x + LastEntry.WindowPos.width; } Entry.WindowPos.y = Entry.Position.y - Entry.WindowPos.height * 0.5f; } else { switch (ConfigHandler.Instance.ToolBarPreset) { case ToolBarPositions.HorizontalTop: Entry.WindowPos.x = Entry.Position.x - Entry.WindowPos.width * 0.5f + ConfigHandler.Instance.ButtonSize.x * 0.5f; Entry.WindowPos.y = Entry.Position.y + ConfigHandler.Instance.ButtonSize.y; break; case ToolBarPositions.HorizontalBottom: Entry.WindowPos.x = Entry.Position.x - Entry.WindowPos.width * 0.5f + ConfigHandler.Instance.ButtonSize.x * 0.5f; Entry.WindowPos.y = Entry.Position.y - Entry.WindowPos.height; break; case ToolBarPositions.VerticalLeft: Entry.WindowPos.x = Entry.Position.x + ConfigHandler.Instance.ButtonSize.x; Entry.WindowPos.y = Entry.Position.y - Entry.WindowPos.height * 0.5f; break; case ToolBarPositions.VerticalRight: Entry.WindowPos.x = Entry.Position.x - Entry.WindowPos.width; Entry.WindowPos.y = Entry.Position.y - Entry.WindowPos.height * 0.5f; break; default: break; } } if (Entry.WindowPos.x < GUIConstants.EditorPartListWidth) { Entry.WindowPos.x = GUIConstants.EditorPartListWidth; } if (Entry.WindowPos.xMax > Screen.width) { Entry.WindowPos.x -= Screen.width - Entry.WindowPos.xMax; } if (Entry.WindowPos.y < GUIConstants.EditorToolbarHeight) { Entry.WindowPos.y = GUIConstants.EditorToolbarHeight; } if (Entry.WindowPos.yMax > Screen.height - GUIConstants.EditorToolbarHeight) { Entry.WindowPos.y += (Screen.height - GUIConstants.EditorToolbarHeight) - Entry.WindowPos.yMax; } Entry.WindowPos = GUILayout.Window(ConfigHandler.Instance.MouseOverWindow + i, Entry.WindowPos, DrawMouseOverWindow, Entry.Tag.Name); if (Entry.WindowPos.Contains(Event.current.mousePosition)) { MouseOverClear = false; } } }