You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3mp/apps/openmw/mwvr/vrmetamenu.cpp

213 lines
5.5 KiB
C++

#include "vrmetamenu.hpp"
#include <MyGUI_InputManager.h>
#include "../mwbase/environment.hpp"
#include "../mwbase/windowmanager.hpp"
#include "../mwbase/world.hpp"
#include "../mwbase/statemanager.hpp"
/*
Start of tes3mp addition
Include additional headers for multiplayer purposes
*/
#include "../mwmp/Main.hpp"
#include "../mwmp/LocalPlayer.hpp"
#include "../mwmp/GUIController.hpp"
/*
End of tes3mp addition
*/
#include "vrenvironment.hpp"
#include "vrinputmanager.hpp"
namespace MWVR
{
VrMetaMenu::VrMetaMenu(int w, int h)
: WindowBase("openmw_vr_metamenu.layout")
, mWidth (w)
, mHeight (h)
{
updateMenu();
}
VrMetaMenu::~VrMetaMenu()
{
}
void VrMetaMenu::onResChange(int w, int h)
{
mWidth = w;
mHeight = h;
updateMenu();
}
void VrMetaMenu::setVisible (bool visible)
{
if (visible)
updateMenu();
MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mButtons["return"]);
Layout::setVisible (visible);
}
void VrMetaMenu::onFrame(float dt)
{
}
void VrMetaMenu::onConsole()
{
if (MyGUI::InputManager::getInstance().isModalAny())
return;
/*
Start of tes3mp addition
If a player's console is disabled by the server, send them a message about it and go no further
*/
if (!mwmp::Main::get().getLocalPlayer()->consoleAllowed)
{
MWBase::Environment::get().getWindowManager()->messageBox("You do not have permission to use that.");
return;
}
/*
End of tes3mp addition
*/
MWBase::Environment::get().getWindowManager()->toggleConsole();
}
void VrMetaMenu::onGameMenu()
{
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_MainMenu);
}
void VrMetaMenu::onJournal()
{
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Journal);
}
void VrMetaMenu::onInventory()
{
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Inventory);
}
void VrMetaMenu::onRest()
{
if (!MWBase::Environment::get().getWindowManager()->getRestEnabled() || MWBase::Environment::get().getWindowManager()->isGuiMode())
return;
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Rest); //Open rest GUI
}
void VrMetaMenu::onQuickMenu()
{
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_QuickKeysMenu);
}
void VrMetaMenu::onQuickLoad()
{
if (!MyGUI::InputManager::getInstance().isModalAny())
MWBase::Environment::get().getStateManager()->quickLoad();
}
void VrMetaMenu::onQuickSave()
{
if (!MyGUI::InputManager::getInstance().isModalAny())
MWBase::Environment::get().getStateManager()->quickSave();
}
void VrMetaMenu::onRecenter()
{
Environment::get().getInputManager()->requestRecenter(true);
}
/*
Start of tes3mp addition
Handle a button toggling the display mode of the Chat window
*/
void VrMetaMenu::onChatMode()
{
mwmp::Main::get().getGUIController()->changeChatMode();
}
/*
End of tes3mp addition
*/
void VrMetaMenu::close()
{
MWBase::Environment::get().getWindowManager()->removeGuiMode(MWGui::GM_VrMetaMenu);
}
void VrMetaMenu::onButtonClicked(MyGUI::Widget *sender)
{
std::string name = *sender->getUserData<std::string>();
close();
if (name == "console")
onConsole();
else if (name == "gamemenu")
onGameMenu();
else if (name == "journal")
onJournal();
else if (name == "inventory")
onInventory();
else if (name == "rest")
onRest();
else if (name == "quickmenu")
onQuickMenu();
else if (name == "quickload")
onQuickLoad();
else if (name == "quicksave")
onQuickSave();
else if (name == "recenter")
onRecenter();
/*
Start of tes3mp addition
Handle a button toggling the display mode of the Chat window
*/
else if (name == "chat")
onChatMode();
/*
End of tes3mp addition
*/
}
bool VrMetaMenu::exit()
{
return MWBase::Environment::get().getStateManager()->getState() == MWBase::StateManager::State_Running;
}
void VrMetaMenu::updateMenu()
{
/*
Start of tes3mp change (major)
Add "chat" to the list of buttons
*/
static std::vector<std::string> buttons{ "return", "recenter", "quicksave", "quickload", "console", "inventory", "journal", "rest", "quickmenu", "gamemenu", "chat" };
/*
End of tes3mp change (major)
*/
if(mButtons.empty())
for (std::string& buttonId : buttons)
{
MyGUI::Button* button = nullptr;
getWidget(button, buttonId);
if (!button)
throw std::logic_error( std::string() + "Unable to find button \"" + buttonId + "\"");
button->eventMouseButtonClick += MyGUI::newDelegate(this, &VrMetaMenu::onButtonClicked);
button->setUserData(std::string(buttonId));
button->setVisible(true);
mButtons[buttonId] = button;
}
}
}