private void DisplayGroup(int index) { var group = KeyManager.KeyGroups[index]; var tooltip = "" + index; GUILayout.BeginHorizontal(); var nameStyle = new GUIStyle(Elements.Labels.Title) { margin = { top = 12 }, fontSize = 15 }; GUILayout.Label(group.Name, nameStyle); if (editMode) { if (GUILayout.Button("...", GUILayout.Width(40f))) { modifiyingGroup = group; GUI.BringWindowToBack(WindowID); } if (GUILayout.Button("↑", index == 0 ? Elements.Buttons.Disabled : Elements.Buttons.Default, GUILayout.Width(28f))) { KeyManager.MoveUp(index); } if (GUILayout.Button("↓", index == KeyManager.KeyGroups.Count - 1 ? Elements.Buttons.Disabled : Elements.Buttons.Default, GUILayout.Width(28f))) { KeyManager.MoveDown(index); } if (GUILayout.Button(Resources.Delete, IconButtonStyle, GUILayout.Height(28f), GUILayout.Width(28f))) { if (modifiyingGroup == group) { modifiyingGroup = null; } KeyManager.DeleteKeyGroup(group); } } else { var keys = group.Keybindings.Keys.ToList(); var i = 0; for (; i < keys.Count; i++) { GUILayout.Button(new GUIContent(keys[i].ToString(), $"{tooltip}-{i}"), Elements.Buttons.Red, GUILayout.Width(110f)); } GUILayout.Button(new GUIContent("Add new", $"{tooltip}-{i}"), Elements.Buttons.Red, GUILayout.Width(110f)); } GUILayout.EndHorizontal(); }
public void EditNextGroup() { if (modifiyingGroup == null) { return; } var groups = KeyManager.KeyGroups; var index = groups.IndexOf(modifiyingGroup); index++; if (index >= groups.Count) { index = 0; } modifiyingGroup = groups[index]; }
public void AutoAddGroups() { var groups = new Dictionary <KeyCode, KeyGroup>(); foreach (var block in Machine.Active().BuildingBlocks) { for (int i = 0; i < block.Keys.Count; i++) { var mKey = block.Keys[i]; for (int j = 0; j < mKey.KeyCode.Count; j++) { var key = mKey.KeyCode[j]; if (!groups.ContainsKey(key)) { groups[key] = new KeyGroup(key.ToString()); } groups[key].AddKeybinding(block, i, j); } } } this.groups.AddRange(groups.Values); }
public void Show(KeyGroup group) { this.group = group; windowRect = GUI.Window(WindowID, windowRect, DoWindow, group.Name); }
private void DoWindow(int id) { /*if (blockToAssign != null) * { * GUILayout.Label("Select which keybind to add:"); * GUILayout.BeginHorizontal(); * for (int i = 0; i < blockToAssign.Keys.Count; i++) * { * var key = blockToAssign.Keys[i]; * if (GUILayout.Button(key.DisplayName)) * { * // BuildingUpdate() will handle adding the keybind * selectedKeybind = i; * } * } * GUILayout.EndHorizontal(); * } * else */ if (assigningBlocks) { /*GUILayout.Label(@"Click non-highlighted blocks to add them to the key group. * Click highlighted blocks to remove them from the group.");*/ GUILayout.Label("Click a highlighted block to remove it from the group."); if (GUILayout.Button($"Assign all controls bound to {group.KeyString()}")) { group.AddAllWithKeys(); } if (GUILayout.Button("Exit assignment mode")) { ExitBlockAssignmentMode(); } } else { var closeRect = new Rect(windowRect.width - 40, 6, 32, 32); if (GUI.Button(closeRect, "X")) { KeyManagerInterface.Instance.CloseGroupEdit(); } GUILayout.BeginHorizontal(); var textStyle = new GUIStyle(Elements.Labels.Title) { margin = { top = 12 }, fontSize = 15 }; GUILayout.Label("Name: ", textStyle); GUI.SetNextControlName("txt-group-name"); group.Name = GUILayout.TextField(group.Name); // Select all text after cycling through groups with tab if (oldGroup != null && oldGroup != group) { var te = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl); te.SelectAll(); oldGroup = null; } GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("(Un-)Assign blocks")) { EnterBlockAssignmentMode(); } } // Cycle through groups with tab when editing the name if (GUI.GetNameOfFocusedControl() == "txt-group-name" && Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Tab) { KeyManagerInterface.Instance.EditNextGroup(); // Select all text once we're displaying the new group oldGroup = group; } GUI.DragWindow(); }
private void DoWindow(int id) { var editRect = new Rect(windowRect.width - 40, 6, 32, 32); if (GUI.Button(editRect, Resources.Edit, IconButtonStyle)) { editMode = !editMode; if (!editMode) { modifiyingGroup = null; } } var groups = new List <KeyGroup>(KeyManager.KeyGroups); scrollPosition = GUILayout.BeginScrollView(scrollPosition); if (groups.Count > 0) { for (int i = 0; i < groups.Count; i++) { DisplayGroup(i); } } else { GUILayout.Label("No key groups present."); } GUILayout.EndScrollView(); if (editMode) { GUILayout.BeginHorizontal(); if (GUILayout.Button("Add")) { KeyManager.CreateKeyGroup("New key group"); } if (GUILayout.Button("Auto-Add")) { KeyManager.AutoAddGroups(); } GUILayout.EndHorizontal(); } // Check if a keybind button is hovered over if (Event.current.type == EventType.Repaint) { if (GUI.tooltip == "") { currentGroupToMap = null; currentKeyToMap = -1; } else { currentGroupToMap = groups[int.Parse(GUI.tooltip.Split('-')[0])]; currentKeyToMap = int.Parse(GUI.tooltip.Split('-')[1]); } } GUI.DragWindow(); }
public void CloseGroupEdit() { modifiyingGroup = null; }
public KeyManager() { groups = new List <KeyGroup>(); XmlSaver.OnSave += info => { var machineData = info.MachineData; const string keyManagerTag = "keymanager-v2"; machineData.Write($"{keyManagerTag}-groups-count", groups.Count); for (int i = 0; i < groups.Count; i++) { var groupTag = $"{keyManagerTag}-groups-{i}"; var bindings = groups[i].Keybindings.ToList(); machineData.Write($"{groupTag}-name", groups[i].Name); machineData.Write($"{groupTag}-keys-count", bindings.Count); for (int j = 0; j < bindings.Count; j++) { var keyTag = $"{groupTag}-keys-{j}"; machineData.Write($"{keyTag}-key", bindings[j].Key.ToString()); machineData.Write($"{keyTag}-bindings-count", bindings[j].Value.Count); for (int k = 0; k < bindings[j].Value.Count; k++) { var bindingTag = $"{keyTag}-bindings-{k}"; machineData.Write($"{bindingTag}-guid", bindings[j].Value[k].Guid.ToString()); machineData.Write($"{bindingTag}-keyIndex", bindings[j].Value[k].MKeyIndex); machineData.Write($"{bindingTag}-keyCodeIndex", bindings[j].Value[k].KeyCodeIndex); } } } }; XmlLoader.OnLoad += info => { groups.Clear(); var machineData = info.MachineData; const string keyManagerTag = "keymanager-v2"; if (!machineData.HasKey($"{keyManagerTag}-groups-count")) { return; } var count = machineData.ReadInt($"{keyManagerTag}-groups-count"); groups.Capacity = count; for (int i = 0; i < count; i++) { var groupTag = $"{keyManagerTag}-groups-{i}"; var name = machineData.ReadString($"{groupTag}-name"); var group = new KeyGroup(name); var keyCount = machineData.ReadInt($"{groupTag}-keys-count"); for (int j = 0; j < keyCount; j++) { var keyTag = $"{groupTag}-keys-{j}"; var key = Util.ParseEnum <KeyCode>(machineData.ReadString($"{keyTag}-key")); var bindingsCount = machineData.ReadInt($"{keyTag}-bindings-count"); for (int k = 0; k < bindingsCount; k++) { var bindingTag = $"{keyTag}-bindings-{k}"; var guid = new Guid(machineData.ReadString($"{bindingTag}-guid")); var keyIndex = machineData.ReadInt($"{bindingTag}-keyIndex"); var keyCodeIndex = machineData.ReadInt($"{bindingTag}-keyCodeIndex"); var binding = new Keybinding(guid, keyIndex, keyCodeIndex); group.AddKeybinding(key, binding); } } groups.Add(group); } // Show interface when loading a machine with key manager data. KeyManagerInterface.Instance.SetActive(); }; // When a block is deleted, delete any corresponding keybindings Game.OnBlockRemoved += () => { foreach (var group in groups) { group.RemoveAllBindingsWithoutBlock(); } // If any groups were completely emtpied by the above checks, delete them entirely groups.RemoveAll(g => g.HasNoBindings()); }; }
public void DeleteKeyGroup(KeyGroup group) { groups.Remove(group); }