Adds actions.
This commit is contained in:
@@ -61,6 +61,7 @@ class MonsterViewModel: ObservableObject {
|
|||||||
@Published var customChallengeRating: String
|
@Published var customChallengeRating: String
|
||||||
@Published var customProficiencyBonus: Int64
|
@Published var customProficiencyBonus: Int64
|
||||||
@Published var abilities: [AbilityViewModel]
|
@Published var abilities: [AbilityViewModel]
|
||||||
|
@Published var actions: [AbilityViewModel]
|
||||||
|
|
||||||
init(_ rawMonster: Monster? = nil) {
|
init(_ rawMonster: Monster? = nil) {
|
||||||
self.name = ""
|
self.name = ""
|
||||||
@@ -114,6 +115,7 @@ class MonsterViewModel: ObservableObject {
|
|||||||
self.customChallengeRating = ""
|
self.customChallengeRating = ""
|
||||||
self.customProficiencyBonus = 0
|
self.customProficiencyBonus = 0
|
||||||
self.abilities = []
|
self.abilities = []
|
||||||
|
self.actions = []
|
||||||
|
|
||||||
if (rawMonster != nil) {
|
if (rawMonster != nil) {
|
||||||
self.copyFromMonster(monster: rawMonster!)
|
self.copyFromMonster(monster: rawMonster!)
|
||||||
@@ -194,6 +196,9 @@ class MonsterViewModel: ObservableObject {
|
|||||||
// These are manually sorted in the UI
|
// These are manually sorted in the UI
|
||||||
self.abilities = (monster.abilities ?? [])
|
self.abilities = (monster.abilities ?? [])
|
||||||
.map {AbilityViewModel($0.name, $0.abilityDescription)}
|
.map {AbilityViewModel($0.name, $0.abilityDescription)}
|
||||||
|
|
||||||
|
self.actions = (monster.actions ?? [])
|
||||||
|
.map {AbilityViewModel($0.name, $0.abilityDescription)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func copyToMonster(monster: Monster) {
|
func copyToMonster(monster: Monster) {
|
||||||
@@ -271,5 +276,7 @@ class MonsterViewModel: ObservableObject {
|
|||||||
monster.languages = languages.map {LanguageViewModel($0.name, $0.speaks)}
|
monster.languages = languages.map {LanguageViewModel($0.name, $0.speaks)}
|
||||||
|
|
||||||
monster.abilities = abilities.map {AbilityViewModel($0.name, $0.abilityDescription)}
|
monster.abilities = abilities.map {AbilityViewModel($0.name, $0.abilityDescription)}
|
||||||
|
|
||||||
|
monster.actions = actions.map {AbilityViewModel($0.name, $0.abilityDescription)}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="17709" systemVersion="20D91" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithCloudKit="YES" userDefinedModelVersionIdentifier="">
|
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="17709" systemVersion="20D91" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithCloudKit="YES" userDefinedModelVersionIdentifier="">
|
||||||
<entity name="Monster" representedClassName="Monster" syncable="YES" codeGenerationType="category">
|
<entity name="Monster" representedClassName="Monster" syncable="YES" codeGenerationType="category">
|
||||||
<attribute name="abilities" optional="YES" attributeType="Transformable" valueTransformerName="AbilityViewModelValueTransformer" customClassName="[AbilityViewModel]"/>
|
<attribute name="abilities" optional="YES" attributeType="Transformable" valueTransformerName="AbilityViewModelValueTransformer" customClassName="[AbilityViewModel]"/>
|
||||||
|
<attribute name="actions" optional="YES" attributeType="Transformable" valueTransformerName="AbilityViewModelValueTransformer" customClassName="[AbilityViewModel]"/>
|
||||||
<attribute name="alignment" attributeType="String" defaultValueString=""/>
|
<attribute name="alignment" attributeType="String" defaultValueString=""/>
|
||||||
<attribute name="armorType" attributeType="String" defaultValueString=""/>
|
<attribute name="armorType" attributeType="String" defaultValueString=""/>
|
||||||
<attribute name="baseSpeed" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
|
<attribute name="baseSpeed" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
|
||||||
@@ -68,7 +69,7 @@
|
|||||||
<relationship name="monster" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Monster" inverseName="skills" inverseEntity="Monster"/>
|
<relationship name="monster" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Monster" inverseName="skills" inverseEntity="Monster"/>
|
||||||
</entity>
|
</entity>
|
||||||
<elements>
|
<elements>
|
||||||
<element name="Monster" positionX="-63" positionY="-18" width="128" height="899"/>
|
<element name="Monster" positionX="-63" positionY="-18" width="128" height="914"/>
|
||||||
<element name="Skill" positionX="-63" positionY="135" width="128" height="14"/>
|
<element name="Skill" positionX="-63" positionY="135" width="128" height="14"/>
|
||||||
</elements>
|
</elements>
|
||||||
</model>
|
</model>
|
||||||
@@ -76,6 +76,10 @@ struct EditMonster: View {
|
|||||||
|
|
||||||
NavigationLink(
|
NavigationLink(
|
||||||
"Abilities", destination: EditAbilities(viewModel: monsterViewModel, path: \.abilities, title: "Abilities"))
|
"Abilities", destination: EditAbilities(viewModel: monsterViewModel, path: \.abilities, title: "Abilities"))
|
||||||
|
|
||||||
|
NavigationLink(
|
||||||
|
"Actions",
|
||||||
|
destination: EditAbilities(viewModel: monsterViewModel, path: \.actions, title: "Actions"))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,6 +211,7 @@ struct MonsterDetail: View {
|
|||||||
let monsterLanguagesDescription = monster.languagesDescription
|
let monsterLanguagesDescription = monster.languagesDescription
|
||||||
let monsterChallengeRatingDescription = monster.challengeRatingDescription
|
let monsterChallengeRatingDescription = monster.challengeRatingDescription
|
||||||
let monsterAbilities: [AbilityViewModel] = monster.abilities ?? []
|
let monsterAbilities: [AbilityViewModel] = monster.abilities ?? []
|
||||||
|
let monsterActions: [AbilityViewModel] = monster.actions ?? []
|
||||||
|
|
||||||
BasicInfoView(monster: monster)
|
BasicInfoView(monster: monster)
|
||||||
|
|
||||||
@@ -248,13 +249,24 @@ struct MonsterDetail: View {
|
|||||||
if (monsterAbilities.count > 0) {
|
if (monsterAbilities.count > 0) {
|
||||||
ForEach(monsterAbilities) { ability in
|
ForEach(monsterAbilities) { ability in
|
||||||
VStack {
|
VStack {
|
||||||
Markdown(Document(ability.renderedText(monster)/*.fullText*/))
|
Markdown(Document(ability.renderedText(monster)))
|
||||||
Divider()
|
Divider()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
|
if (monsterActions.count > 0) {
|
||||||
|
VStack {
|
||||||
|
Text("Actions")
|
||||||
|
ForEach(monsterActions) { action in
|
||||||
|
VStack {
|
||||||
|
Markdown(Document(action.renderedText(monster)))
|
||||||
|
Divider()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Legendary Actions
|
// Legendary Actions
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user