Skip to content

Commit f45653f

Browse files
committed
a
1 parent ddc333a commit f45653f

File tree

3 files changed

+70
-49
lines changed

3 files changed

+70
-49
lines changed

index.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/config.js

+68-47
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@ export function initConfig() {
1717
return midiAction;
1818
};
1919

20+
const getActivationType = (item) => {
21+
if (!item?.system?.activities) {
22+
return
23+
}
24+
return Array.from(item.system.activities)[0]?.activation?.type;
25+
}
26+
27+
const getActionType = (item) => {
28+
if (!item?.system?.activities) {
29+
return
30+
}
31+
return Array.from(item.system.activities)[0]?.actionType;
32+
}
33+
2034
const actionTypes = {
2135
action: ["action"],
2236
bonus: ["bonus"],
@@ -72,7 +86,7 @@ export function initConfig() {
7286
switch (itemType) {
7387
case "weapon":
7488
subtitle = CONFIG.DND5E.weaponTypes[item.system.weaponType];
75-
properties.push(CONFIG.DND5E.itemActionTypes[item.system.actionType]);
89+
properties.push(CONFIG.DND5E.itemActionTypes[getActionType(item)]);
7690
for (let [key, value] of Object.entries(item.system.properties)) {
7791
let prop = value && CONFIG.DND5E.weaponProperties[key] ? CONFIG.DND5E.weaponProperties[key] : undefined;
7892
if (prop) properties.push(prop);
@@ -90,11 +104,11 @@ export function initConfig() {
90104
break;
91105
case "consumable":
92106
subtitle = CONFIG.DND5E.consumableTypes[item.system.consumableType];
93-
properties.push(CONFIG.DND5E.itemActionTypes[item.system.actionType]);
107+
properties.push(CONFIG.DND5E.itemActionTypes[getActionType(item)]);
94108
break;
95109
case "feat":
96110
subtitle = item.system.requirements;
97-
properties.push(CONFIG.DND5E.itemActionTypes[item.system.actionType]);
111+
properties.push(CONFIG.DND5E.itemActionTypes[getActionType(item)]);
98112
break;
99113
}
100114
}
@@ -474,9 +488,9 @@ export function initConfig() {
474488
}
475489

476490
async _getButtons() {
477-
const spellItems = this.actor.items.filter((item) => itemTypes.spell.includes(item.type) && actionTypes.action.includes(item.system.activation?.type) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
478-
const featItems = this.actor.items.filter((item) => itemTypes.feat.includes(item.type) && actionTypes.action.includes(item.system.activation?.type) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
479-
const consumableItems = this.actor.items.filter((item) => itemTypes.consumable.includes(item.type) && actionTypes.action.includes(item.system.activation?.type) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
491+
const spellItems = this.actor.items.filter((item) => itemTypes.spell.includes(item.type) && actionTypes.action.includes(getActivationType(item)) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
492+
const featItems = this.actor.items.filter((item) => itemTypes.feat.includes(item.type) && actionTypes.action.includes(getActivationType(item)) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
493+
const consumableItems = this.actor.items.filter((item) => itemTypes.consumable.includes(item.type) && actionTypes.action.includes(getActivationType(item)) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
480494

481495
const spellButton = !spellItems.length ? [] : [new DND5eButtonPanelButton({ type: "spell", items: spellItems, color: 0 })].filter((button) => button.hasContents);
482496

@@ -490,7 +504,7 @@ export function initConfig() {
490504
buttons.push(...[new DND5eItemButton({ item: null, isWeaponSet: true, isPrimary: true }), ...spellButton, new DND5eButtonPanelButton({ type: "feat", items: featItems, color: 0 }), new DND5eButtonPanelButton({ type: "consumable", items: consumableItems, color: 0 })]);
491505
}
492506

493-
const barItems = this.actor.items.filter((item) => CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value) && actionTypes.action.includes(item.system.activation?.type));
507+
const barItems = this.actor.items.filter((item) => CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value) && actionTypes.action.includes(getActivationType(item)));
494508
buttons.push(...condenseItemButtons(barItems));
495509

496510
return buttons.filter((button) => button.hasContents || button.items == undefined || button.items.length);
@@ -522,13 +536,13 @@ export function initConfig() {
522536
async _getButtons() {
523537
const buttons = [new DND5eItemButton({ item: null, isWeaponSet: true, isPrimary: false })];
524538
for (const [type, types] of Object.entries(itemTypes)) {
525-
const items = this.actor.items.filter((item) => types.includes(item.type) && actionTypes.bonus.includes(item.system.activation?.type) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
539+
const items = this.actor.items.filter((item) => types.includes(item.type) && actionTypes.bonus.includes(getActivationType(item)) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
526540
if (!items.length) continue;
527541
const button = new DND5eButtonPanelButton({ type, items, color: 1 });
528542
if (button.hasContents) buttons.push(button);
529543
}
530544

531-
const barItems = this.actor.items.filter((item) => CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value) && actionTypes.bonus.includes(item.system.activation?.type));
545+
const barItems = this.actor.items.filter((item) => CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value) && actionTypes.bonus.includes(getActivationType(item)));
532546
buttons.push(...condenseItemButtons(barItems));
533547

534548
return buttons;
@@ -561,13 +575,13 @@ export function initConfig() {
561575
const buttons = [new DND5eItemButton({ item: null, isWeaponSet: true, isPrimary: true })];
562576
//buttons.push(new DND5eEquipmentButton({slot: 1}));
563577
for (const [type, types] of Object.entries(itemTypes)) {
564-
const items = this.actor.items.filter((item) => types.includes(item.type) && actionTypes.reaction.includes(item.system.activation?.type) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
578+
const items = this.actor.items.filter((item) => types.includes(item.type) && actionTypes.reaction.includes(getActivationType(item)) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
565579
if (!items.length) continue;
566580
const button = new DND5eButtonPanelButton({ type, items, color: 3 });
567581
if (button.hasContents) buttons.push(button);
568582
}
569583

570-
const barItems = this.actor.items.filter((item) => CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value) && actionTypes.reaction.includes(item.system.activation?.type));
584+
const barItems = this.actor.items.filter((item) => CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value) && actionTypes.reaction.includes(getActivationType(item)));
571585
buttons.push(...condenseItemButtons(barItems));
572586

573587
return buttons;
@@ -600,13 +614,13 @@ export function initConfig() {
600614
const buttons = [];
601615

602616
for (const [type, types] of Object.entries(itemTypes)) {
603-
const items = this.actor.items.filter((item) => types.includes(item.type) && actionTypes.free.includes(item.system.activation?.type) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
617+
const items = this.actor.items.filter((item) => types.includes(item.type) && actionTypes.free.includes(getActivationType(item)) && !CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value));
604618
if (!items.length) continue;
605619
const button = new DND5eButtonPanelButton({ type, items, color: 2 });
606620
if (button.hasContents) buttons.push(button);
607621
}
608622

609-
const barItems = this.actor.items.filter((item) => CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value) && actionTypes.free.includes(item.system.activation?.type));
623+
const barItems = this.actor.items.filter((item) => CoreHUD.DND5E.mainBarFeatures.includes(item.system.type?.value) && actionTypes.free.includes(getActivationType(item)));
610624
buttons.push(...condenseItemButtons(barItems));
611625

612626
return buttons;
@@ -632,7 +646,7 @@ export function initConfig() {
632646

633647
async _getButtons() {
634648
const buttons = [];
635-
const legendary = this.actor.items.filter((item) => item.system.activation?.type === "legendary");
649+
const legendary = this.actor.items.filter((item) => getActivationType(item) === "legendary");
636650
legendary.forEach((item) => {
637651
buttons.push(new DND5eItemButton({ item, inActionPanel: true }));
638652
});
@@ -659,7 +673,7 @@ export function initConfig() {
659673

660674
async _getButtons() {
661675
const buttons = [];
662-
const lair = this.actor.items.filter((item) => item.system.activation?.type === "lair");
676+
const lair = this.actor.items.filter((item) => getActivationType(item) === "lair");
663677
lair.forEach((item) => {
664678
buttons.push(new DND5eItemButton({ item, inActionPanel: true }));
665679
});
@@ -686,7 +700,7 @@ export function initConfig() {
686700

687701
async _getButtons() {
688702
const buttons = [];
689-
const mythic = this.actor.items.filter((item) => item.system.activation?.type === "mythic");
703+
const mythic = this.actor.items.filter((item) => getActivationType(item) === "mythic");
690704
mythic.forEach((item) => {
691705
buttons.push(new DND5eItemButton({ item, inActionPanel: true }));
692706
});
@@ -699,26 +713,33 @@ export function initConfig() {
699713
super(...args);
700714
}
701715

716+
get activity() {
717+
if(!this.item?.system?.activities) {
718+
return
719+
}
720+
return Array.from(this.item.system.activities)[0];
721+
}
722+
702723
get hasTooltip() {
703724
return true;
704725
}
705726

706727
get ranges() {
707-
const item = this.item;
708-
const touchRange = item.system.range.units == "touch" ? canvas?.scene?.grid?.distance : null;
728+
const item = this.activity;
729+
const touchRange = item.range.units == "touch" ? canvas?.scene?.grid?.distance : null;
709730
return {
710-
normal: item.system?.range?.value ?? touchRange,
711-
long: item.system?.range?.long ?? null,
731+
normal: item?.range?.value ?? touchRange,
732+
long: item?.range?.long ?? null,
712733
};
713734
}
714735

715736
get targets() {
716-
const item = this.item;
737+
const item = this.activity;
717738
const validTargets = ["creature", "ally", "enemy"];
718-
const actionType = item.system.actionType;
719-
const targetType = item.system.target?.type;
720-
if (!item.system.target?.units && validTargets.includes(targetType)) {
721-
return item.system.target?.value;
739+
const actionType = item.actionType;
740+
const targetType = item.target?.type;
741+
if (!item.target?.units && validTargets.includes(targetType)) {
742+
return item.target?.value;
722743
} else if (actionType === "mwak" || actionType === "rwak") {
723744
return 1;
724745
}
@@ -728,10 +749,10 @@ export function initConfig() {
728749
get visible() {
729750
if (!this._isWeaponSet) return super.visible;
730751
const isReaction = this.parent instanceof DND5eReactionActionPanel;
731-
const isMelee = this.item?.system?.actionType === "mwak";
752+
const isMelee = this.activity?.actionType === "mwak";
732753
if (isReaction && !isMelee) return false;
733754
if (this._isPrimary) return super.visible;
734-
if (this.item?.system?.type?.value === "shield") return false;
755+
if (this.activity?.type?.value === "shield") return false;
735756
return super.visible;
736757
}
737758

@@ -743,18 +764,18 @@ export function initConfig() {
743764

744765
async _onLeftClick(event) {
745766
ui.ARGON.interceptNextDialog(event.currentTarget);
746-
const used = await this.item.use({ event }, { event });
767+
const used = await this.activity.use({ event }, { event });
747768
if (used) {
748-
DND5eItemButton.consumeActionEconomy(this.item);
769+
DND5eItemButton.consumeActionEconomy(this.activity);
749770
}
750771
}
751772

752773
async _onRightClick(event) {
753-
this.item?.sheet?.render(true);
774+
this.activity?.sheet?.render(true);
754775
}
755776

756777
static consumeActionEconomy(item) {
757-
const activationType = item.system.activation?.type;
778+
const activationType = getActivationType(item);
758779
let actionType = null;
759780
for (const [type, types] of Object.entries(actionTypes)) {
760781
if (types.includes(activationType)) actionType = type;
@@ -780,30 +801,30 @@ export function initConfig() {
780801

781802
async render(...args) {
782803
await super.render(...args);
783-
if (this.item) {
784-
const weapons = this.actor.items.filter((item) => item.system.consume?.target === this.item.id);
804+
if (this.activity) {
805+
const weapons = this.actor.items.filter((item) => item.consume?.target === this.activity.id);
785806
ui.ARGON.updateItemButtons(weapons);
786807
}
787808
}
788809

789810
get quantity() {
790-
if (!this.item?.system) return null;
811+
if (!this.activity) return null;
791812
const showQuantityItemTypes = ["consumable"];
792-
const consumeType = this.item.system.consume?.type;
813+
const consumeType = this.activity.consume?.type;
793814
if (consumeType === "ammo") {
794-
const ammoItem = this.actor.items.get(this.item.system.consume.target);
815+
const ammoItem = this.actor.items.get(this.activity.consume.target);
795816
if (!ammoItem) return null;
796-
return Math.floor((ammoItem.system.quantity ?? 0) / this.item.system.consume.amount);
817+
return Math.floor((ammoItem.quantity ?? 0) / this.activity.consume.amount);
797818
} else if (consumeType === "attribute") {
798-
return Math.floor(getProperty(this.actor.system, this.item.system.consume.target) / this.item.system.consume.amount);
819+
return Math.floor(getProperty(this.actor, this.activity.consume.target) / this.activity.consume.amount);
799820
} else if (consumeType === "charges") {
800-
const chargesItem = this.actor.items.get(this.item.system.consume.target);
821+
const chargesItem = this.actor.items.get(this.activity.consume.target);
801822
if (!chargesItem) return null;
802-
return Math.floor((chargesItem.system.uses?.value ?? 0) / this.item.system.consume.amount);
803-
} else if (showQuantityItemTypes.includes(this.item.type)) {
804-
return this.item.system.uses?.value ?? this.item.system.quantity;
805-
} else if (this.item.system.uses.value !== null && this.item.system.uses.per !== null) {
806-
return this.item.system.uses.value;
823+
return Math.floor((chargesItem.uses?.value ?? 0) / this.activity.consume.amount);
824+
} else if (showQuantityItemTypes.includes(this.activity.type)) {
825+
return this.activity.uses?.value ?? this.activity.quantity;
826+
} else if (this.activity.uses.value !== null && this.activity.uses.per !== null && this.activity.uses.max) {
827+
return this.activity.uses.value;
807828
}
808829
return null;
809830
}
@@ -874,7 +895,7 @@ export function initConfig() {
874895
const spellItems = this.actor.items.filter((item) => item.flags["items-with-spells-5e"]?.["item-spells"]?.length);
875896
for (const item of spellItems) {
876897
const spellData = item.flags["items-with-spells-5e"]["item-spells"];
877-
const itemsInSpell = spellData.map((spell) => this.actor.items.get(spell.id)).filter((item) => item && item.system.activation?.type === actionType);
898+
const itemsInSpell = spellData.map((spell) => this.actor.items.get(spell.id)).filter((item) => item && getActivationType(item) === actionType);
878899
if (!itemsInSpell.length) continue;
879900
itemsToIgnore.push(...itemsInSpell);
880901
if (!IWSAPI.isUsableItem(item)) continue;
@@ -1039,8 +1060,8 @@ export function initConfig() {
10391060
const sets = await super.getDefaultSets();
10401061
const isTransformed = this.actor.flags?.dnd5e?.isPolymorphed;
10411062
if (this.actor.type !== "npc" && !isTransformed) return sets;
1042-
const actions = this.actor.items.filter((item) => item.type === "weapon" && item.system.activation?.type === "action");
1043-
const bonus = this.actor.items.filter((item) => item.type === "weapon" && item.system.activation?.type === "bonus");
1063+
const actions = this.actor.items.filter((item) => item.type === "weapon" && getActivationType(item) === "action");
1064+
const bonus = this.actor.items.filter((item) => item.type === "weapon" && getActivationType(item) === "bonus");
10441065
return {
10451066
1: {
10461067
primary: actions[0]?.uuid ?? null,

0 commit comments

Comments
 (0)