mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-06-06 04:44:16 +02:00
[Fix] origin change values and prioritize item options (#1835)
Some checks are pending
Project CI / build (24.x) (push) Waiting to run
Some checks are pending
Project CI / build (24.x) (push) Waiting to run
* Fix origin key replacement and prioritize item options * Rename key to value * Some fixes * Attempt to always retrieve the source item for same actor origin * Fix getters in item roll data * Performance improvement * Allow apply to item system data * Replace implementation with shallow proxy * Add delete to the shallow proxy * Add proxy trap for the in operator --------- Co-authored-by: WBHarry <williambjrklund@gmail.com>
This commit is contained in:
parent
c82bcbeb01
commit
6d09c5504d
6 changed files with 70 additions and 37 deletions
|
|
@ -372,10 +372,11 @@ export const itemAbleRollParse = (value, actor, item) => {
|
|||
|
||||
const isItemTarget = value.toLowerCase().includes('item.@');
|
||||
const slicedValue = isItemTarget ? value.replaceAll(/item\.@/gi, '@') : value;
|
||||
const model = isItemTarget ? item : actor;
|
||||
const model = isItemTarget || item instanceof Item ? item : actor;
|
||||
const rollData = isItemTarget || !model?.getRollData ? model : model.getRollData();
|
||||
|
||||
try {
|
||||
return Roll.replaceFormulaData(slicedValue, isItemTarget || !model?.getRollData ? model : model.getRollData());
|
||||
return Roll.replaceFormulaData(slicedValue, rollData);
|
||||
} catch (_) {
|
||||
return '';
|
||||
}
|
||||
|
|
@ -809,3 +810,31 @@ export function sortBy(arr, fn) {
|
|||
};
|
||||
return arr.sort(cmp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a proxy that allows retrieval of top data but diverts updates to a different object.
|
||||
* Generally used for roll data
|
||||
*/
|
||||
export function createShallowProxy(obj) {
|
||||
if (obj._isShallowProxy) return obj;
|
||||
|
||||
const overrides = {};
|
||||
return new Proxy(obj, {
|
||||
get(target, prop, receiver) {
|
||||
if (prop === '_isShallowProxy') return true;
|
||||
if (prop in overrides) return overrides[prop];
|
||||
return Reflect.get(target, prop, receiver);
|
||||
},
|
||||
set(_target, prop, newValue) {
|
||||
overrides[prop] = newValue;
|
||||
return true;
|
||||
},
|
||||
deleteProperty(_target, prop) {
|
||||
delete overrides[prop];
|
||||
return true;
|
||||
},
|
||||
has(target, key) {
|
||||
return key in overrides || key in target;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue