mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-07-21 18:09:54 +02:00
Compare commits
3 commits
81e264a477
...
3a5529f1dc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a5529f1dc | ||
|
|
02a73d774a | ||
|
|
450287e4d0 |
6 changed files with 56 additions and 38 deletions
|
|
@ -256,7 +256,8 @@ export default class DHBaseAction extends ActionMixin(foundry.abstract.DataModel
|
|||
|
||||
if (Hooks.call(`${CONFIG.DH.id}.postUseAction`, this, config) === false) return;
|
||||
|
||||
if (this.chatDisplay && !config.skips.createMessage && !config.actionChatMessageHandled) await this.toChat();
|
||||
if (this.chatDisplay && !config.skips.createMessage && !config.actionChatMessageHandled)
|
||||
await this.toChat(null, config);
|
||||
|
||||
return config;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ export default class DHSummonField extends fields.ArrayField {
|
|||
super(summonFields, options, context);
|
||||
}
|
||||
|
||||
static async execute() {
|
||||
static async execute(config) {
|
||||
if (!canvas.scene) {
|
||||
ui.notifications.warn(game.i18n.localize('DAGGERHEART.ACTIONS.TYPES.summon.error'));
|
||||
return;
|
||||
|
|
@ -36,6 +36,7 @@ export default class DHSummonField extends fields.ArrayField {
|
|||
|
||||
const rolls = [];
|
||||
const summonData = [];
|
||||
const chatMessageData = [];
|
||||
for (const summon of this.summon) {
|
||||
const roll = new Roll(itemAbleRollParse(summon.count, this.actor, this.item));
|
||||
await roll.evaluate();
|
||||
|
|
@ -54,17 +55,18 @@ export default class DHSummonField extends fields.ArrayField {
|
|||
tokenPreviewName: `${actor.prototypeToken.name}${remaining > 1 ? ` (${remaining}x)` : ''}`
|
||||
});
|
||||
}
|
||||
|
||||
chatMessageData.push({
|
||||
data: actor,
|
||||
quantity: countNumber
|
||||
});
|
||||
}
|
||||
|
||||
if (rolls.length) await triggerChatRollFx(rolls);
|
||||
|
||||
this.actor.sheet?.minimize();
|
||||
DHSummonField.handleSummon(summonData, this.actor);
|
||||
}
|
||||
|
||||
static async handleSummon(summonData, actionActor) {
|
||||
await CONFIG.ux.TokenManager.createTokensWithPreview(summonData, { elevation: actionActor.token?.elevation });
|
||||
|
||||
return actionActor.sheet?.maximize();
|
||||
await CONFIG.ux.TokenManager.createTokensWithPreview(summonData, { elevation: this.actor.token?.elevation });
|
||||
this.actor.sheet?.maximize();
|
||||
config.summonData = chatMessageData;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -269,7 +269,7 @@ export function ActionMixin(Base) {
|
|||
return this.delete();
|
||||
}
|
||||
|
||||
async toChat(origin) {
|
||||
async toChat(origin, config) {
|
||||
const autoExpandDescription = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.appearance)
|
||||
.expandRollMessage?.desc;
|
||||
|
||||
|
|
@ -282,7 +282,7 @@ export function ActionMixin(Base) {
|
|||
img: this.baseAction ? this.parent.parent.img : this.img,
|
||||
tags: this.tags ? this.tags : ['Spell', 'Arcana', 'Lv 10'],
|
||||
areas: this.areas,
|
||||
summon: this.summon
|
||||
summon: config?.summonData
|
||||
},
|
||||
source: {
|
||||
actor: this.actor.uuid,
|
||||
|
|
|
|||
|
|
@ -19,10 +19,10 @@ export default class DhTokenManager {
|
|||
}
|
||||
}
|
||||
|
||||
return await canvas.tokens.placeTokens(
|
||||
const placedData = await canvas.tokens.placeTokens(
|
||||
[
|
||||
{
|
||||
...actor.prototypeToken.toObject(),
|
||||
...(await actor.getTokenDocument()).toObject(),
|
||||
actorId: actor.id,
|
||||
displayName: 50,
|
||||
...tokenData
|
||||
|
|
@ -30,6 +30,8 @@ export default class DhTokenManager {
|
|||
],
|
||||
{ create: false }
|
||||
);
|
||||
|
||||
return placedData?.[0] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -46,22 +48,24 @@ export default class DhTokenManager {
|
|||
|
||||
const createElevation = elevation ?? level.elevation.bottom;
|
||||
for (const tokenData of tokensData) {
|
||||
const previewTokens = await this.createPreview(tokenData.actor, {
|
||||
const previewToken = await this.createPreview(tokenData.actor, {
|
||||
name: tokenData.tokenPreviewName,
|
||||
level: game.user.viewedLevel,
|
||||
elevation: createElevation,
|
||||
flags: { daggerheart: { createPlacement: true } }
|
||||
});
|
||||
if (!previewTokens?.length) return null;
|
||||
if (!previewToken) return null;
|
||||
|
||||
const finalTokenData = {
|
||||
...previewToken.toObject(),
|
||||
name: tokenData.actor.prototypeToken.name,
|
||||
displayName: tokenData.actor.prototypeToken.displayName,
|
||||
flags: tokenData.actor.prototypeToken.flags
|
||||
};
|
||||
|
||||
await canvas.scene.createEmbeddedDocuments(
|
||||
'Token',
|
||||
previewTokens.map(x => ({
|
||||
...x.toObject(),
|
||||
name: tokenData.actor.prototypeToken.name,
|
||||
displayName: tokenData.actor.prototypeToken.displayName,
|
||||
flags: tokenData.actor.prototypeToken.flags
|
||||
})),
|
||||
[finalTokenData],
|
||||
{ controlObject: true, parent: canvas.scene }
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -599,27 +599,23 @@
|
|||
}
|
||||
|
||||
secret-block {
|
||||
position: relative;
|
||||
section.secret {
|
||||
background-color: @red-10;
|
||||
padding: 0;
|
||||
margin-top: 0.375rem;
|
||||
&.revealed {
|
||||
background-color: @green-10;
|
||||
}
|
||||
p {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
}
|
||||
display: block;
|
||||
|
||||
/** A buffer to make the hover behavior work a bit better. The bottom in the button needs to compensate */
|
||||
@buffer: 8px;
|
||||
margin-top: -@buffer;
|
||||
padding-top: @buffer;
|
||||
|
||||
button.reveal {
|
||||
--button-size: 0.875rem;
|
||||
--button-size: 1rem;
|
||||
height: var(--button-size);
|
||||
position: absolute;
|
||||
margin: auto;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: min-content;
|
||||
padding: 1px 8px 0 8px;
|
||||
bottom: calc(100% - 0.4375rem - 2px);
|
||||
bottom: calc(100% - 0.4375rem - 1px);
|
||||
|
||||
background-color: var(--dh-window-button-color-bg); // todo: find a better var name
|
||||
border-color: var(--color-secret-border);
|
||||
|
|
@ -627,6 +623,7 @@
|
|||
font-size: var(--font-size-10);
|
||||
user-select: none;
|
||||
text-transform: uppercase;
|
||||
white-space: nowrap;
|
||||
|
||||
visibility: hidden;
|
||||
}
|
||||
|
|
@ -635,6 +632,20 @@
|
|||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The element inside a secret-block.
|
||||
* This is separate since during prosemirror editing, the secret-block container does not exist.
|
||||
*/
|
||||
section.secret {
|
||||
--color-secret-bg: @red-10;
|
||||
--color-revealed-bg: @green-10;
|
||||
position: relative;
|
||||
padding: 0;
|
||||
p {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.system-daggerheart {
|
||||
|
|
|
|||
|
|
@ -16,10 +16,10 @@
|
|||
{{#each action.summon}}
|
||||
<div class="summon-container">
|
||||
<div class="summon-label-container">
|
||||
<img src="{{this.actor.img}}" />
|
||||
<label>{{this.actor.name}}</label>
|
||||
<img src="{{this.data.img}}" />
|
||||
<label>{{this.data.name}}</label>
|
||||
</div>
|
||||
<span># {{this.rolledCount}}</span>
|
||||
<span># {{this.quantity}}</span>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue