@yantra-core/sutra
Version:
A JavaScript behavior tree library for easily creating and managing complex behavior patterns in game development.
47 lines (41 loc) • 1.76 kB
JavaScript
export default function evaluateCondition(condition, data, gameState, sutra = this) {
let targetData;
if (typeof data === 'function') {
targetData = data(gameState);
} else {
targetData = data;
}
// Use the provided Sutra's conditions or default to the current Sutra's conditions
const conditions = sutra.conditions;
if (typeof condition === 'string') {
let conditionEntry = sutra.conditions[condition];
// If not found in the subtree, check in the main Sutra
if (!conditionEntry) {
conditionEntry = this.conditions[condition];
}
if (!conditionEntry) {
// if not found, return false ( for now sub-tree issue )
// return false;
}
if (conditionEntry) {
if (Array.isArray(conditionEntry)) {
return conditionEntry.every(cond => {
return typeof cond.func === 'function' ? cond.func(targetData, gameState) : sutra.evaluateDSLCondition(cond.original, targetData, gameState);
});
} else if (['and', 'or', 'not'].includes(conditionEntry.op)) {
// Handling composite conditions
return sutra.evaluateCompositeCondition(conditionEntry, targetData, gameState);
} else {
return sutra.evaluateSingleCondition(conditionEntry, targetData, gameState);
}
} else {
console.log('Warning: Condition not found: ' + condition + '. About to throw an error.\nPlease define the missing condition in your sutra script.');
throw new Error(`Condition "${condition}" not found`);
}
} else if (typeof condition === 'function') {
return condition(targetData, gameState);
} else if (Array.isArray(condition)) {
return condition.every(cond => sutra.evaluateCondition(cond, targetData, gameState));
}
return false;
}