mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-08-03 07:16:31 -04:00
Turn GreetingState into enum class and cut some mechanics manager includes
This commit is contained in:
parent
ee501d8d0d
commit
272e6fabf9
@ -8,9 +8,6 @@
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
#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;
|
||||
|
@ -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 };
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "actorutil.hpp"
|
||||
#include "character.hpp"
|
||||
#include "creaturestats.hpp"
|
||||
#include "greetingstate.hpp"
|
||||
#include "movement.hpp"
|
||||
#include "pathgrid.hpp"
|
||||
|
||||
@ -238,7 +239,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)
|
||||
{
|
||||
@ -508,7 +509,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);
|
||||
|
@ -3,11 +3,11 @@
|
||||
|
||||
namespace MWMechanics
|
||||
{
|
||||
enum GreetingState
|
||||
enum class GreetingState
|
||||
{
|
||||
Greet_None,
|
||||
Greet_InProgress,
|
||||
Greet_Done
|
||||
None,
|
||||
InProgress,
|
||||
Done
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user