mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-06-06 04:44:16 +02:00
Fix getters in item roll data
This commit is contained in:
parent
c3b1ad271c
commit
79e54b4999
3 changed files with 37 additions and 9 deletions
|
|
@ -7,7 +7,12 @@
|
||||||
* @property {boolean} isInventoryItem- Indicates whether items of this type is a Inventory Item
|
* @property {boolean} isInventoryItem- Indicates whether items of this type is a Inventory Item
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { addLinkedItemsDiff, getScrollTextData, updateLinkedItemApps } from '../../helpers/utils.mjs';
|
import {
|
||||||
|
addLinkedItemsDiff,
|
||||||
|
getScrollTextData,
|
||||||
|
shallowCopyWithGetters,
|
||||||
|
updateLinkedItemApps
|
||||||
|
} from '../../helpers/utils.mjs';
|
||||||
import { ActionsField } from '../fields/actionField.mjs';
|
import { ActionsField } from '../fields/actionField.mjs';
|
||||||
import FormulaField from '../fields/formulaField.mjs';
|
import FormulaField from '../fields/formulaField.mjs';
|
||||||
|
|
||||||
|
|
@ -159,9 +164,8 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
|
||||||
* @returns {object}
|
* @returns {object}
|
||||||
*/
|
*/
|
||||||
getRollData(options = {}) {
|
getRollData(options = {}) {
|
||||||
const actorRollData = this.actor?.getRollData() ?? {};
|
const data = this.actor?.getRollData() ?? {};
|
||||||
const data = Object.assign(actorRollData, {});
|
data.item = this;
|
||||||
data.item = Object.assign(this, {});
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { emitAsGM, GMUpdateEvent } from '../systemRegistration/socket.mjs';
|
import { emitAsGM, GMUpdateEvent } from '../systemRegistration/socket.mjs';
|
||||||
import { LevelOptionType } from '../data/levelTier.mjs';
|
import { LevelOptionType } from '../data/levelTier.mjs';
|
||||||
import DHFeature from '../data/item/feature.mjs';
|
import DHFeature from '../data/item/feature.mjs';
|
||||||
import { createScrollText, damageKeyToNumber, getDamageKey } from '../helpers/utils.mjs';
|
import { createScrollText, damageKeyToNumber, getDamageKey, shallowCopyWithGetters } from '../helpers/utils.mjs';
|
||||||
import DhCompanionLevelUp from '../applications/levelup/companionLevelup.mjs';
|
import DhCompanionLevelUp from '../applications/levelup/companionLevelup.mjs';
|
||||||
import { ResourceUpdateMap } from '../data/action/baseAction.mjs';
|
import { ResourceUpdateMap } from '../data/action/baseAction.mjs';
|
||||||
import { abilities } from '../config/actorConfig.mjs';
|
import { abilities } from '../config/actorConfig.mjs';
|
||||||
|
|
@ -595,10 +595,7 @@ export default class DhpActor extends Actor {
|
||||||
|
|
||||||
/**@inheritdoc */
|
/**@inheritdoc */
|
||||||
getRollData() {
|
getRollData() {
|
||||||
const rollData = foundry.utils.deepClone(super.getRollData());
|
const rollData = shallowCopyWithGetters(super.getRollData());
|
||||||
/* system gets repeated infinately which causes issues when trying to use the data for document creation */
|
|
||||||
delete rollData.system;
|
|
||||||
|
|
||||||
rollData.id = this.id;
|
rollData.id = this.id;
|
||||||
rollData.name = this.name;
|
rollData.name = this.name;
|
||||||
rollData.system = this.system.getRollData();
|
rollData.system = this.system.getRollData();
|
||||||
|
|
|
||||||
|
|
@ -809,3 +809,30 @@ export function sortBy(arr, fn) {
|
||||||
};
|
};
|
||||||
return arr.sort(cmp);
|
return arr.sort(cmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a shallow copy including getters of the given object.
|
||||||
|
* Generally used for expanding roll data without side effects
|
||||||
|
*/
|
||||||
|
export function shallowCopyWithGetters(obj) {
|
||||||
|
function getAllPropertyDescriptors(obj) {
|
||||||
|
if (!obj) {
|
||||||
|
return Object.create(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...getAllPropertyDescriptors(Object.getPrototypeOf(obj)),
|
||||||
|
...Object.getOwnPropertyDescriptors(obj)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = getAllPropertyDescriptors(obj);
|
||||||
|
const result = {};
|
||||||
|
for (const key of Object.keys(props)) {
|
||||||
|
const value = obj[key];
|
||||||
|
if (key !== '__proto__' && typeof value !== 'function') {
|
||||||
|
result[key] = obj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue