FastRandom: Remove discrepancy between arg and return value type. (#3846)
This commit is contained in:
parent
f9b56dd859
commit
895987a111
@ -77,8 +77,8 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
/** Return a random IntType in the range [a_Min, a_Max]. */
|
/** Return a random IntType in the range [a_Min, a_Max]. */
|
||||||
template <class IntType = int, class ArgType>
|
template <class IntType = int>
|
||||||
IntType RandInt(ArgType a_Min, ArgType a_Max)
|
IntType RandInt(IntType a_Min, IntType a_Max)
|
||||||
{
|
{
|
||||||
ASSERT(
|
ASSERT(
|
||||||
(a_Max >= a_Min) &&
|
(a_Max >= a_Min) &&
|
||||||
@ -97,8 +97,8 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
/** Return a random IntType in the range [0, a_Max]. */
|
/** Return a random IntType in the range [0, a_Max]. */
|
||||||
template <class IntType = int, class ArgType>
|
template <class IntType = int>
|
||||||
IntType RandInt(ArgType a_Max)
|
IntType RandInt(IntType a_Max)
|
||||||
{
|
{
|
||||||
ASSERT((a_Max >= 0) && (a_Max <= std::numeric_limits<IntType>::max()));
|
ASSERT((a_Max >= 0) && (a_Max <= std::numeric_limits<IntType>::max()));
|
||||||
Detail::cUniform<IntType> dist(IntType(0), static_cast<IntType>(a_Max));
|
Detail::cUniform<IntType> dist(IntType(0), static_cast<IntType>(a_Max));
|
||||||
@ -122,8 +122,8 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
/** Return a random RealType in the range [a_Min, a_Max). */
|
/** Return a random RealType in the range [a_Min, a_Max). */
|
||||||
template <class RealType = float, class ArgType>
|
template <class RealType = float>
|
||||||
RealType RandReal(ArgType a_Min, ArgType a_Max)
|
RealType RandReal(RealType a_Min, RealType a_Max)
|
||||||
{
|
{
|
||||||
std::uniform_real_distribution<RealType> dist(a_Min, a_Max);
|
std::uniform_real_distribution<RealType> dist(a_Min, a_Max);
|
||||||
return dist(m_Engine);
|
return dist(m_Engine);
|
||||||
@ -134,8 +134,8 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
/** Return a random RealType in the range [0, a_Max). */
|
/** Return a random RealType in the range [0, a_Max). */
|
||||||
template <class RealType = float, class ArgType>
|
template <class RealType = float>
|
||||||
RealType RandReal(ArgType a_Max)
|
RealType RandReal(RealType a_Max)
|
||||||
{
|
{
|
||||||
std::uniform_real_distribution<RealType> dist(RealType(0), a_Max);
|
std::uniform_real_distribution<RealType> dist(RealType(0), a_Max);
|
||||||
return dist(m_Engine);
|
return dist(m_Engine);
|
||||||
|
@ -45,12 +45,12 @@ bool cMobSpawner::CheckPackCenter(BLOCKTYPE a_BlockType)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cMobSpawner::addIfAllowed(eMonsterType toAdd, std::set<eMonsterType>& toAddIn)
|
void cMobSpawner::addIfAllowed(eMonsterType toAdd, std::vector<eMonsterType> & toAddIn)
|
||||||
{
|
{
|
||||||
std::set<eMonsterType>::iterator itr = m_AllowedTypes.find(toAdd);
|
std::set<eMonsterType>::iterator itr = m_AllowedTypes.find(toAdd);
|
||||||
if (itr != m_AllowedTypes.end())
|
if (itr != m_AllowedTypes.end())
|
||||||
{
|
{
|
||||||
toAddIn.insert(toAdd);
|
toAddIn.push_back(toAdd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ void cMobSpawner::addIfAllowed(eMonsterType toAdd, std::set<eMonsterType>& toAdd
|
|||||||
|
|
||||||
eMonsterType cMobSpawner::ChooseMobType(EMCSBiome a_Biome)
|
eMonsterType cMobSpawner::ChooseMobType(EMCSBiome a_Biome)
|
||||||
{
|
{
|
||||||
std::set<eMonsterType> allowedMobs;
|
std::vector<eMonsterType> allowedMobs;
|
||||||
|
|
||||||
if ((a_Biome == biMushroomIsland) || (a_Biome == biMushroomShore))
|
if ((a_Biome == biMushroomIsland) || (a_Biome == biMushroomShore))
|
||||||
{
|
{
|
||||||
@ -107,15 +107,11 @@ eMonsterType cMobSpawner::ChooseMobType(EMCSBiome a_Biome)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pick a random mob from the options:
|
||||||
size_t allowedMobsSize = allowedMobs.size();
|
size_t allowedMobsSize = allowedMobs.size();
|
||||||
if (allowedMobsSize > 0)
|
if (allowedMobsSize > 0)
|
||||||
{
|
{
|
||||||
std::set<eMonsterType>::iterator itr = allowedMobs.begin();
|
return allowedMobs[GetRandomProvider().RandInt(allowedMobsSize - 1)];
|
||||||
|
|
||||||
using DiffType = decltype(itr)::difference_type;
|
|
||||||
std::advance(itr, GetRandomProvider().RandInt<DiffType>(allowedMobsSize - 1));
|
|
||||||
|
|
||||||
return *itr;
|
|
||||||
}
|
}
|
||||||
return mtInvalidType;
|
return mtInvalidType;
|
||||||
}
|
}
|
||||||
|
@ -58,13 +58,13 @@ protected :
|
|||||||
eMonsterType ChooseMobType(EMCSBiome a_Biome);
|
eMonsterType ChooseMobType(EMCSBiome a_Biome);
|
||||||
|
|
||||||
/** Adds toAdd into toAddIn, if toAdd is in m_AllowedTypes */
|
/** Adds toAdd into toAddIn, if toAdd is in m_AllowedTypes */
|
||||||
void addIfAllowed(eMonsterType toAdd, std::set<eMonsterType> & toAddIn);
|
void addIfAllowed(eMonsterType toAdd, std::vector<eMonsterType> & toAddIn);
|
||||||
|
|
||||||
cMonster::eFamily m_MonsterFamily;
|
cMonster::eFamily m_MonsterFamily;
|
||||||
std::set<eMonsterType> m_AllowedTypes;
|
std::set<eMonsterType> m_AllowedTypes;
|
||||||
bool m_NewPack;
|
bool m_NewPack;
|
||||||
eMonsterType m_MobType;
|
eMonsterType m_MobType;
|
||||||
std::set<cMonster*> m_Spawned;
|
std::set<cMonster *> m_Spawned;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user