ScriptPanes can specify paneLayer and interactive
This commit is contained in:
parent
057f3727de
commit
ffd1507f72
@ -24,7 +24,8 @@ BaseScriptPane::BaseScriptPane(Json config) : Pane(), m_rawConfig(config) {
|
|||||||
} else {
|
} else {
|
||||||
m_config = assets->fetchJson(config);
|
m_config = assets->fetchJson(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_interactive = config.getBool("interactive", true);
|
||||||
m_reader = make_shared<GuiReader>();
|
m_reader = make_shared<GuiReader>();
|
||||||
m_reader->registerCallback("close", [this](Widget*) { dismiss(); });
|
m_reader->registerCallback("close", [this](Widget*) { dismiss(); });
|
||||||
|
|
||||||
@ -100,6 +101,8 @@ bool BaseScriptPane::sendEvent(InputEvent const& event) {
|
|||||||
Json const& BaseScriptPane::config() const { return m_config; }
|
Json const& BaseScriptPane::config() const { return m_config; }
|
||||||
Json const& BaseScriptPane::rawConfig() const { return m_rawConfig; }
|
Json const& BaseScriptPane::rawConfig() const { return m_rawConfig; }
|
||||||
|
|
||||||
|
bool BaseScriptPane::interactive() const { return m_interactive; }
|
||||||
|
|
||||||
PanePtr BaseScriptPane::createTooltip(Vec2I const& screenPosition) {
|
PanePtr BaseScriptPane::createTooltip(Vec2I const& screenPosition) {
|
||||||
auto result = m_script.invoke<Json>("createTooltip", screenPosition);
|
auto result = m_script.invoke<Json>("createTooltip", screenPosition);
|
||||||
if (result && !result.value().isNull()) {
|
if (result && !result.value().isNull()) {
|
||||||
|
@ -29,6 +29,8 @@ public:
|
|||||||
Json const& config() const;
|
Json const& config() const;
|
||||||
Json const& rawConfig() const;
|
Json const& rawConfig() const;
|
||||||
|
|
||||||
|
bool interactive() const override;
|
||||||
|
|
||||||
PanePtr createTooltip(Vec2I const& screenPosition) override;
|
PanePtr createTooltip(Vec2I const& screenPosition) override;
|
||||||
Maybe<String> cursorOverride(Vec2I const& screenPosition) override;
|
Maybe<String> cursorOverride(Vec2I const& screenPosition) override;
|
||||||
protected:
|
protected:
|
||||||
@ -41,6 +43,8 @@ protected:
|
|||||||
Map<CanvasWidgetPtr, String> m_canvasClickCallbacks;
|
Map<CanvasWidgetPtr, String> m_canvasClickCallbacks;
|
||||||
Map<CanvasWidgetPtr, String> m_canvasKeyCallbacks;
|
Map<CanvasWidgetPtr, String> m_canvasKeyCallbacks;
|
||||||
|
|
||||||
|
bool m_interactive;
|
||||||
|
|
||||||
bool m_callbacksAdded;
|
bool m_callbacksAdded;
|
||||||
LuaUpdatableComponent<LuaBaseComponent> m_script;
|
LuaUpdatableComponent<LuaBaseComponent> m_script;
|
||||||
};
|
};
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
namespace Star {
|
namespace Star {
|
||||||
|
|
||||||
JoinRequestDialog::JoinRequestDialog() {}
|
JoinRequestDialog::JoinRequestDialog() : m_confirmed(false) {}
|
||||||
|
|
||||||
void JoinRequestDialog::displayRequest(String const& userName, function<void(P2PJoinRequestReply)> callback) {
|
void JoinRequestDialog::displayRequest(String const& userName, function<void(P2PJoinRequestReply)> callback) {
|
||||||
auto assets = Root::singleton().assets();
|
auto assets = Root::singleton().assets();
|
||||||
|
@ -1565,8 +1565,12 @@ void MainInterface::displayScriptPane(ScriptPanePtr& scriptPane, EntityId source
|
|||||||
if (sourceEntity != NullEntityId)
|
if (sourceEntity != NullEntityId)
|
||||||
m_interactionScriptPanes[sourceEntity] = scriptPane;
|
m_interactionScriptPanes[sourceEntity] = scriptPane;
|
||||||
|
|
||||||
|
PaneLayer layer = PaneLayer::Window;
|
||||||
|
if (auto layerName = scriptPane->config().optString("paneLayer"))
|
||||||
|
layer = PaneLayerNames.getLeft(*layerName);
|
||||||
|
|
||||||
if (scriptPane->openWithInventory()) {
|
if (scriptPane->openWithInventory()) {
|
||||||
m_paneManager.displayPane(PaneLayer::Window, scriptPane, [this](PanePtr const&) {
|
m_paneManager.displayPane(layer, scriptPane, [this](PanePtr const&) {
|
||||||
if (auto player = m_client->mainPlayer())
|
if (auto player = m_client->mainPlayer())
|
||||||
player->clearSwap();
|
player->clearSwap();
|
||||||
m_paneManager.dismissRegisteredPane(MainInterfacePanes::Inventory);
|
m_paneManager.dismissRegisteredPane(MainInterfacePanes::Inventory);
|
||||||
@ -1575,7 +1579,7 @@ void MainInterface::displayScriptPane(ScriptPanePtr& scriptPane, EntityId source
|
|||||||
m_paneManager.bringPaneAdjacent(m_paneManager.registeredPane(MainInterfacePanes::Inventory),
|
m_paneManager.bringPaneAdjacent(m_paneManager.registeredPane(MainInterfacePanes::Inventory),
|
||||||
scriptPane, Root::singleton().assets()->json("/interface.config:bringAdjacentWindowGap").toFloat());
|
scriptPane, Root::singleton().assets()->json("/interface.config:bringAdjacentWindowGap").toFloat());
|
||||||
} else {
|
} else {
|
||||||
m_paneManager.displayPane(PaneLayer::Window, scriptPane);
|
m_paneManager.displayPane(layer, scriptPane);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,14 @@
|
|||||||
|
|
||||||
namespace Star {
|
namespace Star {
|
||||||
|
|
||||||
|
EnumMap<PaneLayer> const PaneLayerNames{
|
||||||
|
{PaneLayer::Tooltip, "Tooltip"},
|
||||||
|
{PaneLayer::ModalWindow, "ModalWindow"},
|
||||||
|
{PaneLayer::Window, "Window"},
|
||||||
|
{PaneLayer::Hud, "Hud"},
|
||||||
|
{PaneLayer::World, "World"}
|
||||||
|
};
|
||||||
|
|
||||||
PaneManager::PaneManager()
|
PaneManager::PaneManager()
|
||||||
: m_context(GuiContext::singletonPtr()), m_prevInterfaceScale(1) {
|
: m_context(GuiContext::singletonPtr()), m_prevInterfaceScale(1) {
|
||||||
auto assets = Root::singleton().assets();
|
auto assets = Root::singleton().assets();
|
||||||
@ -350,24 +358,34 @@ Vec2I PaneManager::calculateNewInterfacePosition(PanePtr const& pane, float inte
|
|||||||
switch (pane->anchor()) {
|
switch (pane->anchor()) {
|
||||||
case PaneAnchor::None:
|
case PaneAnchor::None:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, Vec2F(windowSize()) / 2);
|
scale = Mat3F::scaling(interfaceScaleRatio, Vec2F(windowSize()) / 2);
|
||||||
|
break;
|
||||||
case PaneAnchor::BottomLeft:
|
case PaneAnchor::BottomLeft:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio);
|
scale = Mat3F::scaling(interfaceScaleRatio);
|
||||||
|
break;
|
||||||
case PaneAnchor::BottomRight:
|
case PaneAnchor::BottomRight:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, {size[0], 0});
|
scale = Mat3F::scaling(interfaceScaleRatio, {size[0], 0});
|
||||||
|
break;
|
||||||
case PaneAnchor::TopLeft:
|
case PaneAnchor::TopLeft:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, {0, size[1]});
|
scale = Mat3F::scaling(interfaceScaleRatio, {0, size[1]});
|
||||||
|
break;
|
||||||
case PaneAnchor::TopRight:
|
case PaneAnchor::TopRight:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, size);
|
scale = Mat3F::scaling(interfaceScaleRatio, size);
|
||||||
|
break;
|
||||||
case PaneAnchor::CenterTop:
|
case PaneAnchor::CenterTop:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, {size[0] / 2, size[1]});
|
scale = Mat3F::scaling(interfaceScaleRatio, {size[0] / 2, size[1]});
|
||||||
|
break;
|
||||||
case PaneAnchor::CenterBottom:
|
case PaneAnchor::CenterBottom:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, {size[0] / 2, 0});
|
scale = Mat3F::scaling(interfaceScaleRatio, {size[0] / 2, 0});
|
||||||
|
break;
|
||||||
case PaneAnchor::CenterLeft:
|
case PaneAnchor::CenterLeft:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, {0, size[1] / 2});
|
scale = Mat3F::scaling(interfaceScaleRatio, {0, size[1] / 2});
|
||||||
|
break;
|
||||||
case PaneAnchor::CenterRight:
|
case PaneAnchor::CenterRight:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, {size[0], size[1] / 2});
|
scale = Mat3F::scaling(interfaceScaleRatio, {size[0], size[1] / 2});
|
||||||
|
break;
|
||||||
case PaneAnchor::Center:
|
case PaneAnchor::Center:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, size / 2);
|
scale = Mat3F::scaling(interfaceScaleRatio, size / 2);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
scale = Mat3F::scaling(interfaceScaleRatio, Vec2F(windowSize()) / 2);
|
scale = Mat3F::scaling(interfaceScaleRatio, Vec2F(windowSize()) / 2);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "StarPane.hpp"
|
#include "StarPane.hpp"
|
||||||
#include "StarOrderedMap.hpp"
|
#include "StarOrderedMap.hpp"
|
||||||
|
#include "StarBiMap.hpp"
|
||||||
|
|
||||||
namespace Star {
|
namespace Star {
|
||||||
|
|
||||||
@ -25,6 +26,8 @@ enum class PaneLayer {
|
|||||||
// handled by GUI panes (such as wires)
|
// handled by GUI panes (such as wires)
|
||||||
World
|
World
|
||||||
};
|
};
|
||||||
|
extern EnumMap<PaneLayer> const PaneLayerNames;
|
||||||
|
|
||||||
|
|
||||||
// This class handles a set of panes to be drawn as a collective windowing
|
// This class handles a set of panes to be drawn as a collective windowing
|
||||||
// interface. It is a set of panes on separate distinct layers, where each
|
// interface. It is a set of panes on separate distinct layers, where each
|
||||||
|
Loading…
Reference in New Issue
Block a user