diff --git a/app/imports/api/creature/creatures/methods/restCreature.js b/app/imports/api/creature/creatures/methods/restCreature.js
index c75e3cd8..0115db52 100644
--- a/app/imports/api/creature/creatures/methods/restCreature.js
+++ b/app/imports/api/creature/creatures/methods/restCreature.js
@@ -44,8 +44,8 @@ const restCreature = new ValidatedMethod({
let filter = {
'ancestors.id': creatureId,
reset: resetFilter,
- removed: {$ne: true},
- inactive: {$ne: true},
+ removed: { $ne: true },
+ inactive: { $ne: true },
};
// update all attribute's damage
filter.type = 'attribute';
diff --git a/app/imports/api/engine/computeCreature.js b/app/imports/api/engine/computeCreature.js
index 7bc1a953..c1de8c44 100644
--- a/app/imports/api/engine/computeCreature.js
+++ b/app/imports/api/engine/computeCreature.js
@@ -6,7 +6,7 @@ import writeErrors from './computation/writeComputation/writeErrors.js';
export default function computeCreature(creatureId){
if (Meteor.isClient) return;
- console.log('compute')
+ // console.log('compute ' + creatureId);
const computation = buildCreatureComputation(creatureId);
computeComputation(computation, creatureId);
}
diff --git a/app/imports/api/engine/loadCreatures.js b/app/imports/api/engine/loadCreatures.js
index 0a60250b..c6021b22 100644
--- a/app/imports/api/engine/loadCreatures.js
+++ b/app/imports/api/engine/loadCreatures.js
@@ -2,6 +2,8 @@ import { debounce } from 'lodash';
import CreatureProperties from '/imports/api/creature/creatureProperties/CreatureProperties.js';
import Creatures from '/imports/api/creature/creatures/Creatures.js';
import computeCreature from './computeCreature';
+
+const COMPUTE_DEBOUNCE_TIME = 100; // ms
export const loadedCreatures = new Map(); // creatureId => {creature, properties, etc.}
export function loadCreature(creatureId, subscription) {
@@ -40,7 +42,7 @@ class LoadedCreature {
const compute = debounce(Meteor.bindEnvironment(() => {
computeCreature(creatureId);
- }), 100);
+ }), COMPUTE_DEBOUNCE_TIME);
self.properties = new Map();
// Observe all creature properties which are needed for computation
diff --git a/app/imports/ui/components/CardHighlight.vue b/app/imports/ui/components/CardHighlight.vue
index 42a25fcc..714cdb28 100644
--- a/app/imports/ui/components/CardHighlight.vue
+++ b/app/imports/ui/components/CardHighlight.vue
@@ -18,7 +18,7 @@
props: {
active: Boolean,
dark: Boolean,
- }
+ },
}
diff --git a/app/imports/ui/creature/buildTree/BuildTreeNode.vue b/app/imports/ui/creature/buildTree/BuildTreeNode.vue
index 42e66f4f..45d4d07d 100644
--- a/app/imports/ui/creature/buildTree/BuildTreeNode.vue
+++ b/app/imports/ui/creature/buildTree/BuildTreeNode.vue
@@ -4,7 +4,7 @@
:class="{
'empty': !hasChildren,
}"
- :data-id="`tree-node-${node._id}`"
+ :data-id="`build-tree-node-${node._id}`"
>
:
@@ -69,6 +68,7 @@
$emit('selected', e)"
/>
1 && this.node.spaceLeft > 0)
- ),
+ expanded: false,
+ /* expand if there's a slot needing attention:
+ this.node._descendantCanFill || (
+ this.node.type === 'propertySlot' &&
+ this. node.quantityExpected?.value === 0 ||
+ (this.node.quantityExpected?.value > 1 && this.node.spaceLeft > 0)
+ )
+ */
}},
computed: {
condenseChild(){
- return this.node.type === 'propertySlot' && this.children.length === 1;
+ return this.node.type === 'propertySlot' &&
+ this.children.length === 1 &&
+ this.children[0].node.type !== 'propertySlot' &&
+ this.node.quantityExpected &&
+ this.node.quantityExpected.value === 1;
},
isSlot(){
return this.node.type === 'propertySlot';
diff --git a/app/imports/ui/creature/buildTree/FillSlotButton.vue b/app/imports/ui/creature/buildTree/FillSlotButton.vue
index 0718f64c..a0f03233 100644
--- a/app/imports/ui/creature/buildTree/FillSlotButton.vue
+++ b/app/imports/ui/creature/buildTree/FillSlotButton.vue
@@ -4,7 +4,7 @@
icon
:data-id="`slot-add-button-${model._id}`"
class="slot-add-button accent--text"
- @click="fillSlot()"
+ @click.stop="fillSlot()"
>
mdi-plus
diff --git a/app/imports/ui/creature/character/characterSheetTabs/BuildTab.vue b/app/imports/ui/creature/character/characterSheetTabs/BuildTab.vue
index 7c0dd224..2aad0870 100644
--- a/app/imports/ui/creature/character/characterSheetTabs/BuildTab.vue
+++ b/app/imports/ui/creature/character/characterSheetTabs/BuildTab.vue
@@ -1,13 +1,30 @@
-
-
+
+
+
+
+
+
+
Slots
-
+ propertyClicked({_id, prefix: 'build-tree-node-'})"
+ />
-
+
-
-
-
- Build
-
-
-
-
- mdi-pencil
-
-
-
-
-
-
-
@@ -106,11 +100,9 @@
diff --git a/app/imports/ui/creature/slots/SlotCardsToFill.vue b/app/imports/ui/creature/slots/SlotCardsToFill.vue
new file mode 100644
index 00000000..88d3e816
--- /dev/null
+++ b/app/imports/ui/creature/slots/SlotCardsToFill.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/imports/ui/creature/slots/SlotDetailsDialog.vue b/app/imports/ui/creature/slots/SlotDetailsDialog.vue
deleted file mode 100644
index c8a14aff..00000000
--- a/app/imports/ui/creature/slots/SlotDetailsDialog.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- Build
-
-
-
-
-
-
-
-
diff --git a/app/imports/ui/creature/slots/Slots.vue b/app/imports/ui/creature/slots/Slots.vue
deleted file mode 100644
index cf5570d9..00000000
--- a/app/imports/ui/creature/slots/Slots.vue
+++ /dev/null
@@ -1,160 +0,0 @@
-
-
-
-
- {{ slot.name }}
-
-
- {{ slot.totalFilled }} / {{ slot.quantityExpected.value }}
-
-
-
-
-
-
-
-
-
- mdi-delete
-
-
-
-
-
- mdi-plus
-
-
-
-
-
-
-
-
diff --git a/app/imports/ui/dialogStack/DialogComponentIndex.js b/app/imports/ui/dialogStack/DialogComponentIndex.js
index 7c32d4b9..4f0f96e0 100644
--- a/app/imports/ui/dialogStack/DialogComponentIndex.js
+++ b/app/imports/ui/dialogStack/DialogComponentIndex.js
@@ -18,7 +18,6 @@ const MoveLibraryNodeDialog = () => import('/imports/ui/library/MoveLibraryNodeD
const SelectCreaturesDialog = () => import('/imports/ui/tabletop/SelectCreaturesDialog.vue');
const SelectLibraryNodeDialog = () => import('/imports/ui/library/SelectLibraryNodeDialog.vue');
const ShareDialog = () => import('/imports/ui/sharing/ShareDialog.vue');
-const SlotDetailsDialog = () => import('/imports/ui/creature/slots/SlotDetailsDialog.vue');
const SlotFillDialog = () => import('/imports/ui/creature/slots/SlotFillDialog.vue');
const TierTooLowDialog = () => import('/imports/ui/user/TierTooLowDialog.vue');
const TransferOwnershipDialog = () => import('/imports/ui/sharing/TransferOwnershipDialog.vue');
@@ -45,7 +44,6 @@ export default {
SelectCreaturesDialog,
SelectLibraryNodeDialog,
ShareDialog,
- SlotDetailsDialog,
SlotFillDialog,
TierTooLowDialog,
TransferOwnershipDialog,