Adds reactions, lair actions, and regional actions to the editor and monster display.

This commit is contained in:
2021-04-04 17:48:06 -07:00
parent 0ac780c188
commit e7ccc0e1ab
2 changed files with 107 additions and 35 deletions

View File

@@ -11,9 +11,6 @@ import SwiftUI
struct EditMonster: View { struct EditMonster: View {
// TODO: Add challengeRating/challengeRatingEnum and customChallengeRating maybe in basicInfo // TODO: Add challengeRating/challengeRatingEnum and customChallengeRating maybe in basicInfo
// TODO: Add a way to edit the monster being blind. Probably a header section to the senses section. // TODO: Add a way to edit the monster being blind. Probably a header section to the senses section.
// TODO: Add a way to edit lair actions
// TODO: Add a way to edit regional actions
// TODO: Add a way to edit reactions
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode> @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@Environment(\.managedObjectContext) private var viewContext @Environment(\.managedObjectContext) private var viewContext
@@ -51,24 +48,39 @@ struct EditMonster: View {
NavigationLink( NavigationLink(
"Condition Immunities", "Condition Immunities",
destination: EditStrings(viewModel: monsterViewModel, path: \.conditionImmunities, title: "Condition Immunities")) destination: EditStrings(
viewModel: monsterViewModel,
path: \.conditionImmunities,
title: "Condition Immunities"))
NavigationLink( NavigationLink(
"Damage Immunities", "Damage Immunities",
destination: EditStrings(viewModel: monsterViewModel, path: \.damageImmunities, title: "Damage Immunities")) destination: EditStrings(
viewModel: monsterViewModel,
path: \.damageImmunities,
title: "Damage Immunities"))
NavigationLink( NavigationLink(
"Damage Resistances", "Damage Resistances",
destination: EditStrings(viewModel: monsterViewModel, path: \.damageResistances, title: "Damage Resistances")) destination: EditStrings(
viewModel: monsterViewModel,
path: \.damageResistances,
title: "Damage Resistances"))
NavigationLink( NavigationLink(
"Damage Vulnerabilities", "Damage Vulnerabilities",
destination: EditStrings(viewModel: monsterViewModel, path: \.damageVulnerabilities, title: "Damage Vulnerabilities")) destination: EditStrings(
viewModel: monsterViewModel,
path: \.damageVulnerabilities,
title: "Damage Vulnerabilities"))
} }
Group { Group {
NavigationLink( NavigationLink(
"Senses", "Senses",
destination: EditStrings(viewModel: monsterViewModel, path: \.senses, title: "Senses")) destination: EditStrings(
viewModel: monsterViewModel,
path: \.senses,
title: "Senses"))
NavigationLink( NavigationLink(
"Languages", "Languages",
@@ -79,15 +91,46 @@ struct EditMonster: View {
destination: EditChallengeRating(viewModel: monsterViewModel)) destination: EditChallengeRating(viewModel: monsterViewModel))
NavigationLink( NavigationLink(
"Abilities", destination: EditTraits(viewModel: monsterViewModel, path: \.abilities, title: "Abilities")) "Abilities",
destination: EditTraits(
viewModel: monsterViewModel,
path: \.abilities,
title: "Abilities"))
NavigationLink( NavigationLink(
"Actions", "Actions",
destination: EditTraits(viewModel: monsterViewModel, path: \.actions, title: "Actions")) destination: EditTraits(
viewModel: monsterViewModel,
path: \.actions,
title: "Actions"))
NavigationLink(
"Reactions",
destination: EditTraits(
viewModel: monsterViewModel,
path: \.reactions,
title: "Reactions"))
NavigationLink( NavigationLink(
"Legendary Actions", "Legendary Actions",
destination: EditTraits(viewModel: monsterViewModel, path: \.legendaryActions, title: "Legendary Actions")) destination: EditTraits(
viewModel: monsterViewModel,
path: \.legendaryActions,
title: "Legendary Actions"))
NavigationLink(
"Lair Actions",
destination: EditTraits(
viewModel: monsterViewModel,
path: \.lairActions,
title: "Lair Actions"))
NavigationLink(
"Regional Actions",
destination: EditTraits(
viewModel: monsterViewModel,
path: \.regionalActions,
title: "Regional Actions"))
} }
} }

View File

@@ -205,10 +205,30 @@ struct SavingThrowsAndSkillsView: View {
} }
} }
struct TraitList: View {
var title: String
var traits: [AbilityViewModel]
var viewModel: MonsterViewModel
var body: some View {
VStack(alignment: .leading) {
Text(title)
.font(.system(size: 20, weight: .bold))
ForEach(traits) { action in
VStack {
Markdown(Document(action.renderedText(viewModel)))
Divider()
}
}
}
}
}
struct MonsterDetailView: View { struct MonsterDetailView: View {
let kTextColor = Color(hex: 0x982818) let kTextColor = Color(hex: 0x982818)
var viewModel: MonsterViewModel @ObservedObject var viewModel: MonsterViewModel
var body: some View { var body: some View {
let monsterLanguagesDescription = viewModel.languagesDescription let monsterLanguagesDescription = viewModel.languagesDescription
@@ -259,30 +279,42 @@ struct MonsterDetailView: View {
// Actions // Actions
if (viewModel.actions.count > 0) { if (viewModel.actions.count > 0) {
VStack(alignment: .leading) { TraitList(
Text("Actions") title:"Actions",
.font(.system(size: 24, weight: .bold)) traits: viewModel.actions,
ForEach(viewModel.actions) { action in viewModel: viewModel)
VStack { }
Markdown(Document(action.renderedText(viewModel)))
Divider() // Reactions
} if (viewModel.reactions.count > 0) {
} TraitList(
} title:"Reactions",
traits: viewModel.reactions,
viewModel: viewModel)
} }
// Legendary Actions // Legendary Actions
if (viewModel.legendaryActions.count > 0) { if (viewModel.legendaryActions.count > 0) {
VStack(alignment: .leading) { TraitList(
Text("Legendary Actions") title:"Legendary Actions",
.font(.system(size: 20, weight: .bold)) traits: viewModel.legendaryActions,
ForEach(viewModel.legendaryActions) { action in viewModel: viewModel)
VStack { }
Markdown(Document(action.renderedText(viewModel)))
Divider() // Lair Actions
} if (viewModel.lairActions.count > 0) {
} TraitList(
} title: "Lair Actions",
traits: viewModel.lairActions,
viewModel: viewModel)
}
// Regional Actions
if (viewModel.regionalActions.count > 0) {
TraitList(
title: "Regional Actions",
traits: viewModel.regionalActions,
viewModel: viewModel)
} }
} }
} }
@@ -294,9 +326,6 @@ struct MonsterDetailView: View {
struct MonsterDetailWrapper: View { struct MonsterDetailWrapper: View {
// TODO: Add display for when the monster is blind // TODO: Add display for when the monster is blind
// TODO: Add display for lair actions
// TODO: Add display for regional actions
// TODO: Add display for reactions
let kTextColor: Color = Color(hex: 0x982818) let kTextColor: Color = Color(hex: 0x982818)
@ObservedObject var monster: Monster @ObservedObject var monster: Monster