Example #1
0
        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();
        }
Example #2
0
        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];
        }
Example #3
0
        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();
        }
Example #6
0
        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();
        }
Example #7
0
 public void CloseGroupEdit()
 {
     modifiyingGroup = null;
 }
Example #8
0
        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());
            };
        }
Example #9
0
 public void DeleteKeyGroup(KeyGroup group)
 {
     groups.Remove(group);
 }