Added more property viewers

This commit is contained in:
Stefan Zermatten
2019-08-05 12:04:26 +02:00
parent d45b184170
commit 5436b12108
15 changed files with 320 additions and 34 deletions

View File

@@ -18,7 +18,6 @@ import { SpellSchema } from '/imports/api/properties/Spells.js';
import { ContainerSchema } from '/imports/api/properties/Containers.js';
import { ItemSchema } from '/imports/api/properties/Items.js';
const librarySchemas = {
action: ActionSchema,
attribute: AttributeSchema,

View File

@@ -1,6 +1,6 @@
import SimpleSchema from 'simpl-schema';
import AdjustmentSchema from '/imports/api/creature/subSchemas/AdjustmentSchema.js';
import StoredBuffSchema from '/imports/api/properties/Buffs.js';
import { StoredBuffWithIdSchema } from '/imports/api/properties/Buffs.js';
/*
* Actions are things a character can do
@@ -58,7 +58,7 @@ let ActionSchema = new SimpleSchema({
defaultValue: [],
},
'buffs.$': {
type: StoredBuffSchema,
type: StoredBuffWithIdSchema,
},
// Calculation of how many times this action can be used
// Only set if this action tracks its own uses, rather than adjusting

View File

@@ -2,10 +2,6 @@ import SimpleSchema from 'simpl-schema';
import { EffectSchema } from '/imports/api/properties/Effects.js';
let BuffSchema = new SimpleSchema({
_id: {
type: String,
regEx: SimpleSchema.RegEx.Id,
},
name: {
type: String,
optional: true,
@@ -42,6 +38,13 @@ let StoredBuffSchema = new SimpleSchema({
},
}).extend(BuffSchema);
let StoredBuffWithIdSchema = new SimpleSchema({
_id: {
type: String,
regEx: SimpleSchema.RegEx.Id,
},
}).extend(StoredBuffSchema);
let AppliedBuffSchema = new SimpleSchema({
durationSpent: {
type: Number,
@@ -63,4 +66,4 @@ let AppliedBuffSchema = new SimpleSchema({
},
}).extend(BuffSchema);
export { AppliedBuffSchema, StoredBuffSchema };
export { AppliedBuffSchema, StoredBuffSchema, StoredBuffWithIdSchema };

View File

@@ -4,10 +4,6 @@ let FeatureSchema = new SimpleSchema({
name: {
type: String,
},
enabled: {
type: Boolean,
defaultValue: true,
},
description: {
type: String,
optional: true,

View File

@@ -1,6 +1,6 @@
import SimpleSchema from 'simpl-schema';
import AdjustmentSchema from '/imports/api/creature/subSchemas/AdjustmentSchema.js';
import StoredBuffSchema from '/imports/api/properties/Buffs.js';
import { StoredBuffWithIdSchema } from '/imports/api/properties/Buffs.js';
let RollChildrenSchema = new SimpleSchema({
// The adjustments to be applied
@@ -17,7 +17,7 @@ let RollChildrenSchema = new SimpleSchema({
defaultValue: [],
},
'buffs.$': {
type: StoredBuffSchema,
type: StoredBuffWithIdSchema,
},
});

View File

@@ -40,8 +40,10 @@
EffectViewer,
},
props: {
model: Object,
required: true,
model: {
type: Object,
required: true,
},
},
methods: {
numberToSignedString,

View File

@@ -0,0 +1,76 @@
<template lang="html">
<div class="attribute-viewer">
<div v-if="model.value !== undefined">
<div class="display-3" v-if="model.damage !== undefined">
{{model.value - model.damage}} / {{model.value}}
</div>
<div v-else>
{{model.value}}
</div>
</div>
<h1 class="display-1">
{{model.name}}
</h1>
<effect-viewer
class="mb-3"
operation="base"
v-for="effect in model.effects"
:model="effect"
/>
<div v-if="model.duration">
{{model.duration}}
</div>
<p v-if="model.description">
{{model.description}}
</p>
</div>
</template>
<script>
import numberToSignedString from '/imports/ui/utility/numberToSignedString.js';
import EffectViewer from '/imports/ui/properties/viewers/EffectViewer.vue';
export default {
components: {
EffectViewer,
},
props: {
model: {
type: Object,
required: true,
},
},
methods: {
numberToSignedString,
},
computed: {
reset(){
let reset = this.model.reset
if (reset === 'shortRest'){
return `Reset${
this.model.resetMultiplier && ' x' + this.model.resetMultiplier
} on a short rest`;
} else if (reset === 'longRest'){
return `Reset${
this.model.resetMultiplier && ' x' + this.model.resetMultiplier
} on a long rest`;
}
}
}
}
</script>
<style lang="css" scoped>
.ability-value {
font-weight: 600;
font-size: 24px !important;
color: rgba(0, 0, 0, 0.54);
}
.mod, .ability-value {
text-align: center;
width: 100%;
}
.attribute-value {
text-align: center;
}
</style>

View File

@@ -0,0 +1,33 @@
<template lang="html">
<div class="class-level-viewer">
<h1 class="display-1">
{{model.name}}
<span
class="display-2"
v-if="model.level"
>
{{model.level}}
</span>
</h1>
<p class="my-2">
<code>{{model.variableName}}</code>
</p>
<p class="my-2" v-if="model.baseClass">
Base class: <code>{{model.baseClass}}</code>
</p>
</div>
</template>
<script>
export default {
props: {
model: {
type: Object,
required: true,
},
}
}
</script>
<style lang="css" scoped>
</style>

View File

@@ -0,0 +1,36 @@
<template lang="html">
<div class="container-viewer">
<h1 class="display-1">
{{model.name}}
</h1>
<div v-if="!model.carried" class="caption">
Not carried
</div>
<div v-if="model.contentsWeightless" class="caption">
Contents are weightless
</div>
<div>
Weight: {{model.weight}} lbs
</div>
<div>
Value: {{model.value}} gp
</div>
<p v-if="model.description">
{{model.description}}
</p>
</div>
</template>
<script>
export default {
props: {
model: {
type: Object,
required: true,
},
},
}
</script>
<style lang="css" scoped>
</style>

View File

@@ -0,0 +1,33 @@
<template lang="html">
<div>
<h1 class="display-1">
{{model.name}}
</h1>
<div>
{{model.damageType}} {{operation}}
</div>
</div>
</template>
<script>
export default {
props: {
model: {
type: Object,
required: true,
}
},
computed: {
operation(){
switch (this.model.value){
case 0: return "immunity";
case 0.5: return "resistance";
case 2: return "vulnerability";
}
},
},
}
</script>
<style lang="css" scoped>
</style>

View File

@@ -0,0 +1,36 @@
<template lang="html">
<div class="experience-viewer">
<h1 class="display-1" v-if="model.value">
{{model.value}} XP
</h1>
<div class="headline layout row mb-3">
<div>
{{model.name}}
</div>
<v-spacer/>
<div>
{{model.worldDate}}
</div>
</div>
<p>
{{model.date}}
</p>
<p v-if="model.description">
{{model.description}}
</p>
</div>
</template>
<script>
export default {
props: {
model: {
type: Object,
required: true,
},
},
}
</script>
<style lang="css" scoped>
</style>

View File

@@ -0,0 +1,27 @@
<template lang="html">
<div class="feature-viewer">
<h1 class="display-1">
{{model.name}}
</h1>
<div v-if="model.alwaysEnabled" class="caption">
Always enabled
</div>
<p v-if="model.description">
{{model.description}}
</p>
</div>
</template>
<script>
export default {
props: {
model: {
type: Object,
required: true,
},
},
}
</script>
<style lang="css" scoped>
</style>

View File

@@ -0,0 +1,21 @@
<template lang="html">
<div class="folder-viewer">
<h1 class="display-1">
{{model.name}}
</h1>
</div>
</template>
<script>
export default {
props: {
model: {
type: Object,
required: true,
},
},
}
</script>
<style lang="css" scoped>
</style>

View File

@@ -0,0 +1,24 @@
<template lang="html">
<div class="note-viewer">
<h1 class="display-1">
{{model.name}}
</h1>
<p v-if="model.description">
{{model.description}}
</p>
</div>
</template>
<script>
export default {
props: {
model: {
type: Object,
required: true,
},
},
}
</script>
<style lang="css" scoped>
</style>

View File

@@ -1,15 +1,15 @@
//import ActionViewer from '/imports/ui/properties/viewers/ActionViewer.vue';
import AttributeViewer from '/imports/ui/properties/viewers/AttributeViewer.vue';
//import BuffViewer from '/imports/ui/properties/viewers/BuffViewer.vue';
//import ContainerViewer from '/imports/ui/properties/viewers/ContainerViewer.vue';
//import ClassLevelViewer from '/imports/ui/properties/viewers/ClassLevelViewer.vue';
//import DamageMultiplierViewer from '/imports/ui/properties/viewers/DamageMultiplierViewer.vue';
//import EffectViewer from '/imports/ui/properties/viewers/EffectViewer.vue';
//import ExperienceViewer from '/imports/ui/properties/viewers/ExperienceViewer.vue';
//import FeatureViewer from '/imports/ui/properties/viewers/FeatureViewer.vue';
//import FolderViewer from '/imports/ui/properties/viewers/FolderViewer.vue';
import BuffViewer from '/imports/ui/properties/viewers/BuffViewer.vue';
import ContainerViewer from '/imports/ui/properties/viewers/ContainerViewer.vue';
import ClassLevelViewer from '/imports/ui/properties/viewers/ClassLevelViewer.vue';
import DamageMultiplierViewer from '/imports/ui/properties/viewers/DamageMultiplierViewer.vue';
import EffectViewer from '/imports/ui/properties/viewers/EffectViewer.vue';
import ExperienceViewer from '/imports/ui/properties/viewers/ExperienceViewer.vue';
import FeatureViewer from '/imports/ui/properties/viewers/FeatureViewer.vue';
import FolderViewer from '/imports/ui/properties/viewers/FolderViewer.vue';
//import ItemViewer from '/imports/ui/properties/viewers/ItemViewer.vue';
//import NoteViewer from '/imports/ui/properties/viewers/NoteViewer.vue';
import NoteViewer from '/imports/ui/properties/viewers/NoteViewer.vue';
//import ProficiencyViewer from '/imports/ui/properties/viewers/ProficiencyViewer.vue';
//import RollViewer from '/imports/ui/properties/viewers/RollViewer.vue';
//import SkillViewer from '/imports/ui/properties/viewers/SkillViewer.vue';
@@ -19,16 +19,16 @@ import AttributeViewer from '/imports/ui/properties/viewers/AttributeViewer.vue'
export default {
// action: ActionViewer,
attribute: AttributeViewer,
// buff: BuffViewer,
// container: ContainerViewer,
// classLevel: ClassLevelViewer,
// damageMultiplier: DamageMultiplierViewer,
// experience:ExperienceViewer,
// effect: EffectViewer,
// feature: FeatureViewer,
// folder: FolderViewer,
buff: BuffViewer,
container: ContainerViewer,
classLevel: ClassLevelViewer,
damageMultiplier: DamageMultiplierViewer,
experience: ExperienceViewer,
effect: EffectViewer,
feature: FeatureViewer,
folder: FolderViewer,
// item: ItemViewer,
// note: NoteViewer,
note: NoteViewer,
// proficiency: ProficiencyViewer,
// roll: RollViewer,
// skill: SkillViewer,