Classes/Classes.ps1

class Dice {
  [string[]]$List
  [string]$Maximum
  [string]$Minimum
  [Int16]$Sides

  # ToDo: High variance would be cool to write programatically.
  # [Bool]$HighVariance

  # Default to D6
  Dice() {
    $this.List = 1..6
    $this.Maximum = 6
    $this.Minimum = 1
    $this.Sides = 6
  }

  # Custom size
  Dice(
    [Int16]$Sides
  ) {
    $this.List = 1..$Sides
    $this.Maximum = $Sides
    $this.Minimum = 1
    $this.Sides = $Sides
  }

  [String] NewDiceRoll() {
    $res = $this.list | Get-Random
    Write-Verbose "Rolled a $res"
    return $res
  }

  [Bool] IsCriticalHit($roll) {
    if ($roll -eq $this.Maximum) {
      return $True
    } else {
      return $False
    }
  }

  [Bool] IsCriticalMiss($roll) {
    if ($roll -eq $this.Minimum) {
      return $True
    } else {
      return $False
    }
  }

}

class NonNumericDice : Dice {
  NonNumericDice([Array]$List) {
    $this.Maximum = $List[-1]
    $this.Minimum = $List[0]
    $this.Sides = $List.Count
    $this.List = $List
  }
}