From e7ccc0e1ab97aeda76007388d7fc718b4ee41015 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Sun, 4 Apr 2021 17:48:06 -0700 Subject: [PATCH] Adds reactions, lair actions, and regional actions to the editor and monster display. --- iOS/MonsterCards/Views/EditMonster.swift | 65 ++++++++++++++---- iOS/MonsterCards/Views/MonsterDetail.swift | 77 +++++++++++++++------- 2 files changed, 107 insertions(+), 35 deletions(-) diff --git a/iOS/MonsterCards/Views/EditMonster.swift b/iOS/MonsterCards/Views/EditMonster.swift index 7a838f5..9a962b2 100644 --- a/iOS/MonsterCards/Views/EditMonster.swift +++ b/iOS/MonsterCards/Views/EditMonster.swift @@ -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 @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")) } } diff --git a/iOS/MonsterCards/Views/MonsterDetail.swift b/iOS/MonsterCards/Views/MonsterDetail.swift index c6ed665..1dda0df 100644 --- a/iOS/MonsterCards/Views/MonsterDetail.swift +++ b/iOS/MonsterCards/Views/MonsterDetail.swift @@ -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