mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-29 03:26:38 +00:00 
			
		
		
		
	Merge branch 'refactor/5336-1' into 'master'
#5336 (1): Refactor World::updatePlayer in to Player::update See merge request OpenMW/openmw!1828
This commit is contained in:
		
						commit
						6aaf2c33bf
					
				
					 4 changed files with 59 additions and 50 deletions
				
			
		|  | @ -9,6 +9,7 @@ | ||||||
| #include <components/esm3/player.hpp> | #include <components/esm3/player.hpp> | ||||||
| #include <components/esm/defs.hpp> | #include <components/esm/defs.hpp> | ||||||
| #include <components/esm3/loadbsgn.hpp> | #include <components/esm3/loadbsgn.hpp> | ||||||
|  | #include <components/fallback/fallback.hpp> | ||||||
| 
 | 
 | ||||||
| #include "../mwworld/esmstore.hpp" | #include "../mwworld/esmstore.hpp" | ||||||
| #include "../mwworld/inventorystore.hpp" | #include "../mwworld/inventorystore.hpp" | ||||||
|  | @ -23,6 +24,9 @@ | ||||||
| #include "../mwmechanics/npcstats.hpp" | #include "../mwmechanics/npcstats.hpp" | ||||||
| #include "../mwmechanics/spellutil.hpp" | #include "../mwmechanics/spellutil.hpp" | ||||||
| 
 | 
 | ||||||
|  | #include "../mwrender/renderingmanager.hpp" | ||||||
|  | #include "../mwrender/camera.hpp" | ||||||
|  | 
 | ||||||
