Files
diehammer/DieHammer/Views/MainView.swift
T
2026-09-13 18:08:11 -05:00

89 lines
2.3 KiB
Swift

//
// PortraitView.swift
// Bunch O' Dice
//
// Created by Rory Hinnen on 22/6/18.
//
import SwiftUI
struct MainView: View {
enum MenuView: Int {
case history, add, settings
func icon() -> Image {
switch self {
case .history: return Image(systemName: "folder")
case .settings: return Image(systemName: "square.and.pencil")
case .add: return Image(systemName: "folder.badge.plus")
}
}
}
@EnvironmentObject var current: Roll
@ObservedObject var sheet = SettingsSheet()
private let controlSize = 30.0
var body: some View {
VStack {
StatePickerView()
VStack(spacing: 8) {
RollSummaryView()
switch current.state {
case .wound: WoundCalculatorView()
case .armour: ArmourCalculatorView()
default: HitCalculatorView()
}
InfoAreaView()
Spacer()
}
}
.toolbar {
ToolbarItemGroup(placement: .bottomBar) {
HStack {
Button(action: { sheet.state = .history }) {
MenuView.history.icon()
}
Button(action: { current.history.insert(Event(total: current.result, pool: current.dice, state: current.state), at: 0) }) {
MenuView.add.icon()
}
Button(action: { sheet.state = .settings }) {
MenuView.settings.icon()
}
}
.font(.system(size: controlSize))
.foregroundColor(.primary)
}
}
.sheet(isPresented: $sheet.isShowing) {
switch sheet.state {
case .settings: SettingsView(isShowing: $sheet.isShowing)
case .history: HistoryView(isShowing: $sheet.isShowing)
default: EmptyView()
}
}
}
}
#Preview("Hit") {
MainView().environmentObject(Roll())
}
#Preview("Wound") {
MainView().environmentObject({
let r = Roll()
r.state = .wound
return r
}())
}
#Preview("Armour") {
MainView().environmentObject({
let r = Roll()
r.state = .armour
return r
}())
}