90 lines
2.3 KiB
Swift
90 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: 12) {
|
|
RollSummaryView()
|
|
DiePoolView()
|
|
switch current.state {
|
|
case .wound: WoundCalculatorView()
|
|
case .armour: ArmourCalculatorView()
|
|
default: HitCalculatorView()
|
|
}
|
|
InfoAreaView()
|
|
Spacer()
|
|
}.padding()
|
|
}
|
|
.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
|
|
}())
|
|
}
|