From b28ef790ea54ac75be3cc4937525ceacbc8656fc Mon Sep 17 00:00:00 2001 From: Vladimir Krasheninnikov Date: Sat, 22 Feb 2025 13:37:27 +0100 Subject: Create CharacterSwap pane --- source/frontend/StarMainInterface.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'source/frontend/StarMainInterface.cpp') diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index 8468f7f..e3b28eb 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -57,6 +57,7 @@ #include "StarContainerInteractor.hpp" #include "StarChatBubbleManager.hpp" #include "StarNpc.hpp" +#include "StarCharSelection.hpp" namespace Star { @@ -168,6 +169,14 @@ MainInterface::MainInterface(UniverseClientPtr client, WorldPainterPtr painter, planetName->addChild("planetText", m_planetText); m_paneManager.registerPane(MainInterfacePanes::PlanetText, PaneLayer::Hud, planetName); + auto charSelectionMenu = make_shared(m_client->playerStorage(), [=]() {}, [=](PlayerPtr mainPlayer) { + m_client->playerStorage()->moveToFront(mainPlayer->uuid()); + m_client->switchPlayer(mainPlayer->name()); + m_paneManager.dismissRegisteredPane(MainInterfacePanes::CharacterSwap); }, [=](Uuid) {}); + charSelectionMenu->setAnchor(PaneAnchor::Center); + + m_paneManager.registerPane(MainInterfacePanes::CharacterSwap, PaneLayer::ModalWindow, charSelectionMenu); + m_nameplatePainter = make_shared(); m_questIndicatorPainter = make_shared(m_client); m_chatBubbleManager = make_shared(); -- cgit v1.2.3 From d0b15c335d9bf8b915e82d230a757671180bf80a Mon Sep 17 00:00:00 2001 From: Vladimir Krasheninnikov Date: Sat, 22 Feb 2025 19:27:09 +0100 Subject: Use UUID instead of names --- source/frontend/StarMainInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/frontend/StarMainInterface.cpp') diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index e3b28eb..320cd4f 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -171,7 +171,7 @@ MainInterface::MainInterface(UniverseClientPtr client, WorldPainterPtr painter, auto charSelectionMenu = make_shared(m_client->playerStorage(), [=]() {}, [=](PlayerPtr mainPlayer) { m_client->playerStorage()->moveToFront(mainPlayer->uuid()); - m_client->switchPlayer(mainPlayer->name()); + m_client->switchPlayer(mainPlayer->uuid()); m_paneManager.dismissRegisteredPane(MainInterfacePanes::CharacterSwap); }, [=](Uuid) {}); charSelectionMenu->setAnchor(PaneAnchor::Center); -- cgit v1.2.3 From 61cefb79a1fb5ccf0be73aff23af5a6e79ad79c4 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Sun, 23 Feb 2025 06:19:13 +1100 Subject: remove unusable buttons, make configurable and draggable [skip ci] --- source/base/StarConfiguration.cpp | 8 ++++---- source/base/StarConfiguration.hpp | 4 ++-- source/frontend/StarCharSelection.cpp | 14 +++++++++++--- source/frontend/StarCharSelection.hpp | 2 ++ source/frontend/StarMainInterface.cpp | 22 +++++++++++++++++----- source/windowing/StarLargeCharPlateWidget.cpp | 2 +- 6 files changed, 37 insertions(+), 15 deletions(-) (limited to 'source/frontend/StarMainInterface.cpp') diff --git a/source/base/StarConfiguration.cpp b/source/base/StarConfiguration.cpp index 89ec7fa..1d888a0 100644 --- a/source/base/StarConfiguration.cpp +++ b/source/base/StarConfiguration.cpp @@ -21,14 +21,14 @@ String Configuration::printConfiguration() const { return m_currentConfig.printJson(2, true); } -Json Configuration::get(String const& key) const { +Json Configuration::get(String const& key, Json def) const { MutexLocker locker(m_mutex); - return m_currentConfig.get(key, {}); + return m_currentConfig.get(key, def); } -Json Configuration::getPath(String const& path) const { +Json Configuration::getPath(String const& path, Json def) const { MutexLocker locker(m_mutex); - return m_currentConfig.query(path, {}); + return m_currentConfig.query(path, def); } Json Configuration::getDefault(String const& key) const { diff --git a/source/base/StarConfiguration.hpp b/source/base/StarConfiguration.hpp index ffa66c3..4f5d97c 100644 --- a/source/base/StarConfiguration.hpp +++ b/source/base/StarConfiguration.hpp @@ -18,8 +18,8 @@ public: Json currentConfiguration() const; String printConfiguration() const; - Json get(String const& key) const; - Json getPath(String const& path) const; + Json get(String const& key, Json def = {}) const; + Json getPath(String const& path, Json def = {}) const; Json getDefault(String const& key) const; Json getDefaultPath(String const& path) const; diff --git a/source/frontend/StarCharSelection.cpp b/source/frontend/StarCharSelection.cpp index 6cbfb9b..6a61dcf 100644 --- a/source/frontend/StarCharSelection.cpp +++ b/source/frontend/StarCharSelection.cpp @@ -37,8 +37,7 @@ CharSelectionPane::CharSelectionPane(PlayerStoragePtr playerStorage, updateCharacterPlates(); }); guiReader.registerCallback("clearSearch", [=](Widget*) { - auto searchCharacter = fetchChild("searchCharacter"); - searchCharacter->setText(""); + fetchChild("searchCharacter")->setText(""); }); guiReader.construct(root.assets()->json("/interface/windowconfig/charselection.config"), this); @@ -63,6 +62,7 @@ void CharSelectionPane::show() { Pane::show(); m_downScroll = 0; + fetchChild("searchCharacter")->setText(""); updateCharacterPlates(); } @@ -96,14 +96,18 @@ void CharSelectionPane::updateCharacterPlates() { if (m_filteredList.size() > 0 && scrollPosition < m_filteredList.size()) { auto playerUuid = m_filteredList.get(scrollPosition); if (auto player = m_playerStorage->loadPlayer(playerUuid)) { + charSelector->show(); player->humanoid()->setFacingDirection(Direction::Right); charSelector->setPlayer(player); - charSelector->enableDelete([this, playerUuid](Widget*) { m_deleteCallback(playerUuid); }); + if (!m_readOnly) + charSelector->enableDelete([this, playerUuid](Widget*) { m_deleteCallback(playerUuid); }); return; } } charSelector->setPlayer(PlayerPtr()); charSelector->disableDelete(); + if (m_readOnly) + charSelector->hide(); }; updatePlayerLine("charSelector1", m_downScroll + 0); @@ -122,4 +126,8 @@ void CharSelectionPane::updateCharacterPlates() { fetchChild("playerDownButton")->hide(); } +void CharSelectionPane::setReadOnly(bool readOnly) { + findChild("createCharButton")->setVisibility(!(m_readOnly = readOnly)); +} + } diff --git a/source/frontend/StarCharSelection.hpp b/source/frontend/StarCharSelection.hpp index b4837ca..eb4d906 100644 --- a/source/frontend/StarCharSelection.hpp +++ b/source/frontend/StarCharSelection.hpp @@ -19,6 +19,7 @@ public: bool sendEvent(InputEvent const& event) override; void show() override; void updateCharacterPlates(); + void setReadOnly(bool readOnly); private: void shiftCharacters(int movement); @@ -28,6 +29,7 @@ private: unsigned m_downScroll; String m_search; List m_filteredList; + bool m_readOnly = false; CreateCharCallback m_createCallback; SelectCharacterCallback m_selectCallback; diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index 320cd4f..2b2bb5f 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -169,11 +169,23 @@ MainInterface::MainInterface(UniverseClientPtr client, WorldPainterPtr painter, planetName->addChild("planetText", m_planetText); m_paneManager.registerPane(MainInterfacePanes::PlanetText, PaneLayer::Hud, planetName); - auto charSelectionMenu = make_shared(m_client->playerStorage(), [=]() {}, [=](PlayerPtr mainPlayer) { - m_client->playerStorage()->moveToFront(mainPlayer->uuid()); - m_client->switchPlayer(mainPlayer->uuid()); - m_paneManager.dismissRegisteredPane(MainInterfacePanes::CharacterSwap); }, [=](Uuid) {}); - charSelectionMenu->setAnchor(PaneAnchor::Center); + auto charSelectionMenu = make_shared(m_client->playerStorage(), [=]() {}, + [=](PlayerPtr mainPlayer) { + auto configuration = Root::singleton().configuration(); + if (configuration->get("characterSwapMovesToFront", false).toBool()) + m_client->playerStorage()->moveToFront(mainPlayer->uuid()); + if (configuration->get("characterSwapDismisses", false).toBool()) + m_paneManager.dismissRegisteredPane(MainInterfacePanes::CharacterSwap); + m_client->switchPlayer(mainPlayer->uuid()); + }, [=](Uuid) {}); + { + charSelectionMenu->setReadOnly(true); + charSelectionMenu->setAnchor(PaneAnchor::Center); + charSelectionMenu->unlockPosition(); + auto backgrounds = charSelectionMenu->getBG(); + backgrounds.header = std::move(backgrounds.body); + charSelectionMenu->setBG(backgrounds); + } m_paneManager.registerPane(MainInterfacePanes::CharacterSwap, PaneLayer::ModalWindow, charSelectionMenu); diff --git a/source/windowing/StarLargeCharPlateWidget.cpp b/source/windowing/StarLargeCharPlateWidget.cpp index 5088f73..eb6c438 100644 --- a/source/windowing/StarLargeCharPlateWidget.cpp +++ b/source/windowing/StarLargeCharPlateWidget.cpp @@ -171,7 +171,7 @@ void LargeCharPlateWidget::update(float dt) { return; auto humanoid = m_player->humanoid(); - if (m_delete->isHovered()) { + if (m_delete && m_delete->isHovered()) { humanoid->setEmoteState(HumanoidEmote::Sad); humanoid->setState(Humanoid::Run); } else { -- cgit v1.2.3 From 2b7d7cbdd88d97b581cbd283ffddb128df91ea73 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Sun, 23 Feb 2025 06:22:09 +1100 Subject: Update StarMainInterface.cpp --- source/frontend/StarMainInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/frontend/StarMainInterface.cpp') diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index 2b2bb5f..033e1c9 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -171,12 +171,12 @@ MainInterface::MainInterface(UniverseClientPtr client, WorldPainterPtr painter, auto charSelectionMenu = make_shared(m_client->playerStorage(), [=]() {}, [=](PlayerPtr mainPlayer) { + m_client->switchPlayer(mainPlayer->uuid()); auto configuration = Root::singleton().configuration(); if (configuration->get("characterSwapMovesToFront", false).toBool()) m_client->playerStorage()->moveToFront(mainPlayer->uuid()); if (configuration->get("characterSwapDismisses", false).toBool()) m_paneManager.dismissRegisteredPane(MainInterfacePanes::CharacterSwap); - m_client->switchPlayer(mainPlayer->uuid()); }, [=](Uuid) {}); { charSelectionMenu->setReadOnly(true); -- cgit v1.2.3 From 5dda9f47306a6eea5eb4e676c68f81b8285d9dfe Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Sun, 23 Feb 2025 09:03:38 +1100 Subject: add dismiss on swap checkbox --- .../windowconfig/charselection.config.patch | 21 ++++++++++++++++++- source/frontend/StarCharSelection.cpp | 4 ++++ source/frontend/StarMainInterface.cpp | 24 +++++++++++++--------- 3 files changed, 38 insertions(+), 11 deletions(-) (limited to 'source/frontend/StarMainInterface.cpp') diff --git a/assets/opensb/interface/windowconfig/charselection.config.patch b/assets/opensb/interface/windowconfig/charselection.config.patch index d38f03a..63a01db 100644 --- a/assets/opensb/interface/windowconfig/charselection.config.patch +++ b/assets/opensb/interface/windowconfig/charselection.config.patch @@ -1,4 +1,23 @@ { + "toggleDismissCheckbox": { + "type": "button", + "base" : "/interface/optionsmenu/checkboxnocheck.png", + "hover" : "/interface/optionsmenu/checkboxnocheckhover.png", + "baseImageChecked" : "/interface/optionsmenu/checkboxcheck.png", + "hoverImageChecked" : "/interface/optionsmenu/checkboxcheckhover.png", + "checkable" : true, + "checked" : false, + "position": [ 23, 244 ], + "pressedOffset": [ 0, 0 ], + "visible" : false + }, + "toggleDismissLabel": { + "type" : "label", + "position" : [ 35, 244 ], + "hAnchor" : "left", + "value" : "DISMISS ON SWAP", + "visible" : false + }, "createCharButton": { "type": "button", "base": "/interface/title/createcharacter.png", @@ -10,7 +29,7 @@ "type": "textbox", "hint": "Search...", "position": [ 130, 244 ], - "maxWidth": 68 + "maxWidth": 69 }, "clearSearch": { "type": "button", diff --git a/source/frontend/StarCharSelection.cpp b/source/frontend/StarCharSelection.cpp index 6a61dcf..2c00b42 100644 --- a/source/frontend/StarCharSelection.cpp +++ b/source/frontend/StarCharSelection.cpp @@ -39,6 +39,10 @@ CharSelectionPane::CharSelectionPane(PlayerStoragePtr playerStorage, guiReader.registerCallback("clearSearch", [=](Widget*) { fetchChild("searchCharacter")->setText(""); }); + guiReader.registerCallback("toggleDismissCheckbox", [=](Widget* widget) { + auto configuration = Root::singleton().configuration(); + configuration->set("characterSwapDismisses", as(widget)->isChecked()); + }); guiReader.construct(root.assets()->json("/interface/windowconfig/charselection.config"), this); } diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index 033e1c9..e3b1860 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -27,6 +27,7 @@ #include "StarCanvasWidget.hpp" #include "StarLabelWidget.hpp" #include "StarItemSlotWidget.hpp" +#include "StarButtonWidget.hpp" #include "StarPlayer.hpp" #include "StarPlayerLog.hpp" #include "StarMonster.hpp" @@ -178,16 +179,19 @@ MainInterface::MainInterface(UniverseClientPtr client, WorldPainterPtr painter, if (configuration->get("characterSwapDismisses", false).toBool()) m_paneManager.dismissRegisteredPane(MainInterfacePanes::CharacterSwap); }, [=](Uuid) {}); - { - charSelectionMenu->setReadOnly(true); - charSelectionMenu->setAnchor(PaneAnchor::Center); - charSelectionMenu->unlockPosition(); - auto backgrounds = charSelectionMenu->getBG(); - backgrounds.header = std::move(backgrounds.body); - charSelectionMenu->setBG(backgrounds); - } - - m_paneManager.registerPane(MainInterfacePanes::CharacterSwap, PaneLayer::ModalWindow, charSelectionMenu); + charSelectionMenu->setReadOnly(true); + charSelectionMenu->setAnchor(PaneAnchor::Center); + charSelectionMenu->unlockPosition(); + auto backgrounds = charSelectionMenu->getBG(); + backgrounds.header = std::move(backgrounds.body); + charSelectionMenu->setBG(backgrounds); + charSelectionMenu->findChild("toggleDismissLabel")->setVisibility(true); + auto toggleDismiss = charSelectionMenu->findChild("toggleDismissCheckbox"); + auto configuration = Root::singleton().configuration(); + toggleDismiss->setChecked(configuration->get("characterSwapDismisses", false).toBool()); + toggleDismiss->setVisibility(true); + + m_paneManager.registerPane(MainInterfacePanes::CharacterSwap, PaneLayer::Window, charSelectionMenu); m_nameplatePainter = make_shared(); m_questIndicatorPainter = make_shared(m_client); -- cgit v1.2.3