]> git.lizzy.rs Git - skycraft.git/blob - random.lua
Ajust Ore Probability
[skycraft.git] / random.lua
1 skycraft.random = {
2     choices = {},
3     probabilities = {},
4     csum = {},
5     sum = 0
6 }
7
8 skycraft.random.__index = skycraft.random
9
10 function skycraft.random:new(o)
11     o = o or {}
12     setmetatable(o, self)
13     o.choices = {}
14     o.probabilities = {}
15     o.csum = {}
16     o.sum = 0
17     return o
18 end
19
20 function skycraft.random:calc_csum()
21         self.sum = 0
22     for i, choice in ipairs(self.choices) do
23         self.sum = self.sum + self.probabilities[choice]
24         self.csum[choice] = self.sum
25     end
26 end
27
28 function skycraft.random:choose()
29     local r = math.random() + math.random(0, self.sum - 1)
30     for i, choice in pairs(self.choices) do
31         if r < self.csum[choice] then
32             return choice
33         end
34     end
35 end
36
37 function skycraft.random:add_choice(choice, probability)
38     table.insert(self.choices, choice)
39     self.probabilities[choice] = probability
40 end