1 #include "controlswitch.hpp" 2 3 #include <components/esm/esmwriter.hpp> 4 #include <components/esm/esmreader.hpp> 5 #include <components/esm/controlsstate.hpp> 6 7 #include <components/loadinglistener/loadinglistener.hpp> 8 9 #include "../mwbase/environment.hpp" 10 #include "../mwbase/world.hpp" 11 12 #include "../mwworld/player.hpp" 13 14 namespace MWInput 15 { ControlSwitch()16 ControlSwitch::ControlSwitch() 17 { 18 clear(); 19 } 20 clear()21 void ControlSwitch::clear() 22 { 23 mSwitches["playercontrols"] = true; 24 mSwitches["playerfighting"] = true; 25 mSwitches["playerjumping"] = true; 26 mSwitches["playerlooking"] = true; 27 mSwitches["playermagic"] = true; 28 mSwitches["playerviewswitch"] = true; 29 mSwitches["vanitymode"] = true; 30 } 31 get(const std::string & key)32 bool ControlSwitch::get(const std::string& key) 33 { 34 return mSwitches[key]; 35 } 36 set(const std::string & key,bool value)37 void ControlSwitch::set(const std::string& key, bool value) 38 { 39 MWWorld::Player& player = MWBase::Environment::get().getWorld()->getPlayer(); 40 41 /// \note 7 switches at all, if-else is relevant 42 if (key == "playercontrols" && !value) 43 { 44 player.setLeftRight(0); 45 player.setForwardBackward(0); 46 player.setAutoMove(false); 47 player.setUpDown(0); 48 } 49 else if (key == "playerjumping" && !value) 50 { 51 /// \fixme maybe crouching at this time 52 player.setUpDown(0); 53 } 54 else if (key == "vanitymode") 55 { 56 MWBase::Environment::get().getWorld()->allowVanityMode(value); 57 } 58 else if (key == "playerlooking" && !value) 59 { 60 MWBase::Environment::get().getWorld()->rotateObject(player.getPlayer(), 0.f, 0.f, 0.f); 61 } 62 mSwitches[key] = value; 63 } 64 write(ESM::ESMWriter & writer,Loading::Listener &)65 void ControlSwitch::write(ESM::ESMWriter& writer, Loading::Listener& /*progress*/) 66 { 67 ESM::ControlsState controls; 68 controls.mViewSwitchDisabled = !mSwitches["playerviewswitch"]; 69 controls.mControlsDisabled = !mSwitches["playercontrols"]; 70 controls.mJumpingDisabled = !mSwitches["playerjumping"]; 71 controls.mLookingDisabled = !mSwitches["playerlooking"]; 72 controls.mVanityModeDisabled = !mSwitches["vanitymode"]; 73 controls.mWeaponDrawingDisabled = !mSwitches["playerfighting"]; 74 controls.mSpellDrawingDisabled = !mSwitches["playermagic"]; 75 76 writer.startRecord (ESM::REC_INPU); 77 controls.save(writer); 78 writer.endRecord (ESM::REC_INPU); 79 } 80 readRecord(ESM::ESMReader & reader,uint32_t type)81 void ControlSwitch::readRecord(ESM::ESMReader& reader, uint32_t type) 82 { 83 ESM::ControlsState controls; 84 controls.load(reader); 85 86 set("playerviewswitch", !controls.mViewSwitchDisabled); 87 set("playercontrols", !controls.mControlsDisabled); 88 set("playerjumping", !controls.mJumpingDisabled); 89 set("playerlooking", !controls.mLookingDisabled); 90 set("vanitymode", !controls.mVanityModeDisabled); 91 set("playerfighting", !controls.mWeaponDrawingDisabled); 92 set("playermagic", !controls.mSpellDrawingDisabled); 93 } 94 countSavedGameRecords() const95 int ControlSwitch::countSavedGameRecords() const 96 { 97 return 1; 98 } 99 } 100