Moved creature variables to their own collection

Another big change to the engine, expect bugs
This commit is contained in:
Stefan Zermatten
2022-06-29 14:54:25 +02:00
parent 9dd84a83d2
commit f07f05ca2c
14 changed files with 174 additions and 70 deletions

View File

@@ -27,33 +27,33 @@
>
<v-card class="class-details mb-2">
<v-card-title
v-if="creature.variables.level"
v-if="variables.level"
class="text-h6"
>
Level {{ creature.variables.level.value }}
Level {{ variables.level.value }}
</v-card-title>
<v-list two-line>
<v-list-item>
<v-list-item-content>
<v-list-item-title
v-if="
creature.variables.milestoneLevels &&
creature.variables.milestoneLevels.value
variables.milestoneLevels &&
variables.milestoneLevels.value
"
>
{{ creature.variables.milestoneLevels.value }} Milestone levels
{{ variables.milestoneLevels.value }} Milestone levels
</v-list-item-title>
<v-list-item-title
v-if="
!(creature.variables.milestoneLevels &&
creature.variables.milestoneLevels.value) ||
(creature.variables.xp &&
creature.variables.xp.value)
!(variables.milestoneLevels &&
variables.milestoneLevels.value) ||
(variables.xp &&
variables.xp.value)
"
>
{{
creature.variables.xp &&
creature.variables.xp.value ||
variables.xp &&
variables.xp.value ||
0
}} XP
</v-list-item-title>
@@ -103,6 +103,7 @@ import CreatureProperties from '/imports/api/creature/creatureProperties/Creatur
import { nodeArrayToTree } from '/imports/api/parenting/nodesToTree.js';
import BuildTreeNodeList from '/imports/ui/creature/buildTree/BuildTreeNodeList.vue';
import SlotCardsToFill from '/imports/ui/creature/slots/SlotCardsToFill.vue';
import CreatureVariables from '../../../../api/creature/creatures/CreatureVariables';
function traverse(tree, callback, parents = []){
tree.forEach(node => {
@@ -152,6 +153,9 @@ export default {
creature(){
return Creatures.findOne(this.creatureId);
},
variables() {
return CreatureVariables.findOne({ _creatureId: this.creatureId }) || {};
},
classLevels(){
return CreatureProperties.find({
'ancestors.id': this.creatureId,
@@ -217,8 +221,8 @@ export default {
elementId: 'experience-add-button',
data: {
creatureIds: [this.creatureId],
startAsMilestone: this.creature.variables.milestoneLevels &&
!!this.creature.variables.milestoneLevels.value,
startAsMilestone: this.variables.milestoneLevels &&
!!this.variables.milestoneLevels.value,
},
});
},
@@ -228,8 +232,8 @@ export default {
elementId: 'experience-info-button',
data: {
creatureId: this.creatureId,
startAsMilestone: this.creature.variables.milestoneLevels &&
!!this.creature.variables.milestoneLevels.value,
startAsMilestone: this.variables.milestoneLevels &&
!!this.variables.milestoneLevels.value,
},
});
},

View File

@@ -31,12 +31,12 @@
<v-list-item-action>
<v-list-item-title>
<coin-value
:value="creature.variables && creature.variables.valueTotal && creature.variables.valueTotal.value|| 0"
:value="variables && variables.valueTotal && variables.valueTotal.value|| 0"
/>
</v-list-item-title>
</v-list-item-action>
</v-list-item>
<v-list-item v-if="creature.variables && creature.variables.itemsAttuned && creature.variables.itemsAttuned.value">
<v-list-item v-if="variables && variables.itemsAttuned && variables.itemsAttuned.value">
<v-list-item-avatar>
<v-icon>$vuetify.icons.spell</v-icon>
</v-list-item-avatar>
@@ -47,7 +47,7 @@
</v-list-item-content>
<v-list-item-action>
<v-list-item-title>
{{ creature.variables.itemsAttuned.value }}
{{ variables.itemsAttuned.value }}
</v-list-item-title>
</v-list-item-action>
</v-list-item>
@@ -104,6 +104,7 @@ import getParentRefByTag from '/imports/api/creature/creatureProperties/methods/
import BUILT_IN_TAGS from '/imports/constants/BUILT_IN_TAGS.js';
import CoinValue from '/imports/ui/components/CoinValue.vue';
import stripFloatingPointOddities from '/imports/api/engine/computation/utility/stripFloatingPointOddities.js';
import CreatureVariables from '../../../../api/creature/creatures/CreatureVariables';
export default {
components: {
@@ -138,6 +139,9 @@ export default {
color: 1,
variables: 1,
}});
},
variables() {
return CreatureVariables.findOne({ _creatureId: this.creatureId }) || {};
},
containersWithoutAncestorContainers(){
return CreatureProperties.find({
@@ -206,9 +210,9 @@ export default {
},
weightCarried(){
return stripFloatingPointOddities(
this.creature.variables &&
this.creature.variables.weightCarried &&
this.creature.variables.weightCarried.value || 0
this.variables &&
this.variables.weightCarried &&
this.variables.weightCarried.value || 0
);
},
},

View File

@@ -180,7 +180,7 @@
</template>
<script lang="js">
import Creatures from '/imports/api/creature/creatures/Creatures.js';
import CreatureVariables from '/imports/api/creature/creatures/CreatureVariables.js';
import CreatureProperties from '/imports/api/creature/creatureProperties/CreatureProperties.js';
import LibraryNodes from '/imports/api/library/LibraryNodes.js';
import DialogBase from '/imports/ui/dialogStack/DialogBase.vue';
@@ -297,9 +297,9 @@ export default {
return model;
}
},
creature(){
if (!this.creatureId) return {variables: {}};
return Creatures.findOne(this.creatureId);
variables() {
if (!this.creatureId) return {};
return CreatureVariables.findOne({ _creatureId: this.creatureId }) || {};
},
currentLimit(){
return this._subs['slotFillers'].data('limit') || 50;
@@ -363,7 +363,7 @@ export default {
if (node.slotFillerCondition){
try {
let parseNode = parse(node.slotFillerCondition);
const {result: resultNode} = resolve('reduce', parseNode, this.creature.variables);
const {result: resultNode} = resolve('reduce', parseNode, this.variables);
if (resultNode?.parseType === 'constant'){
if (!resultNode.value){
node._disabledBySlotFillerCondition = true;