Adds reactions, lair actions, and regional actions to the editor and monster display.
This commit is contained in:
@@ -11,9 +11,6 @@ import SwiftUI
|
||||
struct EditMonster: View {
|
||||
// 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 lair actions
|
||||
// TODO: Add a way to edit regional actions
|
||||
// TODO: Add a way to edit reactions
|
||||
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
|
||||
@Environment(\.managedObjectContext) private var viewContext
|
||||
|
||||
@@ -51,24 +48,39 @@ struct EditMonster: View {
|
||||
|
||||
NavigationLink(
|
||||
"Condition Immunities",
|
||||
destination: EditStrings(viewModel: monsterViewModel, path: \.conditionImmunities, title: "Condition Immunities"))
|
||||
destination: EditStrings(
|
||||
viewModel: monsterViewModel,
|
||||
path: \.conditionImmunities,
|
||||
title: "Condition Immunities"))
|
||||
|
||||
NavigationLink(
|
||||
"Damage Immunities",
|
||||
destination: EditStrings(viewModel: monsterViewModel, path: \.damageImmunities, title: "Damage Immunities"))
|
||||
destination: EditStrings(
|
||||
viewModel: monsterViewModel,
|
||||
path: \.damageImmunities,
|
||||
title: "Damage Immunities"))
|
||||
|
||||
NavigationLink(
|
||||
"Damage Resistances",
|
||||
destination: EditStrings(viewModel: monsterViewModel, path: \.damageResistances, title: "Damage Resistances"))
|
||||
destination: EditStrings(
|
||||
viewModel: monsterViewModel,
|
||||
path: \.damageResistances,
|
||||
title: "Damage Resistances"))
|
||||
|
||||
NavigationLink(
|
||||
"Damage Vulnerabilities",
|
||||
destination: EditStrings(viewModel: monsterViewModel, path: \.damageVulnerabilities, title: "Damage Vulnerabilities"))
|
||||
destination: EditStrings(
|
||||
viewModel: monsterViewModel,
|
||||
path: \.damageVulnerabilities,
|
||||
title: "Damage Vulnerabilities"))
|
||||
}
|
||||
Group {
|
||||
NavigationLink(
|
||||
"Senses",
|
||||
destination: EditStrings(viewModel: monsterViewModel, path: \.senses, title: "Senses"))
|
||||
destination: EditStrings(
|
||||
viewModel: monsterViewModel,
|
||||
path: \.senses,
|
||||
title: "Senses"))
|
||||
|
||||
NavigationLink(
|
||||
"Languages",
|
||||
@@ -79,15 +91,46 @@ struct EditMonster: View {
|
||||
destination: EditChallengeRating(viewModel: monsterViewModel))
|
||||
|
||||
NavigationLink(
|
||||
"Abilities", destination: EditTraits(viewModel: monsterViewModel, path: \.abilities, title: "Abilities"))
|
||||
"Abilities",
|
||||
destination: EditTraits(
|
||||
viewModel: monsterViewModel,
|
||||
path: \.abilities,
|
||||
title: "Abilities"))
|
||||
|
||||
NavigationLink(
|
||||
"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(
|
||||
"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"))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
let kTextColor = Color(hex: 0x982818)
|
||||
|
||||
var viewModel: MonsterViewModel
|
||||
@ObservedObject var viewModel: MonsterViewModel
|
||||
|
||||
var body: some View {
|
||||
let monsterLanguagesDescription = viewModel.languagesDescription
|
||||
@@ -259,30 +279,42 @@ struct MonsterDetailView: View {
|
||||
|
||||
// Actions
|
||||
if (viewModel.actions.count > 0) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("Actions")
|
||||
.font(.system(size: 24, weight: .bold))
|
||||
ForEach(viewModel.actions) { action in
|
||||
VStack {
|
||||
Markdown(Document(action.renderedText(viewModel)))
|
||||
Divider()
|
||||
}
|
||||
}
|
||||
TraitList(
|
||||
title:"Actions",
|
||||
traits: viewModel.actions,
|
||||
viewModel: viewModel)
|
||||
}
|
||||
|
||||
// Reactions
|
||||
if (viewModel.reactions.count > 0) {
|
||||
TraitList(
|
||||
title:"Reactions",
|
||||
traits: viewModel.reactions,
|
||||
viewModel: viewModel)
|
||||
}
|
||||
|
||||
// Legendary Actions
|
||||
if (viewModel.legendaryActions.count > 0) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("Legendary Actions")
|
||||
.font(.system(size: 20, weight: .bold))
|
||||
ForEach(viewModel.legendaryActions) { action in
|
||||
VStack {
|
||||
Markdown(Document(action.renderedText(viewModel)))
|
||||
Divider()
|
||||
}
|
||||
TraitList(
|
||||
title:"Legendary Actions",
|
||||
traits: viewModel.legendaryActions,
|
||||
viewModel: viewModel)
|
||||
}
|
||||
|
||||
// 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 {
|
||||
// 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)
|
||||
|
||||
@ObservedObject var monster: Monster
|
||||
|
||||
Reference in New Issue
Block a user