mirror of
https://github.com/OpenMW/openmw.git
synced 2025-04-13 18:36:43 +00:00
Fix Wander idle chance
This commit is contained in:
parent
44339889dd
commit
b4f743ad60
2 changed files with 15 additions and 14 deletions
|
@ -670,25 +670,26 @@ namespace MWMechanics
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
short unsigned AiWander::getRandomIdle()
|
int AiWander::getRandomIdle() const
|
||||||
{
|
|
||||||
unsigned short idleRoll = 0;
|
|
||||||
short unsigned selectedAnimation = 0;
|
|
||||||
|
|
||||||
for(unsigned int counter = 0; counter < mIdle.size(); counter++)
|
|
||||||
{
|
{
|
||||||
MWBase::World* world = MWBase::Environment::get().getWorld();
|
MWBase::World* world = MWBase::Environment::get().getWorld();
|
||||||
static float fIdleChanceMultiplier = world->getStore().get<ESM::GameSetting>().find("fIdleChanceMultiplier")->mValue.getFloat();
|
static const float fIdleChanceMultiplier = world->getStore().get<ESM::GameSetting>().find("fIdleChanceMultiplier")->mValue.getFloat();
|
||||||
|
if (Misc::Rng::rollClosedProbability(world->getPrng()) > fIdleChanceMultiplier)
|
||||||
|
return 0;
|
||||||
|
|
||||||
unsigned short idleChance = static_cast<unsigned short>(fIdleChanceMultiplier * mIdle[counter]);
|
int newIdle = 0;
|
||||||
unsigned short randSelect = (int)(Misc::Rng::rollProbability(world->getPrng()) * int(100 / fIdleChanceMultiplier));
|
float maxRoll = 0.f;
|
||||||
if(randSelect < idleChance && randSelect > idleRoll)
|
for (size_t i = 0; i < mIdle.size(); i++)
|
||||||
{
|
{
|
||||||
selectedAnimation = counter + GroupIndex_MinIdle;
|
float roll = Misc::Rng::rollClosedProbability(world->getPrng()) * 100.f;
|
||||||
idleRoll = randSelect;
|
if (roll <= mIdle[i] && roll > maxRoll)
|
||||||
|
{
|
||||||
|
newIdle = GroupIndex_MinIdle + i;
|
||||||
|
maxRoll = roll;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return selectedAnimation;
|
|
||||||
|
return newIdle;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AiWander::fastForward(const MWWorld::Ptr& actor, AiState &state)
|
void AiWander::fastForward(const MWWorld::Ptr& actor, AiState &state)
|
||||||
|
|
|
@ -112,7 +112,7 @@ namespace MWMechanics
|
||||||
/// @return Success or error
|
/// @return Success or error
|
||||||
bool playIdle(const MWWorld::Ptr& actor, unsigned short idleSelect);
|
bool playIdle(const MWWorld::Ptr& actor, unsigned short idleSelect);
|
||||||
bool checkIdle(const MWWorld::Ptr& actor, unsigned short idleSelect);
|
bool checkIdle(const MWWorld::Ptr& actor, unsigned short idleSelect);
|
||||||
short unsigned getRandomIdle();
|
int getRandomIdle() const;
|
||||||
void setPathToAnAllowedNode(const MWWorld::Ptr& actor, AiWanderStorage& storage, const ESM::Position& actorPos);
|
void setPathToAnAllowedNode(const MWWorld::Ptr& actor, AiWanderStorage& storage, const ESM::Position& actorPos);
|
||||||
void evadeObstacles(const MWWorld::Ptr& actor, AiWanderStorage& storage);
|
void evadeObstacles(const MWWorld::Ptr& actor, AiWanderStorage& storage);
|
||||||
void doPerFrameActionsForState(const MWWorld::Ptr& actor, float duration, AiWanderStorage& storage);
|
void doPerFrameActionsForState(const MWWorld::Ptr& actor, float duration, AiWanderStorage& storage);
|
||||||
|
|
Loading…
Reference in a new issue