Skip to content

Commit 5f7cf74

Browse files
authored
Fix rule element initialization (#846)
* Fix up rule element trigger initialization * Initialize the RE with a selected trigger
1 parent 80b724d commit 5f7cf74

File tree

8 files changed

+68
-12
lines changed

8 files changed

+68
-12
lines changed

lang/en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
"Roll": "Roll",
151151
"Add": "Add",
152152
"Remove": "Remove",
153+
"AddElement": "Add {element}",
153154
"Multiply": "Multiply",
154155
"Create": "Create",
155156
"Edit": "Edit",
@@ -565,7 +566,7 @@
565566
"Customization": "Customization",
566567
"Opportunity": "Opportunity",
567568
"Opportunities": "Opportunities",
568-
"OpportunitiesHint": "When assigned, will be prompted as choices for the users.",
569+
"OpportunitiesHint": "When assigned, will be prompted as choices for the users. If the table comes from a compendium you will have to import it.",
569570
"InitiativeBonus": "Initiative Bonus",
570571
"Price": "Price",
571572
"MagicDefenseFormula": "Magic Defense Formula",

module/documents/effects/active-effect-config.mjs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { FU } from '../../helpers/config.mjs';
22
import { systemTemplatePath } from '../../helpers/system-utils.mjs';
33
import { PseudoDocument } from '../pseudo/pseudo-document.mjs';
4-
import { SubDocumentCollectionField } from '../sub/sub-document-collection-field.mjs';
54
import { RuleElements } from '../../pipelines/rule-elements.mjs';
65
import { RuleElementDataModel } from './rule-element-data-model.mjs';
76
import { RuleActionRegistry } from './actions/rule-action-data-model.mjs';
@@ -10,6 +9,7 @@ import { RulePredicateRegistry } from './predicates/rule-predicate-data-model.mj
109
import { ConsumableTraits, Traits, TraitUtils } from '../../pipelines/traits.mjs';
1110
import FoundryUtils from '../../helpers/foundry-utils.mjs';
1211
import { StringUtils } from '../../helpers/string-utils.mjs';
12+
import { SubDocumentCollectionField } from '../sub/sub-document-collection-field.mjs';
1313

1414
RuleElements.register();
1515

@@ -259,9 +259,22 @@ export class FUActiveEffectConfig extends foundry.applications.sheets.ActiveEffe
259259
* @returns {Promise<void>}
260260
*/
261261
static async #addRuleElement(event, target) {
262-
const type = RuleElementDataModel.TYPE;
263-
await SubDocumentCollectionField.addModel(this.document.system.rules.elements, type, this.document);
264-
console.debug(`Added rule element`);
262+
const triggerTypes = RuleTriggerRegistry.instance.localizedEntries;
263+
const options = FoundryUtils.generateConfigOptions(triggerTypes);
264+
const type = await FoundryUtils.selectOptionDialog(
265+
StringUtils.localize('FU.AddElement', {
266+
element: StringUtils.localize('FU.RuleElement'),
267+
}),
268+
options,
269+
);
270+
271+
const triggerModel = RuleTriggerRegistry.instance.types[type];
272+
const trigger = new triggerModel();
273+
const data = {
274+
trigger: trigger,
275+
};
276+
await SubDocumentCollectionField.addModel(this.document.system.rules.elements, RuleElementDataModel.TYPE, this.document, data);
277+
console.debug(`Added rule element with trigger ${type}`);
265278
}
266279

