Returned cFastRandom and cEnchantment:GetRandomEnchantmentFromVector to before
Added cEnchantment:GenerateEnchantmentFromVector that allows to get the same enchantments over and over.
This commit is contained in:
parent
e3aa6e4857
commit
ff5f57514e
@ -6,6 +6,7 @@
|
||||
#include "Enchantments.h"
|
||||
#include "WorldStorage/FastNBT.h"
|
||||
#include "FastRandom.h"
|
||||
#include "Noise.h"
|
||||
|
||||
|
||||
|
||||
@ -994,13 +995,9 @@ void cEnchantments::CheckEnchantmentConflictsFromVector(cWeightedEnchantments &
|
||||
|
||||
|
||||
|
||||
cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed)
|
||||
cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments)
|
||||
{
|
||||
cFastRandom Random;
|
||||
if (a_Seed != -1)
|
||||
{
|
||||
Random = cFastRandom(a_Seed);
|
||||
}
|
||||
|
||||
int AllWeights = 0;
|
||||
for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it)
|
||||
@ -1023,3 +1020,30 @@ cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantment
|
||||
|
||||
|
||||
|
||||
|
||||
cEnchantments cEnchantments::GenerateEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed)
|
||||
{
|
||||
int AllWeights = 0;
|
||||
for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it)
|
||||
{
|
||||
AllWeights += (*it).m_Weight;
|
||||
}
|
||||
|
||||
cNoise Noise(a_Seed);
|
||||
int RandomNumber = Noise.IntNoise1DInt(AllWeights) % AllWeights;
|
||||
|
||||
for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it)
|
||||
{
|
||||
RandomNumber -= (*it).m_Weight;
|
||||
if (RandomNumber < 0)
|
||||
{
|
||||
return (*it).m_Enchantments;
|
||||
}
|
||||
}
|
||||
|
||||
return cEnchantments();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -126,7 +126,10 @@ public:
|
||||
static void CheckEnchantmentConflictsFromVector(cWeightedEnchantments & a_Enchantments, cEnchantments a_FirstEnchantment);
|
||||
|
||||
/** Gets random enchantment from Vector and returns it */
|
||||
static cEnchantments GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed = -1);
|
||||
static cEnchantments GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments);
|
||||
|
||||
/** Returns an enchantment from a Vector using cNoise. Mostly used for generators.*/
|
||||
static cEnchantments GenerateEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed);
|
||||
|
||||
/** Returns true if a_Other doesn't contain exactly the same enchantments and levels */
|
||||
bool operator !=(const cEnchantments & a_Other) const;
|
||||
|
@ -90,17 +90,10 @@ int cFastRandom::m_SeedCounter = 0;
|
||||
|
||||
|
||||
|
||||
cFastRandom::cFastRandom(int a_Seed) :
|
||||
cFastRandom::cFastRandom(void) :
|
||||
m_Seed(m_SeedCounter++),
|
||||
m_Counter(0)
|
||||
{
|
||||
if (a_Seed == -1)
|
||||
{
|
||||
m_Seed = m_SeedCounter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Seed = a_Seed;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -30,7 +30,7 @@ salts, the values they get will be different.
|
||||
class cFastRandom
|
||||
{
|
||||
public:
|
||||
cFastRandom(int a_Seed = -1);
|
||||
cFastRandom(void);
|
||||
|
||||
/// Returns a random int in the range [0 .. a_Range - 1]; a_Range must be less than 1M
|
||||
int NextInt(int a_Range);
|
||||
|
@ -646,7 +646,7 @@ void cItemGrid::GenerateRandomLootWithBooks(const cLootProbab * a_LootProbabs, s
|
||||
|
||||
for (int I = 0; I <= NumEnchantments; I++)
|
||||
{
|
||||
cEnchantments Enchantment = cEnchantments::GetRandomEnchantmentFromVector(Enchantments, a_Seed);
|
||||
cEnchantments Enchantment = cEnchantments::GenerateEnchantmentFromVector(Enchantments, Noise.IntNoise2DInt(NumEnchantments, i));
|
||||
CurrentLoot.m_Enchantments.AddFromString(Enchantment.ToString());
|
||||
cEnchantments::RemoveEnchantmentWeightFromVector(Enchantments, Enchantment);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user