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 {
|
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"))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user