diff options
Diffstat (limited to 'source/frontend')
-rw-r--r-- | source/frontend/CMakeLists.txt | 4 | ||||
-rw-r--r-- | source/frontend/StarBaseScriptPane.cpp | 183 | ||||
-rw-r--r-- | source/frontend/StarBaseScriptPane.hpp | 45 | ||||
-rw-r--r-- | source/frontend/StarBindingsMenu.cpp | 23 | ||||
-rw-r--r-- | source/frontend/StarBindingsMenu.hpp | 24 | ||||
-rw-r--r-- | source/frontend/StarMainInterface.cpp | 22 | ||||
-rw-r--r-- | source/frontend/StarMainInterface.hpp | 2 | ||||
-rw-r--r-- | source/frontend/StarOptionsMenu.cpp | 13 | ||||
-rw-r--r-- | source/frontend/StarOptionsMenu.hpp | 4 | ||||
-rw-r--r-- | source/frontend/StarScriptPane.cpp | 113 | ||||
-rw-r--r-- | source/frontend/StarScriptPane.hpp | 21 |
11 files changed, 320 insertions, 134 deletions
diff --git a/source/frontend/CMakeLists.txt b/source/frontend/CMakeLists.txt index cd06ce7..50c4229 100644 --- a/source/frontend/CMakeLists.txt +++ b/source/frontend/CMakeLists.txt @@ -13,6 +13,8 @@ INCLUDE_DIRECTORIES ( SET (star_frontend_HEADERS StarActionBar.hpp StarAiInterface.hpp + StarBaseScriptPane.hpp + StarBindingsMenu.hpp StarBookmarkInterface.hpp StarChat.hpp StarCharCreation.hpp @@ -59,6 +61,8 @@ SET (star_frontend_HEADERS SET (star_frontend_SOURCES StarActionBar.cpp StarAiInterface.cpp + StarBaseScriptPane.cpp + StarBindingsMenu.cpp StarBookmarkInterface.cpp StarChat.cpp StarCharCreation.cpp diff --git a/source/frontend/StarBaseScriptPane.cpp b/source/frontend/StarBaseScriptPane.cpp new file mode 100644 index 0000000..a174622 --- /dev/null +++ b/source/frontend/StarBaseScriptPane.cpp @@ -0,0 +1,183 @@ +#include "StarBaseScriptPane.hpp" +#include "StarRoot.hpp" +#include "StarAssets.hpp" +#include "StarGuiReader.hpp" +#include "StarJsonExtra.hpp" +#include "StarConfigLuaBindings.hpp" +#include "StarLuaGameConverters.hpp" +#include "StarWidgetLuaBindings.hpp" +#include "StarCanvasWidget.hpp" +#include "StarItemTooltip.hpp" +#include "StarItemGridWidget.hpp" +#include "StarSimpleTooltip.hpp" +#include "StarImageWidget.hpp" + +namespace Star { + +BaseScriptPane::BaseScriptPane(Json config) : Pane() { + auto& root = Root::singleton(); + auto assets = root.assets(); + + if (config.type() == Json::Type::Object && config.contains("baseConfig")) { + auto baseConfig = assets->fetchJson(config.getString("baseConfig")); + m_config = jsonMerge(baseConfig, config); + } else { + m_config = assets->fetchJson(config); + } + m_reader.registerCallback("close", [this](Widget*) { dismiss(); }); + + for (auto const& callbackName : jsonToStringList(m_config.get("scriptWidgetCallbacks", JsonArray{}))) { + m_reader.registerCallback(callbackName, [this, callbackName](Widget* widget) { + m_script.invoke(callbackName, widget->name(), widget->data()); + }); + } + + m_reader.construct(assets->fetchJson(m_config.get("gui")), this); + + for (auto pair : m_config.getObject("canvasClickCallbacks", {})) + m_canvasClickCallbacks.set(findChild<CanvasWidget>(pair.first), pair.second.toString()); + for (auto pair : m_config.getObject("canvasKeyCallbacks", {})) + m_canvasKeyCallbacks.set(findChild<CanvasWidget>(pair.first), pair.second.toString()); + + m_script.setScripts(jsonToStringList(m_config.get("scripts", JsonArray()))); + m_script.setUpdateDelta(m_config.getUInt("scriptDelta", 1)); + + m_callbacksAdded = false; +} + +void BaseScriptPane::show() { + Pane::show(); +} + +void BaseScriptPane::displayed() { + Pane::displayed(); + if (!m_callbacksAdded) { + m_script.addCallbacks("pane", makePaneCallbacks()); + m_script.addCallbacks("widget", LuaBindings::makeWidgetCallbacks(this, &m_reader)); + m_script.addCallbacks("config", LuaBindings::makeConfigCallbacks( [this](String const& name, Json const& def) { + return m_config.query(name, def); + })); + m_callbacksAdded = true; + } + m_script.init(); + m_script.invoke("displayed"); +} + +void BaseScriptPane::dismissed() { + Pane::dismissed(); + m_script.invoke("dismissed"); + m_script.uninit(); +} + +void BaseScriptPane::tick() { + Pane::tick(); + + for (auto p : m_canvasClickCallbacks) { + for (auto const& clickEvent : p.first->pullClickEvents()) + m_script.invoke(p.second, jsonFromVec2I(clickEvent.position), (uint8_t)clickEvent.button, clickEvent.buttonDown); + } + for (auto p : m_canvasKeyCallbacks) { + for (auto const& keyEvent : p.first->pullKeyEvents()) + m_script.invoke(p.second, (int)keyEvent.key, keyEvent.keyDown); + } + + m_playingSounds.filter([](pair<String, AudioInstancePtr> const& p) { + return p.second->finished() == false; + }); + + m_script.update(m_script.updateDt()); +} + +bool BaseScriptPane::sendEvent(InputEvent const& event) { + // Intercept GuiClose before the canvas child so GuiClose always closes + // BaseScriptPanes without having to support it in the script. + if (context()->actions(event).contains(InterfaceAction::GuiClose)) { + dismiss(); + return true; + } + + return Pane::sendEvent(event); +} + +PanePtr BaseScriptPane::createTooltip(Vec2I const& screenPosition) { + auto result = m_script.invoke<Json>("createTooltip", screenPosition); + if (result && !result.value().isNull()) { + if (result->type() == Json::Type::String) { + return SimpleTooltipBuilder::buildTooltip(result->toString()); + } else { + PanePtr tooltip = make_shared<Pane>(); + m_reader.construct(*result, tooltip.get()); + return tooltip; + } + } else { + ItemPtr item; + if (auto child = getChildAt(screenPosition)) { + if (auto itemSlot = as<ItemSlotWidget>(child)) + item = itemSlot->item(); + if (auto itemGrid = as<ItemGridWidget>(child)) + item = itemGrid->itemAt(screenPosition); + } + if (item) + return ItemTooltipBuilder::buildItemTooltip(item); + return {}; + } +} + +Maybe<String> BaseScriptPane::cursorOverride(Vec2I const& screenPosition) { + auto result = m_script.invoke<Maybe<String>>("cursorOverride", screenPosition); + if (result) + return *result; + else + return {}; +} + +LuaCallbacks BaseScriptPane::makePaneCallbacks() { + LuaCallbacks callbacks; + + callbacks.registerCallback("dismiss", [this]() { dismiss(); }); + + callbacks.registerCallback("playSound", + [this](String const& audio, Maybe<int> loops, Maybe<float> volume) { + auto assets = Root::singleton().assets(); + auto config = Root::singleton().configuration(); + auto audioInstance = make_shared<AudioInstance>(*assets->audio(audio)); + audioInstance->setVolume(volume.value(1.0)); + audioInstance->setLoops(loops.value(0)); + auto& guiContext = GuiContext::singleton(); + guiContext.playAudio(audioInstance); + m_playingSounds.append({audio, move(audioInstance)}); + }); + + callbacks.registerCallback("stopAllSounds", [this](String const& audio) { + m_playingSounds.filter([audio](pair<String, AudioInstancePtr> const& p) { + if (p.first == audio) { + p.second->stop(); + return false; + } + return true; + }); + }); + + callbacks.registerCallback("setTitle", [this](String const& title, String const& subTitle) { + setTitleString(title, subTitle); + }); + + callbacks.registerCallback("setTitleIcon", [this](String const& image) { + if (auto icon = as<ImageWidget>(titleIcon())) + icon->setImage(image); + }); + + callbacks.registerCallback("addWidget", [this](Json const& newWidgetConfig, Maybe<String> const& newWidgetName) { + String name = newWidgetName.value(strf("{}", Random::randu64())); + WidgetPtr newWidget = m_reader.makeSingle(name, newWidgetConfig); + this->addChild(name, newWidget); + }); + + callbacks.registerCallback("removeWidget", [this](String const& widgetName) { + this->removeChild(widgetName); + }); + + return callbacks; +} + +} diff --git a/source/frontend/StarBaseScriptPane.hpp b/source/frontend/StarBaseScriptPane.hpp new file mode 100644 index 0000000..f88cd40 --- /dev/null +++ b/source/frontend/StarBaseScriptPane.hpp @@ -0,0 +1,45 @@ +#ifndef STAR_BASE_SCRIPT_PANE_HPP +#define STAR_BASE_SCRIPT_PANE_HPP + +#include "StarPane.hpp" +#include "StarLuaComponents.hpp" +#include "StarGuiReader.hpp" + +namespace Star { + +STAR_CLASS(CanvasWidget); +STAR_CLASS(BaseScriptPane); + +// A more 'raw' script pane that doesn't depend on a world being present. +// Requires a derived class to provide a Lua root. +class BaseScriptPane : public Pane { +public: + BaseScriptPane(Json config); + + virtual void show() override; + void displayed() override; + void dismissed() override; + + void tick() override; + + bool sendEvent(InputEvent const& event) override; + + PanePtr createTooltip(Vec2I const& screenPosition) override; + Maybe<String> cursorOverride(Vec2I const& screenPosition) override; +protected: + virtual LuaCallbacks makePaneCallbacks(); + Json m_config; + + GuiReader m_reader; + + Map<CanvasWidgetPtr, String> m_canvasClickCallbacks; + Map<CanvasWidgetPtr, String> m_canvasKeyCallbacks; + + bool m_callbacksAdded; + LuaUpdatableComponent<LuaBaseComponent> m_script; + List<pair<String, AudioInstancePtr>> m_playingSounds; +}; + +} + +#endif diff --git a/source/frontend/StarBindingsMenu.cpp b/source/frontend/StarBindingsMenu.cpp new file mode 100644 index 0000000..ec56e19 --- /dev/null +++ b/source/frontend/StarBindingsMenu.cpp @@ -0,0 +1,23 @@ +#include "StarBindingsMenu.hpp" +#include "StarInputLuaBindings.hpp" + +namespace Star { + +BindingsMenu::BindingsMenu(Json const& config) : BaseScriptPane(config) { + m_script.setLuaRoot(make_shared<LuaRoot>()); + m_script.addCallbacks("input", LuaBindings::makeInputCallbacks()); +} + +void BindingsMenu::show() { + BaseScriptPane::show(); +} + +void BindingsMenu::displayed() { + BaseScriptPane::displayed(); +} + +void BindingsMenu::dismissed() { + BaseScriptPane::dismissed(); +} + +}
\ No newline at end of file diff --git a/source/frontend/StarBindingsMenu.hpp b/source/frontend/StarBindingsMenu.hpp new file mode 100644 index 0000000..53d08ed --- /dev/null +++ b/source/frontend/StarBindingsMenu.hpp @@ -0,0 +1,24 @@ +#ifndef STAR_BINDINGS_MENU_HPP +#define STAR_BINDINGS_MENU_HPP + +#include "StarBaseScriptPane.hpp" + +namespace Star { + +STAR_CLASS(BindingsMenu); + +class BindingsMenu : public BaseScriptPane { +public: + BindingsMenu(Json const& config); + + virtual void show() override; + void displayed() override; + void dismissed() override; + +private: + +}; + +} + +#endif diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index 2664d2c..86c7bb6 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -357,7 +357,7 @@ bool MainInterface::handleInputEvent(InputEvent const& event) { } else if (auto mouseDown = event.ptr<MouseButtonDownEvent>()) { if (mouseDown->mouseButton == MouseButton::Left || mouseDown->mouseButton == MouseButton::Right || mouseDown->mouseButton == MouseButton::Middle) - overlayClick(mouseDown->mousePosition, mouseDown->mouseButton); + return overlayClick(mouseDown->mousePosition, mouseDown->mouseButton); } else if (auto mouseUp = event.ptr<MouseButtonUpEvent>()) { if (mouseUp->mouseButton == MouseButton::Left) @@ -1428,7 +1428,7 @@ bool MainInterface::overButton(PolyI buttonPoly, Vec2I const& mousePos) const { return buttonPoly.contains(mousePos); } -void MainInterface::overlayClick(Vec2I const& mousePos, MouseButton mouseButton) { +bool MainInterface::overlayClick(Vec2I const& mousePos, MouseButton mouseButton) { PolyI mainBarPoly = m_config->mainBarPoly; Vec2I barPos = mainBarPosition(); mainBarPoly.translate(barPos); @@ -1436,17 +1436,17 @@ void MainInterface::overlayClick(Vec2I const& mousePos, MouseButton mouseButton) if (overButton(m_config->mainBarInventoryButtonPoly, mousePos)) { m_paneManager.toggleRegisteredPane(MainInterfacePanes::Inventory); - return; + return true; } if (overButton(m_config->mainBarCraftButtonPoly, mousePos)) { togglePlainCraftingWindow(); - return; + return true; } if (overButton(m_config->mainBarCodexButtonPoly, mousePos)) { m_paneManager.toggleRegisteredPane(MainInterfacePanes::Codex); - return; + return true; } if (overButton(m_config->mainBarDeployButtonPoly, mousePos)) { @@ -1454,29 +1454,29 @@ void MainInterface::overlayClick(Vec2I const& mousePos, MouseButton mouseButton) warpToOrbitedWorld(true); else if (m_client->canBeamUp()) warpToOwnShip(); - return; + return true; } if (overButton(m_config->mainBarBeamButtonPoly, mousePos)) { if (m_client->canBeamDown()) warpToOrbitedWorld(); - return; + return true; } if (overButton(m_config->mainBarQuestLogButtonPoly, mousePos)) { m_paneManager.toggleRegisteredPane(MainInterfacePanes::QuestLog); - return; + return true; } if (overButton(m_config->mainBarMmUpgradeButtonPoly, mousePos)) { if (m_client->mainPlayer()->inventory()->essentialItem(EssentialItem::BeamAxe)) m_paneManager.toggleRegisteredPane(MainInterfacePanes::MmUpgrade); - return; + return true; } if (overButton(m_config->mainBarCollectionsButtonPoly, mousePos)) { m_paneManager.toggleRegisteredPane(MainInterfacePanes::Collections); - return; + return true; } if (mouseButton == MouseButton::Left) @@ -1485,6 +1485,8 @@ void MainInterface::overlayClick(Vec2I const& mousePos, MouseButton mouseButton) m_client->mainPlayer()->beginAltFire(); if (mouseButton == MouseButton::Middle) m_client->mainPlayer()->beginTrigger(); + + return false; } }
\ No newline at end of file diff --git a/source/frontend/StarMainInterface.hpp b/source/frontend/StarMainInterface.hpp index aae2890..403b250 100644 --- a/source/frontend/StarMainInterface.hpp +++ b/source/frontend/StarMainInterface.hpp @@ -135,7 +135,7 @@ private: bool overButton(PolyI buttonPoly, Vec2I const& mousePos) const; - void overlayClick(Vec2I const& mousePos, MouseButton mouseButton); + bool overlayClick(Vec2I const& mousePos, MouseButton mouseButton); GuiContext* m_guiContext; MainInterfaceConfigConstPtr m_config; diff --git a/source/frontend/StarOptionsMenu.cpp b/source/frontend/StarOptionsMenu.cpp index 1805a06..cef2e7d 100644 --- a/source/frontend/StarOptionsMenu.cpp +++ b/source/frontend/StarOptionsMenu.cpp @@ -7,6 +7,7 @@ #include "StarLabelWidget.hpp" #include "StarAssets.hpp" #include "StarKeybindingsMenu.hpp" +#include "StarBindingsMenu.hpp" #include "StarGraphicsMenu.hpp" namespace Star { @@ -48,11 +49,16 @@ OptionsMenu::OptionsMenu(PaneManager* manager) reader.registerCallback("showKeybindings", [=](Widget*) { displayControls(); }); + reader.registerCallback("showModBindings", [=](Widget*) { + displayModBindings(); + }); reader.registerCallback("showGraphics", [=](Widget*) { displayGraphics(); }); - reader.construct(assets->json("/interface/optionsmenu/optionsmenu.config:paneLayout"), this); + Json config = assets->json("/interface/optionsmenu/optionsmenu.config"); + + reader.construct(config.get("paneLayout"), this); m_sfxSlider = fetchChild<SliderBarWidget>("sfxSlider"); m_musicSlider = fetchChild<SliderBarWidget>("musicSlider"); @@ -68,6 +74,7 @@ OptionsMenu::OptionsMenu(PaneManager* manager) m_sfxSlider->setRange(m_sfxRange, assets->json("/interface/optionsmenu/optionsmenu.config:sfxDelta").toInt()); m_musicSlider->setRange(m_musicRange, assets->json("/interface/optionsmenu/optionsmenu.config:musicDelta").toInt()); + m_modBindingsMenu = make_shared<BindingsMenu>(assets->json(config.getString("bindingsPanePath", "/interface/opensb/bindings/bindings.config"))); m_keybindingsMenu = make_shared<KeybindingsMenu>(); m_graphicsMenu = make_shared<GraphicsMenu>(); @@ -162,6 +169,10 @@ void OptionsMenu::displayControls() { m_paneManager->displayPane(PaneLayer::ModalWindow, m_keybindingsMenu); } +void OptionsMenu::displayModBindings() { + m_paneManager->displayPane(PaneLayer::ModalWindow, m_modBindingsMenu); +} + void OptionsMenu::displayGraphics() { m_paneManager->displayPane(PaneLayer::ModalWindow, m_graphicsMenu); } diff --git a/source/frontend/StarOptionsMenu.hpp b/source/frontend/StarOptionsMenu.hpp index 14158be..bd8c4ba 100644 --- a/source/frontend/StarOptionsMenu.hpp +++ b/source/frontend/StarOptionsMenu.hpp @@ -12,7 +12,7 @@ STAR_CLASS(ButtonWidget); STAR_CLASS(LabelWidget); STAR_CLASS(KeybindingsMenu); STAR_CLASS(GraphicsMenu); - +STAR_CLASS(BindingsMenu); STAR_CLASS(OptionsMenu); class OptionsMenu : public Pane { @@ -38,6 +38,7 @@ private: void syncGuiToConf(); void displayControls(); + void displayModBindings(); void displayGraphics(); SliderBarWidgetPtr m_sfxSlider; @@ -58,6 +59,7 @@ private: JsonObject m_origConfig; JsonObject m_localChanges; + BindingsMenuPtr m_modBindingsMenu; KeybindingsMenuPtr m_keybindingsMenu; GraphicsMenuPtr m_graphicsMenu; PaneManager* m_paneManager; diff --git a/source/frontend/StarScriptPane.cpp b/source/frontend/StarScriptPane.cpp index e2e8a33..38659f1 100644 --- a/source/frontend/StarScriptPane.cpp +++ b/source/frontend/StarScriptPane.cpp @@ -20,64 +20,34 @@ namespace Star { -ScriptPane::ScriptPane(UniverseClientPtr client, Json config, EntityId sourceEntityId) { +ScriptPane::ScriptPane(UniverseClientPtr client, Json config, EntityId sourceEntityId) : BaseScriptPane(config) { auto& root = Root::singleton(); auto assets = root.assets(); m_client = move(client); - - if (config.type() == Json::Type::Object && config.contains("baseConfig")) { - auto baseConfig = assets->fetchJson(config.getString("baseConfig")); - m_config = jsonMerge(baseConfig, config); - } else { - m_config = assets->fetchJson(config); - } m_sourceEntityId = sourceEntityId; - m_reader.registerCallback("close", [this](Widget*) { dismiss(); }); - - for (auto const& callbackName : jsonToStringList(m_config.get("scriptWidgetCallbacks", JsonArray{}))) { - m_reader.registerCallback(callbackName, [this, callbackName](Widget* widget) { - m_script.invoke(callbackName, widget->name(), widget->data()); - }); - } - - m_reader.construct(assets->fetchJson(m_config.get("gui")), this); - - for (auto pair : m_config.getObject("canvasClickCallbacks", {})) - m_canvasClickCallbacks.set(findChild<CanvasWidget>(pair.first), pair.second.toString()); - for (auto pair : m_config.getObject("canvasKeyCallbacks", {})) - m_canvasKeyCallbacks.set(findChild<CanvasWidget>(pair.first), pair.second.toString()); - - m_script.setScripts(jsonToStringList(m_config.get("scripts", JsonArray()))); - m_script.addCallbacks("pane", makePaneCallbacks()); - m_script.addCallbacks("widget", LuaBindings::makeWidgetCallbacks(this, &m_reader)); - m_script.addCallbacks("config", LuaBindings::makeConfigCallbacks( [this](String const& name, Json const& def) { - return m_config.query(name, def); - })); m_script.addCallbacks("player", LuaBindings::makePlayerCallbacks(m_client->mainPlayer().get())); m_script.addCallbacks("status", LuaBindings::makeStatusControllerCallbacks(m_client->mainPlayer()->statusController())); m_script.addCallbacks("celestial", LuaBindings::makeCelestialCallbacks(m_client.get())); - m_script.setUpdateDelta(m_config.getUInt("scriptDelta", 1)); } void ScriptPane::displayed() { - Pane::displayed(); auto world = m_client->worldClient(); - if (world && world->inWorld()) - m_script.init(world.get()); - - m_script.invoke("displayed"); + if (world && world->inWorld()) { + m_script.setLuaRoot(world->luaRoot()); + m_script.addCallbacks("world", LuaBindings::makeWorldCallbacks(world.get())); + } + BaseScriptPane::displayed(); } void ScriptPane::dismissed() { - Pane::dismissed(); - m_script.invoke("dismissed"); - m_script.uninit(); + BaseScriptPane::dismissed(); + m_script.removeCallbacks("world"); } void ScriptPane::tick() { - Pane::tick(); + BaseScriptPane::tick(); if (m_sourceEntityId != NullEntityId && !m_client->worldClient()->playerCanReachEntity(m_sourceEntityId)) dismiss(); @@ -98,17 +68,6 @@ void ScriptPane::tick() { m_script.update(m_script.updateDt()); } -bool ScriptPane::sendEvent(InputEvent const& event) { - // Intercept GuiClose before the canvas child so GuiClose always closes - // ScriptPanes without having to support it in the script. - if (context()->actions(event).contains(InterfaceAction::GuiClose)) { - dismiss(); - return true; - } - - return Pane::sendEvent(event); -} - PanePtr ScriptPane::createTooltip(Vec2I const& screenPosition) { auto result = m_script.invoke<Json>("createTooltip", screenPosition); if (result && !result.value().isNull()) { @@ -133,61 +92,9 @@ PanePtr ScriptPane::createTooltip(Vec2I const& screenPosition) { } } -Maybe<String> ScriptPane::cursorOverride(Vec2I const& screenPosition) { - auto result = m_script.invoke<Maybe<String>>("cursorOverride", screenPosition); - if (result) - return *result; - else - return {}; -} - LuaCallbacks ScriptPane::makePaneCallbacks() { - LuaCallbacks callbacks; - + LuaCallbacks callbacks = BaseScriptPane::makePaneCallbacks(); callbacks.registerCallback("sourceEntity", [this]() { return m_sourceEntityId; }); - callbacks.registerCallback("dismiss", [this]() { dismiss(); }); - - callbacks.registerCallback("playSound", - [this](String const& audio, Maybe<int> loops, Maybe<float> volume) { - auto assets = Root::singleton().assets(); - auto config = Root::singleton().configuration(); - auto audioInstance = make_shared<AudioInstance>(*assets->audio(audio)); - audioInstance->setVolume(volume.value(1.0)); - audioInstance->setLoops(loops.value(0)); - auto& guiContext = GuiContext::singleton(); - guiContext.playAudio(audioInstance); - m_playingSounds.append({audio, move(audioInstance)}); - }); - - callbacks.registerCallback("stopAllSounds", [this](String const& audio) { - m_playingSounds.filter([audio](pair<String, AudioInstancePtr> const& p) { - if (p.first == audio) { - p.second->stop(); - return false; - } - return true; - }); - }); - - callbacks.registerCallback("setTitle", [this](String const& title, String const& subTitle) { - setTitleString(title, subTitle); - }); - - callbacks.registerCallback("setTitleIcon", [this](String const& image) { - if (auto icon = as<ImageWidget>(titleIcon())) - icon->setImage(image); - }); - - callbacks.registerCallback("addWidget", [this](Json const& newWidgetConfig, Maybe<String> const& newWidgetName) { - String name = newWidgetName.value(strf("{}", Random::randu64())); - WidgetPtr newWidget = m_reader.makeSingle(name, newWidgetConfig); - this->addChild(name, newWidget); - }); - - callbacks.registerCallback("removeWidget", [this](String const& widgetName) { - this->removeChild(widgetName); - }); - return callbacks; } diff --git a/source/frontend/StarScriptPane.hpp b/source/frontend/StarScriptPane.hpp index 1ba7ea0..d994b68 100644 --- a/source/frontend/StarScriptPane.hpp +++ b/source/frontend/StarScriptPane.hpp @@ -1,9 +1,7 @@ #ifndef STAR_SCRIPT_PANE_HPP #define STAR_SCRIPT_PANE_HPP -#include "StarPane.hpp" -#include "StarLuaComponents.hpp" -#include "StarGuiReader.hpp" +#include "StarBaseScriptPane.hpp" namespace Star { @@ -11,7 +9,7 @@ STAR_CLASS(CanvasWidget); STAR_CLASS(ScriptPane); STAR_CLASS(UniverseClient); -class ScriptPane : public Pane { +class ScriptPane : public BaseScriptPane { public: ScriptPane(UniverseClientPtr client, Json config, EntityId sourceEntityId = NullEntityId); @@ -20,28 +18,15 @@ public: void tick() override; - bool sendEvent(InputEvent const& event) override; - PanePtr createTooltip(Vec2I const& screenPosition) override; - Maybe<String> cursorOverride(Vec2I const& screenPosition) override; bool openWithInventory() const; private: - LuaCallbacks makePaneCallbacks(); + LuaCallbacks makePaneCallbacks() override; UniverseClientPtr m_client; EntityId m_sourceEntityId; - Json m_config; - - GuiReader m_reader; - - Map<CanvasWidgetPtr, String> m_canvasClickCallbacks; - Map<CanvasWidgetPtr, String> m_canvasKeyCallbacks; - - LuaWorldComponent<LuaUpdatableComponent<LuaBaseComponent>> m_script; - - List<pair<String, AudioInstancePtr>> m_playingSounds; }; } |