From 58949e14fe33e7634488177c682d2b5e9068c5da Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Mon, 11 Feb 2019 16:15:57 +0200 Subject: [PATCH] Added a tree view of the character, fixed the issue it revealed --- .../api/creature/creatureCollections.js | 45 ++++++++++ .../api/creature/getDefaultCharacterDocs.js | 3 +- .../api/creature/properties/Attributes.js | 3 +- app/imports/ui/character/CharacterSheet.vue | 24 +++++- .../ui/character/CharacterTreeView.vue | 85 +++++++++++++++++++ 5 files changed, 157 insertions(+), 3 deletions(-) create mode 100644 app/imports/api/creature/creatureCollections.js create mode 100644 app/imports/ui/character/CharacterTreeView.vue diff --git a/app/imports/api/creature/creatureCollections.js b/app/imports/api/creature/creatureCollections.js new file mode 100644 index 00000000..a0c8c903 --- /dev/null +++ b/app/imports/api/creature/creatureCollections.js @@ -0,0 +1,45 @@ +import Actions from '/imports/api/creature/properties/Actions.js'; +import Attacks from '/imports/api/creature/properties/Attacks.js'; +import Attributes from '/imports/api/creature/properties/Attributes.js'; +import Buffs from '/imports/api/creature/properties/Buffs.js'; +import Bundles from '/imports/api/creature/properties/Bundles.js'; +import Classes from '/imports/api/creature/properties/Classes.js'; +import Conditions from '/imports/api/creature/properties/Conditions.js'; +import CustomBuffs from '/imports/api/creature/properties/CustomBuffs.js'; +import DamageMultipliers from '/imports/api/creature/properties/DamageMultipliers.js'; +import Effects from '/imports/api/creature/properties/Effects.js'; +import Experiences from '/imports/api/creature/properties/Experiences.js'; +import Features from '/imports/api/creature/properties/Features.js'; +import Notes from '/imports/api/creature/properties/Notes.js'; +import Proficiencies from '/imports/api/creature/properties/Proficiencies.js'; +import Skills from '/imports/api/creature/properties/Skills.js'; +import SpellLists from '/imports/api/creature/properties/SpellLists.js'; +import Spells from '/imports/api/creature/properties/Spells.js'; +import Containers from '/imports/api/inventory/Containers.js'; +import Items from '/imports/api/inventory/Items.js'; + +// All theses collections have the field {charId: String} +// Collate them here in case we need to do something on all the collections of +// a creature + +export default [ + Actions, + Attacks, + Attributes, + Buffs, + Bundles, + Classes, + Conditions, + CustomBuffs, + DamageMultipliers, + Effects, + Experiences, + Features, + Notes, + Proficiencies, + Skills, + SpellLists, + Spells, + Containers, + Items, +]; diff --git a/app/imports/api/creature/getDefaultCharacterDocs.js b/app/imports/api/creature/getDefaultCharacterDocs.js index e3cc41df..31592518 100644 --- a/app/imports/api/creature/getDefaultCharacterDocs.js +++ b/app/imports/api/creature/getDefaultCharacterDocs.js @@ -8,7 +8,7 @@ const setParent = function(charId){ group: "default", }; return doc => { - doc.parent = parent; + doc.parent = doc.parent || parent; doc.charId = charId; }; }; @@ -102,6 +102,7 @@ const getDefaultCharacterDocs = function(charId, { const strippedCls = cls.replace(/\s+/g, '') const classId = Random.id(); docs.classes = [{ + _id: classId, charId, level, name: cls, diff --git a/app/imports/api/creature/properties/Attributes.js b/app/imports/api/creature/properties/Attributes.js index 7b2d918d..08a1686a 100644 --- a/app/imports/api/creature/properties/Attributes.js +++ b/app/imports/api/creature/properties/Attributes.js @@ -20,15 +20,16 @@ attributeSchema = schema({ // The nice-to-read name name: { type: String, - index: 1, }, // The technical, lowercase, single-word name used in formulae variableName: { type: String, + index: 1, }, // Attributes need to store their order to keep the sheet consistent order: { type: SimpleSchema.Integer, + // Indexed because we update order in bulk using the current order as a query index: 1, }, type: { diff --git a/app/imports/ui/character/CharacterSheet.vue b/app/imports/ui/character/CharacterSheet.vue index 43aa19a4..08f41cc4 100644 --- a/app/imports/ui/character/CharacterSheet.vue +++ b/app/imports/ui/character/CharacterSheet.vue @@ -8,9 +8,28 @@ refresh {{character.name}} + + + Stats + + + Tree + + - + + + + + + + + @@ -24,6 +43,7 @@ import { mapMutations } from "vuex"; import theme from '/imports/ui/theme.js'; import StatsTab from '/imports/ui/character/StatsTab.vue'; + import CharacterTreeView from '/imports/ui/character/CharacterTreeView.vue'; import { recomputeCreature } from '/imports/api/creature/creatureComputation.js' export default { @@ -33,6 +53,7 @@ }, components: { StatsTab, + CharacterTreeView, }, watch: { charId(newValue){ @@ -41,6 +62,7 @@ }, data(){return { theme, + tab: 1, }}, methods: { ...mapMutations([ diff --git a/app/imports/ui/character/CharacterTreeView.vue b/app/imports/ui/character/CharacterTreeView.vue new file mode 100644 index 00000000..e03693be --- /dev/null +++ b/app/imports/ui/character/CharacterTreeView.vue @@ -0,0 +1,85 @@ + + + + +