manabrew_engine/ability/effects/
class_level_up_effect.rs1use super::EffectContext;
8use crate::event::RunParams;
9use crate::staticability::layer::apply_continuous_effects;
10use crate::trigger::TriggerType;
11
12#[manabrew_engine_macros::spell_effect(ClassLevelUpEffect)]
16fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
17 let Some(host_id) = sa.source else { return };
18
19 let current_level = ctx.game.card(host_id).class_level;
20 if let Some(required) = sa
21 .restriction
22 .variables
23 .class_level_operator()
24 .zip(sa.restriction.variables.class_level())
25 {
26 let (operator, operand) = required;
27 let expr = format!("{operator}{operand}");
28 if !crate::parsing::compare::compare_expr(current_level, &expr) {
29 return;
30 }
31 }
32 let new_level = current_level + 1;
33
34 ctx.game.card_mut(host_id).set_class_level(new_level);
35
36 apply_continuous_effects(ctx.game);
40 ctx.trigger_handler.unregister_active_triggers(host_id);
41 ctx.trigger_handler
42 .register_active_trigger(ctx.game, host_id);
43 ctx.trigger_handler.run_trigger(
44 TriggerType::ClassLevelGained,
45 RunParams {
46 card: Some(host_id),
47 class_level: Some(new_level),
48 ..Default::default()
49 },
50 false,
51 );
52}