manabrew_engine/ability/effects/
lose_perpetual_effect.rs1use super::EffectContext;
6
7#[manabrew_engine_macros::spell_effect(LosePerpetualEffect)]
11fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
12 let Some(host_id) = sa.source else {
13 return;
14 };
15
16 if let Some(trigger_index) = sa.trigger_index {
19 let trigger_id = match ctx.game.card(host_id).triggers.get(trigger_index) {
20 Some(t) => t.id,
21 None => return,
22 };
23
24 let to_remove: Vec<(i64, i64)> = ctx
25 .game
26 .card(host_id)
27 .changed_card_traits
28 .iter()
29 .filter_map(|(key, layer)| {
30 if layer.triggers.iter().any(|t| t.id == trigger_id) {
31 Some(*key)
32 } else {
33 None
34 }
35 })
36 .collect();
37
38 for (timestamp, static_id) in to_remove {
39 ctx.game
40 .card_mut(host_id)
41 .remove_changed_card_traits(timestamp, static_id);
42 ctx.game.card_mut(host_id).remove_perpetual(timestamp);
43 }
44 }
45}