0ad/binaries/data/mods/public/simulation/helpers/WeightedList.js
2013-09-11 17:50:49 +00:00

48 lines
1.0 KiB
JavaScript

var WeightedList = function()
{
this.elements = [ ];
this.totalWeight = 0;
};
WeightedList.prototype.length = function()
{
return this.elements.length;
};
WeightedList.prototype.push = function(item, weight)
{
if (weight === undefined)
weight = 1;
this.totalWeight += weight;
this.elements.push({ "item": item, "weight": weight });
};
WeightedList.prototype.removeAt = function(index)
{
var element = this.elements.splice(index, 1)[0];
if (element)
this.totalWeight -= element.weight;
};
WeightedList.prototype.itemAt = function(index)
{
var element = this.elements[index];
return element ? element.item : null;
};
WeightedList.prototype.randomIndex = function() {
var element,
targetWeight = Math.random() * this.totalWeight,
cumulativeWeight = 0;
for (var index = 0; index < this.elements.length; index++)
{
element = this.elements[index];
cumulativeWeight += element.weight;
if (cumulativeWeight >= targetWeight)
return index;
}
return -1;
};
Engine.RegisterGlobal("WeightedList", WeightedList);