diff --git a/module/actor-sheet.js b/module/actor-sheet.js index ba0c757..a5759fe 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -35,14 +35,6 @@ export class BladesActorSheet extends ActorSheet { activateListeners(html) { super.activateListeners(html); - // // Activate tabs - // let tabs = html.find('.tabs'); - // let initial = this._sheetTab; - // new Tabs(tabs, { - // initial: initial, - // callback: clicked => this._sheetTab = clicked.data("tab") - // }); - // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; @@ -65,27 +57,6 @@ export class BladesActorSheet extends ActorSheet { /** @override */ _updateObject(event, formData) { - - // Handle the free-form attributes list - // const formAttrs = expandObject(formData).data.attributes || {}; - // const attributes = Object.values(formAttrs).reduce((obj, v) => { - // let k = v["key"].trim(); - // if ( /[\s\.]/.test(k) ) return ui.notifications.error("Attribute keys may not contain spaces or periods"); - // delete v["key"]; - // obj[k] = v; - // return obj; - // }, {}); - - // // Remove attributes which are no longer used - // for ( let k of Object.keys(this.object.data.data.attributes) ) { - // if ( !attributes.hasOwnProperty(k) ) attributes[`-=${k}`] = null; - // } - - // // Re-combine formData - // formData = Object.entries(formData).filter(e => !e[0].startsWith("data.attributes")).reduce((obj, e) => { - // obj[e[0]] = e[1]; - // return obj; - // }, {_id: this.object._id, "data.attributes": attributes}); // Update the Actor return this.object.update(formData); diff --git a/module/blades-helpers.js b/module/blades-helpers.js index b8bb36b..4ff7f86 100644 --- a/module/blades-helpers.js +++ b/module/blades-helpers.js @@ -151,4 +151,21 @@ export class BladesHelpers { }, obj); } + + /** + * Add item functionality + */ + static _addOwnedItem(event, actor) { + + event.preventDefault(); + const a = event.currentTarget; + const item_type = a.dataset.itemType; + + let data = { + name: randomID(), + type: item_type + }; + return actor.createEmbeddedEntity("OwnedItem", data); + } + } diff --git a/module/crew-sheet.js b/module/crew-sheet.js index cff16a0..61694e1 100644 --- a/module/crew-sheet.js +++ b/module/crew-sheet.js @@ -50,7 +50,7 @@ export class BladesCrewSheet extends ActorSheet { if (!this.options.editable) return; // Update Inventory Item - html.find('.item-body').click(ev => { + html.find('.item-sheet-open').click(ev => { const element = $(ev.currentTarget).parents(".item"); const item = this.actor.getOwnedItem(element.data("itemId")); item.sheet.render(true); @@ -63,6 +63,11 @@ export class BladesCrewSheet extends ActorSheet { element.slideUp(200, () => this.render(false)); }); + // Add a new Cohort + html.find('.add-item').click(ev => { + BladesHelpers._addOwnedItem(ev, this.actor); + }); + // Toggle Turf html.find('.turf-select').click(ev => { const element = $(ev.currentTarget).parents(".item"); @@ -77,6 +82,19 @@ export class BladesCrewSheet extends ActorSheet { [turf_checkbox_name]: !turf_current_status}); this.render(false); }); + + // Cohort Block Harm handler + html.find('.cohort-block-harm input[type="radio"]').change(ev => { + const element = $(ev.currentTarget).parents(".item"); + + let item_id = element.data("itemId") + let harm_id = $(ev.currentTarget).val(); + + this.actor.updateEmbeddedEntity('OwnedItem', { + _id: item_id, + "data.harm": [harm_id]}); + this.render(false); + }); } /* -------------------------------------------- */ @@ -88,5 +106,19 @@ export class BladesCrewSheet extends ActorSheet { } /* -------------------------------------------- */ + /* Form Submission */ + /* -------------------------------------------- */ + + /** @override */ + _updateObject(event, formData) { + + // Update the Item + super._updateObject(event, formData); + + if (event.target.name === "data.tier") { + this.render(true); + } + } + /* -------------------------------------------- */ } diff --git a/module/item-sheet.js b/module/item-sheet.js index c0941ed..d186cdb 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -31,14 +31,6 @@ export class BladesItemSheet extends ItemSheet { /* -------------------------------------------- */ - /** @override */ - getData() { - const data = super.getData(); - return data; - } - - /* -------------------------------------------- */ - /** @override */ activateListeners(html) { super.activateListeners(html); diff --git a/module/item.js b/module/item.js index c361626..b723224 100644 --- a/module/item.js +++ b/module/item.js @@ -3,4 +3,50 @@ * @extends {Item} */ export class BladesItem extends Item { + + /* override */ + prepareData() { + + super.prepareData(); + + const item_data = this.data; + const data = item_data.data; + console.log("prepare item " + item_data.type); + + if (item_data.type === "cohort") { + + this._prepareCohort(data); + + } + } + + /** + * Prepares Cohort data + * + * @param {object} data + */ + _prepareCohort(data) { + + let quality = 0; + let scale = 0; + + // Adds Scale and Quality + if (this.actor) { + switch (data.cohort[0]) { + case "Gang": + scale = parseInt(this.actor.data.data.tier[0]); + quality = parseInt(this.actor.data.data.tier[0]); + break; + case "Expert": + scale = 1; + quality = parseInt(this.actor.data.data.tier[0]) + 1; + break; + } + } + + data.scale = scale; + data.quality = quality; + + this.data.data = data; + } } diff --git a/module/templates.js b/module/templates.js index 8c3c380..cbe5ff2 100644 --- a/module/templates.js +++ b/module/templates.js @@ -11,7 +11,8 @@ export const preloadHandlebarsTemplates = async function() { // Actor Sheet Partials "systems/blades-in-the-dark/templates/parts/coins.html", "systems/blades-in-the-dark/templates/parts/attributes.html", - "systems/blades-in-the-dark/templates/parts/turf-list.html" + "systems/blades-in-the-dark/templates/parts/turf-list.html", + "systems/blades-in-the-dark/templates/parts/cohort-block.html" ]; // Load the template parts diff --git a/scss/mixin.scss b/scss/mixin.scss index 2f8cdc8..dd8906e 100644 --- a/scss/mixin.scss +++ b/scss/mixin.scss @@ -71,7 +71,7 @@ width: 5px; border-radius: 24px; background-image: none !important; - background-color: red !important; + background-color: $red !important; margin-right: 0px; } } @@ -157,7 +157,7 @@ display: none; &:checked ~ .checkmark { - color: red; + color: $red; } } @@ -238,14 +238,14 @@ width: $turf_width; height: $turf_height; - background-color: lightgray; + background-color: $lightgray; position: relative; margin: $turf_margin; flex-grow: initial; &.turf-selected { .connector { - background-color: gray; + background-color: $gray; z-index: 1; } } @@ -254,7 +254,7 @@ position: absolute; display: block; - background-color: lightgray; + background-color: $lightgray; &.right, &.left { @@ -285,7 +285,7 @@ &.turf-selected { - background-color: gray; + background-color: $gray; } .turf-description { diff --git a/scss/style.scss b/scss/style.scss index f1faf5c..f099cb5 100644 --- a/scss/style.scss +++ b/scss/style.scss @@ -14,6 +14,10 @@ $almost_white: #EEEFFF; * { font-family: Georgia, "Bitstream Charter", "Times New Roman", serif; + header { + margin-bottom: 10px; + } + ul { list-style: none; } @@ -38,7 +42,7 @@ $almost_white: #EEEFFF; flex-direction: row; justify-content: space-between; - > * { + > *:not(.label-stripe) { margin-right: 10px; &:last-child { @@ -103,10 +107,26 @@ $almost_white: #EEEFFF; margin-bottom: 10px; position: relative; padding-left: 10px; + padding-right: 10px; display: flex; font-weight: bold; } + .label-stripe-gray { + text-transform: uppercase; + background-color: $gray; + margin-bottom: 10px; + position: relative; + padding-left: 10px; + padding-right: 10px; + display: flex; + font-weight: bold; + } + + .description { + font-style: italic; + } + // Stress and Trauma .big-teeth-section { @@ -440,11 +460,65 @@ $almost_white: #EEEFFF; } } - .window-app { - - .window-content { - // background: url("https://wallpapertag.com/wallpaper/middle/c/3/6/294219-old-paper-background-1920x1200-for-desktop.jpg") repeat; + // Cohorts styling + .edgeflaw { + + input { + display: none; + + &:checked { + + & + label { + color: $red; + } + + } + } + + } + + #gang-expert-type-selector { + + #gang-type-boxes { + flex-wrap: wrap; } } + .cohorts { + flex-wrap: wrap; + + .cohort-block-wrapper { + width: 400px; + } + .label-stripe { + margin-bottom: 0px; + } + + .cohort-body { + > div { + margin-bottom: 10px; + } + } + + .cohort-block-harm { + + justify-content: space-around; + + input[type="radio"] { + display: none; + + &:checked + label { + color: $almost_white; + font-weight: bold; + background-color: $almost_black; + } + } + + label { + border: 2px solid $almost_black; + border-top: none; + padding: 5px; + } + } + } } diff --git a/styles/blades.css b/styles/blades.css index 695ce56..d218f17 100644 --- a/styles/blades.css +++ b/styles/blades.css @@ -28,6 +28,9 @@ * { font-family: Georgia, "Bitstream Charter", "Times New Roman", serif; } +* header { + margin-bottom: 10px; +} * ul { list-style: none; } @@ -46,10 +49,10 @@ flex-direction: row; justify-content: space-between; } -* section > * { +* section > *:not(.label-stripe) { margin-right: 10px; } -* section > *:last-child { +* section > *:not(.label-stripe):last-child { margin-right: 0px; } * section .grow-one { @@ -100,9 +103,23 @@ margin-bottom: 10px; position: relative; padding-left: 10px; + padding-right: 10px; display: flex; font-weight: bold; } +* .label-stripe-gray { + text-transform: uppercase; + background-color: #999; + margin-bottom: 10px; + position: relative; + padding-left: 10px; + padding-right: 10px; + display: flex; + font-weight: bold; +} +* .description { + font-style: italic; +} * .big-teeth-section { border-top: 3px solid #191813; display: flex; @@ -557,19 +574,19 @@ * #turf-list.section-non-editable .turf-block { width: 130px; height: 100px; - background-color: lightgray; + background-color: #CCC; position: relative; margin: 20px; flex-grow: initial; } * #turf-list.section-non-editable .turf-block.turf-selected .connector { - background-color: gray; + background-color: #999; z-index: 1; } * #turf-list.section-non-editable .turf-block .connector { position: absolute; display: block; - background-color: lightgray; + background-color: #CCC; } * #turf-list.section-non-editable .turf-block .connector.right, * #turf-list.section-non-editable .turf-block .connector.left { width: 40px; @@ -594,7 +611,7 @@ top: 100px; } * #turf-list.section-non-editable .turf-block.turf-selected { - background-color: gray; + background-color: #999; } * #turf-list.section-non-editable .turf-block .turf-description { border: none; @@ -622,19 +639,19 @@ * #turf-list.section-editable .turf-block { width: 130px; height: 125px; - background-color: lightgray; + background-color: #CCC; position: relative; margin: 20px; flex-grow: initial; } * #turf-list.section-editable .turf-block.turf-selected .connector { - background-color: gray; + background-color: #999; z-index: 1; } * #turf-list.section-editable .turf-block .connector { position: absolute; display: block; - background-color: lightgray; + background-color: #CCC; } * #turf-list.section-editable .turf-block .connector.right, * #turf-list.section-editable .turf-block .connector.left { width: 40px; @@ -659,7 +676,7 @@ top: 125px; } * #turf-list.section-editable .turf-block.turf-selected { - background-color: gray; + background-color: #999; } * #turf-list.section-editable .turf-block .turf-description { border: none; @@ -769,5 +786,42 @@ font-size: 20px; color: #191813; } +* .edgeflaw input { + display: none; +} +* .edgeflaw input:checked + label { + color: red; +} +* #gang-expert-type-selector #gang-type-boxes { + flex-wrap: wrap; +} +* .cohorts { + flex-wrap: wrap; +} +* .cohorts .cohort-block-wrapper { + width: 400px; +} +* .cohorts .label-stripe { + margin-bottom: 0px; +} +* .cohorts .cohort-body > div { + margin-bottom: 10px; +} +* .cohorts .cohort-block-harm { + justify-content: space-around; +} +* .cohorts .cohort-block-harm input[type=radio] { + display: none; +} +* .cohorts .cohort-block-harm input[type=radio]:checked + label { + color: #EEEFFF; + font-weight: bold; + background-color: #191813; +} +* .cohorts .cohort-block-harm label { + border: 2px solid #191813; + border-top: none; + padding: 5px; +} -/*# sourceMappingURL=style.css.map */ +/*# sourceMappingURL=blades.css.map */ diff --git a/styles/blades.css.map b/styles/blades.css.map new file mode 100644 index 0000000..750656c --- /dev/null +++ b/styles/blades.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/mixin.scss","../scss/style.scss"],"names":[],"mappings":"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","file":"blades.css"} \ No newline at end of file diff --git a/styles/simple copy.css b/styles/simple copy.css deleted file mode 100644 index a2c0aba..0000000 --- a/styles/simple copy.css +++ /dev/null @@ -1,144 +0,0 @@ -.worldbuilding.sheet .window-content { - padding: 5px; - overflow-y: hidden; -} - -/* Sheet Header */ -.worldbuilding.sheet .sheet-header { - overflow: hidden; - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; - flex: 0 0 100px; - margin-bottom: 10px; -} - -.worldbuilding.sheet .profile-img { - flex: 0 0 100px; - height: 100px; - margin-right: 10px; -} - -.worldbuilding.sheet .header-fields { - flex: 1; - height: 100px; -} - -.worldbuilding.sheet .charname { - height: 60px; - padding: 5px; - margin: 0; - border-bottom: 0; -} -.worldbuilding.sheet .charname input { - width: 100%; - height: 100%; - margin: 0; -} - -.worldbuilding.sheet .resource { - height: 40px; - width: 50%; - padding: 3px 10px; - float: left; -} -.worldbuilding.sheet .resource input { - width: 100px; - height: 28px; -} - -/* Navigation Tabs */ -.worldbuilding.sheet .tabs { - flex: 0 0 40px; - border-top: 1px solid #AAA; - border-bottom: 1px solid #AAA; -} - -.worldbuilding.sheet .tabs .item { - line-height: 40px; - font-weight: bold; -} - -.worldbuilding.sheet .tabs .item.active { - text-decoration: underline; - text-shadow: none; -} - -/* Content Tabs */ -.worldbuilding.sheet .sheet-body { - height: calc(100% - 160px); -} -.worldbuilding.sheet .sheet-body .tab { - height: 100%; -} -.worldbuilding.sheet .sheet-body .editor { - width: 100%; - height: 100%; -} - - -/* Items */ -.worldbuilding.sheet .items-list { - list-style: none; - margin: 7px 0; - padding: 0; - overflow-y: auto; -} -.worldbuilding.sheet .items-list .item { - height: 30px; - line-height: 24px; - padding: 3px 0; - border-bottom: 1px solid #BBB; -} -.worldbuilding.sheet .items-list .item img { - flex: 0 0 24px; - margin-right: 5px; -} -.worldbuilding.sheet .items-list .item-name { - margin: 0; -} -.worldbuilding.sheet .items-list .item-controls { - flex: 0 0 36px; -} - -/* Attributes */ -.worldbuilding.sheet .attributes-header { - padding: 5px; - margin: 5px 0; - background: rgba(0, 0, 0, 0.05); - border: 1px solid #AAA; - border-radius: 2px; - text-align: center; - font-weight: bold; -} -.worldbuilding.sheet .attribute-label { - flex: 1.5; -} -.worldbuilding.sheet .attribute-control { - flex: 0 0 20px; -} - -.worldbuilding.sheet .attributes-list { - list-style: none; - margin: 0; - padding: 0; -} - -.worldbuilding.sheet .attributes-list li > * { - margin: 0 3px; - height: 28px; - line-height: 24px; - background: transparent; - border: none; - border-radius: 0; - border-bottom: 1px solid #AAA; -} - -.worldbuilding.sheet .attribute-value.checkbox { - text-align: center; -} - -.worldbuilding.sheet .attributes-list li a.attribute-control { - border: none; -} \ No newline at end of file diff --git a/template.json b/template.json index 7ce532d..c0e2dd3 100644 --- a/template.json +++ b/template.json @@ -137,8 +137,111 @@ }, "cohort": { "templates": ["default"], - "type": [], - "cohort_types": ["gang", "expert"] + "cohort": ["Gang"], + "scale": 0, + "quality": 0, + "cohort_list": { + "Gang": { + "label": "Gang" + }, + "Expert": { + "label": "Expert" + } + }, + "gang_type": ["Adepts"], + "gang_type_list": { + + "Adepts": { + "label": "Adepts", + "description": "Scholars, tinkerers, occultists, and chemists." + }, + "Rooks": { + "label": "Rooks", + "description": "Con artists, spies, and socialites." + }, + "Rovers": { + "label": "Rovers", + "description": "Sailors, carriage drivers, and deathlands scavengers." + }, + "Skulks": { + "label": "Skulks", + "description": "Scouts, infiltrators, and thieves." + }, + "Thugs": { + "label": "Thugs", + "description": "Scouts, infiltrators, and thieves." + } + }, + "expert_type": "", + "status": [], + "statuses": [], + "edges": [], + "edges_list": { + "Fearsome": { + "label": "Fearsome", + "description": "The cohort is terrifying in aspect and reputation." + }, + "Independent": { + "label": "Independent", + "description": "The cohort can be trusted to make good decisions and act on their own initiative in the absence of direct orders." + }, + "Loyal": { + "label": "Loyal", + "description": "The cohort can’t be bribed or turned against you." + }, + "Tenacious": { + "label": "Tenacious", + "description": "The cohort won’t be deterred from a task." + } + }, + "flaws": [], + "flaws_list": { + "Principled": { + "label": "Principled", + "description": "The cohort has an ethic or values that it won’t betray." + }, + "Savage": { + "label": "Savage", + "description": "The cohort is excessively violent and cruel." + }, + "Unreliable": { + "label": "Unreliable", + "description": "The cohort isn’t always available, due to other obligations, stupefaction from their vices, etc." + }, + "Wild": { + "label": "Wild", + "description": "The cohort is drunken, debauched, and loud-mouthed." + } + }, + "harm": ["No"], + "harm_list": { + "No": { + "label": "No Harm", + "description": "The cohort is healthy.", + "value": 0 + }, + "Weakened": { + "label": "Weakened", + "description": "The cohort has reduced effect.", + "value": 1 + }, + "Impaired": { + "label": "Impaired", + "description": "The cohort operates with reduced quality (-1d).", + "value": 2 + }, + "Broken": { + "label": "Broken", + "description": "The cohort can’t do anything until they recover.", + "value": 3 + }, + "Dead": { + "label": "Dead", + "description": "The cohort is destroyed. You can spend coin equal to your Tier +2 to restore it, plus two downtime activities to recruit new gang members, or hire a new expert.", + "value": 4 + } + }, + "armor": false }, "crew_feature": { "templates": ["default"] diff --git a/templates/crew-sheet.html b/templates/crew-sheet.html index 50a0efe..e47132e 100644 --- a/templates/crew-sheet.html +++ b/templates/crew-sheet.html @@ -13,7 +13,7 @@ {{#each actor.items as |item id|}} {{#eq item.type "crew_feature"}}
-
+
{{item.name}}
@@ -212,6 +212,8 @@ Turfs Upgrades Abilities + Cohorts + Notes All Items
@@ -268,7 +270,7 @@ {{#each actor.items as |item id|}} {{#eq item.type "crew_upgrade"}}
-
+
{{item.name}}
{{item.data.description}}
@@ -286,7 +288,7 @@ {{#each actor.items as |item id|}} {{#eq item.type "crew_ability"}}
-
+
{{item.name}}
{{item.data.description}}
@@ -296,14 +298,37 @@ {{/each}}
+ {{!-- Cohorts --}} +
+
+

Cohorts

+

+
+
+ {{#each actor.items as |item id|}} + {{#eq item.type "cohort"}} + + {{> "systems/blades-in-the-dark/templates/parts/cohort-block.html" item=item}} + + {{/eq}} + {{/each}} +
+
+ + {{!-- Notes --}} +
+ + +
+ {{!-- Full Item List --}}
-

+

{{#each actor.items as |item id|}}
-
+
{{item.name}}
diff --git a/templates/items/cohort.html b/templates/items/cohort.html new file mode 100644 index 0000000..49407a1 --- /dev/null +++ b/templates/items/cohort.html @@ -0,0 +1,130 @@ +
+ +
+ +
+

+
+
+ +
+ +
Information
+ +
+ You can add an additional type to a gang or expert by spending two crew upgrades. +
+ When a cohort performs actions for which its types apply, it uses its full quality rating. Otherwise, its quality is zero. A given cohort can have up to two types. + Some crew upgrades will add the “Elite” feature to a gang, which gives them +1d when they roll for a given Type. +
+
+ +
+ +
Cohort Type
+ +
+ {{#each data.cohort_list as |cohort key|}} + {{#multiboxes ../data.cohort}} + + + {{/multiboxes}} + {{/each}} +
+
+ +
+ {{#eq data.cohort.[0] "Gang"}} + +
Gang Type
+
+ {{#multiboxes ../data.gang_type}} + {{#each ../../data.gang_type_list as |gang_type key|}} + + + {{/each}} + {{/multiboxes}} +
+
+ {{#each ../data.gang_type as |gang_type key|}} + {{#with (lookup ../../data.gang_type_list gang_type)}} + {{description}} + {{/with}} + {{/each}} +
+ + {{/eq}} + + {{#eq data.cohort.[0] "Expert"}} +
Expert Type
+ + {{/eq}} +
+ + {{!-- Scale and Quality if attached to Actor --}} + {{#if data.quality}} +
+
Scale and quality
+
Quality: {{data.quality}}
+
Scale: {{data.scale}}
+
+ {{/if}} + + {{!-- Edges and Flaws --}} +
+ +
Choose one or two edges and an equal number of flaws
+ +
+ +
+
Edges
+ {{#each data.edges_list as |edge key|}} + {{#multiboxes ../data.edges}} +
+ + +
+ {{/multiboxes}} + {{/each}} +
+ +
+
Flaws
+ {{#each data.flaws_list as |flaw key|}} + {{#multiboxes ../data.flaws}} +
+ + +
+ {{/multiboxes}} + {{/each}} +
+ +
+ + +
+ +
+
Harm
+
+ {{#multiboxes data.harm}} + {{#each data.harm_list as |harm harm_key|}} + + + {{/each}} + {{/multiboxes}} +
+
+ +
+ + +
+ +
+
Description
+ +
+
diff --git a/templates/parts/cohort-block.html b/templates/parts/cohort-block.html new file mode 100644 index 0000000..ad480ff --- /dev/null +++ b/templates/parts/cohort-block.html @@ -0,0 +1,47 @@ +
+ +
+
+
{{#eq item.data.cohort.[0] "Gang"}}Gang of {{#each ../item.data.gang_type as |gang_type key|}}{{gang_type}} {{/each}}{{/eq}}{{#eq item.data.cohort.[0] "Expert"}}{{../item.data.cohort.[0]}} {{../item.data.expert_type}}{{/eq}} (click to edit)
+
Q:{{item.data.quality}} S:{{item.data.scale}}
+ +
+
+ +
+ {{#each item.data.harm_list as |harm harm_key|}} + {{#multiboxes ../item.data.harm}} + + + {{/multiboxes}} + {{/each}} +
+ + {{#eq item.data.cohort.[0] "Gang"}} + {{#each ../item.data.gang_type as |gang_type key|}} +
+ {{#with (lookup ../../item.data.gang_type_list gang_type)}}{{description}} {{/with}} +
+ {{/each}} + {{/eq}} + +
+
+ {{#each item.data.edges as |edge key|}} + {{#with (lookup ../item.data.edges_list edge)}} +
{{description}} ({{label}})
+ {{/with}} + {{/each}} + {{#each item.data.flaws as |flaw key|}} + {{#with (lookup ../item.data.flaws_list flaw)}} +
{{description}} ({{label}})
+ {{/with}} + {{/each}} +
+
+ +
{{item.data.description}}
+
+ +
+
\ No newline at end of file