Public/New-MazeMonster.ps1
function New-MazeMonster { param( [Parameter(Mandatory = $true, HelpMessage = "Weak, Typical, Tough, Hulking, or Colossal")] [Health]$Health, [Parameter(Mandatory = $true, HelpMessage = "Unarmored, LightProtection, ModerateProtection," + " HeavyProtection, or NighImpervious")] [Armor]$Armor, [Parameter(Mandatory = $true, HelpMessage = "Untrained, Trained, Dangerous, Masterful, orLethal")] [AttackBonus]$AttackBonus, [Parameter(Mandatory = $true, HelpMessage = "Weak, Average, Strong, Powerful, or Monstrous")] [StrBonus]$Strength, [Parameter(Mandatory = $true, HelpMessage = "Slow, Average, Nimble, Swift, or Blurred")] [DexBonus]$Dexterity, [Parameter(Mandatory = $true, HelpMessage = "Dimwitted, Average, Clever, Brilliant, or Genius")] [WilBonus]$Will, [MonsterBase] $MonsterBase = ([Enum]::GetValues([MonsterBase]) | Get-Random), [String]$Feature, [String]$Trait, [String]$Ability ) $base = [MazeMonster]::new( $Health, $Armor, $AttackBonus, $Strength, $Dexterity, $Will) switch ($MonsterBase) { 'Aerial' { $base.GetAerial() } 'Terrestrial' { $base.GetTerrestrial() } 'Aquatic' { $base.GetAquatic() } } if ($Feature) { $base.Feature = $Feature } else { $base.GetFeature() } if ($Trait) { $base.Trait = $Trait } else { $base.GetTrait() } if ($Ability) { $base.Ability = $Ability } else { $base.GetAbility() } $inputs = @( 'Health', 'Armor', 'AttackBonus', 'Strength', 'Dexterity', 'Will', 'MonsterBase', 'Feature', 'Trait', 'Ability' ) | ForEach-Object { "-{0} {1} " -F $_, (Get-Variable -ValueOnly $_) } Write-Verbose "New-MazeMonster $inputs" return $base } |