"reset to defaults" button, invert y axis button

actorid
scrawl 13 years ago
parent bc6e4feedc
commit c7b8787c32

@ -37,6 +37,7 @@ namespace MWBase
virtual std::vector<int> getActionSorting () = 0; virtual std::vector<int> getActionSorting () = 0;
virtual int getNumActions() = 0; virtual int getNumActions() = 0;
virtual void enableDetectingBindingMode (int action) = 0; virtual void enableDetectingBindingMode (int action) = 0;
virtual void resetToDefaultBindings() = 0;
}; };
} }

@ -116,7 +116,10 @@ namespace MWGui
getWidget(mShadowsDebug, "ShadowsDebug"); getWidget(mShadowsDebug, "ShadowsDebug");
getWidget(mUnderwaterButton, "UnderwaterButton"); getWidget(mUnderwaterButton, "UnderwaterButton");
getWidget(mControlsBox, "ControlsBox"); getWidget(mControlsBox, "ControlsBox");
getWidget(mResetControlsButton, "ResetControlsButton");
getWidget(mInvertYButton, "InvertYButton");
mInvertYButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onOkButtonClicked); mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onOkButtonClicked);
mUnderwaterButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled); mUnderwaterButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled);
mShadersButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onShadersToggled); mShadersButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onShadersToggled);
@ -155,6 +158,9 @@ namespace MWGui
mOkButton->setCoord(mMainWidget->getWidth()-16-okSize, mOkButton->getTop(), mOkButton->setCoord(mMainWidget->getWidth()-16-okSize, mOkButton->getTop(),
okSize, mOkButton->getHeight()); okSize, mOkButton->getHeight());
mResetControlsButton->setSize (mResetControlsButton->getTextSize ().width + 24, mResetControlsButton->getHeight());
mResetControlsButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onResetDefaultBindings);
// fill resolution list // fill resolution list
Ogre::RenderSystem* rs = Ogre::Root::getSingleton().getRenderSystem(); Ogre::RenderSystem* rs = Ogre::Root::getSingleton().getRenderSystem();
Ogre::StringVector videoModes = rs->getConfigOptions()["Video Mode"].possibleValues; Ogre::StringVector videoModes = rs->getConfigOptions()["Video Mode"].possibleValues;
@ -220,6 +226,8 @@ namespace MWGui
mMiscShadows->setCaptionWithReplacing(Settings::Manager::getBool("misc shadows", "Shadows") ? "#{sOn}" : "#{sOff}"); mMiscShadows->setCaptionWithReplacing(Settings::Manager::getBool("misc shadows", "Shadows") ? "#{sOn}" : "#{sOff}");
mShadowsDebug->setCaptionWithReplacing(Settings::Manager::getBool("debug", "Shadows") ? "#{sOn}" : "#{sOff}"); mShadowsDebug->setCaptionWithReplacing(Settings::Manager::getBool("debug", "Shadows") ? "#{sOn}" : "#{sOff}");
mInvertYButton->setCaptionWithReplacing(Settings::Manager::getBool("invert y axis", "Input") ? "#{sOn}" : "#{sOff}");
std::string shaders; std::string shaders;
if (!Settings::Manager::getBool("shaders", "Objects")) if (!Settings::Manager::getBool("shaders", "Objects"))
shaders = "off"; shaders = "off";
@ -383,6 +391,8 @@ namespace MWGui
Settings::Manager::setBool("misc shadows", "Shadows", newState); Settings::Manager::setBool("misc shadows", "Shadows", newState);
else if (_sender == mShadowsDebug) else if (_sender == mShadowsDebug)
Settings::Manager::setBool("debug", "Shadows", newState); Settings::Manager::setBool("debug", "Shadows", newState);
else if (_sender == mInvertYButton)
Settings::Manager::setBool("invert y axis", "Input", newState);
apply(); apply();
} }
@ -521,8 +531,8 @@ namespace MWGui
std::vector<int> actions = MWBase::Environment::get().getInputManager()->getActionSorting (); std::vector<int> actions = MWBase::Environment::get().getInputManager()->getActionSorting ();
const int h = 18; const int h = 18;
const int w = mControlsBox->getWidth() - 34; const int w = mControlsBox->getWidth() - 28;
int curH = 6; int curH = 0;
for (std::vector<int>::const_iterator it = actions.begin(); it != actions.end(); ++it) for (std::vector<int>::const_iterator it = actions.begin(); it != actions.end(); ++it)
{ {
std::string desc = MWBase::Environment::get().getInputManager()->getActionDescription (*it); std::string desc = MWBase::Environment::get().getInputManager()->getActionDescription (*it);
@ -539,6 +549,7 @@ namespace MWGui
rightText->setTextAlign (MyGUI::Align::Right); rightText->setTextAlign (MyGUI::Align::Right);
rightText->setUserData(*it); // save the action id for callbacks rightText->setUserData(*it); // save the action id for callbacks
rightText->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onRebindAction); rightText->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onRebindAction);
rightText->eventMouseWheel += MyGUI::newDelegate(this, &SettingsWindow::onInputTabMouseWheel);
curH += h; curH += h;
} }
@ -558,6 +569,29 @@ namespace MWGui
} }
void SettingsWindow::onInputTabMouseWheel(MyGUI::Widget* _sender, int _rel)
{
if (mControlsBox->getViewOffset().top + _rel*0.3 > 0)
mControlsBox->setViewOffset(MyGUI::IntPoint(0, 0));
else
mControlsBox->setViewOffset(MyGUI::IntPoint(0, mControlsBox->getViewOffset().top + _rel*0.3));
}
void SettingsWindow::onResetDefaultBindings(MyGUI::Widget* _sender)
{
ConfirmationDialog* dialog = mWindowManager.getConfirmationDialog();
dialog->open("#{sNotifyMessage66}");
dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &SettingsWindow::onResetDefaultBindingsAccept);
dialog->eventCancelClicked.clear();
}
void SettingsWindow::onResetDefaultBindingsAccept()
{
MWBase::Environment::get().getInputManager ()->resetToDefaultBindings ();
updateControlsBox ();
}
void SettingsWindow::open() void SettingsWindow::open()
{ {
updateControlsBox (); updateControlsBox ();

@ -66,6 +66,8 @@ namespace MWGui
// controls // controls
MyGUI::ScrollView* mControlsBox; MyGUI::ScrollView* mControlsBox;
MyGUI::Button* mResetControlsButton;
MyGUI::Button* mInvertYButton;
void onOkButtonClicked(MyGUI::Widget* _sender); void onOkButtonClicked(MyGUI::Widget* _sender);
void onFpsToggled(MyGUI::Widget* _sender); void onFpsToggled(MyGUI::Widget* _sender);
@ -80,6 +82,9 @@ namespace MWGui
void onShadowTextureSize(MyGUI::Widget* _sender); void onShadowTextureSize(MyGUI::Widget* _sender);
void onRebindAction(MyGUI::Widget* _sender); void onRebindAction(MyGUI::Widget* _sender);
void onInputTabMouseWheel(MyGUI::Widget* _sender, int _rel);
void onResetDefaultBindings(MyGUI::Widget* _sender);
void onResetDefaultBindingsAccept ();
void apply(); void apply();
}; };

