From d248411e909f399199b9bb76691b98760cdd97b1 Mon Sep 17 00:00:00 2001 From: sladecraven Date: Wed, 3 Feb 2021 15:33:07 +0100 Subject: [PATCH] Enhance sheets --- img/icons/action_none.svg | 1 + img/ui/background_sheet01.webp | Bin 0 -> 6052 bytes module/actor.js | 2 - module/sos-combat.js | 30 +++++++ module/sos-dialog-combat-actions.js | 130 +++++++++++++++++++++++++++ module/sos-main.js | 7 ++ module/sos-utility.js | 30 ++++++- packs/combat-actions.db | 1 + styles/simple.css | 29 +++--- templates/dialog-combat-actions.html | 59 ++++++++++++ 10 files changed, 276 insertions(+), 13 deletions(-) create mode 100644 img/icons/action_none.svg create mode 100644 img/ui/background_sheet01.webp create mode 100644 module/sos-combat.js create mode 100644 module/sos-dialog-combat-actions.js create mode 100644 templates/dialog-combat-actions.html diff --git a/img/icons/action_none.svg b/img/icons/action_none.svg new file mode 100644 index 0000000..ba74b52 --- /dev/null +++ b/img/icons/action_none.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/ui/background_sheet01.webp b/img/ui/background_sheet01.webp new file mode 100644 index 0000000000000000000000000000000000000000..8b52ff610016154bd1c5ee387aac639c19e9273b GIT binary patch literal 6052 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 Sa;Vx@p$@X=v9hRtrvC-i*x23x literal 0 HcmV?d00001 diff --git a/module/actor.js b/module/actor.js index fc4a386..1d95258 100644 --- a/module/actor.js +++ b/module/actor.js @@ -168,8 +168,6 @@ export class SoSActor extends Actor { let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/dialog-flip.html', flipData); new SoSFlipDialog(flipData, html).render(true); - //console.log("STAT", this); - //let result = this.cardDeck.doFlipStat( duplicate(this.data.data.stat[statKey]) ); } /* -------------------------------------------- */ diff --git a/module/sos-combat.js b/module/sos-combat.js new file mode 100644 index 0000000..9e08a9c --- /dev/null +++ b/module/sos-combat.js @@ -0,0 +1,30 @@ +import { SoSCardDeck } from "./sos-card-deck.js"; +import { SoSUtility } from "./sos-utility.js"; +import { SoSFlipDialog } from "./sos-flip-dialog.js"; +import { SoSDialogCombatActions } from "./sos-dialog-combat-actions.js"; + +/* -------------------------------------------- */ +export class SoSCombat extends Combat { + + /* -------------------------------------------- */ + async nextRound() { + console.log("NEXT ROUND !!!!"); + + if ( game.user.isGM ) { + ChatMessage.create( { content: `New round !! Click on the button below to declare your actions for round ${this.round} !
+ Declare actions`, + whisper: game.users.map(user => user.data._id) } ); + } + super.nextRound(); + } + + /* -------------------------------------------- */ + setupActorActions(actionConf) { + if ( !this.phaseSetup) this.phaseSetup = []; // Opportunistic init + if ( !this.phaseSetup[this.round] ) this.phaseSetup[this.round] = {}; // Bis + + // Keep track + this.phaseSetup[this.round][actionConf.userId] = actionConf; + } + +} diff --git a/module/sos-dialog-combat-actions.js b/module/sos-dialog-combat-actions.js new file mode 100644 index 0000000..8fd9954 --- /dev/null +++ b/module/sos-dialog-combat-actions.js @@ -0,0 +1,130 @@ +import { SoSUtility } from "./sos-utility.js"; + +/* -------------------------------------------- */ +export class SoSDialogCombatActions extends Dialog { + + /* -------------------------------------------- */ + static async create( combatId, round ) { + + let combatActions = { + actionsList: await SoSUtility.loadCompendium( 'foundryvtt-shadows-over-sol.combat-actions' ), + actionPoints: SoSUtility.fillRange(0, 6), + combatId: combatId, + round: round + } + for ( let i=0; i', + label: "Validate", + callback: (html) => { this.validateActions(html) } + } + }, + default: "validate" + }; + super(dialogConf, options); + + this.combatActions = combatActions; + } + + /* -------------------------------------------- */ + async close() { + let ap = Number($('#remain-ap').text()); + if ( ap >= 0 ) { + super.close(); + + let action3Index = $('#action3').val(); + let action3 = duplicate(this.combatActions.actionsList[action3Index]); + let action2Index = $('#action2').val(); + let action2 = duplicate(this.combatActions.actionsList[action2Index]._id); + let action1Index = $('#action1').val(); + let action1 = duplicate(this.combatActions.actionsList[action1Index]._id); + + game.socket.emit("system.foundryvtt-reve-de-dragon", { + name: "msg_declare_actions", data: { + userId: game.userId, + phaseArray: [ action1, action2, action3], + remainingAP: ap + } } ); + } else { + ui.notifications.warn("Action Points are below 0 ! Please check your phases !"); + } + } + + /* -------------------------------------------- */ + validateActions( html ) { + } + + /* -------------------------------------------- */ + resetAP() { + let maxAP = $('#actionMax').val(); + $('#remain-ap').text( maxAP); + + $('#action3').val( this.combatActions.noActionId ); + $('#action2').val( this.combatActions.noActionId ); + $('#action1').val( this.combatActions.noActionId ); + $('#action3').prop('disabled', false); + $('#action2').prop('disabled', false); + $('#action1').prop('disabled', false); + } + + /* -------------------------------------------- */ + updateAP( ) { + let remainAP = $('#actionMax').val(); + + let action3Index = $('#action3').val(); + if ( this.combatActions.actionsList[action3Index].name != 'No Action') { + remainAP -= 3; + } + + let action2Index = $('#action2').val(); + if ( this.combatActions.actionsList[action2Index].name != 'No Action') { + remainAP -= 2; + } + + let action1Index = $('#action1').val(); + if ( this.combatActions.actionsList[action1Index].name != 'No Action') { + remainAP -= 1; + } + + $('#remain-ap').text( remainAP); + + if ( remainAP < 0 ) { + $("#remain-ap").addClass("text-red"); + ui.notifications.warn("No more Action Points ! Please check your phases !"); + } else { + $("#remain-ap").removeClass("text-red"); + } + + } + + /* -------------------------------------------- */ + /** @override */ + activateListeners(html) { + super.activateListeners(html); + + html.find('#actionMax').change((event) => { + this.resetAP( ); + }); + html.find('.action-select').change((event) => { + this.updateAP( ); + }); + + } + +} diff --git a/module/sos-main.js b/module/sos-main.js index 7e20e96..eaf1a27 100644 --- a/module/sos-main.js +++ b/module/sos-main.js @@ -12,6 +12,7 @@ import { SoSActor } from "./actor.js"; import { SoSItemSheet } from "./item-sheet.js"; import { SoSActorSheet } from "./actor-sheet.js"; import { SoSUtility } from "./sos-utility.js"; +import { SoSCombat } from "./sos-combat.js"; /* -------------------------------------------- */ /* Foundry VTT Initialization */ @@ -51,6 +52,7 @@ Hooks.once("init", async function () { /* -------------------------------------------- */ // Define custom Entity classes CONFIG.Actor.entityClass = SoSActor; + CONFIG.Combat.entityClass = SoSCombat; CONFIG.SoS = { } @@ -61,6 +63,11 @@ Hooks.once("init", async function () { Items.unregisterSheet("core", ItemSheet); Items.registerSheet("foundryvtt-shadows-over-sol", SoSItemSheet, { makeDefault: true }); + // Init/registers + Hooks.on('renderChatLog', (log, html, data) => { + SoSUtility.registerChatCallbacks(html); + }); + // Patch the initiative formula _patch_initiative(); diff --git a/module/sos-utility.js b/module/sos-utility.js index 1378a13..939b30a 100644 --- a/module/sos-utility.js +++ b/module/sos-utility.js @@ -1,5 +1,8 @@ +/* -------------------------------------------- */ +import { SoSDialogCombatActions } from "./sos-dialog-combat-actions.js"; -export class SoSUtility { +/* -------------------------------------------- */ + export class SoSUtility { /* -------------------------------------------- */ static async preloadHandlebarsTemplates() { @@ -24,6 +27,14 @@ export class SoSUtility { return Array(end - start + 1).fill().map((item, index) => start + index); } + /* -------------------------------------------- */ + onSocketMesssage( msg ) { + if (msg.name == 'msg_declare_actions' ) { + let combat = game.combats.get( msg.data.combatId); // Get the associated combat + combat.setupActorActions( msg.data ); + } + } + /* -------------------------------------------- */ static async loadCompendiumNames(compendium) { const pack = game.packs.get(compendium); @@ -49,4 +60,21 @@ export class SoSUtility { return list; } + /* -------------------------------------------- */ + static async openDeclareActions( event) { + event.preventDefault(); + let round = event.currentTarget.attributes['data-round'].value; + let combatId = event.currentTarget.attributes['data-combat-id'].value; + let d = await SoSDialogCombatActions.create( combatId, round ); + d.render(true); + } + + /* -------------------------------------------- */ + static async registerChatCallbacks(html) { + html.on("click", '#button-declare-actions', event => { + SoSUtility.openDeclareActions( event ); + }); + + } + } \ No newline at end of file diff --git a/packs/combat-actions.db b/packs/combat-actions.db index 5c0fb55..1702456 100644 --- a/packs/combat-actions.db +++ b/packs/combat-actions.db @@ -17,3 +17,4 @@ {"name":"Taking Cover","permission":{"default":0,"pJLHbu8WlBVyfXG4":3},"type":"action","data":{"type":"move","minap":1,"description":"

Sometimes a basic move or a change in posture will be enough to gain a character the Cover or Concealment consequences. To make the most of these, however, the character will need to make a take cover action. There is a difference between “taking cover” and simply having cover. Think of it like this: if Monique is being fired upon and runs to where a stack of barrels is between her and her attacker, she has cover from the attacks. At the same time, if she wants to shoot back, the barrels are in her way as well. She has cover, but she hasn’t “taken cover” to make the most of it.

\n

When a character takes cover, she needs to have moved immediately next to the object providing her with the cover consequence. She then performs the take cover action, setting herself up so that the cover does not hinder her attacks but still provides her with protection against the attacks of others. Without this, the cover’s bonus to Defense applies both to incoming and outgoing attacks.

\n

 

\n

 

"},"flags":{},"img":"systems/foundryvtt-shadows-over-sol/img/icons/action_cover.svg","effects":[],"_id":"pwq6CB24QhNkrt1s"} {"name":"Posture","permission":{"default":0,"pJLHbu8WlBVyfXG4":3},"type":"action","data":{"type":"move","minap":1,"description":"

By default, characters are assumed to be standing. There are times, however, when a character might want to kneel, crouch, sit or lay down. Changing between any of these postures is a move action, and one change in posture may be tacked on for free to another move action, such as a basic move or taking cover. If performed by itself, changing posture costs the usual amount of AP for the phase.

\n

 

"},"flags":{},"img":"systems/foundryvtt-shadows-over-sol/img/icons/action_posture.svg","effects":[],"_id":"tF8mIKv0zi2HLv9B"} {"name":"Drawing/Reloading","permission":{"default":0,"pJLHbu8WlBVyfXG4":3},"type":"action","data":{"type":"interact","minap":1,"description":"

Drawing a weapon or reloading one is a simple interact action that involves taking a weapon out or putting ammunition into one. This costs at least 1 AP if the weapon or magazine was in a holster or other easy-to-access position. It costs at least 2 AP if it was harder to reach, such as stowed at the top of a pack or tucked inside one’s boot. Some weapons may have longer reload times, requiring more AP. This will be noted in the weapon’s properties.

\n

 

\n

 

"},"flags":{},"img":"systems/foundryvtt-shadows-over-sol/img/icons/action_reload.svg","effects":[],"_id":"uSQw858IiBrWkeSj"} +{"name":"No Action","permission":{"default":0,"pJLHbu8WlBVyfXG4":3},"type":"action","data":{"type":"other","minap":0,"description":0},"flags":{},"img":"systems/foundryvtt-shadows-over-sol/img/icons/action_none.svg","effects":[],"_id":"bqSieyyOLSY8tU2U"} diff --git a/styles/simple.css b/styles/simple.css index 65733f5..19cb29b 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -203,7 +203,6 @@ table {border: 1px solid #7a7971;} } /* Styles limited to foundryvtt-reve-de-dragon sheets */ - .foundryvtt-shadows-over-sol .sheet-header { -webkit-box-flex: 0; -ms-flex: 0 0 210px; @@ -394,7 +393,8 @@ table {border: 1px solid #7a7971;} /* ======================================== */ /* Sheet */ .window-app.sheet .window-content .sheet-header{ - background: #011d33 url("img/bg_header.webp") no-repeat left top; + background: url('../img/ui/background_sheet01.webp') no-repeat left top; + /*background: #011d33 url("img/bg_header.webp") no-repeat left top;*/ color: rgba(255, 255, 255, 1); } @@ -405,6 +405,10 @@ table {border: 1px solid #7a7971;} margin-bottom: 0.25rem; } +.sheet .sheet-header { + background: url('../img/ui/background_sheet01.webp') no-repeat left top; +} + .window-app .window-content, .window-app.sheet .window-content .sheet-body{ background: rgb(245,245,240) url("img/bg_left.jpg") no-repeat left top; } @@ -876,7 +880,7 @@ ul, li { border-radius: 0; background: rgba(30, 25, 20, 1); background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; + /*border-image: url(img/ui/footer-button.png) 10 repeat;*/ border-image-width: 4px; border-image-outset: 0px; } @@ -884,7 +888,7 @@ ul, li { #controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { background: rgba(72, 46, 28, 1); background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; + /*border-image: url(img/ui/footer-button.png) 10 repeat;*/ border-image-width: 4px; border-image-outset: 0px; box-shadow: 0 0 3px #ff6400; @@ -896,7 +900,7 @@ ul, li { } #hotbar #action-bar .macro { - border-image: url(img/ui/bg_control.jpg) 21 repeat; + /*border-image: url(img/ui/bg_control.jpg) 21 repeat;*/ border-image-slice: 6 6 6 6 fill; border-image-width: 6px 6px 6px 6px; border-image-outset: 0px 0px 0px 0px; @@ -909,7 +913,7 @@ ul, li { } #players { - border-image: url(img/ui/footer-button.png) 10 repeat; + /*border-image: url(img/ui/footer-button.png) 10 repeat;*/ border-image-width: 4px; border-image-outset: 0px; background: rgba(30, 25, 20, 1); @@ -922,7 +926,7 @@ ul, li { #navigation #scene-list .scene.nav-item { background: rgba(30, 25, 20, 1); background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; + /*border-image: url(img/ui/footer-button.png) 10 repeat;*/ border-image-width: 4px; border-image-outset: 0px; } @@ -930,7 +934,7 @@ ul, li { #navigation #scene-list .scene.view, #navigation #scene-list .scene.context { background: rgba(72, 46, 28, 1); background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; + /*border-image: url(img/ui/footer-button.png) 10 repeat;*/ border-image-width: 4px; border-image-outset: 0px; box-shadow: 0 0 3px #ff6400; @@ -939,7 +943,7 @@ ul, li { #navigation #nav-toggle { background: rgba(30, 25, 20, 1); background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; + /*border-image: url(img/ui/footer-button.png) 10 repeat;*/ border-image-width: 4px; border-image-outset: 0px; } @@ -971,7 +975,7 @@ ul, li { width: 360px; background: rgba(30, 25, 20, 0.9); - border-image: url(img/ui/bg_control.jpg) 21 repeat; + /*border-image: url(img/ui/bg_control.jpg) 21 repeat;*/ border-image-slice: 6 6 6 6 fill; border-image-width: 6px 6px 6px 6px; border-image-outset: 0px 0px 0px 0px; @@ -1006,6 +1010,11 @@ ul, li { opacity: 1; } +.text-red { + color: red; + font-weight: bold; +} + .chat-card-button { box-shadow: inset 0px 1px 0px 0px #a6827e; background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%); diff --git a/templates/dialog-combat-actions.html b/templates/dialog-combat-actions.html new file mode 100644 index 0000000..05941b6 --- /dev/null +++ b/templates/dialog-combat-actions.html @@ -0,0 +1,59 @@ +
+ +

Combat Actions for round {{round}}

+ +
+
+
+ + +
+
+ +
+
+
+
+ + +
+ +
+
+ + +
+ +
+
+ + +
+ +
+ +
\ No newline at end of file