267280
/**

module/documents/effects/rule-element-data-model.mjs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { SubDocumentDataModel } from '../sub/sub-document-data-model.mjs';
2-
import { CombatEventRuleTrigger } from './triggers/combat-event-rule-trigger.mjs';
32
import FoundryUtils from '../../helpers/foundry-utils.mjs';
43
import { SubDocumentCollectionField } from '../sub/sub-document-collection-field.mjs';
54
import { DataModelRegistry } from '../../fields/data-model-registry.mjs';
@@ -9,6 +8,7 @@ import { RuleTriggerRegistry } from './triggers/rule-trigger-data-model.mjs';
98
import { RulePredicateDataModel, RulePredicateRegistry } from './predicates/rule-predicate-data-model.mjs';
109
import { FU } from '../../helpers/config.mjs';
1110
import { StringUtils } from '../../helpers/string-utils.mjs';
11+
import { EmptyRuleTrigger } from './triggers/empty-rule-trigger.mjs';
1212

1313
const fields = foundry.data.fields;
1414

@@ -46,8 +46,7 @@ export class RuleElementDataModel extends SubDocumentDataModel {
4646
static defineSchema() {
4747
return Object.assign(super.defineSchema(), {
4848
trigger: new fields.TypedSchemaField(RuleTriggerRegistry.instance.types, {
49-
initial: new CombatEventRuleTrigger(),
50-
nullable: true,
49+
initial: new EmptyRuleTrigger(),
5150
}),
5251
actions: new SubDocumentCollectionField(RuleActionDataModel),
5352
predicates: new SubDocumentCollectionField(RulePredicateDataModel),
@@ -74,7 +73,12 @@ export class RuleElementDataModel extends SubDocumentDataModel {
7473
async addRuleAction() {
7574
let subTypes = this.getMatchingSubTypes(RuleActionRegistry.instance);
7675
const options = FoundryUtils.generateConfigOptions(subTypes);
77-
const type = await FoundryUtils.selectOptionDialog('FU.RuleElementNew', options);
76+
const type = await FoundryUtils.selectOptionDialog(
77+
StringUtils.localize('FU.AddElement', {
78+
element: StringUtils.localize('FU.RuleActions'),
79+
}),
80+
options,
81+
);
7882
if (type) {
7983
await SubDocumentCollectionField.addModel(this.actions, type, this);
8084
}
@@ -113,7 +117,12 @@ export class RuleElementDataModel extends SubDocumentDataModel {
113117
async addRulePredicate() {
114118
let subTypes = this.getMatchingSubTypes(RulePredicateRegistry.instance);
115119
const options = FoundryUtils.generateConfigOptions(subTypes);
116-
const type = await FoundryUtils.selectOptionDialog('FU.Add', options);
120+
const type = await FoundryUtils.selectOptionDialog(
121+
StringUtils.localize('FU.AddElement', {
122+
element: StringUtils.localize('FU.RulePredicates'),
123+
}),
124+
options,
125+
);
117126
if (type) {
118127
await SubDocumentCollectionField.addModel(this.predicates, type, this);
119128
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { RuleTriggerDataModel } from './rule-trigger-data-model.mjs';
2+
import { systemTemplatePath } from '../../../helpers/system-utils.mjs';
3+
4+
/**
5+
* @desc Initial rule trigger.
6+
*/
7+
export class EmptyRuleTrigger extends RuleTriggerDataModel {
8+
static {
9+
Object.defineProperty(this, 'TYPE', { value: 'emptyRuleTrigger' });
10+
}
11+
12+
/**
13+
* @return {String}
14+
*/
15+
static get localization() {
16+
return '-';
17+
}
18+
19+
/**
20+
* @return {String}
21+
*/
22+
static get template() {
23+
return systemTemplatePath('common/empty');
24+
}
25+
}

module/documents/sub/sub-document-collection-field.mjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ export class SubDocumentCollectionField extends TypedObjectField {
5252
/**
5353
* @param {SubDocumentCollectionField} field
5454
* @param {String} type
55+
* @param {Object} data
5556
* @param document
5657
*/
57-
static async addModel(field, type, document) {
58-
return field.documentClass.create({ type }, { parent: document });
58+
static async addModel(field, type, document, data = {}) {
59+
return field.documentClass.create({ type, ...data }, { parent: document });
5960
}
6061
}

module/pipelines/effects.mjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ async function getEffectData(id) {
120120
if (!effect) {
121121
console.error(`No effect with id '${id}' could be resolved.`);
122122
}
123+
124+
if (effect) {
125+
effect = FoundryUtils.safeClone(effect);
126+
}
127+
123128
return effect;
124129
}
125130

module/pipelines/rule-elements.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@ import { CalculateExpenseRuleTrigger } from '../documents/effects/triggers/calcu
5757
import { FeatureRuleTrigger } from '../documents/effects/triggers/feature-rule-trigger.mjs';
5858
import { FUItem } from '../documents/items/item.mjs';
5959
import { RenderMessageRuleTrigger } from '../documents/effects/triggers/render-message-rule-trigger.mjs';
60+
import { EmptyRuleTrigger } from '../documents/effects/triggers/empty-rule-trigger.mjs';
6061

6162
function register() {
63+
RuleTriggerRegistry.instance.register(systemId, EmptyRuleTrigger.TYPE, EmptyRuleTrigger);
6264
RuleTriggerRegistry.instance.register(systemId, CombatEventRuleTrigger.TYPE, CombatEventRuleTrigger);
6365
RuleTriggerRegistry.instance.register(systemId, AttackRuleTrigger.TYPE, AttackRuleTrigger);
6466
RuleTriggerRegistry.instance.register(systemId, StatusRuleTrigger.TYPE, StatusRuleTrigger);

templates/common/empty.hbs

Whitespace-only changes.

0 commit comments

Comments
 (0)