| #include "cellstore.hpp" | #include "cellstore.hpp" | ||||||
| #include "class.hpp" | #include "class.hpp" | ||||||
| #include "ptr.hpp" | #include "ptr.hpp" | ||||||
|  | @ -514,4 +518,56 @@ namespace MWWorld | ||||||
|         MWBase::Environment::get().getWindowManager()->setSelectedSpell(spellId, castChance); |         MWBase::Environment::get().getWindowManager()->setSelectedSpell(spellId, castChance); | ||||||
|         MWBase::Environment::get().getWindowManager()->updateSpellWindow(); |         MWBase::Environment::get().getWindowManager()->updateSpellWindow(); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     void Player::update() | ||||||
|  |     { | ||||||
|  |         auto player = getPlayer(); | ||||||
|  |         auto* world = MWBase::Environment::get().getWorld(); | ||||||
|  |         auto* rendering = world->getRenderingManager(); | ||||||
|  |         auto& store = world->getStore(); | ||||||
|  |         auto& playerClass = player.getClass(); | ||||||
|  |         auto* windowMgr = MWBase::Environment::get().getWindowManager(); | ||||||
|  | 
 | ||||||
|  |         if (player.getCell()->isExterior()) | ||||||
|  |         { | ||||||
|  |             ESM::Position pos = player.getRefData().getPosition(); | ||||||
|  |             setLastKnownExteriorPosition(pos.asVec3()); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         bool isWerewolf = playerClass.getNpcStats(player).isWerewolf(); | ||||||
|  |         bool isFirstPerson = world->isFirstPerson(); | ||||||
|  |         if (isWerewolf && isFirstPerson) | ||||||
|  |         { | ||||||
|  |             float werewolfFov = Fallback::Map::getFloat("General_Werewolf_FOV"); | ||||||
|  |             if (werewolfFov != 0) | ||||||
|  |                 rendering->overrideFieldOfView(werewolfFov); | ||||||
|  |             windowMgr->setWerewolfOverlay(true); | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             rendering->resetFieldOfView(); | ||||||
|  |             windowMgr->setWerewolfOverlay(false); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Sink the camera while sneaking
 | ||||||
|  |         bool sneaking = playerClass.getCreatureStats(player).getStance(MWMechanics::CreatureStats::Stance_Sneak); | ||||||
|  |         bool swimming = world->isSwimming(player); | ||||||
|  |         bool flying = world->isFlying(player); | ||||||
|  | 
 | ||||||
|  |         static const float i1stPersonSneakDelta = store.get<ESM::GameSetting>().find("i1stPersonSneakDelta")->mValue.getFloat(); | ||||||
|  |         if (sneaking && !swimming && !flying) | ||||||
|  |             rendering->getCamera()->setSneakOffset(i1stPersonSneakDelta); | ||||||
|  |         else | ||||||
|  |             rendering->getCamera()->setSneakOffset(0.f); | ||||||
|  | 
 | ||||||
|  |         int blind = 0; | ||||||
|  |         const auto& magicEffects = playerClass.getCreatureStats(player).getMagicEffects(); | ||||||
|  |         if (!world->getGodModeState()) | ||||||
|  |             blind = static_cast<int>(magicEffects.get(ESM::MagicEffect::Blind).getMagnitude()); | ||||||
|  |         windowMgr->setBlindness(std::clamp(blind, 0, 100)); | ||||||
|  | 
 | ||||||
|  |         int nightEye = static_cast<int>(magicEffects.get(ESM::MagicEffect::NightEye).getMagnitude()); | ||||||
|  |         rendering->setNightEyeFactor(std::min(1.f, (nightEye / 100.f))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -135,6 +135,8 @@ namespace MWWorld | ||||||
|         void erasePreviousItem(const std::string& boundItemId); |         void erasePreviousItem(const std::string& boundItemId); | ||||||
| 
 | 
 | ||||||
|         void setSelectedSpell(const std::string& spellId); |         void setSelectedSpell(const std::string& spellId); | ||||||
|  | 
 | ||||||
|  |         void update(); | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -1845,7 +1845,7 @@ namespace MWWorld | ||||||
|             updateNavigator(); |             updateNavigator(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         updatePlayer(); |         mPlayer->update(); | ||||||
| 
 | 
 | ||||||
|         mPhysics->debugDraw(); |         mPhysics->debugDraw(); | ||||||
| 
 | 
 | ||||||
|  | @ -1876,54 +1876,6 @@ namespace MWWorld | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void World::updatePlayer() |  | ||||||
|     { |  | ||||||
|         MWWorld::Ptr player = getPlayerPtr(); |  | ||||||
| 
 |  | ||||||
|         // TODO: move to MWWorld::Player
 |  | ||||||
| 
 |  | ||||||
|         if (player.getCell()->isExterior()) |  | ||||||
|         { |  | ||||||
|             ESM::Position pos = player.getRefData().getPosition(); |  | ||||||
|             mPlayer->setLastKnownExteriorPosition(pos.asVec3()); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         bool isWerewolf = player.getClass().getNpcStats(player).isWerewolf(); |  | ||||||
|         bool isFirstPerson = this->isFirstPerson(); |  | ||||||
|         if (isWerewolf && isFirstPerson) |  | ||||||
|         { |  | ||||||
|             float werewolfFov = Fallback::Map::getFloat("General_Werewolf_FOV"); |  | ||||||
|             if (werewolfFov != 0) |  | ||||||
|                 mRendering->overrideFieldOfView(werewolfFov); |  | ||||||
|             MWBase::Environment::get().getWindowManager()->setWerewolfOverlay(true); |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             mRendering->resetFieldOfView(); |  | ||||||
|             MWBase::Environment::get().getWindowManager()->setWerewolfOverlay(false); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // Sink the camera while sneaking
 |  | ||||||
|         bool sneaking = player.getClass().getCreatureStats(getPlayerPtr()).getStance(MWMechanics::CreatureStats::Stance_Sneak); |  | ||||||
|         bool swimming = isSwimming(player); |  | ||||||
|         bool flying = isFlying(player); |  | ||||||
| 
 |  | ||||||
|         static const float i1stPersonSneakDelta = mStore.get<ESM::GameSetting>().find("i1stPersonSneakDelta")->mValue.getFloat(); |  | ||||||
|         if (sneaking && !swimming && !flying) |  | ||||||
|             mRendering->getCamera()->setSneakOffset(i1stPersonSneakDelta); |  | ||||||
|         else |  | ||||||
|             mRendering->getCamera()->setSneakOffset(0.f); |  | ||||||
| 
 |  | ||||||
|         int blind = 0; |  | ||||||
|         const auto& magicEffects = player.getClass().getCreatureStats(player).getMagicEffects(); |  | ||||||
|         if (!mGodMode) |  | ||||||
|             blind = static_cast<int>(magicEffects.get(ESM::MagicEffect::Blind).getMagnitude()); |  | ||||||
|         MWBase::Environment::get().getWindowManager()->setBlindness(std::clamp(blind, 0, 100)); |  | ||||||
| 
 |  | ||||||
|         int nightEye = static_cast<int>(magicEffects.get(ESM::MagicEffect::NightEye).getMagnitude()); |  | ||||||
|         mRendering->setNightEyeFactor(std::min(1.f, (nightEye/100.f))); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     void World::preloadSpells() |     void World::preloadSpells() | ||||||
|     { |     { | ||||||
|         std::string selectedSpell = MWBase::Environment::get().getWindowManager()->getSelectedSpell(); |         std::string selectedSpell = MWBase::Environment::get().getWindowManager()->getSelectedSpell(); | ||||||
|  |  | ||||||
|  | @ -141,7 +141,6 @@ namespace MWWorld | ||||||
|             Ptr copyObjectToCell(const ConstPtr &ptr, CellStore* cell, ESM::Position pos, int count, bool adjustPos); |             Ptr copyObjectToCell(const ConstPtr &ptr, CellStore* cell, ESM::Position pos, int count, bool adjustPos); | ||||||
| 
 | 
 | ||||||
|             void updateSoundListener(); |             void updateSoundListener(); | ||||||
|             void updatePlayer(); |  | ||||||
| 
 | 
 | ||||||
|             void preloadSpells(); |             void preloadSpells(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue