From 5f871763fb40eefca370806b7c3e50912338f2ed Mon Sep 17 00:00:00 2001 From: JeffR Date: Mon, 9 May 2022 20:57:42 -0500 Subject: [PATCH] Adds creator callback integration to pair with the base UI module having shortcut creator entries in the GUIEditor for creating stuff like the UINavigation containers, or MenuList controls with the namespace hooks already established. --- Templates/BaseGame/game/data/UI/UI.tscript | 3 + .../game/data/UI/tools/creator.tscript | 61 +++++++++++++++++++ .../assetBrowser/scripts/assetBrowser.tscript | 7 +++ .../assetBrowser/scripts/creator.tscript | 11 +++- 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 Templates/BaseGame/game/data/UI/tools/creator.tscript diff --git a/Templates/BaseGame/game/data/UI/UI.tscript b/Templates/BaseGame/game/data/UI/UI.tscript index ee2c111e7..9dae2fe5d 100644 --- a/Templates/BaseGame/game/data/UI/UI.tscript +++ b/Templates/BaseGame/game/data/UI/UI.tscript @@ -85,6 +85,9 @@ function UI::initClient(%this) %this.queueExec("./scripts/help"); %this.queueExec("./scripts/cursors"); %this.queueExec("./scripts/utility"); + + if(isToolBuild()) + %this.queueExec("./tools/creator.tscript"); } function UI::onCreateClientConnection(%this){} diff --git a/Templates/BaseGame/game/data/UI/tools/creator.tscript b/Templates/BaseGame/game/data/UI/tools/creator.tscript new file mode 100644 index 000000000..c8322106b --- /dev/null +++ b/Templates/BaseGame/game/data/UI/tools/creator.tscript @@ -0,0 +1,61 @@ +function UI::loadModuleCreatorClasses(%this) +{ + AssetBrowser.beginCreatorGroup( "BaseUI", "GuiEditor" ); + AssetBrowser.addCreatorClass("GuiContainer", "UINavigation Container", "UINavContainer" ); + AssetBrowser.addCreatorClass("GuiContainer", "Menu List", "GUIMenuList" ); + AssetBrowser.addCreatorClass("GuiStackControl", "Stack Menu List", "GuiStackMenuList" ); + AssetBrowser.addCreatorClass("GuiContainer", "Menu Input Button Handler", "MenuInputBtnHandler" ); + AssetBrowser.addCreatorClass("GuiIconButtonCtrl", "Menu Input Button", "MenuInputBtn" ); + AssetBrowser.endCreatorGroup(); +} + + +function ObjectBuilderGui::buildUINavContainer(%this) +{ + %ctrl = new GuiContainer() + { + superClass = "UINavigation"; + }; + + return %ctrl; +} + +function ObjectBuilderGui::buildGUIMenuList(%this) +{ + %ctrl = new GuiContainer() + { + superClass = "MenuList"; + }; + + return %ctrl; +} + +function ObjectBuilderGui::builduiStackMenuList(%this) +{ + %ctrl = new GuiStackControl() + { + superClass = "MenuList"; + }; + + return %ctrl; +} + +function ObjectBuilderGui::buildMenuInputBtnHandler(%this) +{ + %ctrl = new GuiContainer() + { + class = "MenuInputButtonContainer"; + }; + + return %ctrl; +} + +function ObjectBuilderGui::buildMenuInputBtn(%this) +{ + %ctrl = new GuiIconButtonCtrl() + { + class = "MenuInputButton"; + }; + + return %ctrl; +} \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript index 0c7270d10..bea15c084 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript @@ -2517,7 +2517,14 @@ function GuiEditor::onControlDropped(%this, %payload, %position) else { %className = %payload.assetName; + if(%payload.altCommand !$= "") + { + %cmd = %payload.altCommand; + } + else + { %cmd = "return new " @ %className @ "();"; + } %ctrl = eval( %cmd ); } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/creator.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/creator.tscript index c6b279d35..f4e78daf3 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/creator.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/creator.tscript @@ -130,6 +130,8 @@ function AssetBrowser::loadCreatorClasses(%this) %this.creatorClassArray.sort(true); %guiClasses.delete(); + + callOnModules("loadModuleCreatorClasses"); } function AssetBrowser::beginCreatorGroup(%this, %group, %editor) @@ -185,7 +187,14 @@ function AssetBrowser::addCreatorClass(%this, %class, %name, %buildfunc) %cmd = "ObjectBuilderGui.build" @ %buildfunc @ "();"; } - %buildfunc = "ObjectBuilderGui.newObjectCallback = \"AssetBrowser.onFinishCreateObject\"; ObjectCreator.createObject( \"" @ %cmd @ "\" );"; + if(GuiEditorIsActive()) + { + %buildfunc = "return " @ %cmd; + } + else + { + %buildfunc = "ObjectBuilderGui.newObjectCallback = \"AssetBrowser.onFinishCreateObject\"; ObjectCreator.createObject( \"" @ %cmd @ "\" );"; + } %args = new ScriptObject(); %args.val[0] = %class;