Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f455cea43f | ||
|
|
e4083bc744 | ||
|
|
baffafb62a | ||
|
|
4143929667 | ||
|
|
18286d1b9c | ||
|
|
9f51567162 | ||
|
|
66d8a3bfbf | ||
|
|
a9648c10cc | ||
|
|
679292373c | ||
|
|
ae416458b5 | ||
|
|
0ff4a887ea | ||
|
|
955794b5c0 | ||
|
|
b0ac1dcc29 | ||
|
|
83150bc527 |
@@ -24,18 +24,12 @@ Schemas.Attack = new SimpleSchema({
|
|||||||
optional: true,
|
optional: true,
|
||||||
trim: false,
|
trim: false,
|
||||||
},
|
},
|
||||||
damageBonus: {
|
damage: {
|
||||||
type: String,
|
type: String,
|
||||||
defaultValue: "strengthMod",
|
defaultValue: "1d8 + {strengthMod}",
|
||||||
optional: true,
|
optional: true,
|
||||||
trim: false,
|
trim: false,
|
||||||
},
|
},
|
||||||
damageDice: {
|
|
||||||
type: String,
|
|
||||||
optional: true,
|
|
||||||
defaultValue: "1d8",
|
|
||||||
allowedValues: DAMAGE_DICE,
|
|
||||||
},
|
|
||||||
damageType: {
|
damageType: {
|
||||||
type: String,
|
type: String,
|
||||||
allowedValues: [
|
allowedValues: [
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ Schemas.Item = new SimpleSchema({
|
|||||||
value: {type: Number, min: 0, defaultValue: 0, decimal: true},
|
value: {type: Number, min: 0, defaultValue: 0, decimal: true},
|
||||||
enabled: {type: Boolean, defaultValue: false},
|
enabled: {type: Boolean, defaultValue: false},
|
||||||
requiresAttunement: {type: Boolean, defaultValue: false},
|
requiresAttunement: {type: Boolean, defaultValue: false},
|
||||||
|
"settings.showIncrement": {type: Boolean, defaultValue: false},
|
||||||
color: {
|
color: {
|
||||||
type: String,
|
type: String,
|
||||||
allowedValues: _.pluck(colorOptions, "key"),
|
allowedValues: _.pluck(colorOptions, "key"),
|
||||||
|
|||||||
@@ -15,8 +15,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"polymer": "Polymer/polymer#~0.5.5",
|
"polymer": "Polymer/polymer#~0.5.5",
|
||||||
"core-elements": "Polymer/core-elements#~0.5.5",
|
"core-elements": "Polymer/core-elements#~0.5.5",
|
||||||
"paper-elements": "Polymer/paper-elements#~0.5.5",
|
"paper-elements": "Polymer/paper-elements#~0.5.5"
|
||||||
"paper-fab-menu": "cwdoh/paper-fab-menu"
|
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"core-component-page": "^0.5.0",
|
"core-component-page": "^0.5.0",
|
||||||
|
|||||||
91
rpg-docs/client/style/cards.scss
Normal file
91
rpg-docs/client/style/cards.scss
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
@import "bourbon/bourbon";
|
||||||
|
|
||||||
|
$thickColumnWidth: 304px;
|
||||||
|
$thinColumnWidth: 240px;
|
||||||
|
|
||||||
|
//Column layouts of cards
|
||||||
|
.column-container {
|
||||||
|
@include column-fill(balance);
|
||||||
|
@include column-gap(8px);
|
||||||
|
@include column-width($thickColumnWidth);
|
||||||
|
padding: 8px;
|
||||||
|
|
||||||
|
&.thin-columns {
|
||||||
|
@include column-count(4);
|
||||||
|
@include column-width($thinColumnWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Cards
|
||||||
|
.card {
|
||||||
|
background: white;
|
||||||
|
border-radius: 2px;
|
||||||
|
|
||||||
|
.column-container & {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
width: 100%;
|
||||||
|
//hack to stop flickering
|
||||||
|
-webkit-backface-visibility: hidden;
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
//stop breaking over column divide
|
||||||
|
-webkit-column-break-inside: avoid;
|
||||||
|
page-break-inside: avoid;
|
||||||
|
break-inside: avoid;
|
||||||
|
//Fixes extra margin at top of columns
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top {
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 2px 2px 0 0;
|
||||||
|
&.white {
|
||||||
|
cursor: auto;
|
||||||
|
padding: 16px;
|
||||||
|
border-bottom: rgba(0,0,0,0.12) solid 1px;
|
||||||
|
}
|
||||||
|
paper-checkbox::shadow #ink[checked] {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
paper-checkbox::shadow #ink {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
paper-checkbox::shadow #checkbox.checked {
|
||||||
|
background-color: #ffffff;
|
||||||
|
background-color: rgba(255,255,255,0.27);
|
||||||
|
border-color: #ffffff;
|
||||||
|
border-color: rgba(255,255,255,0.27);
|
||||||
|
}
|
||||||
|
paper-checkbox::shadow #checkbox {
|
||||||
|
border-color: #ffffff;
|
||||||
|
border-color: rgba(255,255,255,0.54);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bottom {
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 0 0 2px 2px;
|
||||||
|
&.list {
|
||||||
|
padding: 0 0 16px 0;
|
||||||
|
.subhead {
|
||||||
|
color: rgba(0,0,0,0.54);
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
letter-spacing: 0.010em;
|
||||||
|
padding: 12px 16px 12px 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.text {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.left {
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 2px 0 0 2px;
|
||||||
|
text-align: center;
|
||||||
|
min-width: 72px;
|
||||||
|
}
|
||||||
|
.right {
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 0 2px 2px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
@import "bourbon/bourbon";
|
@import "bourbon/bourbon";
|
||||||
@import "colors";
|
@import "colors";
|
||||||
|
|
||||||
$thickColumnWidth: 304px;
|
|
||||||
$thinColumnWidth: 240px;
|
|
||||||
|
|
||||||
//apply a natural box layout model to all elements
|
//apply a natural box layout model to all elements
|
||||||
*, *:before, *:after {
|
*, *:before, *:after {
|
||||||
-moz-box-sizing: border-box;
|
-moz-box-sizing: border-box;
|
||||||
@@ -41,93 +38,6 @@ hr {
|
|||||||
right: 24px;
|
right: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Column layouts of cards
|
|
||||||
.column-container {
|
|
||||||
@include column-fill(balance);
|
|
||||||
@include column-gap(8px);
|
|
||||||
@include column-width($thickColumnWidth);
|
|
||||||
padding: 8px;
|
|
||||||
|
|
||||||
&.thin-columns {
|
|
||||||
@include column-count(4);
|
|
||||||
@include column-width($thinColumnWidth);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Cards
|
|
||||||
.card {
|
|
||||||
background: white;
|
|
||||||
border-radius: 2px;
|
|
||||||
|
|
||||||
.column-container & {
|
|
||||||
margin-bottom: 8px;
|
|
||||||
width: 100%;
|
|
||||||
//hack to stop flickering
|
|
||||||
-webkit-backface-visibility: hidden;
|
|
||||||
-webkit-transform: translateX(0);
|
|
||||||
//stop breaking over column divide
|
|
||||||
-webkit-column-break-inside: avoid;
|
|
||||||
page-break-inside: avoid;
|
|
||||||
break-inside: avoid;
|
|
||||||
//Fixes extra margin at top of columns
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top {
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 16px;
|
|
||||||
border-radius: 2px 2px 0 0;
|
|
||||||
&.white {
|
|
||||||
cursor: auto;
|
|
||||||
padding: 16px;
|
|
||||||
border-bottom: rgba(0,0,0,0.12) solid 1px;
|
|
||||||
}
|
|
||||||
paper-checkbox::shadow #ink[checked] {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
paper-checkbox::shadow #ink {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
paper-checkbox::shadow #checkbox.checked {
|
|
||||||
background-color: #ffffff;
|
|
||||||
background-color: rgba(255,255,255,0.27);
|
|
||||||
border-color: #ffffff;
|
|
||||||
border-color: rgba(255,255,255,0.27);
|
|
||||||
}
|
|
||||||
paper-checkbox::shadow #checkbox {
|
|
||||||
border-color: #ffffff;
|
|
||||||
border-color: rgba(255,255,255,0.54);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.bottom {
|
|
||||||
padding: 16px;
|
|
||||||
border-radius: 0 0 2px 2px;
|
|
||||||
&.list {
|
|
||||||
padding: 0 0 16px 0;
|
|
||||||
.subhead {
|
|
||||||
color: rgba(0,0,0,0.54);
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 500;
|
|
||||||
letter-spacing: 0.010em;
|
|
||||||
padding: 12px 16px 12px 16px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.text {
|
|
||||||
white-space: pre-wrap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.left {
|
|
||||||
padding: 16px;
|
|
||||||
border-radius: 2px 0 0 2px;
|
|
||||||
text-align: center;
|
|
||||||
min-width: 72px;
|
|
||||||
}
|
|
||||||
.right {
|
|
||||||
padding: 16px;
|
|
||||||
border-radius: 0 2px 2px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Buttons
|
//Buttons
|
||||||
paper-button {
|
paper-button {
|
||||||
color: #000;
|
color: #000;
|
||||||
@@ -146,3 +56,19 @@ paper-button {
|
|||||||
.clickable, core-item, paper-tab {
|
.clickable, core-item, paper-tab {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pre-wrap, .prewrap{
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.padded {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fullwidth {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fab-buffer {
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
|||||||
18
rpg-docs/client/style/tables.scss
Normal file
18
rpg-docs/client/style/tables.scss
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
td {
|
||||||
|
padding: 8px;
|
||||||
|
&:nth-child(1) {
|
||||||
|
min-width: 100px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.strengthTable{
|
||||||
|
width: 100%;
|
||||||
|
td{
|
||||||
|
&:nth-child(2) {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
&:nth-child(3) {
|
||||||
|
width: 250px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,21 +15,11 @@
|
|||||||
value={{details}}></paper-input>
|
value={{details}}></paper-input>
|
||||||
</div>
|
</div>
|
||||||
<div layout horizontal>
|
<div layout horizontal>
|
||||||
<!--DamageType-->
|
|
||||||
<paper-dropdown-menu id="damageDiceDropdown" label="Damage Dice">
|
|
||||||
<paper-dropdown layered class="dropdown">
|
|
||||||
<core-menu class="menu" selected={{damageDice}}>
|
|
||||||
{{#each DAMAGE_DICE}}
|
|
||||||
<paper-item name={{this}} class="containerMenuItem">{{this}}</paper-item>
|
|
||||||
{{/each}}
|
|
||||||
</core-menu>
|
|
||||||
</paper-dropdown>
|
|
||||||
</paper-dropdown-menu>
|
|
||||||
<!--damageBonus-->
|
<!--damageBonus-->
|
||||||
<paper-input id="damageInput"
|
<paper-input id="damageInput"
|
||||||
label="Damage Bonus"
|
label="Damage"
|
||||||
floatinglabel
|
floatinglabel
|
||||||
value={{damageBonus}}
|
value={{damage}}
|
||||||
flex></paper-input>
|
flex></paper-input>
|
||||||
<!--DamageType-->
|
<!--DamageType-->
|
||||||
<paper-dropdown-menu id="damageTypeDropdown" label="Damage Type">
|
<paper-dropdown-menu id="damageTypeDropdown" label="Damage Type">
|
||||||
|
|||||||
@@ -1,6 +1,18 @@
|
|||||||
var damageTypes = ["bludgeoning", "piercing", "slashing",
|
var damageTypes = [
|
||||||
"acid", "cold", "fire", "force", "lightning", "necrotic",
|
"bludgeoning",
|
||||||
"poison", "psychic", "radiant", "thunder"];
|
"piercing",
|
||||||
|
"slashing",
|
||||||
|
"acid",
|
||||||
|
"cold",
|
||||||
|
"fire",
|
||||||
|
"force",
|
||||||
|
"lightning",
|
||||||
|
"necrotic",
|
||||||
|
"poison",
|
||||||
|
"psychic",
|
||||||
|
"radiant",
|
||||||
|
"thunder",
|
||||||
|
];
|
||||||
|
|
||||||
Template.attackEdit.events({
|
Template.attackEdit.events({
|
||||||
"tap #deleteAttack": function(event, instance) {
|
"tap #deleteAttack": function(event, instance) {
|
||||||
@@ -13,7 +25,7 @@ Template.attackEdit.events({
|
|||||||
},
|
},
|
||||||
"change #damageInput": function(event) {
|
"change #damageInput": function(event) {
|
||||||
var value = event.currentTarget.value;
|
var value = event.currentTarget.value;
|
||||||
Attacks.update(this._id, {$set: {damageBonus: value}});
|
Attacks.update(this._id, {$set: {damage: value}});
|
||||||
},
|
},
|
||||||
"change #detailInput": function(event) {
|
"change #detailInput": function(event) {
|
||||||
var value = event.currentTarget.value;
|
var value = event.currentTarget.value;
|
||||||
@@ -26,13 +38,6 @@ Template.attackEdit.events({
|
|||||||
if (value == this.damageType) return;
|
if (value == this.damageType) return;
|
||||||
Attacks.update(this._id, {$set: {damageType: value}});
|
Attacks.update(this._id, {$set: {damageType: value}});
|
||||||
},
|
},
|
||||||
"core-select #damageDiceDropdown": function(event) {
|
|
||||||
var detail = event.originalEvent.detail;
|
|
||||||
if (!detail.isSelected) return;
|
|
||||||
var value = detail.item.getAttribute("name");
|
|
||||||
if (value == this.damageDice) return;
|
|
||||||
Attacks.update(this._id, {$set: {damageDice: value}});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.attackEdit.helpers({
|
Template.attackEdit.helpers({
|
||||||
@@ -41,5 +46,5 @@ Template.attackEdit.helpers({
|
|||||||
},
|
},
|
||||||
DAMAGE_DICE: function() {
|
DAMAGE_DICE: function() {
|
||||||
return DAMAGE_DICE;
|
return DAMAGE_DICE;
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<template name="attackView">
|
<template name="attackView">
|
||||||
<div class="attackView" layout horizontal>
|
<div class="attackView" layout horizontal>
|
||||||
<div class="headline rightPadded" layout horizontal center>
|
<div class="headline" style="margin-right: 16px;" layout horizontal center>
|
||||||
{{evaluateSigned charId attackBonus}}
|
{{evaluateSigned charId attackBonus}}
|
||||||
</div>
|
</div>
|
||||||
<div layout vertical>
|
<div layout vertical>
|
||||||
<div>
|
<div>
|
||||||
{{damageDice}} {{{evaluateSignedSpaced charId damageBonus}}} {{damageType}}
|
{{evaluateString charId damage}} {{damageType}}
|
||||||
</div>
|
</div>
|
||||||
{{#if details}}
|
{{#if details}}
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if description}}
|
{{#if description}}
|
||||||
<div class="prewrap">{{description}}</div>
|
<div class="pre-wrap">{{evaluateString charId description}}</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{> effectsViewList charId=charId parentId=_id}}
|
{{> effectsViewList charId=charId parentId=_id}}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
{{name}}
|
{{name}}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
{{damageDice}} {{{evaluateSignedSpaced ../_id damageBonus}}} {{damageType}}
|
{{evaluateString ../_id damage}} {{damageType}}
|
||||||
</div>
|
</div>
|
||||||
{{#if details}}
|
{{#if details}}
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{{#if description}}
|
{{#if description}}
|
||||||
<div flex class="bottom text"
|
<div flex class="bottom text"
|
||||||
>{{description}}</div>
|
>{{evaluateString charId description}}</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if hasUses}}
|
{{#if hasUses}}
|
||||||
<div layout horizontal center end-justified>
|
<div layout horizontal center end-justified>
|
||||||
|
|||||||
@@ -41,6 +41,6 @@
|
|||||||
</div>
|
</div>
|
||||||
{{#if description}}
|
{{#if description}}
|
||||||
<hr class="vertMargin">
|
<hr class="vertMargin">
|
||||||
<div class="prewrap">{{description}}</div>
|
<div class="pre-wrap">{{evaluateString charId description}}</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -100,32 +100,44 @@
|
|||||||
<div class="fab-buffer"></div>
|
<div class="fab-buffer"></div>
|
||||||
</div>
|
</div>
|
||||||
{{#if canEditCharacter _id}}
|
{{#if canEditCharacter _id}}
|
||||||
<paper-fab-menu id="inventoryAddMenu"
|
{{#fabMenu}}
|
||||||
icon="add"
|
<core-tooltip label="New container" position="left">
|
||||||
closeIcon="close"
|
<paper-fab icon="work"
|
||||||
duration="0.3">
|
class="addContainer"
|
||||||
<paper-fab-menu-item id="addItem"
|
mini>
|
||||||
icon="note-add"
|
</paper-fab>
|
||||||
color="#d23f31"
|
</core-tooltip>
|
||||||
tooltip="Item">
|
<core-tooltip label="New item" position="left">
|
||||||
</paper-fab-menu-item>
|
<paper-fab icon="note-add"
|
||||||
<paper-fab-menu-item id="addContainer"
|
class="addItem"
|
||||||
icon="work"
|
mini>
|
||||||
color="#d23f31"
|
</paper-fab>
|
||||||
tooltip="Container">
|
</core-tooltip>
|
||||||
</paper-fab-menu-item>
|
{{/fabMenu}}
|
||||||
</paper-fab-menu>
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template name="inventoryItem">
|
<template name="inventoryItem">
|
||||||
<div class="item-slot">
|
<div class="item-slot">
|
||||||
<paper-item class="item inventoryItem {{hidden}}" noink
|
<div class="item {{hidden}} inventoryItem"
|
||||||
hero-id="main" {{detailHero}}
|
hero-id="main" {{detailHero}}
|
||||||
layout horizontal
|
layout horizontal center
|
||||||
draggable="true">
|
draggable="true">
|
||||||
{{#if ne1 quantity}}{{quantity}} {{/if}}{{pluralName}}
|
<div flex class="itemName">
|
||||||
</paper-item>
|
{{#if ne1 quantity}}{{quantity}} {{/if}}{{pluralName}}
|
||||||
|
</div>
|
||||||
|
{{#if settings.showIncrement}}
|
||||||
|
<div class="incrementButtons">
|
||||||
|
<paper-icon-button class="addItemQuantity"
|
||||||
|
icon="add"
|
||||||
|
style="margin-right: -8px"></paper-icon-button>
|
||||||
|
<paper-icon-button class="subItemQuantity"
|
||||||
|
disabled={{lt1 quantity}}
|
||||||
|
icon="remove"
|
||||||
|
style="margin-right: -8px"></paper-icon-button>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ Template.inventory.helpers({
|
|||||||
});
|
});
|
||||||
|
|
||||||
Template.inventory.events({
|
Template.inventory.events({
|
||||||
"tap #addItem": function(event){
|
"tap .addItem": function(event){
|
||||||
var charId = this._id;
|
var charId = this._id;
|
||||||
Items.insert({
|
Items.insert({
|
||||||
charId: charId,
|
charId: charId,
|
||||||
@@ -120,7 +120,7 @@ Template.inventory.events({
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
"tap #addContainer": function(event){
|
"tap .addContainer": function(event){
|
||||||
var containerId = Containers.insert({
|
var containerId = Containers.insert({
|
||||||
name: "New Container",
|
name: "New Container",
|
||||||
isCarried: true,
|
isCarried: true,
|
||||||
@@ -145,6 +145,17 @@ Template.inventory.events({
|
|||||||
heroId: itemId,
|
heroId: itemId,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
"tap .incrementButtons": function(event) {
|
||||||
|
event.stopPropagation();
|
||||||
|
},
|
||||||
|
"tap .addItemQuantity": function(event) {
|
||||||
|
var itemId = this._id;
|
||||||
|
Items.update(itemId, {$set: {quantity: this.quantity + 1}});
|
||||||
|
},
|
||||||
|
"tap .subItemQuantity": function(event) {
|
||||||
|
var itemId = this._id;
|
||||||
|
Items.update(itemId, {$set: {quantity: this.quantity - 1}});
|
||||||
|
},
|
||||||
"tap .itemContainer .top": function(event){
|
"tap .itemContainer .top": function(event){
|
||||||
GlobalUI.setDetail({
|
GlobalUI.setDetail({
|
||||||
template: "containerDialog",
|
template: "containerDialog",
|
||||||
@@ -167,6 +178,9 @@ Template.inventoryItem.helpers({
|
|||||||
ne1: function(num){
|
ne1: function(num){
|
||||||
return num !== 1;
|
return num !== 1;
|
||||||
},
|
},
|
||||||
|
lt1: function(num) {
|
||||||
|
return num < 1;
|
||||||
|
},
|
||||||
hidden: function(){
|
hidden: function(){
|
||||||
return Session.equals("inventory.dragItemId", this._id) ? "hidden" : null;
|
return Session.equals("inventory.dragItemId", this._id) ? "hidden" : null;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{{#if description}}
|
{{#if description}}
|
||||||
<hr class="vertMargin">
|
<hr class="vertMargin">
|
||||||
<div class="prewrap">{{description}}</div>
|
<div class="pre-wrap">{{evaluateString charId description}}</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{> effectsViewList charId=charId parentId=_id}}
|
{{> effectsViewList charId=charId parentId=_id}}
|
||||||
{{> attacksViewList charId=charId parentId=_id}}
|
{{> attacksViewList charId=charId parentId=_id}}
|
||||||
@@ -28,10 +28,25 @@
|
|||||||
<template name="itemEdit">
|
<template name="itemEdit">
|
||||||
<paper-input class="fullwidth" id="itemNameInput" label="Name" floatinglabel value={{name}}></paper-input>
|
<paper-input class="fullwidth" id="itemNameInput" label="Name" floatinglabel value={{name}}></paper-input>
|
||||||
<div layout horizontal wrap>
|
<div layout horizontal wrap>
|
||||||
<paper-input-decorator label="Quantity" floatinglabel>
|
<paper-input-decorator label="Quantity"
|
||||||
<input id="quantityInput" type="number" value={{quantity}}>
|
floatinglabel
|
||||||
|
style="width: 80px">
|
||||||
|
<input id="quantityInput"
|
||||||
|
type="number"
|
||||||
|
value={{quantity}}>
|
||||||
</paper-input-decorator>
|
</paper-input-decorator>
|
||||||
{{# if ne1 quantity}}<paper-input flex id="itemPluralInput" label="Plural Name" floatinglabel value={{plural}}></paper-input>{{/if}}
|
{{# if ne1 quantity}}
|
||||||
|
<paper-input flex id="itemPluralInput"
|
||||||
|
label="Plural Name"
|
||||||
|
floatinglabel
|
||||||
|
value={{plural}}></paper-input>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
<div center horizontal layout>
|
||||||
|
<div class="padded">Show increment buttons</div>
|
||||||
|
<paper-checkbox id="incrementCheckbox"
|
||||||
|
checked={{settings.showIncrement}}>
|
||||||
|
</paper-checkbox>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="vertMargin">
|
<hr class="vertMargin">
|
||||||
@@ -53,7 +68,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div center horizontal layout>
|
<div center horizontal layout>
|
||||||
<div class="padded">Requires Attunement</div>
|
<div class="padded">Requires Attunement</div>
|
||||||
<paper-checkbox id="attunementCheckbox" checked={{requiresAttunement}}></paper-checkbox>
|
<paper-checkbox id="attunementCheckbox"
|
||||||
|
checked={{requiresAttunement}}>
|
||||||
|
</paper-checkbox>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ Template.itemEdit.onRendered(function(){
|
|||||||
Template.itemEdit.helpers({
|
Template.itemEdit.helpers({
|
||||||
ne1: function(num){
|
ne1: function(num){
|
||||||
return num != 1;
|
return num != 1;
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.itemEdit.events({
|
Template.itemEdit.events({
|
||||||
@@ -87,6 +87,10 @@ Template.itemEdit.events({
|
|||||||
Meteor.call("unequipItem", this._id, this.charId);
|
Meteor.call("unequipItem", this._id, this.charId);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"change #incrementCheckbox": function(event){
|
||||||
|
var value = event.currentTarget.checked;
|
||||||
|
Items.update(this._id, {$set: {"settings.showIncrement": value}});
|
||||||
|
},
|
||||||
"change #attunementCheckbox": function(event){
|
"change #attunementCheckbox": function(event){
|
||||||
var value = event.currentTarget.checked;
|
var value = event.currentTarget.checked;
|
||||||
Items.update(this._id, {$set: {requiresAttunement: value}});
|
Items.update(this._id, {$set: {requiresAttunement: value}});
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ Template.classDialog.onRendered(function(){
|
|||||||
});
|
});
|
||||||
|
|
||||||
Template.classDialog.events({
|
Template.classDialog.events({
|
||||||
|
"color-change": function(event, instance){
|
||||||
|
Classes.update(instance.data.classId, {$set: {color: event.color}});
|
||||||
|
},
|
||||||
"tap #deleteButton": function(event, instance){
|
"tap #deleteButton": function(event, instance){
|
||||||
Classes.softRemoveNode(instance.data.classId);
|
Classes.softRemoveNode(instance.data.classId);
|
||||||
GlobalUI.deletedToast(instance.data.classId, "Classes", "Class");
|
GlobalUI.deletedToast(instance.data.classId, "Classes", "Class");
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<template name="experienceDialog">
|
<template name="experienceDialog">
|
||||||
{{#with experience}}
|
{{#with experience}}
|
||||||
{{#baseDialog title=name class=colorClass hideColor="true" startEditing=../startEditing}}
|
{{#baseDialog title=name class=color hideColor="true" startEditing=../startEditing}}
|
||||||
<div horizontal layout center-justified class= "display2">
|
<div horizontal layout center-justified class= "display2">
|
||||||
{{value}}
|
{{value}}
|
||||||
</div>
|
</div>
|
||||||
{{#if description}}
|
{{#if description}}
|
||||||
<hr class="vertMargin">
|
<hr class="vertMargin">
|
||||||
<div class="prewrap">{{description}}</div>
|
<div class="pre-wrap">{{description}}</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<div horizontal layout>
|
<div horizontal layout>
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
Template.experienceDialog.helpers({
|
Template.experienceDialog.helpers({
|
||||||
feature: function(){
|
experience: function(){
|
||||||
return Features.findOne(this.featureId);
|
Experiences.findOne(this.experienceId);
|
||||||
|
return Experiences.findOne(this.experienceId);
|
||||||
|
},
|
||||||
|
color: function() {
|
||||||
|
var char = Characters.findOne(this.charId, {fields: {color: 1}});
|
||||||
|
if (char) return getColorClass(char.color);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -27,10 +32,3 @@ Template.experienceDialog.events({
|
|||||||
Experiences.update(this._id, {$set: {description: value}});
|
Experiences.update(this._id, {$set: {description: value}});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.experienceDialog.helpers({
|
|
||||||
experience: function(){
|
|
||||||
Experiences.findOne(this.experienceId);
|
|
||||||
return Experiences.findOne(this.experienceId);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template name="noteDialog">
|
<template name="noteDialog">
|
||||||
{{#with note}}
|
{{#with note}}
|
||||||
{{#baseDialog title=name class=colorClass startEditing=../startEditing}}
|
{{#baseDialog title=name class=colorClass startEditing=../startEditing}}
|
||||||
<div class="prewrap">{{description}}</div>
|
<div class="pre-wrap">{{description}}</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{> noteDialogEdit}}
|
{{> noteDialogEdit}}
|
||||||
{{/baseDialog}}
|
{{/baseDialog}}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template name="raceDialog">
|
<template name="raceDialog">
|
||||||
{{#baseDialog title="Race" class=colorClass hideColor="true" hideDelete="true" startEditing=startEditing}}
|
{{#baseDialog title="Race" class=color hideColor="true" hideDelete="true" startEditing=startEditing}}
|
||||||
<div horizontal layout center-justified class= "display2">
|
<div horizontal layout center-justified class= "display2">
|
||||||
{{race}}
|
{{race}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -13,5 +13,9 @@ Template.raceDialog.helpers({
|
|||||||
race: function(){
|
race: function(){
|
||||||
var char = Characters.findOne(this.charId, {fields: {race: 1}});
|
var char = Characters.findOne(this.charId, {fields: {race: 1}});
|
||||||
return char && char.race;
|
return char && char.race;
|
||||||
}
|
},
|
||||||
|
color: function() {
|
||||||
|
var char = Characters.findOne(this.charId, {fields: {color: 1}});
|
||||||
|
if (char) return getColorClass(char.color);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template name="containerCard">
|
<template name="containerCard">
|
||||||
{{#containerCardHelper this}}{{body}}{{/containerCardHelper}}
|
{{#containerCardHelper this}}{{evaluateString _id body}}{{/containerCardHelper}}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template name="containerCardHelper">
|
<template name="containerCardHelper">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template name="textDialog">
|
<template name="textDialog">
|
||||||
{{#baseDialog title=title class=colorClass hideColor="true" hideDelete="true" startEditing=startEditing}}
|
{{#baseDialog title=title class=colorClass hideColor="true" hideDelete="true" startEditing=startEditing}}
|
||||||
<div class="prewrap">{{value}}</div>
|
<div class="pre-wrap">{{evaluateString charId value}}</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{> textDialogEdit}}
|
{{> textDialogEdit}}
|
||||||
{{/baseDialog}}
|
{{/baseDialog}}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<span class="body2">Duration: </span><span>{{duration}}</span>
|
<span class="body2">Duration: </span><span>{{duration}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="prewrap">{{description}}</div>
|
<div class="pre-wrap">{{evaluateString charId description}}</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template name="spellEdit">
|
<template name="spellEdit">
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<hr class="vertMargin">
|
<hr class="vertMargin">
|
||||||
<div class="prewrap">{{description}}</div>
|
<div class="pre-wrap">{{evaluateString charId description}}</div>
|
||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<!--Name-->
|
<!--Name-->
|
||||||
|
|||||||
@@ -128,20 +128,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{#if canEditCharacter _id}}
|
{{#if canEditCharacter _id}}
|
||||||
<paper-fab-menu id="inventoryAddMenu"
|
{{#fabMenu}}
|
||||||
icon="add"
|
<core-tooltip label="New spell list" position="left">
|
||||||
closeIcon="close"
|
<paper-fab icon="work"
|
||||||
duration="0.3">
|
class="addSpellList"
|
||||||
<paper-fab-menu-item id="addSpell"
|
mini>
|
||||||
icon="note-add"
|
</paper-fab>
|
||||||
color="#d23f31"
|
</core-tooltip>
|
||||||
tooltip="Spell">
|
<core-tooltip label="New spell" position="left">
|
||||||
</paper-fab-menu-item>
|
<paper-fab icon="note-add"
|
||||||
<paper-fab-menu-item id="addSpellList"
|
class="addSpell"
|
||||||
icon="work"
|
mini>
|
||||||
color="#d23f31"
|
</paper-fab>
|
||||||
tooltip="Spell List">
|
</core-tooltip>
|
||||||
</paper-fab-menu-item>
|
{{/fabMenu}}
|
||||||
</paper-fab-menu>
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</template>
|
</template>
|
||||||
@@ -184,7 +184,7 @@ Template.spells.events({
|
|||||||
heroId: this._id,
|
heroId: this._id,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
"tap #addSpellList": function(event){
|
"tap .addSpellList": function(event){
|
||||||
var charId = this.charId;
|
var charId = this.charId;
|
||||||
SpellLists.insert({
|
SpellLists.insert({
|
||||||
name: "New SpellList",
|
name: "New SpellList",
|
||||||
@@ -201,7 +201,7 @@ Template.spells.events({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
"tap #addSpell": function(event){
|
"tap .addSpell": function(event){
|
||||||
var charId = this.charId;
|
var charId = this.charId;
|
||||||
var listId = SpellLists.findOne({charId: this._id})._id;
|
var listId = SpellLists.findOne({charId: this._id})._id;
|
||||||
Spells.insert({
|
Spells.insert({
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<template name="strengthDialog">
|
||||||
|
{{#baseDialog title=name class=color hideEdit=true}}
|
||||||
|
{{> attributeDialogView}}
|
||||||
|
<hr class="vertMargin">
|
||||||
|
<div>
|
||||||
|
<div class="title padded">Carrying</div>
|
||||||
|
<table class="strengthTable">
|
||||||
|
<tr>
|
||||||
|
<td>Encumbered</td>
|
||||||
|
<td>{{evaluate charId "strength * 5"}}lbs</td>
|
||||||
|
<td class="caption">Speed drops by 10 feet</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Heavily encumbered</td>
|
||||||
|
<td>{{evaluate charId "strength * 10"}}lbs</td>
|
||||||
|
<td class="caption">
|
||||||
|
Speed drops by 20 feet, disadvantage on strength,
|
||||||
|
dexterity and constitution ability checks, attack
|
||||||
|
rolls and saving throws
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Maximum carrying capacity</td>
|
||||||
|
<td>{{evaluate charId "strength * 15"}}lbs</td>
|
||||||
|
<td class="caption">Speed drops to 5 feet</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Push, drag or lift maximum</td>
|
||||||
|
<td>{{evaluate charId "strength * 30"}}lbs</td>
|
||||||
|
<td class="caption">You can't move more than this weight</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="title padded">Jumping</div>
|
||||||
|
<table class="strengthTable">
|
||||||
|
<tr>
|
||||||
|
<td>Running long jump</td>
|
||||||
|
<td>{{evaluate charId "strength"}} feet</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Standing long jump</td>
|
||||||
|
<td>{{evaluate charId "floor(strength/2)"}} feet</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Running high jump</td>
|
||||||
|
<td>{{evaluate charId "3 + strengthMod"}} feet</td>
|
||||||
|
<td class="caption">
|
||||||
|
Can reach a ledge as high as
|
||||||
|
{{evaluate charId "3 + strengthMod"}} feet
|
||||||
|
+ 1.5× your height
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Standing high jump</td>
|
||||||
|
<td>{{evaluate charId "floor((3 + strengthMod)/2)"}} feet</td>
|
||||||
|
<td class="caption">
|
||||||
|
Can reach a ledge as high as
|
||||||
|
{{evaluate charId "floor((3 + strengthMod)/2)"}} feet
|
||||||
|
+ 1.5× your height
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{{/baseDialog}}
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
Template.strengthDialog.helpers({
|
||||||
|
color: function(){
|
||||||
|
if (this.color) return this.color + " white-text";
|
||||||
|
var char = Characters.findOne(this.charId, {fields: {color: 1}});
|
||||||
|
if (char) return getColorClass(char.color);
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -27,8 +27,10 @@ Template.stats.events({
|
|||||||
},
|
},
|
||||||
"tap .abilityMiniCard": function(event, instance){
|
"tap .abilityMiniCard": function(event, instance){
|
||||||
var charId = Template.parentData()._id;
|
var charId = Template.parentData()._id;
|
||||||
|
var template = "attributeDialog";
|
||||||
|
if (this.ability === "strength") template = "strengthDialog";
|
||||||
GlobalUI.setDetail({
|
GlobalUI.setDetail({
|
||||||
template: "attributeDialog",
|
template: template,
|
||||||
data: {
|
data: {
|
||||||
name: this.title,
|
name: this.title,
|
||||||
statName: this.ability,
|
statName: this.ability,
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<template name="fabMenu">
|
||||||
|
<paper-fab class="floatyButton expand-menu {{#if active}}active{{/if}}"
|
||||||
|
icon="add"></paper-fab>
|
||||||
|
<div class="{{#if active}}active{{/if}} mini-holder"
|
||||||
|
layout vertical center>
|
||||||
|
{{> UI.contentBlock}}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
15
rpg-docs/client/views/paperTemplates/fabMenu/fabMenu.js
Normal file
15
rpg-docs/client/views/paperTemplates/fabMenu/fabMenu.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
Template.fabMenu.onCreated(function() {
|
||||||
|
this.active = new ReactiveVar(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
Template.fabMenu.helpers({
|
||||||
|
active: function() {
|
||||||
|
return Template.instance().active.get();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
Template.fabMenu.events({
|
||||||
|
"tap .expand-menu": function(event, instance) {
|
||||||
|
instance.active.set(!instance.active.get());
|
||||||
|
},
|
||||||
|
});
|
||||||
46
rpg-docs/client/views/paperTemplates/fabMenu/fabMenu.scss
Normal file
46
rpg-docs/client/views/paperTemplates/fabMenu/fabMenu.scss
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
@import "bourbon/bourbon";
|
||||||
|
|
||||||
|
.mini-holder {
|
||||||
|
position: absolute;
|
||||||
|
padding: 4px;
|
||||||
|
bottom: 80px;
|
||||||
|
right: 24px;
|
||||||
|
width: 56px;
|
||||||
|
pointer-events: none;
|
||||||
|
flex-direction: column-reverse !important;
|
||||||
|
core-tooltip{
|
||||||
|
@include transform(scale(0));
|
||||||
|
@include transition-property(transform);
|
||||||
|
@include transition-duration(0.3s);
|
||||||
|
@include transition-timing-function(ease-in-out);
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
pointer-events: auto;
|
||||||
|
core-tooltip{
|
||||||
|
@include transform(scale(1));
|
||||||
|
}
|
||||||
|
core-tooltip:nth-child(2){
|
||||||
|
@include transition-delay(0.1s);
|
||||||
|
}
|
||||||
|
core-tooltip:nth-child(3){
|
||||||
|
@include transition-delay(0.2s);
|
||||||
|
}
|
||||||
|
core-tooltip:nth-child(4){
|
||||||
|
@include transition-delay(0.3s);
|
||||||
|
}
|
||||||
|
core-tooltip:nth-child(5){
|
||||||
|
@include transition-delay(0.4s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.expand-menu {
|
||||||
|
&::shadow core-icon {
|
||||||
|
@include transition(transform 0.3s ease-in-out);
|
||||||
|
}
|
||||||
|
&.active::shadow core-icon{
|
||||||
|
@include transform(rotate(405deg));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
21
rpg-docs/lib/dice/roll.js
Normal file
21
rpg-docs/lib/dice/roll.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
roll = function(n, d){
|
||||||
|
var result = [];
|
||||||
|
if (!isNaN(n)){
|
||||||
|
//if only provided 1 argument, it is the dice to roll
|
||||||
|
if (d === undefined){
|
||||||
|
d = n;
|
||||||
|
n = 1;
|
||||||
|
}
|
||||||
|
//hard limit the number of dice rolled
|
||||||
|
if (n > 500){
|
||||||
|
console.warn(n + " > 500, cannot lift that many dice to roll them");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < n; i++){
|
||||||
|
var roll = Math.floor(Random.fraction() * d + 1);
|
||||||
|
result.push(roll);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
roll = function(n, d){
|
|
||||||
if (!isNaN(n)){
|
|
||||||
//first digit is a number
|
|
||||||
if (d === undefined){
|
|
||||||
d = n;
|
|
||||||
n = 1;
|
|
||||||
}
|
|
||||||
if (n > 500){
|
|
||||||
console.log(n + " > 500, cannot lift that many dice to roll them");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var result = {sum: 0, rolls: []};
|
|
||||||
for (var i = 0; i < n; i++){
|
|
||||||
var roll = Math.floor(Random.fraction() * d + 1);
|
|
||||||
result.sum += roll;
|
|
||||||
result.rolls.push(roll);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
console.log("rolling dice failed for inputs: ", n, d);
|
|
||||||
return {sum: 0, rolls: []};
|
|
||||||
};
|
|
||||||
|
|
||||||
rollDropLow = function(n, d, drop){
|
|
||||||
var r = roll(n, d);
|
|
||||||
r.rolls.sort(function(a, b){return a - b;}); //sort ascending
|
|
||||||
r.rolls.splice(0, drop); //remove the lowest elements
|
|
||||||
r.sum = 0;
|
|
||||||
for (var i = 0, l = r.rolls.length; i , l ; i++){
|
|
||||||
sum += r.rolls[i];
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
};
|
|
||||||
|
|
||||||
rollDropHigh = function(n, d, drop){
|
|
||||||
var r = roll(n, d);
|
|
||||||
r.rolls.sort(function(a, b){return b - a;}); //sort descending
|
|
||||||
r.rolls.splice(0, drop); //remove the highest elements
|
|
||||||
r.sum = 0;
|
|
||||||
for (var i = 0, l = r.rolls.length; i , l ; i++){
|
|
||||||
sum += r.rolls[i];
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
};
|
|
||||||
@@ -68,3 +68,28 @@ ChangeLogs.insert({
|
|||||||
"Fixed the styling and rounding of some of the detail boxes",
|
"Fixed the styling and rounding of some of the detail boxes",
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ChangeLogs.insert({
|
||||||
|
version: "0.3.0",
|
||||||
|
changes: [
|
||||||
|
"Refactored character sheet user interface.",
|
||||||
|
"Removed a lot of unneeded effects and webcomponents, should result in significantly improved performance on low-powered devices.",
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
ChangeLogs.insert({
|
||||||
|
version: "0.3.1",
|
||||||
|
changes: [
|
||||||
|
"Re-implemented floating action button menu component to move away from the broken third party implementation.",
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
ChangeLogs.insert({
|
||||||
|
version: "0.4.0",
|
||||||
|
changes: [
|
||||||
|
"Changed attacks to use arbitrary strings with inline calculations",
|
||||||
|
"Added item increment and decrement buttons",
|
||||||
|
"fixed incorrect line breaks and formatting in dialogs",
|
||||||
|
"Added calculated values for jumping and carrying to the strength detail box",
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Meteor.methods({
|
|||||||
"The user must be an administrator to migrate the database"
|
"The user must be an administrator to migrate the database"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Migrations.add({
|
Migrations.add({
|
||||||
@@ -58,3 +58,33 @@ Migrations.add({
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Migrations.add({
|
||||||
|
version: 2,
|
||||||
|
name: "Converts attacks from damage dice and damage bonus to a string with curly bracket calculations, adds settings.showIncrement to items",
|
||||||
|
up: function() {
|
||||||
|
//update attacks
|
||||||
|
Attacks.find({}).forEach(function(attack) {
|
||||||
|
var newDamage = attack.damageDice +
|
||||||
|
" + {" + attack.damageBonus + "}";
|
||||||
|
Attacks.update(
|
||||||
|
attack._id,
|
||||||
|
{
|
||||||
|
$unset: {
|
||||||
|
damageBonus: "",
|
||||||
|
damageDice: "",
|
||||||
|
},
|
||||||
|
$set: {
|
||||||
|
damage: newDamage
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{validate: false});
|
||||||
|
});
|
||||||
|
//update Items
|
||||||
|
Items.update(
|
||||||
|
{settings: undefined},
|
||||||
|
{$set: {"settings.showIncrement" : false}},
|
||||||
|
{validate: false, multi: true}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user