diff --git a/apps/openmw/mwbase/mechanicsmanager.hpp b/apps/openmw/mwbase/mechanicsmanager.hpp index 23d79c1a6b..551d86a041 100644 --- a/apps/openmw/mwbase/mechanicsmanager.hpp +++ b/apps/openmw/mwbase/mechanicsmanager.hpp @@ -8,9 +8,6 @@ #include #include -#include "../mwmechanics/greetingstate.hpp" -#include "../mwrender/animationpriority.hpp" - #include "../mwworld/ptr.hpp" namespace osg @@ -27,6 +24,11 @@ namespace ESM class ESMWriter; } +namespace MWMechanics +{ + enum class GreetingState; +} + namespace MWWorld { class Ptr; diff --git a/apps/openmw/mwmechanics/actor.hpp b/apps/openmw/mwmechanics/actor.hpp index 69e370ec86..45c077f98c 100644 --- a/apps/openmw/mwmechanics/actor.hpp +++ b/apps/openmw/mwmechanics/actor.hpp @@ -73,7 +73,7 @@ namespace MWMechanics CharacterController mCharacterController; int mGreetingTimer{ 0 }; float mTargetAngleRadians{ 0.f }; - GreetingState mGreetingState{ Greet_None }; + GreetingState mGreetingState{ GreetingState::None }; Misc::DeviatingPeriodicTimer mEngageCombat{ 1.0f, 0.25f, Misc::Rng::deviate(0, 0.25f, MWBase::Environment::get().getWorld()->getPrng()) }; bool mIsTurningToPlayer{ false }; diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 69108f9aff..4766afb55a 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -50,6 +50,7 @@ #include "attacktype.hpp" #include "character.hpp" #include "creaturestats.hpp" +#include "greetingstate.hpp" #include "movement.hpp" #include "npcstats.hpp" #include "steering.hpp" @@ -487,7 +488,7 @@ namespace MWMechanics { actorState.setTurningToPlayer(false); actorState.setGreetingTimer(0); - actorState.setGreetingState(Greet_None); + actorState.setGreetingState(GreetingState::None); return; } @@ -525,7 +526,7 @@ namespace MWMechanics int greetingTimer = actorState.getGreetingTimer(); GreetingState greetingState = actorState.getGreetingState(); - if (greetingState == Greet_None) + if (greetingState == GreetingState::None) { if ((playerPos - actorPos).length2() <= helloDistance * helloDistance && !playerStats.isDead() && !actorStats.isParalyzed() && !isTargetMagicallyHidden(player) @@ -535,14 +536,14 @@ namespace MWMechanics if (greetingTimer >= GREETING_SHOULD_START) { - greetingState = Greet_InProgress; + greetingState = GreetingState::InProgress; if (!MWBase::Environment::get().getDialogueManager()->say(actor, ESM::RefId::stringRefId("hello"))) - greetingState = Greet_Done; + greetingState = GreetingState::Done; greetingTimer = 0; } } - if (greetingState == Greet_InProgress) + if (greetingState == GreetingState::InProgress) { greetingTimer++; @@ -554,16 +555,16 @@ namespace MWMechanics if (greetingTimer >= GREETING_COOLDOWN) { - greetingState = Greet_Done; + greetingState = GreetingState::Done; greetingTimer = 0; } } - if (greetingState == Greet_Done) + if (greetingState == GreetingState::Done) { float resetDist = 2 * helloDistance; if ((playerPos - actorPos).length2() >= resetDist * resetDist) - greetingState = Greet_None; + greetingState = GreetingState::None; } actorState.setGreetingTimer(greetingTimer); @@ -2381,7 +2382,7 @@ namespace MWMechanics { const auto it = mIndex.find(ptr.mRef); if (it == mIndex.end()) - return Greet_None; + return GreetingState::None; return it->second->getGreetingState(); } diff --git a/apps/openmw/mwmechanics/aitravel.cpp b/apps/openmw/mwmechanics/aitravel.cpp index f0781565bf..a669de8339 100644 --- a/apps/openmw/mwmechanics/aitravel.cpp +++ b/apps/openmw/mwmechanics/aitravel.cpp @@ -12,6 +12,7 @@ #include "character.hpp" #include "creaturestats.hpp" +#include "greetingstate.hpp" #include "movement.hpp" namespace @@ -77,7 +78,7 @@ namespace MWMechanics if (!stats.getMovementFlag(CreatureStats::Flag_ForceJump) && !stats.getMovementFlag(CreatureStats::Flag_ForceSneak) - && (mechMgr->isTurningToPlayer(actor) || mechMgr->getGreetingState(actor) == Greet_InProgress)) + && (mechMgr->isTurningToPlayer(actor) || mechMgr->getGreetingState(actor) == GreetingState::InProgress)) return false; const osg::Vec3f actorPos(actor.getRefData().getPosition().asVec3()); diff --git a/apps/openmw/mwmechanics/aiwander.cpp b/apps/openmw/mwmechanics/aiwander.cpp index 71cc8b5e7d..ad4fc730df 100644 --- a/apps/openmw/mwmechanics/aiwander.cpp +++ b/apps/openmw/mwmechanics/aiwander.cpp @@ -25,6 +25,7 @@ #include "actorutil.hpp" #include "character.hpp" #include "creaturestats.hpp" +#include "greetingstate.hpp" #include "movement.hpp" #include "pathgrid.hpp" @@ -257,7 +258,7 @@ namespace MWMechanics && !cStats.getMovementFlag(CreatureStats::Flag_ForceSneak)) { GreetingState greetingState = MWBase::Environment::get().getMechanicsManager()->getGreetingState(actor); - if (greetingState == Greet_InProgress) + if (greetingState == GreetingState::InProgress) { if (storage.mState == AiWanderStorage::Wander_Walking) { @@ -526,7 +527,7 @@ namespace MWMechanics // Check if idle animation finished GreetingState greetingState = MWBase::Environment::get().getMechanicsManager()->getGreetingState(actor); - if (!checkIdle(actor, storage.mIdleAnimation) && (greetingState == Greet_Done || greetingState == Greet_None)) + if (!checkIdle(actor, storage.mIdleAnimation) && greetingState != GreetingState::InProgress) { if (mPathFinder.isPathConstructed()) storage.setState(AiWanderStorage::Wander_Walking, !mUsePathgrid); diff --git a/apps/openmw/mwmechanics/greetingstate.hpp b/apps/openmw/mwmechanics/greetingstate.hpp index 9b37096322..4a5a4aa2f8 100644 --- a/apps/openmw/mwmechanics/greetingstate.hpp +++ b/apps/openmw/mwmechanics/greetingstate.hpp @@ -3,11 +3,11 @@ namespace MWMechanics { - enum GreetingState + enum class GreetingState { - Greet_None, - Greet_InProgress, - Greet_Done + None, + InProgress, + Done }; } diff --git a/apps/openmw/mwscript/aiextensions.cpp b/apps/openmw/mwscript/aiextensions.cpp index a91a585367..e5aa3b1f91 100644 --- a/apps/openmw/mwscript/aiextensions.cpp +++ b/apps/openmw/mwscript/aiextensions.cpp @@ -22,6 +22,7 @@ #include "../mwmechanics/aitravel.hpp" #include "../mwmechanics/aiwander.hpp" #include "../mwmechanics/creaturestats.hpp" +#include "../mwmechanics/greetingstate.hpp" #include "../mwbase/environment.hpp" #include "../mwbase/mechanicsmanager.hpp" @@ -487,7 +488,7 @@ namespace MWScript else if (testedTargetId == "Player") // Currently the player ID is hardcoded { MWBase::MechanicsManager* mechMgr = MWBase::Environment::get().getMechanicsManager(); - bool greeting = mechMgr->getGreetingState(actor) == MWMechanics::Greet_InProgress; + bool greeting = mechMgr->getGreetingState(actor) == MWMechanics::GreetingState::InProgress; bool sayActive = MWBase::Environment::get().getSoundManager()->sayActive(actor); targetsAreEqual = (greeting && sayActive) || mechMgr->isTurningToPlayer(actor); } diff --git a/apps/openmw/mwworld/class.hpp b/apps/openmw/mwworld/class.hpp index d3d75aa935..7e49fad61b 100644 --- a/apps/openmw/mwworld/class.hpp +++ b/apps/openmw/mwworld/class.hpp @@ -6,7 +6,6 @@ #include #include -#include #include #include "doorstate.hpp" @@ -16,9 +15,13 @@ #include "../mwmechanics/damagesourcetype.hpp" #include -#include #include +namespace osg +{ + class Quat; +} + namespace ESM { struct ObjectState;