added description

This commit is contained in:
neon443
2024-05-27 20:12:14 +01:00
parent 450f9d1bce
commit ebe3f9bc1f
2 changed files with 60 additions and 33 deletions

View File

@@ -1,27 +1,29 @@
import SwiftUI import SwiftUI
struct DiceView: View { struct DiceView: View {
@State var generated: [Int] = [] @State var generated: [Int] = [0]
@State var displayDies: [Int] = [] @State var displayDies: [Int] = []
@State var multiDieMode = "plus"
@State var result = 0
@State var resultDescription = ""
@State var history: [Int] = [] @State var history: [Int] = []
let columns = [GridItem(.adaptive(minimum: 50, maximum: 75))] let columns = [GridItem(.adaptive(minimum: 25, maximum: 75))]
@State var dies: Double = 1 @State var dies: Double = 1
@State var multiDieMode = "plus"
var body: some View { var body: some View {
VStack { VStack {
List { List {
Section("Number of die") { Section("Number of die") {
HStack { HStack {
Text(String(Int(dies))) Text(String(Int(dies)))
Slider(value: $dies, in: 1...10, step: 1) Slider(value: $dies, in: 1...10, step: 1)
} }
} }
Section("Multi die mode") { Section("Multi die mode") {
Picker(selection: $multiDieMode, label: Text("")) { Picker(selection: $multiDieMode, label: Text("")) {
Image(systemName: "plus").tag("plus") Image(systemName: "plus").tag("plus")
Image(systemName: "multiply").tag("multiply") Image(systemName: "multiply").tag("multiply")
}.pickerStyle(SegmentedPickerStyle()) }.pickerStyle(SegmentedPickerStyle())
} }
Section("Visual") { Section("Visual") {
HStack { HStack {
Spacer() Spacer()
@@ -30,16 +32,15 @@ struct DiceView: View {
.font(.subheadline) .font(.subheadline)
} else if displayDies.count != Int(dies) { } else if displayDies.count != Int(dies) {
Text("Press Generate") Text("Press Generate")
.font(.subheadline) .font(.title)
} else { } else {
LazyVGrid(columns: columns, spacing: 10) { LazyVGrid(columns: columns, spacing: 10) {
ForEach(0..<displayDies.count, id: \.self) { index in ForEach(0..<displayDies.count, id: \.self) { index in
Image(systemName: "die.face.\(index > displayDies.count ? Int.random(in: 1...6) : displayDies[index])") Image(systemName: "die.face.\(index > displayDies.count ? Int.random(in: 1...6) : displayDies[index])")
.resizable() .resizable()
.scaledToFit() .scaledToFit()
.frame(width: 50, height: 50) .frame(width: 50, height: 50)
if index != displayDies.count { if index != displayDies.count-1 {
Image(systemName: multiDieMode) Image(systemName: multiDieMode)
.resizable() .resizable()
.scaledToFit() .scaledToFit()
@@ -51,25 +52,48 @@ struct DiceView: View {
Spacer() Spacer()
} }
} }
Section("Result") {
Button("Generate") { Button("Generate") {
generated = rngN6DieArr(dies: Int(dies)) generated = rngN6DieArr(dies: Int(dies))
displayDies = generated displayDies = generated
result = arrCombine(arr: generated, combineMode: multiDieMode)
resultDescription = describeResult(inp: displayDies, combineMode: multiDieMode)
} }
Text(String(arrCombine(arr: generated, combineMode: multiDieMode))) Text(String(result))
.bold() .bold()
.font(.largeTitle) .font(.largeTitle)
} Text(resultDescription)
Button("Test1") { Button("Test") {
generated = [1, 2]
multiDieMode = "plus"
}
Button("Test2") {
generated = [1, 2]
multiDieMode = "multiply" multiDieMode = "multiply"
generated = [2,3]
displayDies = generated
dies = 2
} }
} }
}.animation(.spring, value: displayDies) }
}
}
func describeResult(inp: [Int], combineMode: String) -> String {
var len = inp.count-1
var result = ""
var symbol = ""
if inp.isEmpty {
return "0"
} else {
if combineMode == "plus" {
symbol = " + "
} else if combineMode == "multiply" {
symbol = " x "
}
for i in 0...len {
if i == len {
result += String(inp[i])
} else {
result += String(inp[i]) + symbol
}
}
result += " = " + String(arrCombine(arr: inp, combineMode: combineMode))
return result
} }
} }

View File

@@ -70,7 +70,10 @@ func rngN6DieArr(dies: Int) -> [Int] {
return output return output
} }
func rngCDie(dies: Int, min: Int, max: Int) -> Int { func rngNCDie(dies: Int, min: Int, max: Int) -> [Int] {
var output: [Int] = []
return 0 for _ in 1...dies {
output.append(rngCDie(min: min, max: max))
}
return output
} }