Allowed some properties to return damaged action values
When a prop is damaged during an action, it now tries to show its new value during the rest of that action
This commit is contained in:
@@ -24,7 +24,7 @@ const damageProperty = new ValidatedMethod({
|
|||||||
run({ _id, operation, value }) {
|
run({ _id, operation, value }) {
|
||||||
|
|
||||||
// Get action context
|
// Get action context
|
||||||
const prop = CreatureProperties.findOne(_id);
|
let prop = CreatureProperties.findOne(_id);
|
||||||
if (!prop) throw new Meteor.Error(
|
if (!prop) throw new Meteor.Error(
|
||||||
'Damage property failed', 'Property doesn\'t exist'
|
'Damage property failed', 'Property doesn\'t exist'
|
||||||
);
|
);
|
||||||
@@ -42,6 +42,14 @@ const damageProperty = new ValidatedMethod({
|
|||||||
`Property of type "${prop.type}" can't be damaged`
|
`Property of type "${prop.type}" can't be damaged`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace the prop by its actionContext counterpart if possible
|
||||||
|
if (prop.variableName) {
|
||||||
|
const actionContextProp = actionContext.scope[prop.variableName];
|
||||||
|
if (actionContextProp?._id === prop._id) {
|
||||||
|
prop = actionContextProp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const result = damagePropertyWork({ prop, operation, value, actionContext });
|
const result = damagePropertyWork({ prop, operation, value, actionContext });
|
||||||
|
|
||||||
@@ -94,6 +102,9 @@ export function damagePropertyWork({ prop, operation, value, actionContext }) {
|
|||||||
}, {
|
}, {
|
||||||
selector: prop
|
selector: prop
|
||||||
});
|
});
|
||||||
|
// Also write it straight to the prop so that it is updated in the actionContext
|
||||||
|
prop.damage = damage;
|
||||||
|
prop.value = newValue;
|
||||||
} else if (operation === 'increment'){
|
} else if (operation === 'increment'){
|
||||||
let currentValue = prop.value || 0;
|
let currentValue = prop.value || 0;
|
||||||
let currentDamage = prop.damage || 0;
|
let currentDamage = prop.damage || 0;
|
||||||
@@ -111,6 +122,9 @@ export function damagePropertyWork({ prop, operation, value, actionContext }) {
|
|||||||
}, {
|
}, {
|
||||||
selector: prop
|
selector: prop
|
||||||
});
|
});
|
||||||
|
// Also write it straight to the prop so that it is updated in the actionContext
|
||||||
|
prop.damage += increment;
|
||||||
|
prop.value -= increment;
|
||||||
}
|
}
|
||||||
|
|
||||||
applyTriggers(actionContext.triggers?.damageProperty?.after, prop, actionContext);
|
applyTriggers(actionContext.triggers?.damageProperty?.after, prop, actionContext);
|
||||||
|
|||||||
@@ -219,6 +219,16 @@ function dealDamage({target, damageType, amount, actionContext}){
|
|||||||
if (damageType === 'healing') damageLeft = -totalDamage;
|
if (damageType === 'healing') damageLeft = -totalDamage;
|
||||||
healthBars.forEach(healthBar => {
|
healthBars.forEach(healthBar => {
|
||||||
if (damageLeft === 0) return;
|
if (damageLeft === 0) return;
|
||||||
|
// Replace the healthbar by the one in the action context if we can
|
||||||
|
// The damagePropertyWork function bashes the prop with the damage
|
||||||
|
// So we can use the new value in later action properties
|
||||||
|
if (healthBar.variableName) {
|
||||||
|
const targetHealthBar = target.variables[healthBar.variableName];
|
||||||
|
if (targetHealthBar?._id === healthBar._id) {
|
||||||
|
healthBar = targetHealthBar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Do the damage
|
||||||
let damageAdded = damagePropertyWork({
|
let damageAdded = damagePropertyWork({
|
||||||
prop: healthBar,
|
prop: healthBar,
|
||||||
operation: 'increment',
|
operation: 'increment',
|
||||||
|
|||||||
Reference in New Issue
Block a user