1 |
|
2 | class DiceRoll
|
3 |
|
4 | defaults: {
|
5 | dice: null,
|
6 | sides: null,
|
7 | sum: true,
|
8 | onesSubtract: false,
|
9 | target: null,
|
10 | }
|
11 | opts: {}
|
12 | rolls: []
|
13 | conclusion: 0
|
14 |
|
15 | constructor: (opts) ->
|
16 | @rolls = []
|
17 | conclusion: 0
|
18 | @opts = extend (extend {}, @defaults), opts
|
19 | if @opts.dice is null or @opts.sides is null
|
20 | throw new Error "You have to provide dice and sides parameters"
|
21 | if not @opts.sum and @opts.target is null
|
22 | throw new Error "If you set sum: false you must set target: <number> as well."
|
23 |
|
24 | for i in [1..@opts.dice] by 1
|
25 | result = Math.ceil Math.random() * @opts.sides
|
26 | @rolls.push result
|
27 | if not @opts.sum and result >= @opts.target
|
28 | @conclusion++
|
29 | else if @opts.sum
|
30 | @conclusion += result
|
31 |
|
32 | result: ->
|
33 | { 'rolls': @rolls, 'conclusion': @conclusion }
|
34 |
|
35 |
|
36 | extend = (object, properties) ->
|
37 | for key, val of properties
|
38 | object[key] = val
|
39 | object
|
40 |
|
41 |
|
42 | exports = module.exports = DiceRoll
|