@ -40,6 +40,7 @@ namespace MWInput
, mUserFile(userFile) , mUserFile(userFile)
, mDragDrop(false) , mDragDrop(false)
, mGuiCursorEnabled(false) , mGuiCursorEnabled(false)
, mInvertY (Settings::Manager::getBool("invert y axis", "Input"))
{ {
Ogre::RenderWindow* window = ogre.getWindow (); Ogre::RenderWindow* window = ogre.getWindow ();
size_t windowHnd; size_t windowHnd;
@ -280,6 +281,9 @@ namespace MWInput
{ {
if (it->first == "Video" && (it->second == "resolution x" || it->second == "resolution y")) if (it->first == "Video" && (it->second == "resolution x" || it->second == "resolution y"))
changeRes = true; changeRes = true;
if (it->first == "Input" && it->second == "invert y axis")
mInvertY = Settings::Manager::getBool("invert y axis", "Input");
} }
if (changeRes) if (changeRes)
@ -374,7 +378,7 @@ namespace MWInput
if (mMouseLookEnabled) if (mMouseLookEnabled)
{ {
float x = arg.state.X.rel * 0.2; float x = arg.state.X.rel * 0.2;
float y = arg.state.Y.rel * 0.2; float y = arg.state.Y.rel * 0.2 * (mInvertY ? -1 : 1);
MWBase::World *world = MWBase::Environment::get().getWorld(); MWBase::World *world = MWBase::Environment::get().getWorld();
world->rotateObject(world->getPlayer().getPlayer(), -y, 0.f, x, true); world->rotateObject(world->getPlayer().getPlayer(), -y, 0.f, x, true);
@ -504,7 +508,7 @@ namespace MWInput
return mInputCtrl->getChannel (id)->getValue () == 1; return mInputCtrl->getChannel (id)->getValue () == 1;
} }
void InputManager::loadKeyDefaults () void InputManager::loadKeyDefaults (bool force)
{ {
// using hardcoded key defaults is inevitable, if we want the configuration files to stay valid // using hardcoded key defaults is inevitable, if we want the configuration files to stay valid
// across different versions of OpenMW (in the case where another input action is added) // across different versions of OpenMW (in the case where another input action is added)
@ -530,16 +534,27 @@ namespace MWInput
for (int i = 0; i < A_Last; ++i) for (int i = 0; i < A_Last; ++i)
{ {
if (mInputCtrl->getChannel(i)->getControlsCount () == 0) ICS::Control* control;
bool controlExists = mInputCtrl->getChannel(i)->getControlsCount () != 0;
if (!controlExists)
{
control = new ICS::Control(boost::lexical_cast<std::string>(i), false, true, 0, ICS::ICS_MAX, ICS::ICS_MAX);
mInputCtrl->addControl(control);
control->attachChannel(mInputCtrl->getChannel(i), ICS::Channel::DIRECT);
}
else
{ {
ICS::Control* control1 = new ICS::Control(boost::lexical_cast<std::string>(i), false, true, 0, ICS::ICS_MAX, ICS::ICS_MAX); control = mInputCtrl->getChannel(i)->getAttachedControls ().front().control;
mInputCtrl->addControl(control1); }
control1->attachChannel(mInputCtrl->getChannel(i), ICS::Channel::DIRECT);
if (!controlExists || force)
{
clearAllBindings (control);
if (defaultKeyBindings.find(i) != defaultKeyBindings.end()) if (defaultKeyBindings.find(i) != defaultKeyBindings.end())
mInputCtrl->addKeyBinding(control1, static_cast<OIS::KeyCode>(defaultKeyBindings[i]), ICS::Control::INCREASE); mInputCtrl->addKeyBinding(control, static_cast<OIS::KeyCode>(defaultKeyBindings[i]), ICS::Control::INCREASE);
else if (defaultMouseButtonBindings.find(i) != defaultMouseButtonBindings.end()) else if (defaultMouseButtonBindings.find(i) != defaultMouseButtonBindings.end())
mInputCtrl->addMouseButtonBinding (control1, defaultMouseButtonBindings[i], ICS::Control::INCREASE); mInputCtrl->addMouseButtonBinding (control, defaultMouseButtonBindings[i], ICS::Control::INCREASE);
} }
} }
} }
@ -597,6 +612,7 @@ namespace MWInput
ret.push_back(A_Crouch); ret.push_back(A_Crouch);
ret.push_back(A_Activate); ret.push_back(A_Activate);
ret.push_back(A_ToggleWeapon); ret.push_back(A_ToggleWeapon);
ret.push_back(A_ToggleSpell);
ret.push_back(A_AutoMove); ret.push_back(A_AutoMove);
ret.push_back(A_Jump); ret.push_back(A_Jump);
ret.push_back(A_Inventory); ret.push_back(A_Inventory);
@ -681,4 +697,9 @@ namespace MWInput
/// \todo add joysticks here once they are added /// \todo add joysticks here once they are added
} }
void InputManager::resetToDefaultBindings()
{
loadKeyDefaults(true);
}
} }

