mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-24 11:43:36 +00:00
62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
#include "../Platform/stdafx.h"
|
|
#include "WeighedRandom.h"
|
|
|
|
int WeighedRandom::getTotalWeight(std::vector<WeighedRandomItem*>* items) {
|
|
int totalWeight = 0;
|
|
for (AUTO_VAR(it, items->begin()); it != items->end(); it++) {
|
|
totalWeight += (*it)->randomWeight;
|
|
}
|
|
return totalWeight;
|
|
}
|
|
|
|
WeighedRandomItem* WeighedRandom::getRandomItem(
|
|
Random* random, std::vector<WeighedRandomItem*>* items, int totalWeight) {
|
|
if (totalWeight <= 0) {
|
|
__debugbreak();
|
|
}
|
|
|
|
int selection = random->nextInt(totalWeight);
|
|
|
|
for (AUTO_VAR(it, items->begin()); it != items->end(); it++) {
|
|
selection -= (*it)->randomWeight;
|
|
if (selection < 0) {
|
|
return *it;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
WeighedRandomItem* WeighedRandom::getRandomItem(
|
|
Random* random, std::vector<WeighedRandomItem*>* items) {
|
|
return getRandomItem(random, items, getTotalWeight(items));
|
|
}
|
|
|
|
int WeighedRandom::getTotalWeight(WeighedRandomItemArray items) {
|
|
int totalWeight = 0;
|
|
for (unsigned int i = 0; i < items.length; i++) {
|
|
totalWeight += items[i]->randomWeight;
|
|
}
|
|
return totalWeight;
|
|
}
|
|
|
|
WeighedRandomItem* WeighedRandom::getRandomItem(Random* random,
|
|
WeighedRandomItemArray items,
|
|
int totalWeight) {
|
|
if (totalWeight <= 0) {
|
|
__debugbreak();
|
|
}
|
|
|
|
int selection = random->nextInt(totalWeight);
|
|
for (unsigned int i = 0; i < items.length; i++) {
|
|
selection -= items[i]->randomWeight;
|
|
if (selection < 0) {
|
|
return items[i];
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
WeighedRandomItem* WeighedRandom::getRandomItem(Random* random,
|
|
WeighedRandomItemArray items) {
|
|
return getRandomItem(random, items, getTotalWeight(items));
|
|
} |