|
|
- import { MODULE_SCOPE, TOP_KEY, BOTTOM_KEY } from "./const.js";
-
- export function getTokenLOSheight(token) {
- let losDiff;
- let divideBy = WallHeight._isLevelsAutoCover && token.document.flags.levelsautocover?.ducking ? 3 : 1;
- if (WallHeight._autoLosHeight) {
- losDiff =
- token.document.flags[MODULE_SCOPE]?.tokenHeight ||
- canvas.scene.dimensions.distance *
- Math.max(token.document.width, token.document.height) *
- ((Math.abs(token.document.texture.scaleX) + Math.abs(token.document.texture.scaleY)) / 2);
- } else {
- losDiff = token.document.flags[MODULE_SCOPE]?.tokenHeight || WallHeight._defaultTokenHeight;
- }
-
- return token.document.elevation + losDiff / divideBy;
- }
-
- export function getAdvancedLighting(document){
- return game.settings.get(MODULE_SCOPE, 'globalAdvancedLighting') || document.getFlag(MODULE_SCOPE, "advancedLighting")
- }
-
- export function getWallBounds(wall) {
- if(wall.document) wall = wall.document;
- const top = wall.flags[MODULE_SCOPE]?.[TOP_KEY] ?? Infinity;
- const bottom = wall.flags[MODULE_SCOPE]?.[BOTTOM_KEY] ?? -Infinity;
- return { top, bottom }
- }
-
- export function getLevelsBounds(document){
- const top = document.flags?.levels?.rangeTop ?? Infinity;
- const bottom = document.flags?.levels?.rangeBottom ?? -Infinity;
- return { top, bottom }
- }
-
- export function getSceneSettings(scene) {
- let advancedVision = scene.flags[MODULE_SCOPE]?.advancedVision ?? true;
- return {advancedVision};
- }
-
- export async function _old_migrateData(scene){
- if(!scene) scene = canvas.scene;
- const walls = Array.from(scene.walls);
- const updates = [];
- for (const wall of walls) {
- const oldTop = wall.document.flags?.wallHeight?.wallHeightTop;
- const oldBottom = wall.document.flags?.wallHeight?.wallHeightBottom;
- if ((oldTop !== null && oldTop !== undefined) || (oldBottom !== null && oldBottom !== undefined)) {
- const update = {
- _id: wall.id,
- flags: {
- "wall-height": {
- top: oldTop,
- bottom: oldBottom,
- },
- "-=wallHeight": null
- },
- };
- updates.push(update);
- }
- }
- if(updates.length <= 0) return false;
- await scene.updateEmbeddedDocuments("Wall", updates);
- console.log("Wall Height - Migrated " + updates.length + " walls to new Wall Height data structure in scene " + scene.name);
- return true;
-
- }
-
- export async function migrateData(scene){
- if(!scene) scene = canvas.scene;
- const walls = Array.from(scene.walls);
- const updates = [];
- for (const wall of walls) {
- const oldTop = wall.flags?.wallHeight?.wallHeightTop;
- const oldBottom = wall.flags?.wallHeight?.wallHeightBottom;
- if ((oldTop !== null && oldTop !== undefined) || (oldBottom !== null && oldBottom !== undefined)) {
- const update = {
- _id: wall.id,
- flags: {
- "wall-height": {
- top: oldTop,
- bottom: oldBottom,
- },
- "-=wallHeight": null
- },
- };
- if(wall.flags['token-attacher']){
- const oldOffsetTop = wall.flags?.['token-attacher']?.offset?.elevation?.flags?.wallHeight?.wallHeightTop;
- const oldOffsetBottom = wall.flags?.['token-attacher']?.offset?.elevation?.flags?.wallHeight?.wallHeightBottom;
- if ((oldTop !== null && oldTop !== undefined) || (oldBottom !== null && oldBottom !== undefined)) {
- setProperty(update, `flags.token-attacher.offset.elevation.flags.wall-height`,{
- top: oldOffsetTop,
- bottom: oldOffsetBottom
- });
- setProperty(update, `flags.token-attacher.offset.elevation.flags.-=wallHeight`, null);
- }
- }
- updates.push(update);
- }
- }
- if(updates.length <= 0) return false;
- await scene.updateEmbeddedDocuments("Wall", updates,{'token-attacher': {update:true}});
- ui.notifications.notify("Wall Height - Migrated " + updates.length + " walls to new Wall Height data structure in scene " + scene.name);
- console.log("Wall Height - Migrated " + updates.length + " walls to new Wall Height data structure in scene " + scene.name);
- return true;
- }
-
- export async function migrateTokenHeight(){
- ui.notifications.notify("Wall Height - Migrating Token Height from Levels...");
- const scenes = Array.from(game.scenes);
- for(let scene of scenes){
- await migrateTokenHeightInScene(scene);
- }
- const updates = [];
- const actors = Array.from(game.actors);
- for(const actor of actors){
- const oldTokenHeight = actor.document.token.flags?.levels?.tokenHeight
- if (oldTokenHeight) {
- const update = {
- _id: actor.id,
- "token.flags.wall-height.tokenHeight": oldTokenHeight,
- };
- updates.push(update);
- }
- }
- await Actor.updateDocuments(updates)
- ui.notifications.notify("Wall Height - Migrated Token Height from Levels. You can migrate again with the provided macro if needeed.");
- ui.notifications.warn("Global settings for Token Height need to be manually set in Wall Height module settings!", {permanent: true});
- }
-
- async function migrateTokenHeightInScene(scene){
- const tokens = Array.from(scene.tokens);
- const updates = [];
- for (const token of tokens) {
- const oldTokenHeight = token.document.flags?.levels?.tokenHeight
- if (oldTokenHeight) {
- const update = {
- _id: token.id,
- flags: {
- "wall-height": {
- tokenHeight: oldTokenHeight,
- },
- },
- };
- updates.push(update);
- }
- }
- if(updates.length <= 0) return false;
- await scene.updateEmbeddedDocuments("Token", updates);
- return true;
- }
|