@ -81,6 +81,7 @@ namespace MWInput
virtual int getNumActions() { return A_Last; } virtual int getNumActions() { return A_Last; }
virtual std::vector<int> getActionSorting (); virtual std::vector<int> getActionSorting ();
virtual void enableDetectingBindingMode (int action); virtual void enableDetectingBindingMode (int action);
virtual void resetToDefaultBindings();
public: public:
@ -132,6 +133,8 @@ namespace MWInput
bool mDragDrop; bool mDragDrop;
bool mInvertY;
bool mMouseLookEnabled; bool mMouseLookEnabled;
bool mGuiCursorEnabled; bool mGuiCursorEnabled;
@ -159,7 +162,7 @@ namespace MWInput
bool actionIsActive (int id); bool actionIsActive (int id);
void loadKeyDefaults(); void loadKeyDefaults(bool force = false);
private: private:
enum Actions enum Actions

@ -84,9 +84,16 @@
<Property key="Caption" value=" #{sControls} "/> <Property key="Caption" value=" #{sControls} "/>
<Widget type="Widget" skin="MW_Box" position="8 8 344 180"> <Widget type="Widget" skin="MW_Box" position="8 8 344 180">
<Widget type="ScrollView" skin="MW_ScrollView" name="ControlsBox" position="4 4 336 172"/> <Widget type="ScrollView" skin="MW_ScrollView" name="ControlsBox" position="4 4 336 172"/>
</Widget>
<Widget type="Button" skin="MW_Button" name="ResetControlsButton" position="4 192 100 24">
<Property key="Caption" value="#{sControlsMenu1}"/>
</Widget>
<Widget type="Button" skin="MW_Button" name="InvertYButton" position="4 222 32 24"/>
<Widget type="TextBox" skin="SandText" position="40 222 200 24">
<Property key="Caption" value="#{sMouseFlip}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -144,3 +144,8 @@ sfx volume = 1.0
music volume = 0.4 music volume = 0.4
footsteps volume = 0.6 footsteps volume = 0.6
voice volume = 1.0 voice volume = 1.0
[Input]
invert y axis = false

Loading…
Cancel
Save