shape change done

This commit is contained in:
Mike Bloy 2024-06-01 16:37:36 -05:00
parent 4ffed673db
commit 0c0fb1a3a8
4 changed files with 65 additions and 14 deletions

View File

@ -147,18 +147,32 @@ export async function requestTokenRoll(sceneId, tokenId, rollType, rollDesc, opt
return { sceneId, tokenId, result };
}
export async function addActiveEffectsToToken(sceneId, tokenId, effectDocuments) {
function _getSceneToken(sceneId, tokenId) {
const scene = game.scenes.get(sceneId);
const token = scene.tokens.get(tokenId);
return token;
}
export async function addActiveEffectsToToken(sceneId, tokenId, effectDocuments) {
const token = _getSceneToken(sceneId, tokenId);
await token.actor.createEmbeddedDocuments('ActiveEffect', effectDocuments);
}
export async function deleteActiveEffectsFromToken(sceneId, tokenId, effectIds) {
const scene = game.scenes.get(sceneId);
const token = scene.tokens.get(tokenId);
const token = _getSceneToken(sceneId, tokenId);
await token.actor.deleteEmbeddedDocuments('ActiveEffect', effectIds);
}
export async function updateOwnedToken(sceneId, tokenId, updates, options = {}) {
const token = _getSceneToken(sceneId, tokenId);
return token.update(updates, options);
}
export async function deleteToken(sceneId, tokenId) {
const token = _getSceneToken(sceneId, tokenId);
return token.delete();
}
export function SwadeVAEbuttons(effect, buttons) {
if (['Bound', 'Entangled'].includes(effect?.name)) {
buttons.push({

View File

@ -1,5 +1,5 @@
import { moduleName, moduleHelpers } from '../globals.js';
import { firstOwner, deleteActiveEffectsFromToken } from '../helpers.js';
import { firstOwner, deleteActiveEffectsFromToken, deleteToken } from '../helpers.js';
import { ArcaneProtectionEffect } from './arcaneProtection.js';
import { BanishEffect } from './banish.js';
import { BarrierEffect } from './barrier.js';
@ -190,7 +190,7 @@ export async function powerEffectManagementHook(effect, data, userId) {
const isSpawned = effect.getFlag(moduleName, 'spawnedTempToken') ?? false;
if (isSpawned) {
const token = effect.parent.token;
await token.delete();
await moduleHelpers.socket.executeAsGM(deleteToken, token.parent.id, token.id);
}
const targetIds = effect.getFlag(moduleName, 'targetIds') || [];
for (const targetId of targetIds) {

View File

@ -1,4 +1,5 @@
import { log, moduleName } from '../globals.js';
import { log, moduleHelpers, moduleName } from '../globals.js';
import { firstOwner, updateOwnedToken } from '../helpers.js';
import { ActorFolderEffect } from './basePowers.js';
export class ShapeChangeEffect extends ActorFolderEffect {
@ -99,7 +100,11 @@ export class ShapeChangeEffect extends ActorFolderEffect {
}
this.data.tokenUpdates = {
flags: {
[moduleName]: { 'shapeChange.srcTokenUuid': this.target.document.uuid },
[moduleName]: {
'shapeChange.srcTokenUuid': this.target.document.uuid,
'shapeChange.srcTokenId': this.target.document.id,
'shapeChange.srcTokenSceneId': this.target.scene.id,
},
},
actorLink: false,
name: `${this.target.name} (${this.targetActor.prototypeToken.name} form)`,
@ -136,7 +141,6 @@ export class ShapeChangeEffect extends ActorFolderEffect {
y: target.y - ((protoHeight - target.height) * size) / 2,
elevation: target.elevation,
hidden: target.hidden,
alpha: target.alpha,
});
return this.source.scene.createEmbeddedDocuments('Token', [this.targetTokenDoc]);
}
@ -182,10 +186,15 @@ export class ShapeChangeEffect extends ActorFolderEffect {
}
async sideEffects() {
// await this.target.document.update({
// hidden: true,
// alpha: 0.1,
// });
const owner = firstOwner(this.target);
moduleHelpers.socket.executeAsUser(
updateOwnedToken,
owner.id,
this.target.document.parent.id,
this.target.document.id,
{ hidden: true, x: 0, y: 0 },
{ animate: false },
);
}
get description() {
@ -196,6 +205,25 @@ export class ShapeChangeEffect extends ActorFolderEffect {
}
}
export function shapeChangeTokenDeleteHandler(token, options, userId) {
export async function shapeChangeTokenDeleteHandler(token, options, userId) {
log('TOKEN DELETED |', token, options, userId);
const sourceInfo = token.getFlag(moduleName, 'shapeChange');
if (!sourceInfo?.srcTokenId) {
return;
}
if (sourceInfo.srcTokenSceneId !== token.parent.id) {
return;
}
const srcToken = await fromUuid(sourceInfo.srcTokenUuid);
const size = token.parent.dimensions.size;
const owner = firstOwner(srcToken);
const updates = {
x: token.x - ((srcToken.width - token.width) * size) / 2,
y: token.y - ((srcToken.height - token.height) * size) / 2,
elevation: token.elevation,
hidden: token.hidden,
};
moduleHelpers.socket.executeAsUser(updateOwnedToken, owner.id, srcToken.parent.id, srcToken.id, updates, {
animate: false,
});
}

View File

@ -4,7 +4,14 @@ import { registerSettings } from './settings.js';
import { preloadTemplates } from './preloadTemplates.js';
import { api } from './api.js';
import { initVisionModes } from './visionModes.js';
import { requestTokenRoll, addActiveEffectsToToken, deleteActiveEffectsFromToken, SwadeVAEbuttons } from './helpers.js';
import {
addActiveEffectsToToken,
deleteActiveEffectsFromToken,
deleteToken,
requestTokenRoll,
SwadeVAEbuttons,
updateOwnedToken,
} from './helpers.js';
import { preDamageRollModifiers, preTraitRollModifiers } from './rollHelpers.js';
import { log, moduleHelpers } from './globals.js';
import { powerEffectManagementHook, visualActiveEffectPowerButtons } from './powers/powers.js';
@ -52,6 +59,8 @@ Hooks.on('visual-active-effects.createEffectButtons', SwadeVAEbuttons);
Hooks.once('socketlib.ready', () => {
const _socket = socketlib.registerModule('swade-mb-helpers');
_socket.register('requestTokenRoll', requestTokenRoll);
_socket.register('updateOwnedToken', updateOwnedToken);
_socket.register('deleteToken', deleteToken);
_socket.register('addActiveEffectsToToken', addActiveEffectsToToken);
_socket.register('deleteActiveEffectsFromToken', deleteActiveEffectsFromToken);
moduleHelpers._socket = _socket;