/vqdr/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/vqdr/trunk
19 by Gustav Hartvigsson
Added Round Up and Round Down function classes.
1
/* dice.vala
2
 *
3
 * Copyright 2021 Gustav Hartvigsson <unknown@domain.org>
4
 *
5
 * This file is free software; you can redistribute it and/or modify it
6
 * under the terms of the GNU Lesser General Public License as
7
 * published by the Free Software Foundation; either version 3 of the
8
 * License, or (at your option) any later version.
9
 *
10
 * This file is distributed in the hope that it will be useful, but
11
 * WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
 * Lesser General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU Lesser General Public
16
 * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
 *
18
 * SPDX-License-Identifier: LGPL-3.0-or-later
19
 */
20
1 by Gustav Hartvigsson
* Initial code - far from done
21
using GLib;
22
19 by Gustav Hartvigsson
Added Round Up and Round Down function classes.
23
/**
24
 * A Simple Represetation of a dice.
25
 */
26
public class VQDR.Expression.Dice {
27
  public int times { get; set; }
28
  public int faces { get; set; }
29
  public int modifier { get; set; }
30
  
31
  
32
  public Dice (int times = 1, int faces = 6, int modifier = 0) {
33
    this.times = times;
34
    this.faces = faces;
35
    this.modifier = modifier;
36
  }
37
  
38
  public int roll () {
39
    if (faces <= 0) {
40
      return modifier;
1 by Gustav Hartvigsson
* Initial code - far from done
41
    }
42
    
19 by Gustav Hartvigsson
Added Round Up and Round Down function classes.
43
    if (times <= 0) {
1 by Gustav Hartvigsson
* Initial code - far from done
44
        return modifier;
19 by Gustav Hartvigsson
Added Round Up and Round Down function classes.
45
    }
46
    
47
    if (faces == 1) {
48
      return times + modifier;
49
    }
50
    
51
    int retval = modifier;
52
    for (size_t i = 1; i <= times; i++) {
53
      int r = (VQDR.Common.Random.get_static_int () % faces).abs ();
54
      
55
      retval += r;
56
    }
57
    
58
    return retval;
59
  }
60
  
61
  public string to_string () {
62
    if ((times == 0) && (faces == 0)) {
63
      return "0";
64
    }
65
    
66
    StringBuilder retval = new StringBuilder ();
67
    
68
    if (times > 0) {
69
      retval.append (times.to_string ()).append_c ('d').append (faces.to_string ());
70
    }
71
    if (modifier > 0) {
72
        retval.append_c ('+').append (modifier.to_string ());
73
    } else if (modifier < 0) {
74
        retval.append (modifier.to_string ());
75
    }
76
    
77
    return (string) retval.data;
78
  }
79
  
1 by Gustav Hartvigsson
* Initial code - far from done
80
}