public UnitSearchResult SearchUnit(string[] path) { ConsoleCommandGroup currentgroup = this; UnitSearchResult result = new UnitSearchResult(); for (int i = 0; i < path.Length; i++) { ConsoleCommandGroup group = currentgroup.GetGroup(path[i]); ConsoleCommand command = currentgroup.GetCommand(path[i]); if (group != null) { currentgroup = group; result.index++; } else if (command != null) { result.index++; result.unit = command; return(result); } } result.unit = currentgroup; return(result); }
public override void Start() { // GUI GUI = new SGroup { Visible = false, OnUpdateStyle = (SElement elem) => elem.Fill(), Children = { new SGroup { Background = new Color(0f, 0f, 0f, 0f), AutoLayout = (SGroup g) => g.AutoLayoutVertical, ScrollDirection = SGroup.EDirection.Vertical, OnUpdateStyle = delegate(SElement elem) { elem.Fill(); elem.Size -= new Vector2(0f, elem.Backend.LineHeight - 4f); // Command line input space }, Children = { new SLabel("ETGMod <color=#ffffffff>" + ETGMod.BaseUIVersion + "</color>") { Foreground = Color.gray }, new SLabel("Console backend <color=#ffffffff>R" + REVISION + "</color>") { Foreground = Color.gray }, new SLabel("THIS CONSOLE IS <color=#ff0000ff>WORK IN PROGRESS</color>."), new SLabel("Use <color=#ffffffff>help</color> to find out how to use the console.") { Foreground = Color.gray }, new SLabel(), //new SLabel("Wee this text gets randomized in order!") { // With = { // new SRandomLabelModifier() // } //}, // new SLabel(), } }, new STextField { OnUpdateStyle = delegate(SElement elem){ elem.Size.x = elem.Parent.InnerSize.x; elem.Position.x = 0f; elem.Position.y = elem.Parent.InnerSize.y - elem.Size.y; }, OnTextUpdate = delegate(STextField elem, string prevText){ HideAutocomplete(); }, OverrideTab = true, OnKey = delegate(STextField field, bool keyDown, KeyCode keyCode) { if (!keyDown) { return; } if (keyCode == KeyCode.Escape || keyCode == KeyCode.F2 || keyCode == KeyCode.Slash || keyCode == KeyCode.BackQuote) { ETGModGUI.CurrentMenu = ETGModGUI.MenuOpened.None; return; } if (keyCode == KeyCode.Tab) { ShowAutocomplete(); return; } }, OnSubmit = delegate(STextField elem, string text){ if (text.Length == 0) { return; } ParseCommand(text); if (_CloseConsoleOnCommand) { ETGModGUI.CurrentMenu = ETGModGUI.MenuOpened.None; } } } } }; // GLOBAL NAMESPACE Commands .AddUnit("help", delegate(string[] args) { List <List <string> > paths = Commands.ConstructPaths(); for (int i = 0; i < paths.Count; i++) { Log(string.Join(" ", paths[i].ToArray())); } }) .AddUnit("exit", (string[] args) => ETGModGUI.CurrentMenu = ETGModGUI.MenuOpened.None) .AddUnit("screenshake", SetShake) .AddUnit("echo", Echo) .AddUnit("tp", Teleport) .AddUnit("character", SwitchCharacter) .AddUnit("clear", (string[] args) => GUI[0].Children.Clear()) .AddUnit("godmode", godmode) // { // GameManager.Instance.PrimaryPlayer.healthHaver.IsVulnerable = SetBool(args, GameManager.Instance.PrimaryPlayer.healthHaver.IsVulnerable); // GameManager.Instance.PrimaryPlayer.healthHaver.IsVulnerable = SetBool(args, GameManager.Instance.PrimaryPlayer.healthHaver.IsVulnerable); delegate(string[] args // }) .AddGroup("spawn", Spawn, _SpawnAutocompletionSettings); // SPAWN NAMESAPCE Commands.GetGroup("spawn") .AddUnit("chest", SpawnChest) .AddUnit("all", SpawnAll); // GIVE NAMESPACE Commands.AddGroup("give", GiveItem, _GiveAutocompletionSettings); Commands.GetGroup("give") .AddGroup("all", (string[] args) => { foreach (string id in Game.Items.IDs) { if (id != "gungeon:cell_key" /* (bugged!) */) { Game.PrimaryPlayer.GiveItem(id); } } }); // GIVE ALL NAMESPACE Commands.GetGroup("give").GetGroup("all") .AddUnit("guns", (string[] args) => { foreach (string id in Game.Items.IDs) { if (ETGMod.Databases.Items[id] is Gun) { Game.PrimaryPlayer.GiveItem(id); } } }) .AddUnit("passives", (string[] args) => { foreach (string id in Game.Items.IDs) { if (ETGMod.Databases.Items[id] is PassiveItem) { Game.PrimaryPlayer.GiveItem(id); } } }) .AddUnit("actives", (string[] args) => { foreach (string id in Game.Items.IDs) { if (ETGMod.Databases.Items[id] is PlayerItem) { Game.PrimaryPlayer.GiveItem(id); } } }); // STAT NAMESPACE Commands.AddGroup("stat"); Commands.GetGroup("stat") .AddUnit("get", StatGet, _StatAutocompletionSettings) .AddGroup("set", StatSetCurrentCharacter, _StatAutocompletionSettings) .AddUnit("mod", StatMod, _StatAutocompletionSettings) .AddUnit("list", StatList); Commands.GetGroup("stat").GetGroup("set") .AddUnit("session", StatSetSession, _StatAutocompletionSettings); // ROLL NAMESPACE Commands.AddGroup("roll"); Commands.GetGroup("roll") .AddUnit("distance", DodgeRollDistance) .AddUnit("speed", DodgeRollSpeed); // TEST NAMESPACE Commands.AddUnit("test", new ConsoleCommandGroup()); Commands.GetGroup("test") .AddGroup("resources") .AddUnit("skiplevel", delegate(string[] args) { Pixelator.Instance.FadeToBlack(0.5f, false, 0f); GameManager.Instance.DelayedLoadNextLevel(0.5f); }).AddUnit("charselect", delegate(string[] args) { Pixelator.Instance.FadeToBlack(0.5f, false, 0f); GameManager.Instance.DelayedLoadCharacterSelect(0.5f); }); //// TEST.RESOURCES NAMESPACE Commands.GetGroup("test").GetGroup("resources") .AddUnit("load", ResourcesLoad); // DUMP NAMESPACE Commands.AddUnit("dump", new ConsoleCommandGroup()); Commands.GetGroup("dump") .AddGroup("sprites", (args) => SetBool(args, ref ETGMod.Assets.DumpSprites)) .AddUnit("packer", (args) => ETGMod.Assets.Dump.DumpPacker()) .AddUnit("synergies", DumpSynergies) .AddUnit("pickups", DumpPickups); Commands.GetGroup("dump").GetGroup("sprites") .AddUnit("metadata", (args) => SetBool(args, ref ETGMod.Assets.DumpSpritesMetadata)); // CONF NAMESPACE Commands.AddGroup("conf"); Commands.GetGroup("conf") .AddUnit("close_console_on_command", (args) => SetBool(args, ref _CloseConsoleOnCommand)) .AddUnit("cut_input_focus_on_command", (args) => SetBool(args, ref _CutInputFocusOnCommand)) .AddUnit("enable_damage_indicators", (args) => SetBool(args, ref ETGModGUI.UseDamageIndicators)) .AddUnit("match_contains", (args) => SetBool(args, ref AutocompletionSettings.MatchContains)) .AddUnit("enable_stat_set", (args) => SetBool(args, ref StatSetEnabled)) .AddUnit("player", (args) => ETGMod.Player.PlayerReplacement = args.Length == 1 ? args[0] : null) .AddUnit("player_coop", (args) => ETGMod.Player.CoopReplacement = args.Length == 1 ? args[0] : null); }