use super::EffectContext;
use crate::event::RunParams;
use crate::staticability::layer::apply_continuous_effects;
use crate::trigger::TriggerType;
#[manabrew_engine_macros::spell_effect(ClassLevelUpEffect)]
fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
let Some(host_id) = sa.source else { return };
let current_level = ctx.game.card(host_id).class_level;
if let Some(required) = sa
.restriction
.variables
.class_level_operator()
.zip(sa.restriction.variables.class_level())
{
let (operator, operand) = required;
let expr = format!("{operator}{operand}");
if !crate::parsing::compare::compare_expr(current_level, &expr) {
return;
}
}
let new_level = current_level + 1;
ctx.game.card_mut(host_id).set_class_level(new_level);
apply_continuous_effects(ctx.game);
ctx.trigger_handler.unregister_active_triggers(host_id);
ctx.trigger_handler
.register_active_trigger(ctx.game, host_id);
ctx.trigger_handler.run_trigger(
TriggerType::ClassLevelGained,
RunParams {
card: Some(host_id),
class_level: Some(new_level),
..Default::default()
},
false,
);
}